mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-12 10:22:12 +02:00
FFstrbuf: improve performance of InitF
This commit is contained in:
+17
-5
@@ -26,14 +26,23 @@ void ffStrbufInitF(FFstrbuf* strbuf, const char* format, ...)
|
||||
{
|
||||
assert(format != NULL);
|
||||
|
||||
ffStrbufInit(strbuf);
|
||||
|
||||
va_list arguments;
|
||||
va_start(arguments, format);
|
||||
ffStrbufAppendVF(strbuf, format, arguments);
|
||||
ffStrbufInitVF(strbuf, format, arguments);
|
||||
va_end(arguments);
|
||||
}
|
||||
|
||||
void ffStrbufInitVF(FFstrbuf* strbuf, const char* format, va_list arguments)
|
||||
{
|
||||
assert(format != NULL);
|
||||
|
||||
int len = vasprintf(&strbuf->chars, format, arguments);
|
||||
assert(len >= 0);
|
||||
|
||||
strbuf->allocated = (uint32_t)(len + 1);
|
||||
strbuf->length = (uint32_t)len;
|
||||
}
|
||||
|
||||
uint32_t ffStrbufGetFree(const FFstrbuf* strbuf)
|
||||
{
|
||||
assert(strbuf != NULL);
|
||||
@@ -168,10 +177,13 @@ void ffStrbufSetF(FFstrbuf* strbuf, const char* format, ...)
|
||||
{
|
||||
assert(format != NULL);
|
||||
|
||||
ffStrbufClear(strbuf);
|
||||
|
||||
va_list arguments;
|
||||
va_start(arguments, format);
|
||||
|
||||
if(strbuf->allocated == 0)
|
||||
return ffStrbufInitVF(strbuf, format, arguments);
|
||||
|
||||
ffStrbufClear(strbuf);
|
||||
ffStrbufAppendVF(strbuf, format, arguments);
|
||||
va_end(arguments);
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ typedef struct FFstrbuf
|
||||
void ffStrbufInitA(FFstrbuf* strbuf, uint32_t allocate);
|
||||
void ffStrbufInitCopy(FFstrbuf* strbuf, const FFstrbuf* src);
|
||||
void ffStrbufInitF(FFstrbuf* strbuf, const char* format, ...);
|
||||
void ffStrbufInitVF(FFstrbuf* strbuf, const char* format, va_list arguments);
|
||||
|
||||
void ffStrbufEnsureFree(FFstrbuf* strbuf, uint32_t free);
|
||||
|
||||
|
||||
@@ -199,6 +199,13 @@ int main(int argc, char** argv)
|
||||
|
||||
ffStrbufDestroy(&strbuf);
|
||||
|
||||
//initF
|
||||
ffStrbufInitF(&strbuf, "%s", "1234567890123456789012345678901");
|
||||
VERIFY(strbuf.allocated == 32);
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "1234567890123456789012345678901"));
|
||||
|
||||
ffStrbufDestroy(&strbuf);
|
||||
|
||||
//Success
|
||||
puts("\033[32mAll tests passed!"FASTFETCH_TEXT_MODIFIER_RESET);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user