Add a function to get the path of a node in the IsoImage.

release-1.5.4.branch
Vreixo Formoso 15 years ago
parent 2374976b6d
commit 7b0da1ecd6
  1. 4
      demo/find.c
  2. 10
      libisofs/libisofs.h
  3. 24
      libisofs/tree.c

@ -23,7 +23,9 @@ print_dir(IsoDir *dir)
cond = iso_new_find_conditions_and(c1, c2);
iso_dir_find_children(dir, cond, &iter);
while (iso_dir_iter_next(iter, &node) == 1) {
printf(" %s\n", iso_node_get_name(node));
char *path = iso_tree_get_node_path(node);
printf(" %s\n", path);
free(path);
}
iso_dir_iter_free(iter);
}

@ -2955,6 +2955,16 @@ int iso_tree_add_dir_rec(IsoImage *image, IsoDir *parent, const char *dir);
*/
int iso_tree_path_to_node(IsoImage *image, const char *path, IsoNode **node);
/**
* Get the path on image of the given node.
*
* @return
* The path on the image, that must be freed when no more needed. If the
* given node is not added to any image, this returns NULL.
* @since 0.6.4
*/
char *iso_tree_get_node_path(IsoNode *node);
/**
* Increments the reference counting of the given IsoDataSource.
*

@ -957,3 +957,27 @@ int iso_tree_path_to_node(IsoImage *image, const char *path, IsoNode **node)
}
return result;
}
char *iso_tree_get_node_path(IsoNode *node)
{
if (node == NULL || node->parent == NULL) {
return NULL;
}
if ((IsoNode*)node->parent == node) {
return strdup("/");
} else {
char path[PATH_MAX];
char *parent_path = iso_tree_get_node_path((IsoNode*)node->parent);
if (parent_path == NULL) {
return NULL;
}
if (strlen(parent_path) == 1) {
snprintf(path, PATH_MAX, "/%s", node->name);
} else {
snprintf(path, PATH_MAX, "%s/%s", parent_path, node->name);
}
free(parent_path);
return strdup(path);
}
}

Loading…
Cancel
Save