diff -r 3578977d29a3 -r f48cea237ec3 src/server/config/mimeconf.c --- a/src/server/config/mimeconf.c Tue Jun 25 22:18:59 2013 +0200 +++ b/src/server/config/mimeconf.c Wed Jun 26 15:09:54 2013 +0200 @@ -32,6 +32,11 @@ #include "mimeconf.h" +typedef struct { + ucx_destructor destructor; + void *ptr; +} ucx_regdestr; + MimeConfig *load_mime_config(char *file) { FILE *in = fopen(file, "r"); if(in == NULL) { @@ -43,8 +48,8 @@ conf->file = file; conf->directives = NULL; conf->ntypes = 0; - int r = cfg_parse_basic_file((ConfigParser*)conf, in); + cfg_list_destr(conf->parser.mp, conf->directives); if(r != 0) { // TODO: free return NULL; @@ -56,12 +61,6 @@ } void free_mime_config(MimeConfig *conf) { - if(conf->directives != NULL) { - ucx_list_free(conf->directives); - } - if(conf->parser.lines != NULL) { - ucx_dlist_free(conf->parser.lines); - } ucx_mempool_free(conf->parser.mp); free(conf); } @@ -85,13 +84,15 @@ size_t nx = 0; sstr_t *exts = sstrsplit(param->value, sstrn(",", 1), &nx); for(int i=0;iexts = ucx_list_append(dir->exts, exts[i].ptr); + sstr_t extstr = sstrdup_mp(mp, exts[i]); + dir->exts = ucx_list_append(dir->exts, extstr.ptr); + free(exts[i].ptr); } - free(exts); } } + cfg_list_destr(mp, dir->exts); conf->directives = ucx_list_append(conf->directives, dir); conf->ntypes++;