Skip to content

Commit c440fdf

Browse files
Uses instance->state.configDirs consistenlty (in particular thread save) troughout the project
1 parent af0c72a commit c440fdf

File tree

8 files changed

+48
-45
lines changed

8 files changed

+48
-45
lines changed

src/common/init.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ static void initConfigDirs(FFstate* state)
2020
FFstrbuf* buffer = (FFstrbuf*) ffListAdd(&state->configDirs);
2121
ffStrbufInitA(buffer, 64);
2222
ffStrbufAppendS(buffer, xdgConfigHome);
23-
ffStrbufTrimRight(buffer, '/');
23+
ffStrbufEnsureEndsWithC(buffer, '/');
2424
}
2525

2626
#define FF_ENSURE_ONLY_ONCE_IN_LIST(element) \
@@ -30,12 +30,13 @@ static void initConfigDirs(FFstate* state)
3030
FFstrbuf* userConfigHome = ffListAdd(&state->configDirs);
3131
ffStrbufInitA(userConfigHome, 64);
3232
ffStrbufAppendS(userConfigHome, state->passwd->pw_dir);
33-
ffStrbufAppendS(userConfigHome, "/.config");
33+
ffStrbufAppendS(userConfigHome, "/.config/");
3434
FF_ENSURE_ONLY_ONCE_IN_LIST(userConfigHome)
3535

3636
FFstrbuf* userHome = ffListAdd(&state->configDirs);
3737
ffStrbufInitA(userHome, 64);
3838
ffStrbufAppendS(userHome, state->passwd->pw_dir);
39+
ffStrbufEnsureEndsWithC(userHome, '/');
3940
FF_ENSURE_ONLY_ONCE_IN_LIST(userHome)
4041

4142
FFstrbuf xdgConfigDirs;
@@ -51,20 +52,20 @@ static void initConfigDirs(FFstate* state)
5152
FFstrbuf* buffer = (FFstrbuf*) ffListAdd(&state->configDirs);
5253
ffStrbufInitA(buffer, 64);
5354
ffStrbufAppendS(buffer, xdgConfigDirs.chars + startIndex);
54-
ffStrbufTrimRight(buffer, '/');
55+
ffStrbufEnsureEndsWithC(buffer, '/');
5556
FF_ENSURE_ONLY_ONCE_IN_LIST(buffer);
5657

5758
startIndex = colonIndex + 1;
5859
}
5960

6061
FFstrbuf* systemConfigHome = ffListAdd(&state->configDirs);
6162
ffStrbufInitA(systemConfigHome, 64);
62-
ffStrbufAppendS(systemConfigHome, FASTFETCH_TARGET_DIR_ROOT"/etc/xdg");
63+
ffStrbufAppendS(systemConfigHome, FASTFETCH_TARGET_DIR_ROOT"/etc/xdg/");
6364
FF_ENSURE_ONLY_ONCE_IN_LIST(systemConfigHome)
6465

6566
FFstrbuf* systemConfig = ffListAdd(&state->configDirs);
6667
ffStrbufInitA(systemConfig, 64);
67-
ffStrbufAppendS(systemConfig, FASTFETCH_TARGET_DIR_ROOT"/etc");
68+
ffStrbufAppendS(systemConfig, FASTFETCH_TARGET_DIR_ROOT"/etc/");
6869
FF_ENSURE_ONLY_ONCE_IN_LIST(systemConfig)
6970

7071
#undef FF_ENSURE_ONLY_ONCE_IN_LIST
@@ -81,8 +82,8 @@ static void initCacheDir(FFstate* state)
8182
ffStrbufAppendS(&state->cacheDir, state->passwd->pw_dir);
8283
ffStrbufAppendS(&state->cacheDir, "/.cache/");
8384
}
84-
else if(!ffStrbufEndsWithC(&state->cacheDir, '/'))
85-
ffStrbufAppendC(&state->cacheDir, '/');
85+
else
86+
ffStrbufEnsureEndsWithC(&state->cacheDir, '/');
8687

8788
mkdir(state->cacheDir.chars, S_IRWXU | S_IXGRP | S_IRGRP | S_IXOTH | S_IROTH); //I hope everybody has a cache folder, but who knows
8889

