aboutsummaryrefslogtreecommitdiff
path: root/c_implementation
diff options
context:
space:
mode:
Diffstat (limited to 'c_implementation')
-rw-r--r--c_implementation/include/libaksettings.h4
-rw-r--r--c_implementation/src/aksettings.c42
-rw-r--r--c_implementation/tests/test_aksettings.c58
-rw-r--r--c_implementation/tests/test_aksettings_read.c2
4 files changed, 100 insertions, 6 deletions
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 <libaklog.h>
#include <stdio.h>
-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 <libaklog.h>
#include <stdio.h>
-void test_ak_settings_from_file()
+static void test_ak_settings_from_file()
{
printf("Testing: %s\n", __func__);
if (!ak_settings_load_settings_binary()) {