dav/db.c

changeset 248
99574ca1c253
parent 243
f5921d151c29
child 250
a2cb914f133f
equal deleted inserted replaced
247:3020d1b5e7bd 248:99574ca1c253
50 char *dav_dir = util_concat_path(ENV_HOME, ".dav"); 50 char *dav_dir = util_concat_path(ENV_HOME, ".dav");
51 char *db_file = util_concat_path(dav_dir, name); 51 char *db_file = util_concat_path(dav_dir, name);
52 free(dav_dir); 52 free(dav_dir);
53 53
54 SyncDatabase *db = malloc(sizeof(SyncDatabase)); 54 SyncDatabase *db = malloc(sizeof(SyncDatabase));
55 db->resources = ucx_map_new(2048);
56 db->conflict = ucx_map_new(16);
57
55 xmlTextReaderPtr reader = xmlReaderForFile(db_file, NULL, 0); 58 xmlTextReaderPtr reader = xmlReaderForFile(db_file, NULL, 0);
56 if(!reader) { 59 if(!reader) {
57 xmlDoc *doc = doc = xmlNewDoc(BAD_CAST "1.0"); 60 xmlDoc *doc = doc = xmlNewDoc(BAD_CAST "1.0");
58 xmlNode *root = xmlNewNode(NULL, BAD_CAST "directory"); 61 xmlNode *root = xmlNewNode(NULL, BAD_CAST "directory");
59 xmlDocSetRootElement(doc, root); 62 xmlDocSetRootElement(doc, root);
60 if(xmlSaveFormatFileEnc(db_file, doc, "UTF-8", 1) != -1) { 63 if(!xmlSaveFormatFileEnc(db_file, doc, "UTF-8", 1) != -1) {
61 db->resources = ucx_map_new(2048); 64 destroy_db(db);
62 db->conflict = ucx_map_new(16);
63 } else {
64 free(db);
65 db = NULL; 65 db = NULL;
66 } 66 }
67 xmlFreeDoc(doc); 67 xmlFreeDoc(doc);
68 free(db_file); 68 free(db_file);
69 return db; 69 return db;
70 } 70 }
71 free(db_file); 71 free(db_file);
72 72
73 db->resources = ucx_map_new(2048);
74 db->conflict = ucx_map_new(16);
75 int error = 0; 73 int error = 0;
76 while(xmlTextReaderRead(reader)) { 74 while(xmlTextReaderRead(reader)) {
77 int type = xmlTextReaderNodeType(reader); 75 int type = xmlTextReaderNodeType(reader);
78 const xmlChar *name = xmlTextReaderConstName(reader); 76 const xmlChar *name = xmlTextReaderConstName(reader);
79 77
98 } 96 }
99 } 97 }
100 98
101 xmlFreeTextReader(reader); 99 xmlFreeTextReader(reader);
102 if(error) { 100 if(error) {
103 // TODO: free resources and map 101 destroy_db(db);
104 return NULL; 102 return NULL;
105 } else { 103 } else {
106 return db; 104 return db;
107 } 105 }
108 } 106 }

mercurial