aboutsummaryrefslogtreecommitdiff
path: root/lib/util/src/dir_tree_iterator.c
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2023-04-29 01:21:39 +0200
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2023-04-29 01:21:39 +0200
commit9d1d9ec6dfd525a392ac158609da6153f6525046 (patch)
tree031985a33cdfa19e92cdc491b6e1095f001e94ec /lib/util/src/dir_tree_iterator.c
parent2285036e10863aba48dc6eed3c1a791118d11956 (diff)
libutil: Add an option to the dir_tree_iterator_t to add a path prefix
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/util/src/dir_tree_iterator.c')
-rw-r--r--lib/util/src/dir_tree_iterator.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/util/src/dir_tree_iterator.c b/lib/util/src/dir_tree_iterator.c
index ccc63ac..37ddbea 100644
--- a/lib/util/src/dir_tree_iterator.c
+++ b/lib/util/src/dir_tree_iterator.c
@@ -165,6 +165,22 @@ retry:
}
}
+ if (it->cfg.prefix != NULL) {
+ size_t slen = strlen(ent->name), len = strlen(it->cfg.prefix);
+ void *new = realloc(ent, sizeof(*ent) + len + 1 + slen + 1);
+
+ if (new == NULL) {
+ ret = SQFS_ERROR_ALLOC;
+ goto fail;
+ }
+
+ ent = new;
+ memmove(ent->name + len + 1, ent->name, slen + 1);
+ memcpy(ent->name, it->cfg.prefix, len);
+ ent->name[len] = '/';
+ plen += len + 1;
+ }
+
if (!(it->cfg.flags & DIR_SCAN_KEEP_TIME))
ent->mtime = it->cfg.def_mtime;