summaryrefslogtreecommitdiff
path: root/mysys/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'mysys/string.c')
-rw-r--r--mysys/string.c17
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;
+}