mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 02:42:09 +02:00
Allow 0 length FFstrbuf
This commit is contained in:
+59
-60
@@ -117,69 +117,68 @@ static void defaultConfig(FFinstance* instance)
|
||||
|
||||
ffLoadLogo(instance);
|
||||
|
||||
//Since most of these properties are unlikely to be used at once, give them minimal heap space (the \0 character)
|
||||
ffStrbufInitA(&instance->config.osFormat, 1);
|
||||
ffStrbufInitA(&instance->config.osKey, 1);
|
||||
ffStrbufInitA(&instance->config.hostFormat, 1);
|
||||
ffStrbufInitA(&instance->config.hostKey, 1);
|
||||
ffStrbufInitA(&instance->config.kernelFormat, 1);
|
||||
ffStrbufInitA(&instance->config.kernelKey, 1);
|
||||
ffStrbufInitA(&instance->config.uptimeFormat, 1);
|
||||
ffStrbufInitA(&instance->config.uptimeKey, 1);
|
||||
ffStrbufInitA(&instance->config.processesFormat, 1);
|
||||
ffStrbufInitA(&instance->config.processesKey, 1);
|
||||
ffStrbufInitA(&instance->config.packagesFormat, 1);
|
||||
ffStrbufInitA(&instance->config.packagesKey, 1);
|
||||
ffStrbufInitA(&instance->config.shellFormat, 1);
|
||||
ffStrbufInitA(&instance->config.shellKey, 1);
|
||||
ffStrbufInitA(&instance->config.resolutionFormat, 1);
|
||||
ffStrbufInitA(&instance->config.resolutionKey, 1);
|
||||
ffStrbufInitA(&instance->config.deFormat, 1);
|
||||
ffStrbufInitA(&instance->config.deKey, 1);
|
||||
ffStrbufInitA(&instance->config.wmFormat, 1);
|
||||
ffStrbufInitA(&instance->config.wmKey, 1);
|
||||
ffStrbufInitA(&instance->config.wmThemeFormat, 1);
|
||||
ffStrbufInitA(&instance->config.wmThemeKey, 1);
|
||||
ffStrbufInitA(&instance->config.themeFormat, 1);
|
||||
ffStrbufInitA(&instance->config.themeKey, 1);
|
||||
ffStrbufInitA(&instance->config.iconsFormat, 1);
|
||||
ffStrbufInitA(&instance->config.iconsKey, 1);
|
||||
ffStrbufInitA(&instance->config.fontFormat, 1);
|
||||
ffStrbufInitA(&instance->config.fontKey, 1);
|
||||
ffStrbufInitA(&instance->config.cursorKey, 1);
|
||||
ffStrbufInitA(&instance->config.cursorFormat, 1);
|
||||
ffStrbufInitA(&instance->config.terminalFormat, 1);
|
||||
ffStrbufInitA(&instance->config.terminalKey, 1);
|
||||
ffStrbufInitA(&instance->config.termFontFormat, 1);
|
||||
ffStrbufInitA(&instance->config.termFontKey, 1);
|
||||
ffStrbufInitA(&instance->config.cpuFormat, 1);
|
||||
ffStrbufInitA(&instance->config.cpuKey, 1);
|
||||
ffStrbufInitA(&instance->config.gpuFormat, 1);
|
||||
ffStrbufInitA(&instance->config.gpuKey, 1);
|
||||
ffStrbufInitA(&instance->config.memoryFormat, 1);
|
||||
ffStrbufInitA(&instance->config.memoryKey, 1);
|
||||
ffStrbufInitA(&instance->config.diskFormat, 1);
|
||||
ffStrbufInitA(&instance->config.diskKey, 1);
|
||||
ffStrbufInitA(&instance->config.batteryFormat, 1);
|
||||
ffStrbufInitA(&instance->config.batteryKey, 1);
|
||||
ffStrbufInitA(&instance->config.localeFormat, 1);
|
||||
ffStrbufInitA(&instance->config.localeKey, 1);
|
||||
ffStrbufInitA(&instance->config.localIpKey, 1);
|
||||
ffStrbufInitA(&instance->config.localIpFormat, 1);
|
||||
ffStrbufInitA(&instance->config.osFormat, 0);
|
||||
ffStrbufInitA(&instance->config.osKey, 0);
|
||||
ffStrbufInitA(&instance->config.hostFormat, 0);
|
||||
ffStrbufInitA(&instance->config.hostKey, 0);
|
||||
ffStrbufInitA(&instance->config.kernelFormat, 0);
|
||||
ffStrbufInitA(&instance->config.kernelKey, 0);
|
||||
ffStrbufInitA(&instance->config.uptimeFormat, 0);
|
||||
ffStrbufInitA(&instance->config.uptimeKey, 0);
|
||||
ffStrbufInitA(&instance->config.processesFormat, 0);
|
||||
ffStrbufInitA(&instance->config.processesKey, 0);
|
||||
ffStrbufInitA(&instance->config.packagesFormat, 0);
|
||||
ffStrbufInitA(&instance->config.packagesKey, 0);
|
||||
ffStrbufInitA(&instance->config.shellFormat, 0);
|
||||
ffStrbufInitA(&instance->config.shellKey, 0);
|
||||
ffStrbufInitA(&instance->config.resolutionFormat, 0);
|
||||
ffStrbufInitA(&instance->config.resolutionKey, 0);
|
||||
ffStrbufInitA(&instance->config.deFormat, 0);
|
||||
ffStrbufInitA(&instance->config.deKey, 0);
|
||||
ffStrbufInitA(&instance->config.wmFormat, 0);
|
||||
ffStrbufInitA(&instance->config.wmKey, 0);
|
||||
ffStrbufInitA(&instance->config.wmThemeFormat, 0);
|
||||
ffStrbufInitA(&instance->config.wmThemeKey, 0);
|
||||
ffStrbufInitA(&instance->config.themeFormat, 0);
|
||||
ffStrbufInitA(&instance->config.themeKey, 0);
|
||||
ffStrbufInitA(&instance->config.iconsFormat, 0);
|
||||
ffStrbufInitA(&instance->config.iconsKey, 0);
|
||||
ffStrbufInitA(&instance->config.fontFormat, 0);
|
||||
ffStrbufInitA(&instance->config.fontKey, 0);
|
||||
ffStrbufInitA(&instance->config.cursorKey, 0);
|
||||
ffStrbufInitA(&instance->config.cursorFormat, 0);
|
||||
ffStrbufInitA(&instance->config.terminalFormat, 0);
|
||||
ffStrbufInitA(&instance->config.terminalKey, 0);
|
||||
ffStrbufInitA(&instance->config.termFontFormat, 0);
|
||||
ffStrbufInitA(&instance->config.termFontKey, 0);
|
||||
ffStrbufInitA(&instance->config.cpuFormat, 0);
|
||||
ffStrbufInitA(&instance->config.cpuKey, 0);
|
||||
ffStrbufInitA(&instance->config.gpuFormat, 0);
|
||||
ffStrbufInitA(&instance->config.gpuKey, 0);
|
||||
ffStrbufInitA(&instance->config.memoryFormat, 0);
|
||||
ffStrbufInitA(&instance->config.memoryKey, 0);
|
||||
ffStrbufInitA(&instance->config.diskFormat, 0);
|
||||
ffStrbufInitA(&instance->config.diskKey, 0);
|
||||
ffStrbufInitA(&instance->config.batteryFormat, 0);
|
||||
ffStrbufInitA(&instance->config.batteryKey, 0);
|
||||
ffStrbufInitA(&instance->config.localeFormat, 0);
|
||||
ffStrbufInitA(&instance->config.localeKey, 0);
|
||||
ffStrbufInitA(&instance->config.localIpKey, 0);
|
||||
ffStrbufInitA(&instance->config.localIpFormat, 0);
|
||||
|
||||
ffStrbufInitA(&instance->config.libPCI, 1);
|
||||
ffStrbufInitA(&instance->config.libVulkan, 1);
|
||||
ffStrbufInitA(&instance->config.libX11, 1);
|
||||
ffStrbufInitA(&instance->config.libXrandr, 1);
|
||||
ffStrbufInitA(&instance->config.libGIO, 1);
|
||||
ffStrbufInitA(&instance->config.libDConf, 1);
|
||||
ffStrbufInitA(&instance->config.libWayland, 1);
|
||||
ffStrbufInitA(&instance->config.libXFConf, 1);
|
||||
ffStrbufInitA(&instance->config.librpm, 1);
|
||||
ffStrbufInitA(&instance->config.libPCI, 0);
|
||||
ffStrbufInitA(&instance->config.libVulkan, 0);
|
||||
ffStrbufInitA(&instance->config.libX11, 0);
|
||||
ffStrbufInitA(&instance->config.libXrandr, 0);
|
||||
ffStrbufInitA(&instance->config.libGIO, 0);
|
||||
ffStrbufInitA(&instance->config.libDConf, 0);
|
||||
ffStrbufInitA(&instance->config.libWayland, 0);
|
||||
ffStrbufInitA(&instance->config.libXFConf, 0);
|
||||
ffStrbufInitA(&instance->config.librpm, 0);
|
||||
|
||||
ffStrbufInitA(&instance->config.diskFolders, 1);
|
||||
ffStrbufInitA(&instance->config.diskFolders, 0);
|
||||
|
||||
ffStrbufInitA(&instance->config.batteryDir, 1);
|
||||
ffStrbufInitA(&instance->config.batteryDir, 0);
|
||||
|
||||
instance->config.localIpShowIpV4 = true;
|
||||
instance->config.localIpShowIpV6 = false;
|
||||
|
||||
+22
-9
@@ -4,6 +4,8 @@
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
|
||||
static char* CHAR_NULL_PTR = "";
|
||||
|
||||
static bool strbufCharsLeft(uint32_t i, const void* strbuf)
|
||||
{
|
||||
return i < ((const FFstrbuf*) strbuf)->length;
|
||||
@@ -42,15 +44,12 @@ void ffStrbufInitC(FFstrbuf* strbuf, const char c)
|
||||
|
||||
void ffStrbufInitA(FFstrbuf* strbuf, uint32_t allocate)
|
||||
{
|
||||
if(allocate == 0)
|
||||
{
|
||||
fprintf(stderr, "ffStrbufInitA(): allocation size == 0, changing to 1");
|
||||
allocate = 1;
|
||||
}
|
||||
|
||||
strbuf->allocated = allocate;
|
||||
strbuf->chars = (char*) malloc(sizeof(char) * strbuf->allocated);
|
||||
|
||||
if(strbuf->allocated > 0)
|
||||
strbuf->chars = (char*) malloc(sizeof(char) * strbuf->allocated);
|
||||
|
||||
//This will set the length to zero and the null byte.
|
||||
ffStrbufClear(strbuf);
|
||||
}
|
||||
|
||||
@@ -91,23 +90,37 @@ void ffStrbufEnsureCapacity(FFstrbuf* strbuf, uint32_t allocate)
|
||||
{
|
||||
if(strbuf->allocated >= allocate)
|
||||
return;
|
||||
|
||||
if(strbuf->allocated == 0)
|
||||
strbuf->chars = malloc(sizeof(char) * allocate);
|
||||
else
|
||||
strbuf->chars = realloc(strbuf->chars, sizeof(char) * allocate);
|
||||
|
||||
strbuf->allocated = allocate;
|
||||
strbuf->chars = realloc(strbuf->chars, sizeof(char) * strbuf->allocated);
|
||||
}
|
||||
|
||||
void ffStrbufEnsureFree(FFstrbuf* strbuf, uint32_t free)
|
||||
{
|
||||
if(free == 0)
|
||||
return;
|
||||
|
||||
uint32_t allocate = strbuf->allocated;
|
||||
if(allocate < 2)
|
||||
allocate = 2;
|
||||
|
||||
while((strbuf->length + free) > allocate)
|
||||
allocate *= 2;
|
||||
|
||||
ffStrbufEnsureCapacity(strbuf, allocate);
|
||||
}
|
||||
|
||||
void ffStrbufClear(FFstrbuf* strbuf)
|
||||
{
|
||||
strbuf->chars[0] = '\0';
|
||||
if(strbuf->allocated == 0)
|
||||
strbuf->chars = CHAR_NULL_PTR;
|
||||
else
|
||||
strbuf->chars[0] = '\0';
|
||||
|
||||
strbuf->length = 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user