diff options
author | Konstantin Serebryany <konstantin.s.serebryany@gmail.com> | 2014-05-22 08:29:00 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@redhat.com> | 2014-05-22 20:26:19 +0530 |
commit | 34fff5c2473e970f4a58761c81ebbe097eaf211f (patch) | |
tree | 17c0067a4eb503e4a3f50f67a3ef4817bc3a7060 | |
parent | 3d2badacf185fac740a2992240a817fb2ca325af (diff) | |
download | glibc-34fff5c2473e970f4a58761c81ebbe097eaf211f.tar.gz glibc-34fff5c2473e970f4a58761c81ebbe097eaf211f.tar.xz glibc-34fff5c2473e970f4a58761c81ebbe097eaf211f.zip |
Remove nested functions: crypt/md5-crypt.c
This patch is the first in the series of patches that remove nested functions from glibc. Rationale: nested functions is a non-standard language feature; removing nested functions will allow to compile glibc with compilers other than GCC and thus benefit from other compilers and code analysis tools.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | crypt/md5-crypt.c | 44 |
2 files changed, 31 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog index 77fed0ce52..771f3c5714 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-05-22 Kostya Serebryany <konstantin.s.serebryany@gmail.com> + + * crypt/md5-crypt.c (__md5_crypt_r): Remove a nested function. + (b64_from_24bit): New function. + 2014-05-22 Adhemerval Zanella <azanella@linux.vnet.ibm.com> * sysdeps/powerpc/powerpc32/power4/multiarch/memchr.c (memchr): Remove diff --git a/crypt/md5-crypt.c b/crypt/md5-crypt.c index d1b92d786c..5d5fc55ba7 100644 --- a/crypt/md5-crypt.c +++ b/crypt/md5-crypt.c @@ -88,6 +88,20 @@ extern char *__md5_crypt_r (const char *key, const char *salt, char *buffer, int buflen); extern char *__md5_crypt (const char *key, const char *salt); +static void +b64_from_24bit (char **cp, int *buflen, + unsigned int b2, unsigned int b1, unsigned int b0, + int n) +{ + unsigned int w = (b2 << 16) | (b1 << 8) | b0; + while (n-- > 0 && *buflen > 0) + { + *(*cp)++ = b64t[w & 0x3f]; + --*buflen; + w >>= 6; + } +} + /* This entry point is equivalent to the `crypt' function in Unix libcs. */ @@ -268,24 +282,18 @@ __md5_crypt_r (key, salt, buffer, buflen) --buflen; } - void b64_from_24bit (unsigned int b2, unsigned int b1, unsigned int b0, - int n) - { - unsigned int w = (b2 << 16) | (b1 << 8) | b0; - while (n-- > 0 && buflen > 0) - { - *cp++ = b64t[w & 0x3f]; - --buflen; - w >>= 6; - } - } - - b64_from_24bit (alt_result[0], alt_result[6], alt_result[12], 4); - b64_from_24bit (alt_result[1], alt_result[7], alt_result[13], 4); - b64_from_24bit (alt_result[2], alt_result[8], alt_result[14], 4); - b64_from_24bit (alt_result[3], alt_result[9], alt_result[15], 4); - b64_from_24bit (alt_result[4], alt_result[10], alt_result[5], 4); - b64_from_24bit (0, 0, alt_result[11], 2); + b64_from_24bit (&cp, &buflen, + alt_result[0], alt_result[6], alt_result[12], 4); + b64_from_24bit (&cp, &buflen, + alt_result[1], alt_result[7], alt_result[13], 4); + b64_from_24bit (&cp, &buflen, + alt_result[2], alt_result[8], alt_result[14], 4); + b64_from_24bit (&cp, &buflen, + alt_result[3], alt_result[9], alt_result[15], 4); + b64_from_24bit (&cp, &buflen, + alt_result[4], alt_result[10], alt_result[5], 4); + b64_from_24bit (&cp, &buflen, + 0, 0, alt_result[11], 2); if (buflen <= 0) { __set_errno (ERANGE); |