diff options
author | Bjorn Munch <bjorn.munch@oracle.com> | 2011-01-17 10:28:53 +0100 |
---|---|---|
committer | Bjorn Munch <bjorn.munch@oracle.com> | 2011-01-17 10:28:53 +0100 |
commit | 8ed50d99721130f1431d1b41491f4ad8232beeed (patch) | |
tree | 2148d39a13e0342996f9ccdf5f7c6ccb8b9f5912 /sql/sql_string.cc | |
parent | 251869175e157a21d35191b301ef597a0aad986b (diff) | |
parent | 208b677637ef9d140c1629a0de4d4963c02ea533 (diff) | |
download | mariadb-git-8ed50d99721130f1431d1b41491f4ad8232beeed.tar.gz |
merge from 5.1 main
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 a41f4d52101..4f76943bde7 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -58,11 +58,33 @@ bool String::real_alloc(uint32 arg_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); @@ -196,6 +218,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)) |