dav/main.c

changeset 371
604e7e335b3b
parent 364
3769ba002fd1
child 373
dcc03142eb5f
--- a/dav/main.c	Sun Feb 04 12:36:26 2018 +0100
+++ b/dav/main.c	Sun Feb 04 15:58:07 2018 +0100
@@ -1487,23 +1487,42 @@
     }
     
     char *namespace = cmd_getoption(a, "namespace");
+    char *xml = cmd_getoption(a, "xml");
+    
     char *property = a->argv[1];
     char *value = a->argc > 2 ? a->argv[2] : stdin2str();
     
-    if(namespace) {
-        dav_set_string_property_ns(res, namespace, property, value);
+    int ret = 0;
+    if(xml) {
+        DavXmlNode *xmlvalue = dav_parse_xml(sn, value, strlen(value));
+        if(xmlvalue) {
+            if(namespace) {
+                dav_set_property_ns(res, namespace, property, xmlvalue->children);
+            } else {
+                dav_set_property(res, property, xmlvalue->children);
+            }
+        } else {
+            fprintf(stderr, "Error: property content is not valid xml\n");
+            ret = 1;
+        }
     } else {
-        dav_set_string_property(res, property, value);
+        if(namespace) {
+            dav_set_string_property_ns(res, namespace, property, value);
+        } else {
+            dav_set_string_property(res, property, value);
+        }
     }
     
-    int ret = 0;
-    if(dav_store(res)) {
-        print_resource_error(sn, res->path);
-        fprintf(stderr, "Cannot set property.\n");
-        ret = -1;
-    }
+    if(ret == 0) {
+        if(dav_store(res)) {
+            print_resource_error(sn, res->path);
+            fprintf(stderr, "Cannot set property.\n");
+            ret = -1;
+        }
+    } else 
     
     free(path);
+    dav_session_destroy(sn);
     return ret;
 }
 

mercurial