diff options
| author | Albert Cervin <albert@acervin.com> | 2023-05-18 23:51:51 +0200 |
|---|---|---|
| committer | Albert Cervin <albert@acervin.com> | 2023-05-24 22:18:12 +0200 |
| commit | 4f3b576db6b01c8c88076985478e2a7fa37be340 (patch) | |
| tree | 9723ed39a19872fd52f2867613e78e02de3cf79b /src/main/main.c | |
| parent | a4d17ddb8e7d23ccca13132f4d88cfc5f5730b76 (diff) | |
| download | dged-4f3b576db6b01c8c88076985478e2a7fa37be340.tar.gz dged-4f3b576db6b01c8c88076985478e2a7fa37be340.tar.xz dged-4f3b576db6b01c8c88076985478e2a7fa37be340.zip | |
TOML settings parsing
Currently a very simplistic parser that do not support all TOML
datatypes. Supported are:
- Tables
- Strings (incl multiline)
- Integers
- Inline Tables
- Booleans
- Comments
Diffstat (limited to 'src/main/main.c')
| -rw-r--r-- | src/main/main.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/main/main.c b/src/main/main.c index b14c6c0..b6ee3c0 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -6,6 +6,7 @@ #include <stdlib.h> #include <string.h> #include <time.h> +#include <unistd.h> #include "dged/allocator.h" #include "dged/binding.h" @@ -14,6 +15,7 @@ #include "dged/display.h" #include "dged/lang.h" #include "dged/minibuffer.h" +#include "dged/path.h" #include "dged/reactor.h" #include "dged/settings.h" @@ -163,6 +165,35 @@ int main(int argc, char *argv[]) { struct commands commands = command_registry_create(32); settings_init(64); + const char *config_path = getenv("XDG_CONFIG_HOME"); + if (config_path == NULL) { + config_path = "~/.config"; + } + char settings_file[1024]; + snprintf(settings_file, 1024, "%s/dged/dged.toml", config_path); + char *settings_file_abs = expanduser(settings_file); + char **errmsgs = NULL; + if (access(settings_file_abs, F_OK) == 0) { + int32_t ret = settings_from_file(settings_file_abs, &errmsgs); + if (ret > 0) { + fprintf(stderr, "Error reading settings from %s:\n", settings_file_abs); + for (uint32_t erri = 0; erri < ret; ++erri) { + fprintf(stderr, " - %s", errmsgs[erri]); + free(errmsgs[erri]); + } + free(errmsgs); + free(settings_file_abs); + return 3; + } else if (ret < 0) { + fprintf(stderr, "Error occured reading settings from %s:\n", + settings_file_abs); + free(settings_file_abs); + return 2; + } + } + + free(settings_file_abs); + languages_init(true); buffer_static_init(); |
