Skip to content

Commit 0b02543

Browse files
committed
JsonConfig: refactor JSON key handling to improve safety and consistency
Also make keys case-sensitive
1 parent 3cef51e commit 0b02543

79 files changed

Lines changed: 333 additions & 603 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/common/jsonconfig.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,37 @@
1212
#include <ctype.h>
1313
#include <inttypes.h>
1414

15-
bool ffJsonConfigParseModuleArgs(const char* key, yyjson_val* val, FFModuleArgs* moduleArgs)
15+
bool ffJsonConfigParseModuleArgs(yyjson_val* key, yyjson_val* val, FFModuleArgs* moduleArgs)
1616
{
17-
if(ffStrEqualsIgnCase(key, "key"))
17+
if (unsafe_yyjson_equals_str(key, "type") || unsafe_yyjson_equals_str(key, "condition"))
18+
return true;
19+
20+
if (unsafe_yyjson_equals_str(key, "key"))
1821
{
1922
ffStrbufSetJsonVal(&moduleArgs->key, val);
2023
return true;
2124
}
22-
else if(ffStrEqualsIgnCase(key, "format"))
25+
else if (unsafe_yyjson_equals_str(key, "format"))
2326
{
2427
ffStrbufSetJsonVal(&moduleArgs->outputFormat, val);
2528
return true;
2629
}
27-
else if(ffStrEqualsIgnCase(key, "outputColor"))
30+
else if (unsafe_yyjson_equals_str(key, "outputColor"))
2831
{
2932
ffOptionParseColor(yyjson_get_str(val), &moduleArgs->outputColor);
3033
return true;
3134
}
32-
else if(ffStrEqualsIgnCase(key, "keyColor"))
35+
else if (unsafe_yyjson_equals_str(key, "keyColor"))
3336
{
3437
ffOptionParseColor(yyjson_get_str(val), &moduleArgs->keyColor);
3538
return true;
3639
}
37-
else if(ffStrEqualsIgnCase(key, "keyWidth"))
40+
else if (unsafe_yyjson_equals_str(key, "keyWidth"))
3841
{
3942
moduleArgs->keyWidth = (uint32_t) yyjson_get_uint(val);
4043
return true;
4144
}
42-
else if(ffStrEqualsIgnCase(key, "keyIcon"))
45+
else if (unsafe_yyjson_equals_str(key, "keyIcon"))
4346
{
4447
ffStrbufSetJsonVal(&moduleArgs->keyIcon, val);
4548
return true;

src/common/jsonconfig.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
#include "fastfetch.h"
44

5-
bool ffJsonConfigParseModuleArgs(const char* key, yyjson_val* val, FFModuleArgs* moduleArgs);
5+
bool ffJsonConfigParseModuleArgs(yyjson_val* key, yyjson_val* val, FFModuleArgs* moduleArgs);
66
const char* ffJsonConfigParseEnum(yyjson_val* val, int* result, FFKeyValuePair pairs[]);
77
void ffPrintJsonConfig(bool prepare, yyjson_mut_doc* jsonDoc);
88
void ffJsonConfigGenerateModuleArgsConfig(yyjson_mut_doc* doc, yyjson_mut_val* module, FFModuleArgs* defaultModuleArgs, FFModuleArgs* moduleArgs);

src/common/percent.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,14 +261,14 @@ bool ffPercentParseCommandOptions(const char* key, const char* subkey, const cha
261261
return false;
262262
}
263263

264-
bool ffPercentParseJsonObject(const char* key, yyjson_val* value, FFPercentageModuleConfig* config)
264+
bool ffPercentParseJsonObject(yyjson_val* key, yyjson_val* value, FFPercentageModuleConfig* config)
265265
{
266-
if (!ffStrEqualsIgnCase(key, "percent"))
266+
if (!unsafe_yyjson_equals_str(key, "percent"))
267267
return false;
268268

269269
if (!yyjson_is_obj(value))
270270
{
271-
fprintf(stderr, "Error: usage: %s must be an object\n", key);
271+
fprintf(stderr, "Error: usage: %s must be an object\n", unsafe_yyjson_get_str(key));
272272
exit(480);
273273
}
274274

src/common/percent.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,6 @@ typedef struct yyjson_val yyjson_val;
4040
typedef struct yyjson_mut_doc yyjson_mut_doc;
4141
typedef struct yyjson_mut_val yyjson_mut_val;
4242
bool ffPercentParseCommandOptions(const char* key, const char* subkey, const char* value, FFPercentageModuleConfig* config);
43-
bool ffPercentParseJsonObject(const char* key, yyjson_val* value, FFPercentageModuleConfig* config);
43+
bool ffPercentParseJsonObject(yyjson_val* key, yyjson_val* value, FFPercentageModuleConfig* config);
4444
void ffPercentGenerateJsonConfig(yyjson_mut_doc* doc, yyjson_mut_val* module, FFPercentageModuleConfig defaultConfig, FFPercentageModuleConfig config);
4545
const char* ffPercentParseTypeJsonConfig(yyjson_val* value, FFPercentageTypeFlags* result);

src/common/temps.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,9 @@ bool ffTempsParseCommandOptions(const char* key, const char* subkey, const char*
107107
return false;
108108
}
109109

110-
bool ffTempsParseJsonObject(const char* key, yyjson_val* value, bool* useTemp, FFColorRangeConfig* config)
110+
bool ffTempsParseJsonObject(yyjson_val* key, yyjson_val* value, bool* useTemp, FFColorRangeConfig* config)
111111
{
112-
if (!ffStrEqualsIgnCase(key, "temp"))
112+
if (!unsafe_yyjson_equals_str(key, "temp"))
113113
return false;
114114

115115
if (yyjson_is_bool(value))
@@ -126,7 +126,7 @@ bool ffTempsParseJsonObject(const char* key, yyjson_val* value, bool* useTemp, F
126126

127127
if (!yyjson_is_obj(value))
128128
{
129-
fprintf(stderr, "Error: usage: %s must be an object or a boolean\n", key);
129+
fprintf(stderr, "Error: usage: %s must be an object or a boolean\n", unsafe_yyjson_get_str(key));
130130
exit(480);
131131
}
132132

src/common/temps.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55

66
void ffTempsAppendNum(double celsius, FFstrbuf* buffer, FFColorRangeConfig config, const FFModuleArgs* module);
77
bool ffTempsParseCommandOptions(const char* key, const char* subkey, const char* value, bool* useTemp, FFColorRangeConfig* config);
8-
bool ffTempsParseJsonObject(const char* key, yyjson_val* value, bool* useTemp, FFColorRangeConfig* config);
8+
bool ffTempsParseJsonObject(yyjson_val* key, yyjson_val* value, bool* useTemp, FFColorRangeConfig* config);
99
void ffTempsGenerateJsonConfig(yyjson_mut_doc* doc, yyjson_mut_val* module, FF_MAYBE_UNUSED bool defaultTemp, FFColorRangeConfig defaultConfig, bool temp, FFColorRangeConfig config);

src/modules/battery/battery.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -185,19 +185,15 @@ bool ffParseBatteryCommandOptions(FFBatteryOptions* options, const char* key, co
185185

186186
void ffParseBatteryJsonObject(FFBatteryOptions* options, yyjson_val* module)
187187
{
188-
yyjson_val *key_, *val;
188+
yyjson_val *key, *val;
189189
size_t idx, max;
190-
yyjson_obj_foreach(module, idx, max, key_, val)
190+
yyjson_obj_foreach(module, idx, max, key, val)
191191
{
192-
const char* key = yyjson_get_str(key_);
193-
if(ffStrEqualsIgnCase(key, "type") || ffStrEqualsIgnCase(key, "condition"))
194-
continue;
195-
196192
if (ffJsonConfigParseModuleArgs(key, val, &options->moduleArgs))
197193
continue;
198194

199195
#ifdef _WIN32
200-
if (ffStrEqualsIgnCase(key, "useSetupApi"))
196+
if (unsafe_yyjson_equals_str(key, "useSetupApi"))
201197
{
202198
options->useSetupApi = yyjson_get_bool(val);
203199
continue;
@@ -210,7 +206,7 @@ void ffParseBatteryJsonObject(FFBatteryOptions* options, yyjson_val* module)
210206
if (ffPercentParseJsonObject(key, val, &options->percent))
211207
continue;
212208

213-
ffPrintError(FF_BATTERY_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Unknown JSON key %s", key);
209+
ffPrintError(FF_BATTERY_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Unknown JSON key %s", unsafe_yyjson_get_str(key));
214210
}
215211
}
216212

src/modules/bios/bios.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,18 +87,14 @@ bool ffParseBiosCommandOptions(FFBiosOptions* options, const char* key, const ch
8787

8888
void ffParseBiosJsonObject(FFBiosOptions* options, yyjson_val* module)
8989
{
90-
yyjson_val *key_, *val;
90+
yyjson_val *key, *val;
9191
size_t idx, max;
92-
yyjson_obj_foreach(module, idx, max, key_, val)
92+
yyjson_obj_foreach(module, idx, max, key, val)
9393
{
94-
const char* key = yyjson_get_str(key_);
95-
if(ffStrEqualsIgnCase(key, "type") || ffStrEqualsIgnCase(key, "condition"))
96-
continue;
97-
9894
if (ffJsonConfigParseModuleArgs(key, val, &options->moduleArgs))
9995
continue;
10096

101-
ffPrintError(FF_BIOS_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Unknown JSON key %s", key);
97+
ffPrintError(FF_BIOS_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Unknown JSON key %s", unsafe_yyjson_get_str(key));
10298
}
10399
}
104100

src/modules/bluetooth/bluetooth.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,18 +118,14 @@ bool ffParseBluetoothCommandOptions(FFBluetoothOptions* options, const char* key
118118

119119
void ffParseBluetoothJsonObject(FFBluetoothOptions* options, yyjson_val* module)
120120
{
121-
yyjson_val *key_, *val;
121+
yyjson_val *key, *val;
122122
size_t idx, max;
123-
yyjson_obj_foreach(module, idx, max, key_, val)
123+
yyjson_obj_foreach(module, idx, max, key, val)
124124
{
125-
const char* key = yyjson_get_str(key_);
126-
if(ffStrEqualsIgnCase(key, "type") || ffStrEqualsIgnCase(key, "condition"))
127-
continue;
128-
129125
if (ffJsonConfigParseModuleArgs(key, val, &options->moduleArgs))
130126
continue;
131127

132-
if (ffStrEqualsIgnCase(key, "showDisconnected"))
128+
if (unsafe_yyjson_equals_str(key, "showDisconnected"))
133129
{
134130
options->showDisconnected = yyjson_get_bool(val);
135131
continue;
@@ -138,7 +134,7 @@ void ffParseBluetoothJsonObject(FFBluetoothOptions* options, yyjson_val* module)
138134
if (ffPercentParseJsonObject(key, val, &options->percent))
139135
continue;
140136

141-
ffPrintError(FF_BLUETOOTH_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Unknown JSON key %s", key);
137+
ffPrintError(FF_BLUETOOTH_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Unknown JSON key %s", unsafe_yyjson_get_str(key));
142138
}
143139
}
144140

src/modules/bluetoothradio/bluetoothradio.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -117,18 +117,14 @@ bool ffParseBluetoothRadioCommandOptions(FFBluetoothRadioOptions* options, const
117117

118118
void ffParseBluetoothRadioJsonObject(FFBluetoothRadioOptions* options, yyjson_val* module)
119119
{
120-
yyjson_val *key_, *val;
120+
yyjson_val *key, *val;
121121
size_t idx, max;
122-
yyjson_obj_foreach(module, idx, max, key_, val)
122+
yyjson_obj_foreach(module, idx, max, key, val)
123123
{
124-
const char* key = yyjson_get_str(key_);
125-
if(ffStrEqualsIgnCase(key, "type") || ffStrEqualsIgnCase(key, "condition"))
126-
continue;
127-
128124
if (ffJsonConfigParseModuleArgs(key, val, &options->moduleArgs))
129125
continue;
130126

131-
ffPrintError(FF_BLUETOOTHRADIO_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Unknown JSON key %s", key);
127+
ffPrintError(FF_BLUETOOTHRADIO_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Unknown JSON key %s", unsafe_yyjson_get_str(key));
132128
}
133129
}
134130

0 commit comments

Comments
 (0)