static void cfg_free_opt_array(cfg_opt_t *opts) { int i; for (i = 0; opts[i].name; ++i) { free((void *)opts[i].name); if (opts[i].type == CFGT_FUNC || is_set(CFGF_LIST, opts[i].flags)) free(opts[i].def.parsed); else if (opts[i].type == CFGT_STR) free((void *)opts[i].def.string); else if (opts[i].type == CFGT_SEC) cfg_free_opt_array(opts[i].subopts); } free(opts); }
DLLIMPORT void cfg_free(cfg_t *cfg) { int i; if(cfg == 0) return; for(i = 0; cfg->opts[i].name; ++i) cfg_free_value(&cfg->opts[i]); cfg_free_opt_array(cfg->opts); free(cfg->name); free(cfg->title); free(cfg->filename); free(cfg); }