summaryrefslogtreecommitdiff
path: root/ext/standard/php_smart_str.h
diff options
context:
space:
mode:
authorSascha Schumann <sas@php.net>2003-06-18 16:15:47 +0000
committerSascha Schumann <sas@php.net>2003-06-18 16:15:47 +0000
commitbe4947b0e6194f3636dd326f7fa43df1d6a5391e (patch)
tree6037f4ca488725d55d11d3da0a169db6c24b34ef /ext/standard/php_smart_str.h
parentd860759db9f51b5a1683e5a12f92755a0384c16e (diff)
downloadphp-git-be4947b0e6194f3636dd326f7fa43df1d6a5391e.tar.gz
Use a smaller default size to accomodate the engine
Submitted by: Stanislav Malyshev, with some massaging by me
Diffstat (limited to 'ext/standard/php_smart_str.h')
-rw-r--r--ext/standard/php_smart_str.h24
1 files changed, 19 insertions, 5 deletions
diff --git a/ext/standard/php_smart_str.h b/ext/standard/php_smart_str.h
index d84f54c626..9bd6475759 100644
--- a/ext/standard/php_smart_str.h
+++ b/ext/standard/php_smart_str.h
@@ -36,19 +36,33 @@
#define SMART_STR_PREALLOC 128
#endif
+#ifndef SMART_STR_START_SIZE
+#define SMART_STR_START_SIZE 78
+#endif
+
#ifdef SMART_STR_USE_REALLOC
#define SMART_STR_REALLOC(a,b,c) realloc((a),(b))
#else
#define SMART_STR_REALLOC(a,b,c) perealloc((a),(b),(c))
#endif
+#define SMART_STR_DO_REALLOC(d, what) \
+ (d)->c = SMART_STR_REALLOC((d)->c, (d)->a + 1, (what))
#define smart_str_alloc4(d, n, what, newlen) do { \
- if (!(d)->c) (d)->len = (d)->a = 0; \
- newlen = (d)->len + (n); \
- if (newlen >= (d)->a) { \
- (d)->a = newlen + SMART_STR_PREALLOC; \
- (d)->c = SMART_STR_REALLOC((d)->c, (d)->a + 1, (what)); \
+ if (!(d)->c) { \
+ (d)->len = 0; \
+ newlen = (n); \
+ (d)->a = newlen < SMART_STR_START_SIZE \
+ ? SMART_STR_START_SIZE \
+ : newlen + SMART_STR_PREALLOC; \
+ SMART_STR_DO_REALLOC(d, what); \
+ } else { \
+ newlen = (d)->len + (n); \
+ if (newlen >= (d)->a) { \
+ (d)->a = newlen + SMART_STR_PREALLOC; \
+ SMART_STR_DO_REALLOC(d, what); \
+ } \
} \
} while (0)