diff options
Diffstat (limited to 'src/config/config.c')
| -rw-r--r-- | src/config/config.c | 54 |
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; +} |
