summaryrefslogtreecommitdiff
path: root/mysys
diff options
context:
space:
mode:
Diffstat (limited to 'mysys')
-rw-r--r--mysys/mf_iocache2.c6
-rw-r--r--mysys/string.c18
-rw-r--r--mysys/typelib.c2
3 files changed, 18 insertions, 8 deletions
diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c
index 9880c1615bb..1397c14515b 100644
--- a/mysys/mf_iocache2.c
+++ b/mysys/mf_iocache2.c
@@ -100,6 +100,7 @@ uint my_b_fill(IO_CACHE *info)
uint my_b_gets(IO_CACHE *info, char *to, uint max_length)
{
+ char *start = to;
uint length;
max_length--; /* Save place for end \0 */
/* Calculate number of characters in buffer */
@@ -115,10 +116,9 @@ uint my_b_gets(IO_CACHE *info, char *to, uint max_length)
{
if ((*to++ = *pos++) == '\n')
{
- length= (uint) (pos-info->rc_pos);
info->rc_pos=pos;
*to='\0';
- return length;
+ return (uint) (to-start);
}
}
if (!(max_length-=length))
@@ -126,7 +126,7 @@ uint my_b_gets(IO_CACHE *info, char *to, uint max_length)
/* Found enough charcters; Return found string */
info->rc_pos=pos;
*to='\0';
- return length;
+ return (uint) (to-start);
}
if (!(length=my_b_fill(info)))
return 0;
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)
diff --git a/mysys/typelib.c b/mysys/typelib.c
index 903a7304065..929278d1b8f 100644
--- a/mysys/typelib.c
+++ b/mysys/typelib.c
@@ -26,7 +26,7 @@
** If part, uniq field is found and full_name == 0 then x is expanded
** to full field.
** full_name has the following bit values:
-** If & 1 accept only hole names
+** If & 1 accept only whole names
** If & 2 don't expand if half field
** If & 4 allow #number# as type
****************************************************************************/