summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/sql_string.cc3
-rw-r--r--sql/sql_string.h17
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