src/common/properties.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -176,21 +176,18 @@ bool ffParsePropFileConfigValues(const FFinstance* instance, const char* relativ
176176
{
177177
bool foundAFile = false;
178178

179+
FFstrbuf baseDir;
180+
ffStrbufInitA(&baseDir, 64);
181+
179182
for(uint32_t i = 0; i < instance->state.configDirs.length; i++)
180183
{
181-
FFstrbuf* baseDir = (FFstrbuf*) ffListGet(&instance->state.configDirs, i);
182-
uint32_t baseDirLength = baseDir->length;
183-
184-
if(*relativeFile != '/')
185-
ffStrbufAppendC(baseDir, '/');
186-
187-
ffStrbufAppendS(baseDir, relativeFile);
184+
//We need to copy the config dir each time, because it used by multiple threads, so we can't directly write to it.
185+
ffStrbufSet(&baseDir, (FFstrbuf*) ffListGet(&instance->state.configDirs, i));
186+
ffStrbufAppendS(&baseDir, relativeFile);
188187

189-
if(ffParsePropFileValues(baseDir->chars, numQueries, queries))
188+
if(ffParsePropFileValues(baseDir.chars, numQueries, queries))
190189
foundAFile = true;
191190

192-
ffStrbufSubstrBefore(baseDir, baseDirLength);
193-
194191
bool allSet = true;
195192
for(uint32_t k = 0; k < numQueries; k++)
196193
{
@@ -205,6 +202,8 @@ bool ffParsePropFileConfigValues(const FFinstance* instance, const char* relativ
205202
break;
206203
}
207204

205+
ffStrbufDestroy(&baseDir);
206+
208207
return foundAFile;
209208
}
210209

src/detection/gtk.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ static void detectGTKFromConfigDir(FFstrbuf* configDir, const char* version, FFG
103103
uint32_t configDirLength = configDir->length;
104104

105105
// <configdir>/gtk-<version>.0/settings.ini
106-
ffStrbufAppendS(configDir, "/gtk-");
106+
ffStrbufAppendS(configDir, "gtk-");
107107
ffStrbufAppendS(configDir, version);
108108
ffStrbufAppendS(configDir, ".0/settings.ini");
109109
detectGTKFromConfigFile(configDir->chars, result);
@@ -112,7 +112,7 @@ static void detectGTKFromConfigDir(FFstrbuf* configDir, const char* version, FFG
112112
return;
113113

114114
// <configdir>/gtk-<version>.0/gtkrc
115-
ffStrbufAppendS(configDir, "/gtk-");
115+
ffStrbufAppendS(configDir, "gtk-");
116116
ffStrbufAppendS(configDir, version);
117117
ffStrbufAppendS(configDir, ".0/gtkrc");
118118
detectGTKFromConfigFile(configDir->chars, result);
@@ -121,7 +121,7 @@ static void detectGTKFromConfigDir(FFstrbuf* configDir, const char* version, FFG
121121
return;
122122

123123
// <configdir>/gtkrc-<version>.0
124-
ffStrbufAppendS(configDir, "/gtkrc-");
124+
ffStrbufAppendS(configDir, "gtkrc-");
125125
ffStrbufAppendS(configDir, version);
126126
ffStrbufAppendS(configDir, ".0");
127127
detectGTKFromConfigFile(configDir->chars, result);
@@ -130,7 +130,7 @@ static void detectGTKFromConfigDir(FFstrbuf* configDir, const char* version, FFG
130130
return;
131131

132132
// <configdir>/.gtkrc-<version>.0
133-
ffStrbufAppendS(configDir, "/.gtkrc-");
133+
ffStrbufAppendS(configDir, ".gtkrc-");
134134
ffStrbufAppendS(configDir, version);
135135
ffStrbufAppendS(configDir, ".0");
136136
detectGTKFromConfigFile(configDir->chars, result);
@@ -140,22 +140,21 @@ static void detectGTKFromConfigDir(FFstrbuf* configDir, const char* version, FFG
140140
static void detectGTK(FFinstance* instance, const char* version, FFGTKResult* result)
141141
{
142142
//We need to do this because we use multiple threads on configDirs
143-
FFstrbuf baseDirCopy;
144-
ffStrbufInitA(&baseDirCopy, 64);
143+
FFstrbuf baseDir;
144+
ffStrbufInitA(&baseDir, 64);
145145

146146
for(uint32_t i = 0; i < instance->state.configDirs.length; i++)
147147
{
148-
FFstrbuf* baseDir = (FFstrbuf*) ffListGet(&instance->state.configDirs, i);
149-
ffStrbufSet(&baseDirCopy, baseDir);
150-
detectGTKFromConfigDir(&baseDirCopy, version, result);
148+
ffStrbufSet(&baseDir, (FFstrbuf*) ffListGet(&instance->state.configDirs, i));
149+
detectGTKFromConfigDir(&baseDir, version, result);
151150
if(allPropertiesSet(result))
152-
{
153-
ffStrbufDestroy(&baseDirCopy);
154-
return;
155-
}
151+
break;
156152
}
157153

158-
ffStrbufDestroy(&baseDirCopy);
154+
ffStrbufDestroy(&baseDir);
155+
156+
if(allPropertiesSet(result))
157+
return;
159158

160159
//Mate, Cinnamon and Gnome use dconf to save theme config
161160
//On other DEs, this will do nothing

src/detection/plasma.c

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ typedef enum PlasmaCategory
1212
PLASMA_CATEGORY_OTHER
1313
} PlasmaCategory;
1414

15-
static bool detectFromConfigFile(const FFstrbuf* filename, FFPlasmaResult* result)
15+
static bool detectFromConfigFile(const char* filename, FFPlasmaResult* result)
1616
{
17-
FILE* kdeglobals = fopen(filename->chars, "r");
17+
FILE* kdeglobals = fopen(filename, "r");
1818
if(kdeglobals == NULL)
1919
return false;
2020

@@ -96,17 +96,15 @@ const FFPlasmaResult* ffDetectPlasma(FFinstance* instance)
9696
bool foundAFile = false;
9797

9898
//We need to do this because we use multiple threads on configDirs
99-
FFstrbuf baseDirCopy;
100-
ffStrbufInitA(&baseDirCopy, 64);
99+
FFstrbuf baseDir;
100+
ffStrbufInitA(&baseDir, 64);
101101

102102
for(uint32_t i = 0; i < instance->state.configDirs.length; i++)
103103
{
104-
FFstrbuf* baseDir = (FFstrbuf*) ffListGet(&instance->state.configDirs, i);
104+
ffStrbufSet(&baseDir, ffListGet(&instance->state.configDirs, i));
105+
ffStrbufAppendS(&baseDir, "kdeglobals");
105106

106-
ffStrbufSet(&baseDirCopy, baseDir);
107-
ffStrbufAppendS(&baseDirCopy, "/kdeglobals");
108-
109-
if(detectFromConfigFile(&baseDirCopy, &result))
107+
if(detectFromConfigFile(baseDir.chars, &result))
110108
foundAFile = true;
111109

112110
if(
@@ -117,7 +115,7 @@ const FFPlasmaResult* ffDetectPlasma(FFinstance* instance)
117115
) break;
118116
}
119117

120-
ffStrbufDestroy(&baseDirCopy);
118+
ffStrbufDestroy(&baseDir);
121119

122120
if(!foundAFile)
123121
{

src/logo/image/image.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -535,8 +535,7 @@ bool ffLogoPrintImageIfExists(FFinstance* instance, FFLogoType type)
535535
return false;
536536
}
537537
ffStrbufRecalculateLength(&requestData.cacheDir);
538-
if(!ffStrbufEndsWithC(&requestData.cacheDir, '/'))
539-
ffStrbufAppendC(&requestData.cacheDir, '/');
538+
ffStrbufEnsureEndsWithC(&requestData.cacheDir, '/');
540539

541540
ffStrbufAppendF(&requestData.cacheDir, "%u", requestData.logoPixelWidth);
542541
ffStrbufAppendC(&requestData.cacheDir, '*');

src/modules/battery.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,7 @@ void ffPrintBattery(FFinstance* instance)
130130
if(instance->config.batteryDir.length > 0)
131131
{
132132
ffStrbufAppend(&baseDir, &instance->config.batteryDir);
133-
if(!ffStrbufEndsWithC(&baseDir, '/'))
134-
ffStrbufAppendC(&baseDir, '/');
133+
ffStrbufEndsWithC(&baseDir, '/');
135134
}
136135
else
137136
{

src/util/FFstrbuf.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,12 @@ bool ffStrbufRemoveIgnCaseEndS(FFstrbuf* strbuf, const char* end)
514514
return false;
515515
}
516516

517+
void ffStrbufEnsureEndsWithC(FFstrbuf* strbuf, char c)
518+
{
519+
if(!ffStrbufEndsWithC(strbuf, c))
520+
ffStrbufAppendC(strbuf, c);
521+
}
522+
517523
void ffStrbufWriteTo(const FFstrbuf* strbuf, FILE* file)
518524
{
519525
fwrite(strbuf->chars, sizeof(*strbuf->chars), strbuf->length, file);

src/util/FFstrbuf.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ uint32_t ffStrbufCountC(const FFstrbuf* strbuf, char c);
9090

9191
bool ffStrbufRemoveIgnCaseEndS(FFstrbuf* strbuf, const char* end);
9292

93+
void ffStrbufEnsureEndsWithC(FFstrbuf* strbuf, char c);
94+
9395
void ffStrbufWriteTo(const FFstrbuf* strbuf, FILE* file);
9496
void ffStrbufPutTo(const FFstrbuf* strbuf, FILE* file);
9597

0 commit comments

Comments
 (0)