Allow 0 length FFstrbuf

This commit is contained in:
Linus Dierheimer
2021-11-16 12:54:49 +01:00
parent 18bfc6bd11
commit 40d535ffba
2 changed files with 81 additions and 69 deletions
+59 -60
View File
@@ -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
View File
@@ -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;
}