Browse Source

Add reference to item array parameter

Some config items may refer to other config items values for
transformations.
master
TheoryOfNekomata 1 year ago
parent
commit
bff1ce5f8a
4 changed files with 13 additions and 13 deletions
  1. +2
    -2
      source/ini-config.c
  2. +2
    -2
      source/ini-config.h
  3. +7
    -7
      source/types/int.c
  4. +2
    -2
      source/types/string.c

+ 2
- 2
source/ini-config.c View File

@@ -28,7 +28,7 @@ void INI_ConfigLoad(INI_ConfigItem item[], const char* config_path) {
if (!item[i].type.load) { if (!item[i].type.load) {
continue; continue;
} }
item[i].type.load(&item[i], config_path);
item[i].type.load(&item[i], config_path, item);
} }
} }


@@ -36,7 +36,7 @@ INI_ConfigSaveResult INI_ConfigSave(INI_ConfigItem item[], const char* config_pa
uint8_t i; uint8_t i;
int32_t problems = 0; int32_t problems = 0;
for (i = 0; item[i].type.size > 0; i += 1) { for (i = 0; item[i].type.size > 0; i += 1) {
int32_t result = item[i].type.save ? item[i].type.save(&item[i], config_path) : 0;
int32_t result = item[i].type.save ? item[i].type.save(&item[i], config_path, item) : 0;


if (result < 0) { if (result < 0) {
problems |= (1 << (int32_t) i); problems |= (1 << (int32_t) i);


+ 2
- 2
source/ini-config.h View File

@@ -29,7 +29,7 @@ struct INI_ConfigItem;
/** /**
* Function for loading a config item value from file to memory. * Function for loading a config item value from file to memory.
*/ */
typedef void INI_ConfigTypeLoad(struct INI_ConfigItem*, const char*);
typedef void INI_ConfigTypeLoad(struct INI_ConfigItem*, const char*, void*);


/** /**
* Result enum for saving config items. * Result enum for saving config items.
@@ -49,7 +49,7 @@ typedef enum {
/** /**
* Function for saving a config item value from memory to file. * Function for saving a config item value from memory to file.
*/ */
typedef INI_ConfigSaveItemResult INI_ConfigTypeSave(struct INI_ConfigItem*, const char*);
typedef INI_ConfigSaveItemResult INI_ConfigTypeSave(struct INI_ConfigItem*, const char*, void*);


/** /**
* Function for retrieving a config item value from the command-line to memory. * Function for retrieving a config item value from the command-line to memory.


+ 7
- 7
source/types/int.c View File

@@ -3,9 +3,9 @@
#define INI_CONFIG_IMPLEMENT_INT_TYPE(ID, T) \ #define INI_CONFIG_IMPLEMENT_INT_TYPE(ID, T) \
typedef bool INI_ConfigValidate##ID(T); \ typedef bool INI_ConfigValidate##ID(T); \
\ \
typedef T INI_ConfigDeserialize##ID(const char*); \
typedef T INI_ConfigDeserialize##ID(const char*, void*); \
\ \
typedef void INI_ConfigSerialize##ID(T, const char[128]); \
typedef void INI_ConfigSerialize##ID(T, const char[128], void*); \
\ \
void INI_ConfigEnsureValid##ID(INI_ConfigItem* item, T raw_value, T default_value) { \ void INI_ConfigEnsureValid##ID(INI_ConfigItem* item, T raw_value, T default_value) { \
T* dest = item->dest; \ T* dest = item->dest; \
@@ -21,7 +21,7 @@ void INI_ConfigEnsureValid##ID(INI_ConfigItem* item, T raw_value, T default_valu
*dest = raw_value; \ *dest = raw_value; \
} \ } \
\ \
void INI_ConfigLoad##ID(INI_ConfigItem* item, const char* config_path) { \
void INI_ConfigLoad##ID(INI_ConfigItem* item, const char* config_path, void* item_array) { \
static T raw_value; \ static T raw_value; \
static T default_value; \ static T default_value; \
default_value = *((T*) item->default_value); \ default_value = *((T*) item->default_value); \
@@ -30,18 +30,18 @@ void INI_ConfigLoad##ID(INI_ConfigItem* item, const char* config_path) { \
INI_ConfigSerialize##ID* serialize = item->transformer.serialize; \ INI_ConfigSerialize##ID* serialize = item->transformer.serialize; \
const char serialized_default_value[128]; \ const char serialized_default_value[128]; \
if (default_value) { \ if (default_value) { \
serialize(default_value, serialized_default_value); \
serialize(default_value, serialized_default_value, item_array); \
} \ } \
char buffer[128]; \ char buffer[128]; \
ini_gets(item->section, item->key, serialized_default_value, buffer, 128, config_path); \ ini_gets(item->section, item->key, serialized_default_value, buffer, 128, config_path); \
raw_value = deserialize(buffer); \
raw_value = deserialize(buffer, item_array); \
} else { \ } else { \
raw_value = ini_getl(item->section, item->key, default_value, config_path); \ raw_value = ini_getl(item->section, item->key, default_value, config_path); \
} \ } \
INI_ConfigEnsureValid##ID(item, raw_value, default_value); \ INI_ConfigEnsureValid##ID(item, raw_value, default_value); \
} \ } \
\ \
INI_ConfigSaveItemResult INI_ConfigSave##ID(INI_ConfigItem* item, const char* config_path) { \
INI_ConfigSaveItemResult INI_ConfigSave##ID(INI_ConfigItem* item, const char* config_path, void* item_array) { \
T dest = *((T*) item->dest); \ T dest = *((T*) item->dest); \
if (item->validator) { \ if (item->validator) { \
INI_ConfigValidate##ID* validate = item->validator; \ INI_ConfigValidate##ID* validate = item->validator; \
@@ -53,7 +53,7 @@ INI_ConfigSaveItemResult INI_ConfigSave##ID(INI_ConfigItem* item, const char* co
if (item->transformer.deserialize && item->transformer.serialize) { \ if (item->transformer.deserialize && item->transformer.serialize) { \
INI_ConfigSerialize##ID* serialize = item->transformer.serialize; \ INI_ConfigSerialize##ID* serialize = item->transformer.serialize; \
const char serialized_value[128]; \ const char serialized_value[128]; \
serialize(dest, serialized_value); \
serialize(dest, serialized_value, item_array); \
if (!ini_puts(item->section, item->key, serialized_value, config_path)) { \ if (!ini_puts(item->section, item->key, serialized_value, config_path)) { \
return -1; \ return -1; \
} \ } \


+ 2
- 2
source/types/string.c View File

@@ -15,13 +15,13 @@ void INI_ConfigEnsureValidString(INI_ConfigItem* item, const char* buffer) {
memcpy(item->dest, buffer, item->type.size); memcpy(item->dest, buffer, item->type.size);
} }


void INI_ConfigLoadString(INI_ConfigItem* item, const char* config_path) {
void INI_ConfigLoadString(INI_ConfigItem* item, const char* config_path, void* item_array) {
char buffer[item->type.size]; char buffer[item->type.size];
ini_gets(item->section, item->key, item->default_value, buffer, (int32_t) item->type.size, config_path); ini_gets(item->section, item->key, item->default_value, buffer, (int32_t) item->type.size, config_path);
INI_ConfigEnsureValidString(item, buffer); INI_ConfigEnsureValidString(item, buffer);
} }


INI_ConfigSaveItemResult INI_ConfigSaveString(INI_ConfigItem* item, const char* config_path) {
INI_ConfigSaveItemResult INI_ConfigSaveString(INI_ConfigItem* item, const char* config_path, void* item_array) {
const char* dest = (const char*) item->dest; const char* dest = (const char*) item->dest;
if (item->validator) { if (item->validator) {
INI_ConfigLoadParamsStringValidator* validator = item->validator; INI_ConfigLoadParamsStringValidator* validator = item->validator;


Loading…
Cancel
Save