* _DoAppend() no longer checks the string and the string length, which resulted
in duplicate work/checks. Instead the length is checked in the calling functions. * operator=(const char*) now checks if the passed pointer is the strings own data pointer. I think it would have freed the memory before, not sure though. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26378 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
+24
-13
@@ -244,7 +244,7 @@ BString::operator=(const BString& string)
|
|||||||
BString&
|
BString&
|
||||||
BString::operator=(const char* string)
|
BString::operator=(const char* string)
|
||||||
{
|
{
|
||||||
if (string)
|
if (string && string != String())
|
||||||
SetTo(string, strlen(string));
|
SetTo(string, strlen(string));
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@@ -375,8 +375,11 @@ BString::CopyInto(char* into, int32 fromOffset, int32 length) const
|
|||||||
BString&
|
BString&
|
||||||
BString::operator+=(const char* string)
|
BString::operator+=(const char* string)
|
||||||
{
|
{
|
||||||
if (string)
|
if (string) {
|
||||||
_DoAppend(string, strlen(string));
|
int32 length = strlen(string);
|
||||||
|
if (length > 0)
|
||||||
|
_DoAppend(string, length);
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,8 +395,11 @@ BString::operator+=(char c)
|
|||||||
BString&
|
BString&
|
||||||
BString::Append(const BString& string, int32 length)
|
BString::Append(const BString& string, int32 length)
|
||||||
{
|
{
|
||||||
if (&string != this)
|
if (&string != this) {
|
||||||
_DoAppend(string.fPrivateData, min_clamp0(length, string.Length()));
|
int32 length = min_clamp0(length, string.Length());
|
||||||
|
if (length > 0)
|
||||||
|
_DoAppend(string.fPrivateData, length);
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -401,8 +407,11 @@ BString::Append(const BString& string, int32 length)
|
|||||||
BString&
|
BString&
|
||||||
BString::Append(const char* string, int32 length)
|
BString::Append(const char* string, int32 length)
|
||||||
{
|
{
|
||||||
if (string)
|
if (string) {
|
||||||
_DoAppend(string, strlen_clamp(string, length));
|
int32 length = strlen_clamp(string, length);
|
||||||
|
if (length > 0)
|
||||||
|
_DoAppend(string, length);
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -410,9 +419,9 @@ BString::Append(const char* string, int32 length)
|
|||||||
BString&
|
BString&
|
||||||
BString::Append(char c, int32 count)
|
BString::Append(char c, int32 count)
|
||||||
{
|
{
|
||||||
int32 len = Length();
|
int32 oldLength = Length();
|
||||||
if (count > 0 && _DoAppend("", count))
|
if (count > 0 && _DoAppend("", count))
|
||||||
memset(fPrivateData + len, c, count);
|
memset(fPrivateData + oldLength, c, count);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1557,8 +1566,11 @@ BString::CharacterDeescape(char escapeChar)
|
|||||||
BString&
|
BString&
|
||||||
BString::operator<<(const char* string)
|
BString::operator<<(const char* string)
|
||||||
{
|
{
|
||||||
if (string != NULL)
|
if (string != NULL) {
|
||||||
_DoAppend(string, strlen(string));
|
int32 length = strlen(string);
|
||||||
|
if (length > 0)
|
||||||
|
_DoAppend(string, length);
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1853,8 +1865,7 @@ BString::_DoAppend(const char* string, int32 length)
|
|||||||
{
|
{
|
||||||
int32 oldLength = Length();
|
int32 oldLength = Length();
|
||||||
if (_DetachWith(fPrivateData, oldLength + length) == B_OK) {
|
if (_DetachWith(fPrivateData, oldLength + length) == B_OK) {
|
||||||
if (string && length)
|
strncpy(fPrivateData + oldLength, string, length);
|
||||||
strncpy(fPrivateData + oldLength, string, length);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user