From patchwork Tue Jun 3 08:28:35 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kostya Serebryany X-Patchwork-Id: 1259 Received: (qmail 7932 invoked by alias); 3 Jun 2014 08:29:03 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 7884 invoked by uid 89); 3 Jun 2014 08:29:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-vc0-f179.google.com X-Received: by 10.220.44.141 with SMTP id a13mr245578vcf.71.1401784136610; Tue, 03 Jun 2014 01:28:56 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <20140602180811.GC9145@spoyarek.pnq.redhat.com> References: <20140520131314.GB14500@spoyarek.pnq.redhat.com> <20140522145906.GX14500@spoyarek.pnq.redhat.com> <20140602180811.GC9145@spoyarek.pnq.redhat.com> From: Konstantin Serebryany Date: Tue, 3 Jun 2014 12:28:35 +0400 Message-ID: Subject: Re: [PATCH 1/25] Remove nested functions: crypt/md5-crypt.c To: Siddhesh Poyarekar Cc: GNU C Library On Mon, Jun 2, 2014 at 10:08 PM, Siddhesh Poyarekar wrote: > On Mon, Jun 02, 2014 at 08:50:51AM +0400, Konstantin Serebryany wrote: >> Any comment on this patch? > > It results in a bunch of build warnings with gcc. Please fix those. Indeed so, needed one extra include. Fixed, please check the new patch. Did you just see the warnings with your eyes, or do you use a special configure switch or some such to turn them into errors? I've run full build with and w/o my patch. The diff of sorted warnings looks like this: So, there are no new kinds of warnings added with the current patch. --kcc > > Siddhesh > >> >> On Thu, May 22, 2014 at 7:14 PM, Konstantin Serebryany >> wrote: >> > On Thu, May 22, 2014 at 6:59 PM, Siddhesh Poyarekar wrote: >> >> On Tue, May 20, 2014 at 06:23:40PM +0400, Konstantin Serebryany wrote: >> >>> 2014-05-20 Kostya Serebryany >> >>> >> >>> * crypt/md5-crypt.c (__md5_crypt_r): Remove a nested function. >> >>> (b64_from_24bit): New function. >> >>> >> >> >> >> I have pushed this (and the formatting fix) now. >> > >> > Excellent, thanks! >> > Here is the next patch with (hopefully) correct tabs: >> > >> > 2014-05-22 Kostya Serebryany >> > >> > * crypt/crypt-private.h: Include ufc-crypt.h. >> > (__b64_from_24bit): Declare extern. >> > * crypt/crypt_util.c(__b64_from_24bit): New function. >> > (b64t): New static const variable. >> > * crypt/md5-crypt.c (b64_from_24bit): Remove function. >> > (b64t): Remove variable. >> > (__md5_crypt_r): Replace b64_from_24bit with __b64_from_24bit. >> > * crypt/sha256-crypt.c: Include crypt-private.h. >> > (b64t): Remove variable. >> > (__sha256_crypt_r): Remove b64_from_24bit and replace >> > with __b64_from_24bit. >> > * crypt/sha512-crypt.c: Likewise. >> > >> > >> > >> > >> > >> > >> > >> >> >> >> Siddhesh diff --git a/crypt/crypt-private.h b/crypt/crypt-private.h index fbaf9c4..ea46a7f 100644 --- a/crypt/crypt-private.h +++ b/crypt/crypt-private.h @@ -28,6 +28,9 @@ #include #include +#include "ufc-crypt.h" +#include "crypt.h" + /* crypt.c */ extern void _ufc_doit_r (ufc_long itr, struct crypt_data * __restrict __data, ufc_long *res); @@ -57,4 +60,8 @@ extern char *__crypt_r (const char *__key, const char *__salt, struct crypt_data * __restrict __data); extern char *fcrypt (const char *key, const char *salt); +extern void __b64_from_24bit (char **cp, int *buflen, + unsigned int b2, unsigned int b1, unsigned int b0, + int n); + #endif /* crypt-private.h */ diff --git a/crypt/crypt_util.c b/crypt/crypt_util.c index 2875931..9381d67 100644 --- a/crypt/crypt_util.c +++ b/crypt/crypt_util.c @@ -253,6 +253,10 @@ static ufc_long eperm32tab[4][256][2]; */ static ufc_long efp[16][64][2]; +/* Table with characters for base64 transformation. */ +static const char b64t[64] = +"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + /* * For use by the old, non-reentrant routines * (crypt/encrypt/setkey) @@ -956,3 +960,17 @@ setkey(__key) { __setkey_r(__key, &_ufc_foobar); } + +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; + } +} diff --git a/crypt/md5-crypt.c b/crypt/md5-crypt.c index f6739d3..0aa4f7e 100644 --- a/crypt/md5-crypt.c +++ b/crypt/md5-crypt.c @@ -25,6 +25,7 @@ #include #include "md5.h" +#include "crypt-private.h" #ifdef USE_NSS @@ -78,30 +79,12 @@ typedef int PRBool; encryption implementations. */ static const char md5_salt_prefix[] = "$1$"; -/* Table with characters for base64 transformation. */ -static const char b64t[64] = -"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - /* Prototypes for local functions. */ 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. */ @@ -282,18 +265,18 @@ __md5_crypt_r (key, salt, buffer, buflen) --buflen; } - 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); + __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); diff --git a/crypt/sha256-crypt.c b/crypt/sha256-crypt.c index cf0abd2..6f6a722 100644 --- a/crypt/sha256-crypt.c +++ b/crypt/sha256-crypt.c @@ -26,6 +26,7 @@ #include #include "sha256.h" +#include "crypt-private.h" #ifdef USE_NSS @@ -90,10 +91,6 @@ static const char sha256_rounds_prefix[] = "rounds="; /* Maximum number of rounds. */ #define ROUNDS_MAX 999999999 -/* Table with characters for base64 transformation. */ -static const char b64t[64] = -"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - /* Prototypes for local functions. */ extern char *__sha256_crypt_r (const char *key, const char *salt, @@ -341,29 +338,28 @@ __sha256_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[10], alt_result[20], 4); - b64_from_24bit (alt_result[21], alt_result[1], alt_result[11], 4); - b64_from_24bit (alt_result[12], alt_result[22], alt_result[2], 4); - b64_from_24bit (alt_result[3], alt_result[13], alt_result[23], 4); - b64_from_24bit (alt_result[24], alt_result[4], alt_result[14], 4); - b64_from_24bit (alt_result[15], alt_result[25], alt_result[5], 4); - b64_from_24bit (alt_result[6], alt_result[16], alt_result[26], 4); - b64_from_24bit (alt_result[27], alt_result[7], alt_result[17], 4); - b64_from_24bit (alt_result[18], alt_result[28], alt_result[8], 4); - b64_from_24bit (alt_result[9], alt_result[19], alt_result[29], 4); - b64_from_24bit (0, alt_result[31], alt_result[30], 3); + __b64_from_24bit (&cp, &buflen, + alt_result[0], alt_result[10], alt_result[20], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[21], alt_result[1], alt_result[11], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[12], alt_result[22], alt_result[2], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[3], alt_result[13], alt_result[23], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[24], alt_result[4], alt_result[14], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[15], alt_result[25], alt_result[5], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[6], alt_result[16], alt_result[26], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[27], alt_result[7], alt_result[17], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[18], alt_result[28], alt_result[8], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[9], alt_result[19], alt_result[29], 4); + __b64_from_24bit (&cp, &buflen, + 0, alt_result[31], alt_result[30], 3); if (buflen <= 0) { __set_errno (ERANGE); diff --git a/crypt/sha512-crypt.c b/crypt/sha512-crypt.c index c0338a7..5e323ea 100644 --- a/crypt/sha512-crypt.c +++ b/crypt/sha512-crypt.c @@ -26,6 +26,7 @@ #include #include "sha512.h" +#include "crypt-private.h" #ifdef USE_NSS @@ -90,10 +91,6 @@ static const char sha512_rounds_prefix[] = "rounds="; /* Maximum number of rounds. */ #define ROUNDS_MAX 999999999 -/* Table with characters for base64 transformation. */ -static const char b64t[64] = -"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - /* Prototypes for local functions. */ extern char *__sha512_crypt_r (const char *key, const char *salt, @@ -340,40 +337,50 @@ __sha512_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[21], alt_result[42], 4); - b64_from_24bit (alt_result[22], alt_result[43], alt_result[1], 4); - b64_from_24bit (alt_result[44], alt_result[2], alt_result[23], 4); - b64_from_24bit (alt_result[3], alt_result[24], alt_result[45], 4); - b64_from_24bit (alt_result[25], alt_result[46], alt_result[4], 4); - b64_from_24bit (alt_result[47], alt_result[5], alt_result[26], 4); - b64_from_24bit (alt_result[6], alt_result[27], alt_result[48], 4); - b64_from_24bit (alt_result[28], alt_result[49], alt_result[7], 4); - b64_from_24bit (alt_result[50], alt_result[8], alt_result[29], 4); - b64_from_24bit (alt_result[9], alt_result[30], alt_result[51], 4); - b64_from_24bit (alt_result[31], alt_result[52], alt_result[10], 4); - b64_from_24bit (alt_result[53], alt_result[11], alt_result[32], 4); - b64_from_24bit (alt_result[12], alt_result[33], alt_result[54], 4); - b64_from_24bit (alt_result[34], alt_result[55], alt_result[13], 4); - b64_from_24bit (alt_result[56], alt_result[14], alt_result[35], 4); - b64_from_24bit (alt_result[15], alt_result[36], alt_result[57], 4); - b64_from_24bit (alt_result[37], alt_result[58], alt_result[16], 4); - b64_from_24bit (alt_result[59], alt_result[17], alt_result[38], 4); - b64_from_24bit (alt_result[18], alt_result[39], alt_result[60], 4); - b64_from_24bit (alt_result[40], alt_result[61], alt_result[19], 4); - b64_from_24bit (alt_result[62], alt_result[20], alt_result[41], 4); - b64_from_24bit (0, 0, alt_result[63], 2); + __b64_from_24bit (&cp, &buflen, + alt_result[0], alt_result[21], alt_result[42], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[22], alt_result[43], alt_result[1], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[44], alt_result[2], alt_result[23], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[3], alt_result[24], alt_result[45], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[25], alt_result[46], alt_result[4], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[47], alt_result[5], alt_result[26], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[6], alt_result[27], alt_result[48], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[28], alt_result[49], alt_result[7], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[50], alt_result[8], alt_result[29], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[9], alt_result[30], alt_result[51], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[31], alt_result[52], alt_result[10], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[53], alt_result[11], alt_result[32], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[12], alt_result[33], alt_result[54], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[34], alt_result[55], alt_result[13], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[56], alt_result[14], alt_result[35], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[15], alt_result[36], alt_result[57], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[37], alt_result[58], alt_result[16], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[59], alt_result[17], alt_result[38], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[18], alt_result[39], alt_result[60], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[40], alt_result[61], alt_result[19], 4); + __b64_from_24bit (&cp, &buflen, + alt_result[62], alt_result[20], alt_result[41], 4); + __b64_from_24bit (&cp, &buflen, + 0, 0, alt_result[63], 2); if (buflen <= 0) {