From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754350AbZKHQel (ORCPT ); Sun, 8 Nov 2009 11:34:41 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752407AbZKHQek (ORCPT ); Sun, 8 Nov 2009 11:34:40 -0500 Received: from mail-pw0-f42.google.com ([209.85.160.42]:45455 "EHLO mail-pw0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751717AbZKHQek (ORCPT ); Sun, 8 Nov 2009 11:34:40 -0500 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :mime-version:content-type:content-transfer-encoding; b=NKPyuGxqDLvvRRT1i1in+iyP0nfgyztxbOFw9GDtOg7LIiAuuB+cdXynCtSM7QsKYW xLmnR/OlTEFLdAIOMq3TnxmpfPl6cgXnbD0gcgL3R4XpvNZXG55/rKqNhcZ9RHhRFA9g +TRyzu/YjjPHTxdJ5nQNnOuva0F1R1j377f4U= From: =?UTF-8?q?Andr=C3=A9=20Goddard=20Rosa?= To: jengelh@medozas.de, linux-kernel@vger.kernel.org Cc: =?UTF-8?q?Andr=C3=A9=20Goddard=20Rosa?= Subject: [PATCH v4 08/12] vsprintf: reuse almost identical simple_strtoulX() functions Date: Sat, 7 Nov 2009 14:33:13 -0200 Message-Id: <57d62b178a5bbd0393e83a2293ba933e60ddc658.1257602781.git.andre.goddard@gmail.com> X-Mailer: git-send-email 1.6.5.2.153.g6e31f.dirty In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The difference between simple_strtoul() and simple_strtoull() is just the size of the variable used to keep track of the sum of characters converted to numbers: unsigned long simple_strtoul() {...} unsigned long long simple_strtoull(){...} Both are same size (8 bytes) on my Core 2/gcc 4.4.1. Overflow condition is not checked on both functions, so an extremely large string can break these functions so that they don't even notice it. As we do not care for overflowing on these functions, always keep the sum using the larger variable around (unsigned long long) on simple_strtoull() and cast it to (unsigned long) on simple_strtoul(), which then becomes just a wrapper around simple_strtoull(). Code size decreases by 304 bytes: text data bss dec hex filename 15543 0 8 15551 3cbf lib/vsprintf.o-before 15239 0 8 15247 3b8f lib/vsprintf.o-after Removed unnecessary cast as noticed by Jan Engelhardt. Signed-off-by: André Goddard Rosa Acked-by: Ingo Molnar --- lib/vsprintf.c | 48 ++++++++++++++---------------------------------- 1 files changed, 14 insertions(+), 34 deletions(-) diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 566c947..7ec96a3 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -49,14 +49,14 @@ static unsigned int simple_guess_base(const char *cp) } /** - * simple_strtoul - convert a string to an unsigned long + * simple_strtoull - convert a string to an unsigned long long * @cp: The start of the string * @endp: A pointer to the end of the parsed string will be placed here * @base: The number base to use */ -unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base) +unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) { - unsigned long result = 0; + unsigned long long result = 0; if (!base) base = simple_guess_base(cp); @@ -78,54 +78,34 @@ unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base) return result; } -EXPORT_SYMBOL(simple_strtoul); +EXPORT_SYMBOL(simple_strtoull); /** - * simple_strtol - convert a string to a signed long + * simple_strtoul - convert a string to an unsigned long * @cp: The start of the string * @endp: A pointer to the end of the parsed string will be placed here * @base: The number base to use */ -long simple_strtol(const char *cp, char **endp, unsigned int base) +unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base) { - if (*cp == '-') - return -simple_strtoul(cp + 1, endp, base); - - return simple_strtoul(cp, endp, base); + return simple_strtoull(cp, endp, base); } -EXPORT_SYMBOL(simple_strtol); +EXPORT_SYMBOL(simple_strtoul); /** - * simple_strtoull - convert a string to an unsigned long long + * simple_strtol - convert a string to a signed long * @cp: The start of the string * @endp: A pointer to the end of the parsed string will be placed here * @base: The number base to use */ -unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) +long simple_strtol(const char *cp, char **endp, unsigned int base) { - unsigned long long result = 0; - - if (!base) - base = simple_guess_base(cp); - - if (base == 16 && cp[0] == '0' && TOLOWER(cp[1]) == 'x') - cp += 2; - - while (isxdigit(*cp)) { - unsigned int value; - - value = isdigit(*cp) ? *cp - '0' : TOLOWER(*cp) - 'a' + 10; - if (value >= base) - break; - result = result * base + value; - cp++; - } - if (endp) - *endp = (char *)cp; + if (*cp == '-') + return -simple_strtoul(cp + 1, endp, base); - return result; + return simple_strtoul(cp, endp, base); } -EXPORT_SYMBOL(simple_strtoull); +EXPORT_SYMBOL(simple_strtol); /** * simple_strtoll - convert a string to a signed long long -- 1.6.5.2.153.g6e31f.dirty From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: =?UTF-8?q?Andr=C3=A9=20Goddard=20Rosa?= Date: Sat, 7 Nov 2009 13:16:16 -0200 Message-Id: <57d62b178a5bbd0393e83a2293ba933e60ddc658.1257602781.git.andre.goddard@gmail.com> In-Reply-To: References: In-Reply-To: References: MIME-Version: 1.0 Subject: [uml-devel] [PATCH v4 08/12] vsprintf: reuse almost identical simple_strtoulX() functions List-Id: The user-mode Linux development list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: user-mode-linux-devel-bounces@lists.sourceforge.net To: Martin Schwidefsky , Heiko Carstens , linux390@de.ibm.com, Michael Holzheu , Andrew Morton , Stoyan Gaydarov , Julia Lawall , Jeff Dike , James Morris , WANG Cong , Pekka Enberg , David Howells , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , x86@kernel.org, Alexey Dobriyan , Joe Perches , Alan Cox , Arjan van de Ven , Neil Brown , Alasdair G Kergon , Mike Snitzer , Mikulas Patocka , Jens Axboe , "Martin K . Petersen" , Andre Noll , Kyle McMartin , Helge Deller , "James E . J . Bottomley" , Roel Kluin , Henrique de Moraes Holschuh , Len Brown , Adam Belay , Bjorn Helgaas , Stefan Haberland , Stefan Weinhuber , Richard Purdie , Andrea Righi , Greg Kroah-Hartman , Pavel Roskin , Andrey Borzenkov , Steve Dickson , Trond Myklebust , Daire Byrne , Al Viro , Theodore Ts'o , Andreas Dilger , Eric Sandeen , Jan Kara , Rusty Russell , Takashi Iwai , Frederic Weisbecker , Sitsofe Wheeler , Christof Schmitt , Greg Banks , Jason Baron , "David S . Miller" , Steven Rostedt , Samuel Ortiz , Patrick McHardy , Jan Engelhardt , Roman Hoog Antink , Jaroslav Kysela , linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, user-mode-linux-devel@lists.sourceforge.net, user-mode-linux-user@lists.sourceforge.net, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-parisc@vger.kernel.org, ibm-acpi-devel@lists.sourceforge.net, linux-cachefs@redhat.com, linux-ext4@vger.kernel.org, netdev@vger.kernel.org, netfilter-devel@vger.kernel.org, netfilter@vger.kernel.org, coreteam@netfilter.org, alsa-devel@alsa-project.org Cc: =?UTF-8?q?Andr=C3=A9=20Goddard=20Rosa?= VGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzaW1wbGVfc3RydG91bCgpIGFuZCBzaW1wbGVfc3RydG91 bGwoKSBpcyBqdXN0CnRoZSBzaXplIG9mIHRoZSB2YXJpYWJsZSB1c2VkIHRvIGtlZXAgdHJhY2sg b2YgdGhlIHN1bSBvZiBjaGFyYWN0ZXJzCmNvbnZlcnRlZCB0byBudW1iZXJzOgoKdW5zaWduZWQg bG9uZyBzaW1wbGVfc3RydG91bCgpIHsuLi59CnVuc2lnbmVkIGxvbmcgbG9uZyBzaW1wbGVfc3Ry dG91bGwoKXsuLi59CgpCb3RoIGFyZSBzYW1lIHNpemUgKDggYnl0ZXMpIG9uIG15IENvcmUgMi9n Y2MgNC40LjEuCk92ZXJmbG93IGNvbmRpdGlvbiBpcyBub3QgY2hlY2tlZCBvbiBib3RoIGZ1bmN0 aW9ucywgc28gYW4gZXh0cmVtZWx5IGxhcmdlCnN0cmluZyBjYW4gYnJlYWsgdGhlc2UgZnVuY3Rp b25zIHNvIHRoYXQgdGhleSBkb24ndCBldmVuIG5vdGljZSBpdC4KCkFzIHdlIGRvIG5vdCBjYXJl IGZvciBvdmVyZmxvd2luZyBvbiB0aGVzZSBmdW5jdGlvbnMsIGFsd2F5cyBrZWVwIHRoZSBzdW0K dXNpbmcgdGhlIGxhcmdlciB2YXJpYWJsZSBhcm91bmQgKHVuc2lnbmVkIGxvbmcgbG9uZykgb24g c2ltcGxlX3N0cnRvdWxsKCkKYW5kIGNhc3QgaXQgdG8gKHVuc2lnbmVkIGxvbmcpIG9uIHNpbXBs ZV9zdHJ0b3VsKCksIHdoaWNoIHRoZW4gYmVjb21lcwpqdXN0IGEgd3JhcHBlciBhcm91bmQgc2lt cGxlX3N0cnRvdWxsKCkuCgpDb2RlIHNpemUgZGVjcmVhc2VzIGJ5IDMwNCBieXRlczoKICAgdGV4 dCAgICBkYXRhICAgICBic3MgICAgIGRlYyAgICAgaGV4IGZpbGVuYW1lCiAgMTU1NDMgICAgICAg MCAgICAgICA4ICAgMTU1NTEgICAgM2NiZiBsaWIvdnNwcmludGYuby1iZWZvcmUKICAxNTIzOSAg ICAgICAwICAgICAgIDggICAxNTI0NyAgICAzYjhmIGxpYi92c3ByaW50Zi5vLWFmdGVyCgpTaWdu ZWQtb2ZmLWJ5OiBBbmRyw6kgR29kZGFyZCBSb3NhIDxhbmRyZS5nb2RkYXJkQGdtYWlsLmNvbT4K QWNrZWQtYnk6IEluZ28gTW9sbmFyIDxtaW5nb0BlbHRlLmh1PgotLS0KIGxpYi92c3ByaW50Zi5j IHwgICA0OCArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K IDEgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCA1NjZjOTQ3Li43 ZWM5NmEzIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYworKysgYi9saWIvdnNwcmludGYuYwpA QCAtNDksMTQgKzQ5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2ltcGxlX2d1ZXNzX2Jhc2Uo Y29uc3QgY2hhciAqY3ApCiB9CiAKIC8qKgotICogc2ltcGxlX3N0cnRvdWwgLSBjb252ZXJ0IGEg c3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcKKyAqIHNpbXBsZV9zdHJ0b3VsbCAtIGNvbnZlcnQg YSBzdHJpbmcgdG8gYW4gdW5zaWduZWQgbG9uZyBsb25nCiAgKiBAY3A6IFRoZSBzdGFydCBvZiB0 aGUgc3RyaW5nCiAgKiBAZW5kcDogQSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHBhcnNlZCBz dHJpbmcgd2lsbCBiZSBwbGFjZWQgaGVyZQogICogQGJhc2U6IFRoZSBudW1iZXIgYmFzZSB0byB1 c2UKICAqLwotdW5zaWduZWQgbG9uZyBzaW1wbGVfc3RydG91bChjb25zdCBjaGFyICpjcCwgY2hh ciAqKmVuZHAsIHVuc2lnbmVkIGludCBiYXNlKQordW5zaWduZWQgbG9uZyBsb25nIHNpbXBsZV9z dHJ0b3VsbChjb25zdCBjaGFyICpjcCwgY2hhciAqKmVuZHAsIHVuc2lnbmVkIGludCBiYXNlKQog ewotCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0 ID0gMDsKIAogCWlmICghYmFzZSkKIAkJYmFzZSA9IHNpbXBsZV9ndWVzc19iYXNlKGNwKTsKQEAg LTc4LDU0ICs3OCwzNCBAQCB1bnNpZ25lZCBsb25nIHNpbXBsZV9zdHJ0b3VsKGNvbnN0IGNoYXIg KmNwLCBjaGFyICoqZW5kcCwgdW5zaWduZWQgaW50IGJhc2UpCiAKIAlyZXR1cm4gcmVzdWx0Owog fQotRVhQT1JUX1NZTUJPTChzaW1wbGVfc3RydG91bCk7CitFWFBPUlRfU1lNQk9MKHNpbXBsZV9z dHJ0b3VsbCk7CiAKIC8qKgotICogc2ltcGxlX3N0cnRvbCAtIGNvbnZlcnQgYSBzdHJpbmcgdG8g YSBzaWduZWQgbG9uZworICogc2ltcGxlX3N0cnRvdWwgLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGFu IHVuc2lnbmVkIGxvbmcKICAqIEBjcDogVGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcKICAqIEBlbmRw OiBBIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgcGFyc2VkIHN0cmluZyB3aWxsIGJlIHBsYWNl ZCBoZXJlCiAgKiBAYmFzZTogVGhlIG51bWJlciBiYXNlIHRvIHVzZQogICovCi1sb25nIHNpbXBs ZV9zdHJ0b2woY29uc3QgY2hhciAqY3AsIGNoYXIgKiplbmRwLCB1bnNpZ25lZCBpbnQgYmFzZSkK K3Vuc2lnbmVkIGxvbmcgc2ltcGxlX3N0cnRvdWwoY29uc3QgY2hhciAqY3AsIGNoYXIgKiplbmRw LCB1bnNpZ25lZCBpbnQgYmFzZSkKIHsKLQlpZiAoKmNwID09ICctJykKLQkJcmV0dXJuIC1zaW1w bGVfc3RydG91bChjcCArIDEsIGVuZHAsIGJhc2UpOwotCi0JcmV0dXJuIHNpbXBsZV9zdHJ0b3Vs KGNwLCBlbmRwLCBiYXNlKTsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc2ltcGxlX3N0cnRvdWxs KGNwLCBlbmRwLCBiYXNlKTsKIH0KLUVYUE9SVF9TWU1CT0woc2ltcGxlX3N0cnRvbCk7CitFWFBP UlRfU1lNQk9MKHNpbXBsZV9zdHJ0b3VsKTsKIAogLyoqCi0gKiBzaW1wbGVfc3RydG91bGwgLSBj b252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgbG9uZworICogc2ltcGxlX3N0cnRv bCAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBzaWduZWQgbG9uZwogICogQGNwOiBUaGUgc3RhcnQg b2YgdGhlIHN0cmluZwogICogQGVuZHA6IEEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBwYXJz ZWQgc3RyaW5nIHdpbGwgYmUgcGxhY2VkIGhlcmUKICAqIEBiYXNlOiBUaGUgbnVtYmVyIGJhc2Ug dG8gdXNlCiAgKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBzaW1wbGVfc3RydG91bGwoY29uc3QgY2hh ciAqY3AsIGNoYXIgKiplbmRwLCB1bnNpZ25lZCBpbnQgYmFzZSkKK2xvbmcgc2ltcGxlX3N0cnRv bChjb25zdCBjaGFyICpjcCwgY2hhciAqKmVuZHAsIHVuc2lnbmVkIGludCBiYXNlKQogewotCXVu c2lnbmVkIGxvbmcgbG9uZyByZXN1bHQgPSAwOwotCi0JaWYgKCFiYXNlKQotCQliYXNlID0gc2lt cGxlX2d1ZXNzX2Jhc2UoY3ApOwotCi0JaWYgKGJhc2UgPT0gMTYgJiYgY3BbMF0gPT0gJzAnICYm IFRPTE9XRVIoY3BbMV0pID09ICd4JykKLQkJY3AgKz0gMjsKLQotCXdoaWxlIChpc3hkaWdpdCgq Y3ApKSB7Ci0JCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCQl2YWx1ZSA9IGlzZGlnaXQoKmNwKSA/ ICpjcCAtICcwJyA6IFRPTE9XRVIoKmNwKSAtICdhJyArIDEwOwotCQlpZiAodmFsdWUgPj0gYmFz ZSkKLQkJCWJyZWFrOwotCQlyZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgdmFsdWU7Ci0JCWNwKys7 Ci0JfQotCWlmIChlbmRwKQotCQkqZW5kcCA9IChjaGFyICopY3A7CisJaWYgKCpjcCA9PSAnLScp CisJCXJldHVybiAtc2ltcGxlX3N0cnRvdWwoY3AgKyAxLCBlbmRwLCBiYXNlKTsKIAotCXJldHVy biByZXN1bHQ7CisJcmV0dXJuIHNpbXBsZV9zdHJ0b3VsKGNwLCBlbmRwLCBiYXNlKTsKIH0KLUVY UE9SVF9TWU1CT0woc2ltcGxlX3N0cnRvdWxsKTsKK0VYUE9SVF9TWU1CT0woc2ltcGxlX3N0cnRv bCk7CiAKIC8qKgogICogc2ltcGxlX3N0cnRvbGwgLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGEgc2ln bmVkIGxvbmcgbG9uZwotLSAKMS42LjUuMi4xNTMuZzZlMzFmLmRpcnR5CgoKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCkxldCBDcnlzdGFsIFJlcG9ydHMgaGFuZGxlIHRoZSByZXBvcnRpbmcgLSBGcmVl IENyeXN0YWwgUmVwb3J0cyAyMDA4IDMwLURheSAKdHJpYWwuIFNpbXBsaWZ5IHlvdXIgcmVwb3J0 IGRlc2lnbiwgaW50ZWdyYXRpb24gYW5kIGRlcGxveW1lbnQgLSBhbmQgZm9jdXMgb24gCndoYXQg eW91IGRvIGJlc3QsIGNvcmUgYXBwbGljYXRpb24gY29kaW5nLiBEaXNjb3ZlciB3aGF0J3MgbmV3 IHdpdGgKQ3J5c3RhbCBSZXBvcnRzIG5vdy4gIGh0dHA6Ly9wLnNmLm5ldC9zZnUvYm9iai1qdWx5 Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClVzZXItbW9k ZS1saW51eC1kZXZlbCBtYWlsaW5nIGxpc3QKVXNlci1tb2RlLWxpbnV4LWRldmVsQGxpc3RzLnNv dXJjZWZvcmdlLm5ldApodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5m by91c2VyLW1vZGUtbGludXgtZGV2ZWwK