diff options
-rw-r--r-- | sql/sql_string.cc | 3 | ||||
-rw-r--r-- | sql/sql_string.h | 17 |
2 files changed, 16 insertions, 4 deletions
diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 6c772617e7b..47170e6c3db 100644 --- a/sql/sql_string.cc +++ b/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; } diff --git a/sql/sql_string.h b/sql/sql_string.h index fcf04fb7690..7412022baf4 100644 --- a/sql/sql_string.h +++ b/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 |