From: Sascha Schumann Date: Mon, 20 Aug 2001 15:27:45 +0000 (+0000) Subject: Improved fix X-Git-Tag: PRE_SUBST_Z_MACROS~419 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=01672af8f03ff7a301cf95b2903de42220805dcb;p=php Improved fix --- diff --git a/ext/standard/php_smart_str.h b/ext/standard/php_smart_str.h index 0edaa4a9d4..ea34d792a1 100644 --- a/ext/standard/php_smart_str.h +++ b/ext/standard/php_smart_str.h @@ -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)