--- a/dav/scfg.c Fri Nov 18 15:27:45 2016 +0100 +++ b/dav/scfg.c Fri Nov 18 16:00:15 2016 +0100 @@ -59,6 +59,10 @@ static UcxMap *directories; +UcxMapIterator scfg_directory_iterator() { + return ucx_map_iterator(directories); +} + static int create_default_sync_config(char *file) { FILE *out = fopen(file, "w"); if(!out) { @@ -74,55 +78,6 @@ return 0; } -int load_sync_config() { - directories = ucx_map_new(8); - - char *file = util_concat_path(ENV_HOME, ".dav/sync.xml"); - - struct stat s; - if(stat(file, &s)) { - switch(errno) { - case ENOENT: { - if(create_default_sync_config(file)) { - return 1; - } - break; - } - default: { - perror("Cannot load sync.xml"); - } - } - free(file); - return 0; - } - - xmlDoc *doc = xmlReadFile(file, NULL, 0); - if(!doc) { - fprintf(stderr, "Cannot load sync.xml\n"); - free(file); - return -1; - } - - int ret = 0; - xmlNode *node = xmlDocGetRootElement(doc)->children; - while(node && !ret) { - if(node->type == XML_ELEMENT_NODE) { - if(xstreq(node->name, "directory")) { - ret = scfg_load_directory(node); - } else { - print_error(node->line, - "unknown config element: %s\n", node->name); - ret = 1; - } - } - node = node->next; - } - - xmlFreeDoc(doc); - free(file); - return ret; -} - static UcxList* add_regex_pattern(UcxList *list, char *value, unsigned short xmlline) { regex_t *regex = malloc(sizeof(regex_t)); @@ -168,7 +123,7 @@ return 0; } -int scfg_load_directory(xmlNode *node) { +static int scfg_load_directory(xmlNode *node) { char *name = NULL; char *path = NULL; char *trash = NULL; @@ -304,6 +259,55 @@ return 0; } +int load_sync_config() { + directories = ucx_map_new(8); + + char *file = util_concat_path(ENV_HOME, ".dav/sync.xml"); + + struct stat s; + if(stat(file, &s)) { + switch(errno) { + case ENOENT: { + if(create_default_sync_config(file)) { + return 1; + } + break; + } + default: { + perror("Cannot load sync.xml"); + } + } + free(file); + return 0; + } + + xmlDoc *doc = xmlReadFile(file, NULL, 0); + if(!doc) { + fprintf(stderr, "Cannot load sync.xml\n"); + free(file); + return -1; + } + + int ret = 0; + xmlNode *node = xmlDocGetRootElement(doc)->children; + while(node && !ret) { + if(node->type == XML_ELEMENT_NODE) { + if(xstreq(node->name, "directory")) { + ret = scfg_load_directory(node); + } else { + print_error(node->line, + "unknown config element: %s\n", node->name); + ret = 1; + } + } + node = node->next; + } + + xmlFreeDoc(doc); + free(file); + return ret; +} + SyncDirectory* scfg_get_dir(char *name) { return ucx_map_cstr_get(directories, name); } @@ -432,15 +436,6 @@ return ret; } -int list_syncdirs() { - UcxMapIterator i = ucx_map_iterator(directories); - SyncDirectory *dir; - UCX_MAP_FOREACH(key, dir, i) { - printf("%s\n", dir->name); - } - return 0; -} - char* generate_db_name(char *basename) { char *dbname = NULL; int count = -1;