diff options
Diffstat (limited to 'mysys/string.c')
-rw-r--r-- | mysys/string.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/mysys/string.c b/mysys/string.c index 870963abd0d..d9791341c60 100644 --- a/mysys/string.c +++ b/mysys/string.c @@ -98,20 +98,21 @@ my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append, size_t length) { char *new_ptr; + DBUG_ENTER("dynstr_append_mem"); if (str->length+length >= str->max_length) { size_t new_length=(str->length+length+str->alloc_increment)/ str->alloc_increment; new_length*=str->alloc_increment; if (!(new_ptr=(char*) my_realloc(str->str,new_length,MYF(MY_WME)))) - return TRUE; + DBUG_RETURN(TRUE); str->str=new_ptr; str->max_length=new_length; } memcpy(str->str + str->length,append,length); str->length+=length; str->str[str->length]=0; /* Safety for C programs */ - return FALSE; + DBUG_RETURN(FALSE); } @@ -180,3 +181,15 @@ void dynstr_free(DYNAMIC_STRING *str) my_free(str->str); str->str= NULL; } + + +/* Give over the control of the dynamic string to caller */ + +void dynstr_reassociate(DYNAMIC_STRING *str, char **ptr, size_t *length, + size_t *alloc_length) +{ + *ptr= str->str; + *length= str->length; + *alloc_length= str->max_length; + str->str=0; +} |