Cleanup. Efficiency makerover.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40720 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jonas Sundström 2011-02-27 09:25:26 +00:00
parent 21c435ae36
commit c9e27adabf
2 changed files with 20 additions and 10 deletions

View File

@ -49,7 +49,7 @@ public:
BString& SetToChars(const BString& string, int32 charCount);
BString& AdoptChars(BString& from, int32 charCount);
BString& SetToArguments(const char *format, ...);
BString& SetToArguments(const char* format, ...);
// Substring copying
BString& CopyInto(BString& into, int32 fromOffset,

View File

@ -425,20 +425,30 @@ BString::AdoptChars(BString& string, int32 charCount)
BString&
BString::SetToArguments(const char *format, ...)
BString::SetToArguments(const char* format, ...)
{
int32 bufferSize = 128;
char buffer[bufferSize];
va_list arg;
va_start(arg, format);
int32 bytes = vsnprintf(LockBuffer(0), 0, format, arg);
int32 bytes = vsnprintf(buffer, bufferSize, format, arg);
va_end(arg);
UnlockBuffer(0);
va_list arg2;
va_start(arg2, format);
bytes = vsnprintf(LockBuffer(bytes), bytes + 1, format, arg2);
va_end(arg2);
UnlockBuffer(bytes);
if (bytes < 0) {
return *this;
}
if (bytes < bufferSize) {
SetTo(buffer);
} else {
va_list arg2;
va_start(arg2, format);
bytes = vsnprintf(LockBuffer(bytes), bytes + 1, format, arg2);
va_end(arg2);
UnlockBuffer(bytes);
}
return *this;
}