# HG changeset patch
# User Olaf Wintermann <olaf.wintermann@gmail.com>
# Date 1660064514 -7200
# Node ID 1592224f6059200c1eda74d35e5b833ce04048ad
# Parent  47bc686fafe40a3607a3e35eba9f667582036b22
add support for name/value config args

diff -r 47bc686fafe4 -r 1592224f6059 src/server/config/serverconfig.c
--- a/src/server/config/serverconfig.c	Sun Aug 07 13:46:43 2022 +0200
+++ b/src/server/config/serverconfig.c	Tue Aug 09 19:01:54 2022 +0200
@@ -156,6 +156,28 @@
 }
 */
 
+static void config_arg_set_value(UcxAllocator *a, ConfigArg *arg, CFGToken token) {
+    scstr_t nv = scstrchr(token.content, '=');
+    if(!nv.ptr) {
+        arg->value = sstrdup_a(a, token.content);
+    } else {
+        intptr_t eq = (intptr_t)(nv.ptr - token.content.ptr);
+        scstr_t name = token.content;
+        name.length = (size_t)eq;
+        
+        scstr_t value = nv;
+        value.ptr++;
+        value.length--;
+        if(value.length > 1 && value.ptr[0] == '"' && value.ptr[value.length-1] == '"') {
+            value.ptr++;
+            value.length -= 2; // remove quote
+        }
+        
+        arg->name = sstrdup_a(a, name);
+        arg->value = sstrdup_a(a, value);
+    }
+}
+
 ServerConfig* serverconfig_parse(scstr_t content) {
     UcxMempool *mp = ucx_mempool_new(512);
     if(!mp) return NULL;
@@ -259,8 +281,7 @@
                         obj = current;
                     } else {
                         ConfigArg *arg = ucx_mempool_calloc(mp, 1, sizeof(ConfigArg));
-                        // TODO: add support for key/value
-                        arg->value = sstrdup_a(a, token.content);
+                        config_arg_set_value(a, arg, token);
                         current->args = ucx_list_append_a(a, current->args, arg);
                     }
                 }
diff -r 47bc686fafe4 -r 1592224f6059 src/server/daemon/config.c
--- a/src/server/daemon/config.c	Sun Aug 07 13:46:43 2022 +0200
+++ b/src/server/daemon/config.c	Tue Aug 09 19:01:54 2022 +0200
@@ -681,6 +681,27 @@
     UcxAllocator a = util_pool_allocator(cfg->pool);
     int init_error;
     
+    // parse args
+    char *uri = NULL;
+    char *ppath = NULL;
+    char *name = NULL;
+    UCX_FOREACH(elm, obj->args) {
+        ConfigArg *arg = elm->data;
+        if(arg->name.ptr == NULL) {
+            // default: uri
+            uri = arg->value.ptr;
+        } else if(!sstrcasecmp(arg->name, SC("uri"))) {
+            uri = arg->value.ptr;
+        } else if(!sstrcasecmp(arg->name, SC("ppath"))) {
+            ppath = arg->value.ptr;
+        } else if(!sstrcasecmp(arg->name, SC("name"))) {
+            name = arg->value.ptr;
+        }
+    }
+    if(!uri && !ppath && !name) {
+        return 1;
+    }
+    
     // get a list of all DavBackends
     UCX_FOREACH(elm, obj->children) {
         ConfigNode *node = elm->data;