[augeas-devel] [PATCH 2/8] * src/augeas.c (tree_unlink): remove and free a subtree

David Lutterkort lutter at redhat.com
Wed Feb 25 21:58:32 UTC 2009


---
 src/augeas.c   |   27 ++++++++++++++-------------
 src/internal.h |    1 +
 2 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/src/augeas.c b/src/augeas.c
index 7262ac2..5d6a599 100644
--- a/src/augeas.c
+++ b/src/augeas.c
@@ -412,6 +412,17 @@ int free_tree(struct tree *tree) {
     return cnt;
 }
 
+int tree_unlink(struct tree *tree) {
+    int result = 0;
+
+    assert (tree->parent != NULL);
+    list_remove(tree, tree->parent->children);
+    tree->parent->dirty = 1;
+    result = free_tree(tree->children) + 1;
+    free_tree_node(tree);
+    return result;
+}
+
 int tree_rm(struct pathx *p) {
     struct tree *tree, **del;
     int cnt = 0, ndel = 0, i;
@@ -436,13 +447,8 @@ int tree_rm(struct pathx *p) {
         i += 1;
     }
 
-    for (i = 0; i < ndel; i++) {
-        assert (del[i]->parent != NULL);
-        list_remove(del[i], del[i]->parent->children);
-        del[i]->parent->dirty = 1;
-        cnt += free_tree(del[i]->children) + 1;
-        free_tree_node(del[i]);
-    }
+    for (i = 0; i < ndel; i++)
+        cnt += tree_unlink(del[i]);
     free(del);
 
     return cnt;
@@ -531,14 +537,9 @@ int aug_mv(struct augeas *aug, const char *src, const char *dst) {
     ts->value = NULL;
     ts->children = NULL;
 
-
-    list_remove(ts, ts->parent->children);
-
-    ts->parent->dirty = 1;
+    tree_unlink(ts);
     td->dirty = 1;
 
-    free_tree(ts);
-
     ret = 0;
  done:
     free_pathx(s);
diff --git a/src/internal.h b/src/internal.h
index 582cbd4..7c69211 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -313,6 +313,7 @@ struct tree  *make_tree_origin(struct tree *root);
 int tree_replace(struct tree *origin, const char *path, struct tree *sub);
 
 int tree_rm(struct pathx *p);
+int tree_unlink(struct tree *tree);
 struct tree *tree_set(struct pathx *p, const char *value);
 int tree_insert(struct pathx *p, const char *label, int before);
 int free_tree(struct tree *tree);
-- 
1.6.0.6




More information about the augeas-devel mailing list