[augeas-devel] [PATCH 03/11] * src/pathx.c (release_value): factor logic into separate function
David Lutterkort
lutter at redhat.com
Mon Mar 23 06:27:28 UTC 2009
---
src/pathx.c | 38 ++++++++++++++++++++++----------------
1 files changed, 22 insertions(+), 16 deletions(-)
diff --git a/src/pathx.c b/src/pathx.c
index d635f2d..ce08a7a 100644
--- a/src/pathx.c
+++ b/src/pathx.c
@@ -351,6 +351,26 @@ static void free_nodeset(struct nodeset *ns) {
}
}
+/* Free all objects used by VALUE, but not VALUE itself */
+static void release_value(struct value *v) {
+ if (v == NULL)
+ return;
+
+ switch (v->tag) {
+ case T_NODESET:
+ free_nodeset(v->nodeset);
+ break;
+ case T_STRING:
+ free(v->string);
+ break;
+ case T_BOOLEAN:
+ case T_NUMBER:
+ break;
+ default:
+ assert(0);
+ }
+}
+
static void free_state(struct state *state) {
if (state == NULL)
return;
@@ -359,22 +379,8 @@ static void free_state(struct state *state) {
free_expr(state->exprs[i]);
free(state->exprs);
- for(int i=0; i < state->value_pool_used; i++) {
- struct value *v = state->value_pool + i;
- switch (v->tag) {
- case T_NODESET:
- free_nodeset(v->nodeset);
- break;
- case T_STRING:
- free(v->string);
- break;
- case T_BOOLEAN:
- case T_NUMBER:
- break;
- default:
- assert(0);
- }
- }
+ for(int i=0; i < state->value_pool_used; i++)
+ release_value(state->value_pool + i);
free(state->value_pool);
free(state->values);
free(state);
--
1.6.0.6
More information about the augeas-devel
mailing list