Cleanup. Efficiency makerover.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40720 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -49,7 +49,7 @@ public:
|
|||||||
BString& SetToChars(const BString& string, int32 charCount);
|
BString& SetToChars(const BString& string, int32 charCount);
|
||||||
BString& AdoptChars(BString& from, int32 charCount);
|
BString& AdoptChars(BString& from, int32 charCount);
|
||||||
|
|
||||||
BString& SetToArguments(const char *format, ...);
|
BString& SetToArguments(const char* format, ...);
|
||||||
|
|
||||||
// Substring copying
|
// Substring copying
|
||||||
BString& CopyInto(BString& into, int32 fromOffset,
|
BString& CopyInto(BString& into, int32 fromOffset,
|
||||||
|
|||||||
@@ -425,20 +425,30 @@ BString::AdoptChars(BString& string, int32 charCount)
|
|||||||
|
|
||||||
|
|
||||||
BString&
|
BString&
|
||||||
BString::SetToArguments(const char *format, ...)
|
BString::SetToArguments(const char* format, ...)
|
||||||
{
|
{
|
||||||
|
int32 bufferSize = 128;
|
||||||
|
char buffer[bufferSize];
|
||||||
|
|
||||||
va_list arg;
|
va_list arg;
|
||||||
va_start(arg, format);
|
va_start(arg, format);
|
||||||
int32 bytes = vsnprintf(LockBuffer(0), 0, format, arg);
|
int32 bytes = vsnprintf(buffer, bufferSize, format, arg);
|
||||||
va_end(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;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user