svn commit: trunk/uClibc/libc/stdlib

vda at uclibc.org vda at uclibc.org
Mon Jun 2 23:21:41 UTC 2008


Author: vda
Date: 2008-06-02 16:21:40 -0700 (Mon, 02 Jun 2008)
New Revision: 22191

Log:
fix bug 1577: '`' is not an acceptable digit for strto[u]l().
Code size is not changed on i386.



Modified:
   trunk/uClibc/libc/stdlib/stdlib.c


Changeset:
Modified: trunk/uClibc/libc/stdlib/stdlib.c
===================================================================
--- trunk/uClibc/libc/stdlib/stdlib.c	2008-06-02 22:24:34 UTC (rev 22190)
+++ trunk/uClibc/libc/stdlib/stdlib.c	2008-06-02 23:21:40 UTC (rev 22191)
@@ -509,7 +509,7 @@
 
 unsigned long attribute_hidden __XL_NPP(_stdlib_strto_l)(register const Wchar * __restrict str,
 										Wchar ** __restrict endptr, int base,
-										int sflag   __LOCALE_PARAM )
+										int sflag __LOCALE_PARAM)
 {
     unsigned long number, cutoff;
 #if _STRTO_ENDPTR
@@ -530,7 +530,7 @@
 
     /* Handle optional sign. */
     negative = 0;
-    switch(*str) {
+    switch (*str) {
 		case '-': negative = 1;	/* Fall through to increment str. */
 		case '+': ++str;
     }
@@ -557,11 +557,11 @@
 		cutoff_digit = ULONG_MAX % base;
 		cutoff = ULONG_MAX / base;
 		do {
-			digit = (((Wuchar)(*str - '0')) <= 9)
-				? (*str - '0')
-				: ((*str >= 'A')
-				   ? (((0x20|(*str)) - 'a' + 10)) /* WARNING: assumes ascii. */
-					  : 40);
+			digit = ((Wuchar)(*str - '0') <= 9)
+				? /* 0..9 */ (*str - '0')
+				: /* else */ (((Wuchar)(0x20 | *str) >= 'a') /* WARNING: assumes ascii. */
+				   ? /* >= A/a */ ((Wuchar)(0x20 | *str) - ('a' - 10))
+				   : /* else   */ 40 /* bad value */);
 
 			if (digit >= base) {
 				break;
@@ -683,7 +683,7 @@
 
     /* Handle optional sign. */
     negative = 0;
-    switch(*str) {
+    switch (*str) {
 		case '-': negative = 1;	/* Fall through to increment str. */
 		case '+': ++str;
     }
@@ -708,11 +708,11 @@
 
     if (((unsigned)(base - 2)) < 35) { /* Legal base. */
 		do {
-			digit = (((Wuchar)(*str - '0')) <= 9)
-				? (*str - '0')
-				: ((*str >= 'A')
-				   ? (((0x20|(*str)) - 'a' + 10)) /* WARNING: assumes ascii. */
-					  : 40);
+			digit = ((Wuchar)(*str - '0') <= 9)
+				? /* 0..9 */ (*str - '0')
+				: /* else */ (((Wuchar)(0x20 | *str) >= 'a') /* WARNING: assumes ascii. */
+				   ? /* >= A/a */ ((Wuchar)(0x20 | *str) - ('a' - 10))
+				   : /* else   */ 40 /* bad value */);
 
 			if (digit >= base) {
 				break;




More information about the uClibc-cvs mailing list