From ac6fbacce69ad8d53099f1e6ab922c2e4bd6f9cc Mon Sep 17 00:00:00 2001 From: kaotisk Date: Sun, 27 Apr 2025 06:57:51 +0300 Subject: Updates.. better file names --- c_implementation/src/ak_settings.c | 153 +++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 c_implementation/src/ak_settings.c (limited to 'c_implementation/src/ak_settings.c') diff --git a/c_implementation/src/ak_settings.c b/c_implementation/src/ak_settings.c new file mode 100644 index 0000000..324eda2 --- /dev/null +++ b/c_implementation/src/ak_settings.c @@ -0,0 +1,153 @@ +#include +#include +#include +#include +#include + +#define MAX_SETTINGS 100 + +AKSetting settings[MAX_SETTINGS]; +int settings_count = 0; + +AKSetting* ak_settings_get_all(){ + return settings; +} + +void ak_settings_import_from_environment() +{ + ak_settings_set_setting("AK_BINDIR",getenv("AK_BINDIR")); + ak_settings_set_setting("AK_BLOCKDIR",getenv("AK_BLOCKDIR")); + ak_settings_set_setting("AK_CACHEDIR",getenv("AK_CACHEDIR")); + ak_settings_set_setting("AK_CHUNKSDIR",getenv("AK_CHUNKSDIR")); + ak_settings_set_setting("AK_CONFIGDIR",getenv("AK_CONFIGDIR")); + ak_settings_set_setting("AK_DATADIR",getenv("AK_DATADIR")); + ak_settings_set_setting("AK_GENESIS",getenv("AK_GENESIS")); + ak_settings_set_setting("AK_GENESISASC",getenv("AK_GENESISASC")); + ak_settings_set_setting("AK_GPGHOME",getenv("AK_GPGHOME")); + ak_settings_set_setting("AK_IPFS",getenv("AK_IPFS")); + ak_settings_set_setting("AK_LEAFSDIR",getenv("AK_LEAFSDIR")); + ak_settings_set_setting("AK_LIBDIR",getenv("AK_LIBDIR")); + ak_settings_set_setting("AK_MAPSDIR",getenv("AK_MAPSDIR")); + ak_settings_set_setting("AK_MINEDBLOCKSDIR",getenv("AK_MINEDBLOCKSDIR")); + ak_settings_set_setting("AK_MODULESDIR",getenv("AK_MODULESDIR")); + ak_settings_set_setting("AK_ROOT",getenv("AK_ROOT")); + ak_settings_set_setting("AK_SETTINGS",getenv("AK_SETTINGS")); + ak_settings_set_setting("AK_WORKDIR",getenv("AK_WORKDIR")); + ak_settings_set_setting("AK_ZBLOCKDIR",getenv("AK_ZBLOCKDIR")); + ak_settings_set_setting("AK_ZBLOCKSFILE",getenv("AK_ZBLOCKSFILE")); + ak_settings_set_setting("AK_ZCHAIN",getenv("AK_ZCHAIN")); + ak_settings_set_setting("AK_ZCHAINASC",getenv("AK_ZCHAINASC")); + ak_settings_set_setting("AK_ZGENESIS",getenv("AK_ZGENESIS")); + ak_settings_set_setting("AK_ZGENESISASC",getenv("AK_ZGENESISASC")); + ak_settings_set_setting("AK_ZLATEST",getenv("AK_ZLATEST")); + ak_settings_set_setting("AK_ZLATEST_HISTORY",getenv("AK_ZLATEST_HISTORY")); + ak_settings_set_setting("AK_ZLIST",getenv("AK_ZLIST")); + ak_settings_set_setting("AK_ZPAIRSFILE",getenv("AK_ZPAIRSFILE")); + ak_settings_set_setting("AK_ZPEERSDIR",getenv("AK_ZPEERSDIR")); + ak_settings_set_setting("AK_ZPEERSFILE",getenv("AK_ZPEERSFILE")); + ak_settings_set_setting("AK_ZZCHAIN",getenv("AK_ZZCHAIN")); + ak_settings_set_setting("AK_ARCHIVESDIR",getenv("AK_ARCHIVESDIR")); +} + +bool ak_settings_write_string(FILE *file, const char *str) { + size_t len = strlen(str) + 1; // Include null terminator + if (fwrite(&len, sizeof(size_t), 1, file) != 1) return false; + if (fwrite(str, sizeof(char), len, file) != len) return false; + return true; +} + +char *ak_settings_read_string(FILE *file) { + size_t len; + if (fread(&len, sizeof(size_t), 1, file) != 1) return NULL; + char *str = malloc(len); + if (!str) return NULL; + if (fread(str, sizeof(char), len, file) != len) { + free(str); + return NULL; + } + return str; +} + +void ak_settings_free_settings() { + for (int i = 0; i < settings_count; i++) { + free(settings[i].key); + free(settings[i].value); + } + settings_count = 0; +} + +static int ak_settings_find_setting(const char *key) { + for (int i = 0; i < settings_count; i++) { + if (strcmp(settings[i].key, key) == 0) { + return i; + } + } + return -1; +} + +bool ak_settings_load_settings_binary() { + FILE *file = fopen("settings.bin", "rb"); + if (!file) return false; + if (fread(&settings_count, sizeof(int), 1, file) != 1) { + fclose(file); + return false; + } + for (int i = 0; i < settings_count; i++) { + settings[i].key = ak_settings_read_string(file); + settings[i].value = ak_settings_read_string(file); + if (!settings[i].key || !settings[i].value) { + ak_settings_free_settings(); + fclose(file); + return false; + } + } + fclose(file); + return true; +} + +bool ak_settings_save_settings_binary() { + FILE *file = fopen("settings.bin", "wb"); + if (!file) return false; + if (fwrite(&settings_count, sizeof(int), 1, file) != 1) { + fclose(file); + return false; + } + for (int i = 0; i < settings_count; i++) { + if (!ak_settings_write_string(file, settings[i].key)) { + fclose(file); + return false; + } + if (!ak_settings_write_string(file, settings[i].value)) { + fclose(file); + return false; + } + } + fclose(file); + return true; +} + +bool ak_settings_set_setting(const char *key, const char *value) { + int index = ak_settings_find_setting(key); + if (index == -1) { + if (settings_count >= MAX_SETTINGS) return false; + settings[settings_count].key = strdup(key); + settings[settings_count].value = strdup(value); + if (!settings[settings_count].key || !settings[settings_count].value) { + free(settings[settings_count].key); + free(settings[settings_count].value); + return false; + } + settings_count++; + } else { + char *new_value = strdup(value); + if (!new_value) return false; + free(settings[index].value); + settings[index].value = new_value; + } + return true; +} + +char *ak_settings_get_setting(const char *key) { + int index = ak_settings_find_setting(key); + return (index == -1) ? NULL : settings[index].value; +} -- cgit v1.2.3