From 01672af8f03ff7a301cf95b2903de42220805dcb Mon Sep 17 00:00:00 2001 From: Sascha Schumann Date: Mon, 20 Aug 2001 15:27:45 +0000 Subject: [PATCH] Improved fix --- ext/standard/php_smart_str.h | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) 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) -- 2.50.1