OSDN Git Service

malloc: handle size overflows in realloc()
[uclinux-h8/uClibc.git] / libc / stdlib / l64a.c
index f3a249f..5a1dc13 100644 (file)
@@ -32,27 +32,25 @@ static const char conv_table[64] =
   's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
 };
 
-char *
-l64a (n)
-     long int n;
+char * l64a (long int n)
 {
   unsigned long int m = (unsigned long int) n;
   static char result[7];
-  int cnt;
+  char *p;
 
   /* The standard says that only 32 bits are used.  */
-  m &= 0xffffffff;
+  if (sizeof(m) != 4)
+    m &= 0xffffffff;
 
-  if (m == 0ul)
-    /* The value for N == 0 is defined to be the empty string. */
-    return (char *) "";
-
-  for (cnt = 0; m > 0ul; ++cnt)
+  /* The value for N == 0 is defined to be the empty string,
+   * this code provides that as well. */
+  p = result;
+  while (m)
     {
-      result[cnt] = conv_table[m & 0x3f];
+      *p++ = conv_table[m & 0x3f];
       m >>= 6;
     }
-  result[cnt] = '\0';
+  *p = '\0';
 
-  return result;
+  return p;
 }