diff -r b0c44be83276 -r 0c0ccb7f71ba dav/config.c --- 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;