summaryrefslogtreecommitdiff
path: root/src/value.cpp
diff options
context:
space:
mode:
authorEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-03-15 22:18:44 +0100
committerEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-03-15 22:18:44 +0100
commita471f0f0c4c09c8f83197568af7becfbf28f2e37 (patch)
tree009a321b276f219cdd6a899b2df1cab874a032a9 /src/value.cpp
parent895f6315eb306a677bddba86980de8f8ee824efe (diff)
renamed reserve to resize
Diffstat (limited to 'src/value.cpp')
-rw-r--r--src/value.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/value.cpp b/src/value.cpp
index 7787538..1579341 100644
--- a/src/value.cpp
+++ b/src/value.cpp
@@ -1449,14 +1449,24 @@ char *Value::reserve(size_t size)
// must be a string
setType(Type::String);
- // leap ouf it the size if already big enough
- if (Z_STRLEN_P(_val) >= (int)size) return Z_STRVAL_P(_val);
+ // is the current buffer too small?
+ if (Z_STRLEN_P(_val) < (int)size)
+ {
+ // is there already a buffer?
+ if (!Z_STRVAL_P(_val)) Z_STRVAL_P(_val) = (char *)emalloc(size+1);
+
+ // reallocate an existing buffer
+ else Z_STRVAL_P(_val) = (char *)erealloc(Z_STRVAL_P(_val), size+1);
+
+ // last byte should be zero
+ Z_STRVAL_P(_val)[size] = 0;
+ }
- // is there already a buffer?
- if (!Z_STRVAL_P(_val)) return Z_STRVAL_P(_val) = (char *)emalloc(size);
+ // store size
+ Z_STRLEN_P(_val) = size;
- // reallocate an existing buffer
- return Z_STRVAL_P(_val) = (char *)erealloc(Z_STRVAL_P(_val), size);
+ // done
+ return Z_STRVAL_P(_val);
}
/**