dav/config.c

changeset 142
0c0ccb7f71ba
parent 119
451607eeff05
child 147
458a8dc68048
--- a/dav/config.c	Fri Oct 02 14:42:47 2015 +0200
+++ b/dav/config.c	Fri Oct 02 15:13:30 2015 +0200
@@ -65,6 +65,14 @@
 
 static DavContext *context;
 
+void create_default_config(char *file) {
+    xmlDoc *doc = xmlNewDoc(BAD_CAST "1.0");
+    xmlNode *root = xmlNewNode(NULL, BAD_CAST "configuration");
+    xmlDocSetRootElement(doc, root);
+    xmlSaveFormatFileEnc(file, doc, "UTF-8", 1);
+    xmlFreeDoc(doc);
+}
+
 void load_config(DavContext *ctx) {
     context = ctx;
     // TODO: free the config somewhere
@@ -77,17 +85,27 @@
     }
     
     char *file = util_concat_path(ENV_HOME, ".dav/config.xml");
-    xmlDoc *doc = xmlReadFile(file, NULL, 0);
-    if(!doc) {
-        doc = xmlNewDoc(BAD_CAST "1.0");
-        xmlNode *root = xmlNewNode(NULL, BAD_CAST "configuration");
-        xmlDocSetRootElement(doc, root);
-        xmlSaveFormatFileEnc(file, doc, "UTF-8", 1);
-        xmlFreeDoc(doc);
-        free(file);
+    
+    struct stat s;
+    if(stat(file, &s)) {
+        switch(errno) {
+            case ENOENT: {
+                create_default_config(file);
+                break;
+            }
+            default: {
+                perror("Cannot load config.xml");
+            }
+        }
         return;
     }
+    
+    xmlDoc *doc = xmlReadFile(file, NULL, 0);
     free(file);
+    if(!doc) {
+        fprintf(stderr, "Cannot load config.xml\n");
+        return;
+    }
     
     xmlNode *xml_root = xmlDocGetRootElement(doc);
     xmlNode *node = xml_root->children;

mercurial