Bug #3668 » string.c.bug3668.patch
string.c (working copy) | ||
---|---|---|
{
|
||
char *ptr;
|
||
long len = RSTRING_LEN(str);
|
||
long capa = len + expand;
|
||
ptr = ALLOC_N(char, len+expand+1);
|
||
if (RSTRING_PTR(str)) {
|
||
memcpy(ptr, RSTRING_PTR(str), expand < 0 ? len + expand : len);
|
||
if(len > capa)
|
||
len = capa;
|
||
ptr = ALLOC_N(char, capa + 1);
|
||
if(RSTRING_PTR(str)) {
|
||
memcpy(ptr, RSTRING_PTR(str), len);
|
||
}
|
||
len += expand;
|
||
STR_SET_NOEMBED(str);
|
||
STR_UNSET_NOCAPA(str);
|
||
ptr[len] = 0;
|
||
RSTRING(str)->as.heap.ptr = ptr;
|
||
RSTRING(str)->as.heap.len = len;
|
||
RSTRING(str)->as.heap.aux.capa = len;
|
||
STR_UNSET_NOCAPA(str);
|
||
RSTRING(str)->as.heap.aux.capa = capa;
|
||
}
|
||
#define str_make_independent(str) str_make_independent_expand(str, 0L)
|
- « Previous
- 1
- 2
- 3
- Next »