summaryrefslogtreecommitdiff
path: root/source3/lib/adt_tree.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2007-09-14 22:14:39 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:30:48 -0500
commitdb31df8186eafabd9a997a89e33779cf10ce5a9b (patch)
treeaca4c00670fdbde81e1d8422106eb7cbdf85f58d /source3/lib/adt_tree.c
parent3aaca8028e09db58381076f199a43680f81f04ac (diff)
downloadsamba-db31df8186eafabd9a997a89e33779cf10ce5a9b.tar.gz
samba-db31df8186eafabd9a997a89e33779cf10ce5a9b.tar.bz2
samba-db31df8186eafabd9a997a89e33779cf10ce5a9b.zip
r25171: More pstring removal.
Jeremy. (This used to be commit 4748d2639796e8caa67fae44d1cf660d49d82663)
Diffstat (limited to 'source3/lib/adt_tree.c')
-rw-r--r--source3/lib/adt_tree.c52
1 files changed, 32 insertions, 20 deletions
diff --git a/source3/lib/adt_tree.c b/source3/lib/adt_tree.c
index f26f924d61..cf305d7307 100644
--- a/source3/lib/adt_tree.c
+++ b/source3/lib/adt_tree.c
@@ -278,31 +278,41 @@ done:
Recursive routine to print out all children of a TREE_NODE
*************************************************************************/
-static void pathtree_print_children( TREE_NODE *node, int debug, const char *path )
+static void pathtree_print_children(TALLOC_CTX *ctx,
+ TREE_NODE *node,
+ int debug,
+ const char *path )
{
int i;
int num_children;
- pstring path2;
-
+ char *path2 = NULL;
+
if ( !node )
return;
-
-
+
if ( node->key )
DEBUG(debug,("%s: [%s] (%s)\n", path ? path : "NULL", node->key,
node->data_p ? "data" : "NULL" ));
- *path2 = '\0';
- if ( path )
- pstrcpy( path2, path );
- pstrcat( path2, node->key ? node->key : "NULL" );
- pstrcat( path2, "/" );
-
- num_children = node->num_children;
- for ( i=0; i<num_children; i++ )
- pathtree_print_children( node->children[i], debug, path2 );
-
+ if ( path ) {
+ path2 = talloc_strdup(ctx, path);
+ if (!path2) {
+ return;
+ }
+ }
+
+ path2 = talloc_asprintf(ctx,
+ "%s%s/",
+ path ? path : "",
+ node->key ? node->key : "NULL");
+ if (!path2) {
+ return;
+ }
+ num_children = node->num_children;
+ for ( i=0; i<num_children; i++ ) {
+ pathtree_print_children(ctx, node->children[i], debug, path2 );
+ }
}
/**************************************************************************
@@ -313,21 +323,23 @@ static void pathtree_print_children( TREE_NODE *node, int debug, const char *pat
{
int i;
int num_children = tree->root->num_children;
-
+
if ( tree->root->key )
DEBUG(debug,("ROOT/: [%s] (%s)\n", tree->root->key,
tree->root->data_p ? "data" : "NULL" ));
-
+
for ( i=0; i<num_children; i++ ) {
- pathtree_print_children( tree->root->children[i], debug,
+ TALLOC_CTX *ctx = talloc_stackframe();
+ pathtree_print_children(ctx, tree->root->children[i], debug,
tree->root->key ? tree->root->key : "ROOT/" );
+ TALLOC_FREE(ctx);
}
-
+
}
/**************************************************************************
return the data_p for for the node in tree matching the key string
- The key string is the full path. We must break it apart and walk
+ The key string is the full path. We must break it apart and walk
the tree
*************************************************************************/