diff options
Diffstat (limited to 'mysys/string.c')
-rw-r--r-- | mysys/string.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/mysys/string.c b/mysys/string.c index 0696c72b922..96a503c1179 100644 --- a/mysys/string.c +++ b/mysys/string.c @@ -48,6 +48,7 @@ my_bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str, DBUG_RETURN(FALSE); } + my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str) { uint length; @@ -72,6 +73,7 @@ my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str) DBUG_RETURN(FALSE); } + my_bool dynstr_realloc(DYNAMIC_STRING *str, ulong additional_size) { DBUG_ENTER("dynstr_realloc"); @@ -90,11 +92,17 @@ my_bool dynstr_realloc(DYNAMIC_STRING *str, ulong additional_size) my_bool dynstr_append(DYNAMIC_STRING *str, const char *append) { + return dynstr_append_mem(str,append,strlen(append)); +} + + +my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append, + uint length) +{ char *new_ptr; - uint length=(uint) strlen(append)+1; - if (str->length+length > str->max_length) + if (str->length+length >= str->max_length) { - uint new_length=(str->length+length+str->alloc_increment-1)/ + uint 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)))) @@ -103,10 +111,12 @@ my_bool dynstr_append(DYNAMIC_STRING *str, const char *append) str->max_length=new_length; } memcpy(str->str + str->length,append,length); - str->length+=length-1; + str->length+=length; + str->str[str->length]=0; /* Safety for C programs */ return FALSE; } + void dynstr_free(DYNAMIC_STRING *str) { if (str->str) |