]> granicus.if.org Git - php/commitdiff
Improved fix
authorSascha Schumann <sas@php.net>
Mon, 20 Aug 2001 15:27:45 +0000 (15:27 +0000)
committerSascha Schumann <sas@php.net>
Mon, 20 Aug 2001 15:27:45 +0000 (15:27 +0000)
ext/standard/php_smart_str.h

index 0edaa4a9d4c37264a347e39788dda3683fb1320b..ea34d792a154886d9e5a8eb0d992dc5bcfd8d2c6 100644 (file)
@@ -78,32 +78,38 @@ static inline void smart_str_appendl_ex(smart_str *dest, const char *src, size_t
 
 static inline char *smart_str_print_long(char *buf, long num)
 {
-       /* TBFixed: think how to do it one-pass */
+       char *p = buf, *end;
+       int n;
        long tmp;
-       char *p = buf;
-       int n = 0;
-
-       if(num == 0) {
-               *p++ = '0';
-               return p;
-       }
        
        if (num < 0) {
                num = -num;
                *p++ = '-';
        }
 
-       for (tmp = num; tmp > 0; n++) {
-               tmp /= 10;
+       /* many numbers are < 10 */
+       if (num < 10) {
+               *p++ = num + '0';
+               return p;
        }
-       p += n;
 
-       while (num > 0) {
-               *(--p) = (num % 10) + '0';
+       n = 1;
+       tmp = num;
+
+       /* calculate the number of digits we need */
+       do {
+               tmp /= 10;
+               n++;
+       } while (tmp >= 10);
+
+       end = p += n;
+       
+       do {
+               *--p = (num % 10) + '0';
                num /= 10;
-       }
+       } while (--n > 0);
 
-       return p+n;
+       return end;
 }
 
 static inline void smart_str_append_long_ex(smart_str *dest, long num, int type)