diff options
author | Martin Hansson <martin.hansson@oracle.com> | 2011-01-13 09:07:21 +0100 |
---|---|---|
committer | Martin Hansson <martin.hansson@oracle.com> | 2011-01-13 09:07:21 +0100 |
commit | ef6b98ee5a2d4d606e519535f70426d3db8d524a (patch) | |
tree | d1db205d8cade9fce4f01b09cf0b70cfeb9a6f31 /sql/sql_string.cc | |
parent | df3b2340a84edd27cadb0b7f3b70c0c5f82cc0bd (diff) | |
parent | 716b64cdb050ff9a22457990f336ef20a7b3663a (diff) | |
download | mariadb-git-ef6b98ee5a2d4d606e519535f70426d3db8d524a.tar.gz |
Merge of fix for Bug#58165.
Diffstat (limited to 'sql/sql_string.cc')
-rw-r--r-- | sql/sql_string.cc | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 4b7dab243d2..d19b876a82f 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -51,11 +51,33 @@ bool String::real_alloc(uint32 length) } -/* -** Check that string is big enough. Set string[alloc_length] to 0 -** (for C functions) -*/ +/** + Allocates a new buffer on the heap for this String. + + - If the String's internal buffer is privately owned and heap allocated, + one of the following is performed. + + - If the requested length is greater than what fits in the buffer, a new + buffer is allocated, data moved and the old buffer freed. + + - If the requested length is less or equal to what fits in the buffer, a + null character is inserted at the appropriate position. + - If the String does not keep a private buffer on the heap, such a buffer + will be allocated and the string copied accoring to its length, as found + in String::length(). + + For C compatibility, the new string buffer is null terminated. + + @param alloc_length The requested string size in characters, excluding any + null terminator. + + @retval false Either the copy operation is complete or, if the size of the + new buffer is smaller than the currently allocated buffer (if one exists), + no allocation occured. + + @retval true An error occured when attempting to allocate memory. +*/ bool String::realloc(uint32 alloc_length) { uint32 len=ALIGN_SIZE(alloc_length+1); @@ -128,6 +150,17 @@ bool String::copy() return FALSE; } +/** + Copies the internal buffer from str. If this String has a private heap + allocated buffer where new data does not fit, a new buffer is allocated + before copying and the old buffer freed. Character set information is also + copied. + + @param str The string whose internal buffer is to be copied. + + @retval false Success. + @retval true Memory allocation failed. +*/ bool String::copy(const String &str) { if (alloc(str.str_length)) |