Browse Source

fix new String:realloc* variants always to zero-terminate the string

pull/374/head
Sergei Golubchik 15 years ago
parent
commit
8404b44a84
  1. 3
      sql/sql_string.cc
  2. 17
      sql/sql_string.h

3
sql/sql_string.cc

@ -81,7 +81,7 @@ bool String::real_alloc(uint32 length)
@retval true An error occured when attempting to allocate memory.
*/
bool String::realloc(uint32 alloc_length)
bool String::realloc_raw(uint32 alloc_length)
{
if (Alloced_length <= alloc_length)
{
@ -109,7 +109,6 @@ bool String::realloc(uint32 alloc_length)
Ptr= new_ptr;
Alloced_length= len;
}
Ptr[alloc_length]=0; // This make other funcs shorter
return FALSE;
}

17
sql/sql_string.h

@ -255,17 +255,30 @@ public:
return real_alloc(arg_length);
}
bool real_alloc(uint32 arg_length); // Empties old string
bool realloc(uint32 arg_length);
bool realloc_raw(uint32 arg_length);
bool realloc(uint32 arg_length)
{
if (realloc_raw(arg_length))
return TRUE;
Ptr[arg_length]=0; // This make other funcs shorter
return FALSE;
}
bool realloc_with_extra(uint32 arg_length)
{
if (extra_alloc < 4096)
extra_alloc= extra_alloc*2+128;
return realloc(arg_length + extra_alloc);
if (realloc_raw(arg_length + extra_alloc))
return TRUE;
Ptr[arg_length]=0; // This make other funcs shorter
return FALSE;
}
bool realloc_with_extra_if_needed(uint32 arg_length)
{
if (arg_length < Alloced_length)
{
Ptr[arg_length]=0; // behave as if realloc was called.
return 0;
}
return realloc_with_extra(arg_length);
}
inline void shrink(uint32 arg_length) // Shrink buffer

Loading…
Cancel
Save