From 422898bc6fb8c48812cb50389fa4f13ba9358881 Mon Sep 17 00:00:00 2001 From: Soikk Date: Fri, 6 Jun 2025 21:10:34 +0200 Subject: Added config --- src/config/config.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/config/config.h | 19 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 src/config/config.c create mode 100644 src/config/config.h (limited to 'src/config') diff --git a/src/config/config.c b/src/config/config.c new file mode 100644 index 0000000..5b4c6cc --- /dev/null +++ b/src/config/config.c @@ -0,0 +1,54 @@ +#include "config.h" + + +config read_config(str cfg){ + config conf = {0}; + int off = 0; + while(off < cfg.len){ + while(charisspace(cfg.ptr[off])) off++; + if(cfg.ptr[off] == '#'){ + while(!charislinebreak(cfg.ptr[off])) off++; + continue; + } + str key = sread_delim_f(cfg.ptr + off, charisspace, true); + off += key.len + 1; + while(charisspace(cfg.ptr[off])) off++; + + if(streq(key, sstr("port"))){ + str val = sread_delim_f(cfg.ptr + off, charisspace, true); + off += val.len; + conf.port = (int)strtou(val); + }else if(streq(key, sstr("ipv4"))){ + conf.ipv4 = 1; + }else if(streq(key, sstr("ipv6"))){ + conf.ipv6 = 1; + }else if(streq(key, sstr("root"))){ + str val = sread_delim_f(cfg.ptr + off, charisspace, true); + str trailslash = val.ptr[val.len-1] == '/' ? sstr("") : sstr("/"); + conf.root = dup_strs(val, trailslash); + off += conf.root.len; + }else{ + log_warn("Unexpected entry in configuration: '%.*s'", key.len, key.ptr); + } + while(!charislinebreak(cfg.ptr[off])) off++; + off++; + }; + + printf( + "CONFIGURATION:\n" + "\t- port: %d\n" + "\t- secure: %s\n" + "\t- ipv4: %s\n" + "\t- ipv6: %s\n" + "\t- workers: %d\n" + "\t- root: %s\n", + conf.port, + conf.secure ? "yes" : "no", + conf.ipv4 ? "yes" : "no", + conf.ipv6 ? "yes" : "no", + conf.workers, + conf.root.ptr + ); + + return conf; +} diff --git a/src/config/config.h b/src/config/config.h new file mode 100644 index 0000000..4f04459 --- /dev/null +++ b/src/config/config.h @@ -0,0 +1,19 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include "str/str.h" +#include "log/log.h" + +typedef struct config { + int port; + int secure : 1; + int ipv4 : 1; + int ipv6 : 1; + int workers; + str root; + +} config; + +config read_config(str cfg); + +#endif -- cgit v1.2.3