From 79f022b3a5b1d3f7bfda3762ceacc88dd971fd39 Mon Sep 17 00:00:00 2001 From: kaotisk Date: Thu, 24 Apr 2025 02:01:54 +0300 Subject: [libaksettings] Updates --- c_implementation/include/libaksettings.h | 4 +- c_implementation/src/aksettings.c | 42 ++++++++++++++++++- c_implementation/tests/test_aksettings.c | 58 +++++++++++++++++++++++++-- c_implementation/tests/test_aksettings_read.c | 2 +- 4 files changed, 100 insertions(+), 6 deletions(-) (limited to 'c_implementation') diff --git a/c_implementation/include/libaksettings.h b/c_implementation/include/libaksettings.h index e95f37d..0f53218 100644 --- a/c_implementation/include/libaksettings.h +++ b/c_implementation/include/libaksettings.h @@ -13,13 +13,15 @@ void ak_settings_print_setting(AKSetting); int ak_settings_from_file(); int ak_setting_to_file(AKSetting); +AKSetting* ak_settings_get_all(); -const char *ak_settings_get_setting(const char *key); +char *ak_settings_get_setting(const char *key); bool ak_settings_set_setting(const char *key, const char *value); bool ak_settings_save_settings(); bool ak_settings_load_settings_binary(); int ak_settings_find_setting(const char *key); void ak_settings_free_settings(); bool ak_settings_save_settings_binary(); +void ak_settings_import_from_environment(); #endif // AK_SETTINGS_H diff --git a/c_implementation/src/aksettings.c b/c_implementation/src/aksettings.c index 470330f..af390cb 100644 --- a/c_implementation/src/aksettings.c +++ b/c_implementation/src/aksettings.c @@ -9,6 +9,46 @@ 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; @@ -107,7 +147,7 @@ bool ak_settings_set_setting(const char *key, const char *value) { return true; } -const char *ak_settings_get_setting(const char *key) { +char *ak_settings_get_setting(const char *key) { int index = ak_settings_find_setting(key); return (index == -1) ? NULL : settings[index].value; } diff --git a/c_implementation/tests/test_aksettings.c b/c_implementation/tests/test_aksettings.c index 3a74444..4e7a091 100644 --- a/c_implementation/tests/test_aksettings.c +++ b/c_implementation/tests/test_aksettings.c @@ -2,13 +2,32 @@ #include #include -int test_ak_settings_read_write_example() +static int test_ak_settings_read_example() { printf("Testing: %s\n", __func__); if (!ak_settings_load_settings_binary()) { ak_log_warning(__func__, "No existing settings or error loading.\n"); } + const char *bindir = ak_settings_get_setting("AK_BINDIR"); + if (bindir) + { + char *some_text; + asprintf(&some_text, "Current bin directory: %s\n", bindir); + ak_log_info(__func__, some_text); + } + ak_settings_free_settings(); + return 0; +} + +static int test_ak_settings_read_write_example() +{ + printf("Testing: %s\n", __func__); + if (!ak_settings_load_settings_binary()) + { + ak_log_warning(__func__, "No existing settings or error loading.\n"); + } + ak_settings_import_from_environment(); ak_settings_set_setting("username", "john_doe"); ak_settings_set_setting("theme", "dark"); ak_settings_set_setting("volume", "75"); @@ -26,11 +45,18 @@ int test_ak_settings_read_write_example() asprintf(&some_text, "Current theme: %s\n", theme); ak_log_info(__func__, some_text); } + const char *bindir = ak_settings_get_setting("AK_BINDIR"); + if (bindir) + { + char *some_text; + asprintf(&some_text, "Current bin directory: %s\n", bindir); + ak_log_info(__func__, some_text); + } ak_settings_free_settings(); return 0; } -int test_ak_settings() +static int test_ak_settings() { char *some_text; if ( test_ak_settings_read_write_example() == 0 ) @@ -47,7 +73,33 @@ int test_ak_settings() } } +static void test_import() +{ + ak_settings_import_from_environment(); +} + +static int test_read_and_dump() +{ + printf("Testing: %s\n", __func__); + if (!ak_settings_load_settings_binary()) + { + ak_log_warning(__func__, "No existing settings or error loading.\n"); + } + AKSetting* ak_settings; + ak_settings = ak_settings_get_all(); + for ( int i = 0; ak_settings[i].key != NULL; ++i ) + { + printf("%s=%s\n", ak_settings[i].key, ak_settings[i].value); + } + ak_settings_free_settings(); + return 0; +} + int main() { - return test_ak_settings(); + test_import(); + test_ak_settings(); + test_ak_settings_read_example(); + test_read_and_dump(); + return 0; } diff --git a/c_implementation/tests/test_aksettings_read.c b/c_implementation/tests/test_aksettings_read.c index ddef12f..e4a1061 100644 --- a/c_implementation/tests/test_aksettings_read.c +++ b/c_implementation/tests/test_aksettings_read.c @@ -2,7 +2,7 @@ #include #include -void test_ak_settings_from_file() +static void test_ak_settings_from_file() { printf("Testing: %s\n", __func__); if (!ak_settings_load_settings_binary()) { -- cgit v1.2.3