[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 17/22] tools/utils: move setting free loop to xlu__cfg_set_free()
This better breaks layers apart. xlu_cfg_destroy() now only knows about the XLU_Config structure, while xlu__cfg_set_free() knows about XLU_ConfigSetting. Move declaration of xlu__cfg_set_free() to shared header to indicate it will bridge layers. Signed-off-by: Elliott Mitchell <ehem+xen@xxxxxxx> --- This is the end of the higher-value series. Moving the loop is appropriate whether or not libxlu_cfg.c is split. Moving the declaration and patches after this though are mostly valuable for splitting libxlu_cfg.c into reusable and non-reusable portions. --- tools/libs/util/libxlu_cfg.c | 20 ++++++++------------ tools/libs/util/libxlu_cfg_y.y | 1 - tools/libs/util/libxlu_internal.h | 5 +++++ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/tools/libs/util/libxlu_cfg.c b/tools/libs/util/libxlu_cfg.c index 69b95a4ed0..7fec7fe7be 100644 --- a/tools/libs/util/libxlu_cfg.c +++ b/tools/libs/util/libxlu_cfg.c @@ -178,22 +178,18 @@ void xlu__cfg_value_free(XLU_ConfigValue *value) } void xlu__cfg_set_free(XLU_ConfigSetting *set) { - if (!set) return; - free(set->name); - xlu__cfg_value_free(set->value); - free(set); + while(set) { + XLU_ConfigSetting *next = set->next; + free(set->name); + xlu__cfg_value_free(set->value); + free(set); + set = next; + } } void xlu_cfg_destroy(XLU_Config *cfg) { - XLU_ConfigSetting *set, *set_next; - if (!cfg) return; - for (set= cfg->settings; - set; - set= set_next) { - set_next= set->next; - xlu__cfg_set_free(set); - } + xlu__cfg_set_free(cfg->settings); free((void *)cfg->config_source); free(cfg); } diff --git a/tools/libs/util/libxlu_cfg_y.y b/tools/libs/util/libxlu_cfg_y.y index 5dfb06941a..5c7e31222d 100644 --- a/tools/libs/util/libxlu_cfg_y.y +++ b/tools/libs/util/libxlu_cfg_y.y @@ -32,7 +32,6 @@ enum XLU_Operation { XLU_OP_ADDITION, }; -void xlu__cfg_set_free(XLU_ConfigSetting *set); void xlu__cfg_set_store(CfgParseContext*, char *name, enum XLU_Operation op, XLU_ConfigValue *val, int lineno); diff --git a/tools/libs/util/libxlu_internal.h b/tools/libs/util/libxlu_internal.h index 93caf24a6e..cc98efba27 100644 --- a/tools/libs/util/libxlu_internal.h +++ b/tools/libs/util/libxlu_internal.h @@ -35,6 +35,11 @@ typedef struct XLU_ConfigSetting XLU_ConfigSetting; extern int xlu_cfg_printf(const XLU_Config *cfg, const char *format, ...) __attribute__((__format__(__printf__, 2, 3))); +/* + * Internals for file parser *only*, NOT to be used by other parsing/lexing + */ +extern void xlu__cfg_set_free(XLU_ConfigSetting *set); + #endif /*LIBXLU_INTERNAL_H*/ /* -- (\___(\___(\______ --=> 8-) EHM <=-- ______/)___/)___/) \BS ( | ehem+sigmsg@xxxxxxx PGP 87145445 | ) / \_CS\ | _____ -O #include <stddisclaimer.h> O- _____ | / _/ 8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |