summaryrefslogtreecommitdiff
path: root/src/config/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/config.c')
-rw-r--r--src/config/config.c54
1 files changed, 54 insertions, 0 deletions
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;
+}