support/nfs/conffile.c | 84 +++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 43 deletions(-) diff --git a/support/nfs/conffile.c b/support/nfs/conffile.c index 3d13610e..aea35917 100644 --- a/support/nfs/conffile.c +++ b/support/nfs/conffile.c @@ -128,6 +128,39 @@ conf_hash(const char *s) return hash; } +/* + * free all the component parts of a conf_binding struct + */ +static void free_confbind(struct conf_binding *cb) +{ + if (!cb) + return; + if (cb->section) + free(cb->section); + if (cb->arg) + free(cb->arg); + if (cb->tag) + free(cb->tag); + if (cb->value) + free(cb->value); + free(cb); +} + +static void free_conftrans(struct conf_trans *ct) +{ + if (!ct) + return; + if (ct->section) + free(ct->section); + if (ct->arg) + free(ct->arg); + if (ct->tag) + free(ct->tag); + if (ct->value) + free(ct->value); + free(ct); +} + /* * Insert a tag-value combination from LINE (the equal sign is at POS) */ @@ -143,11 +176,7 @@ conf_remove_now(const char *section, const char *tag) && strcasecmp(cb->tag, tag) == 0) { LIST_REMOVE(cb, link); xlog(LOG_INFO,"[%s]:%s->%s removed", section, tag, cb->value); - free(cb->section); - free(cb->arg); - free(cb->tag); - free(cb->value); - free(cb); + free_confbind(cb); return 0; } } @@ -167,11 +196,7 @@ conf_remove_section_now(const char *section) unseen = 0; LIST_REMOVE(cb, link); xlog(LOG_INFO, "[%s]:%s->%s removed", section, cb->tag, cb->value); - free(cb->section); - free(cb->arg); - free(cb->tag); - free(cb->value); - free(cb); + free_confbind(cb); } } return unseen; @@ -567,11 +592,7 @@ static void conf_free_bindings(void) for (; cb; cb = next) { next = LIST_NEXT(cb, link); LIST_REMOVE(cb, link); - free(cb->section); - free(cb->arg); - free(cb->tag); - free(cb->value); - free(cb); + free_confbind(cb); } LIST_INIT(&conf_bindings[i]); } @@ -635,11 +656,7 @@ conf_cleanup(void) for (node = TAILQ_FIRST(&conf_trans_queue); node; node = next) { next = TAILQ_NEXT(node, link); TAILQ_REMOVE (&conf_trans_queue, node, link); - if (node->section) free(node->section); - if (node->arg) free(node->arg); - if (node->tag) free(node->tag); - if (node->value) free(node->value); - free (node); + free_conftrans(node); } TAILQ_INIT(&conf_trans_queue); } @@ -1005,14 +1022,7 @@ conf_set(int transaction, const char *section, const char *arg, return 0; fail: - if (node->tag) - free(node->tag); - if (node->arg) - free(node->arg); - if (node->section) - free(node->section); - if (node) - free(node); + free_conftrans(node); return 1; } @@ -1038,10 +1048,7 @@ conf_remove(int transaction, const char *section, const char *tag) return 0; fail: - if (node && node->section) - free (node->section); - if (node) - free (node); + free_conftrans(node); return 1; } @@ -1062,8 +1069,7 @@ conf_remove_section(int transaction, const char *section) return 0; fail: - if (node) - free(node); + free_conftrans(node); return 1; } @@ -1094,15 +1100,7 @@ conf_end(int transaction, int commit) } } TAILQ_REMOVE (&conf_trans_queue, node, link); - if (node->section) - free(node->section); - if (node->arg) - free(node->arg); - if (node->tag) - free(node->tag); - if (node->value) - free(node->value); - free (node); + free_conftrans(node); } } return 0; -- 2.18.1