summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2001-08-20 15:28:53 +0000
committerStanislav Malyshev <stas@php.net>2001-08-20 15:28:53 +0000
commitbd5d7bba59a7c7f9916e85c16e519243ea0ef9ea (patch)
tree4613596f38c441646696da33f0017cbc3d03cbf4
parentb40450118308d8a29a961a1a57eb2b32e42e8681 (diff)
downloadphp-git-bd5d7bba59a7c7f9916e85c16e519243ea0ef9ea.tar.gz
MFH
-rw-r--r--ext/standard/php_smart_str.h23
-rw-r--r--ext/standard/tests/serialize/001.phpt4
2 files changed, 18 insertions, 9 deletions
diff --git a/ext/standard/php_smart_str.h b/ext/standard/php_smart_str.h
index 167fc1b643..0edaa4a9d4 100644
--- a/ext/standard/php_smart_str.h
+++ b/ext/standard/php_smart_str.h
@@ -78,27 +78,32 @@ 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 */
+ long tmp;
char *p = buf;
- long tmp = 0;
int n = 0;
+
+ if(num == 0) {
+ *p++ = '0';
+ return p;
+ }
if (num < 0) {
num = -num;
*p++ = '-';
}
+ for (tmp = num; tmp > 0; n++) {
+ tmp /= 10;
+ }
+ p += n;
+
while (num > 0) {
- tmp = tmp * 10 + (num % 10);
+ *(--p) = (num % 10) + '0';
num /= 10;
- n++;
}
- do {
- *p++ = (tmp % 10) + '0';
- tmp /= 10;
- } while (--n > 0);
-
- return p;
+ return p+n;
}
static inline void smart_str_append_long_ex(smart_str *dest, long num, int type)
diff --git a/ext/standard/tests/serialize/001.phpt b/ext/standard/tests/serialize/001.phpt
index 78f90ed627..ab8ac99c53 100644
--- a/ext/standard/tests/serialize/001.phpt
+++ b/ext/standard/tests/serialize/001.phpt
@@ -40,6 +40,8 @@ echo serialize((bool) false)."\n";
echo serialize(1)."\n";
echo serialize(0)."\n";
echo serialize(-1)."\n";
+echo serialize(2147483647)."\n";
+echo serialize(-2147483647)."\n";
echo serialize(1.123456789)."\n";
echo serialize(1.0)."\n";
echo serialize(0.0)."\n";
@@ -75,6 +77,8 @@ b:0;
i:1;
i:0;
i:-1;
+i:2147483647;
+i:-2147483647;
d:1.123456789;
d:1;
d:0;