From e5694858eac4c199022b822f41bc40d769f5aed9 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Mon, 17 Jun 2019 11:35:04 +0200 Subject: libfstree: add generic function to add node from struct stat Signed-off-by: David Oberhollenzer --- lib/fstree/fstree.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'lib') diff --git a/lib/fstree/fstree.c b/lib/fstree/fstree.c index 91c32f8..3f6387a 100644 --- a/lib/fstree/fstree.c +++ b/lib/fstree/fstree.c @@ -178,6 +178,34 @@ tree_node_t *fstree_add_file(fstree_t *fs, const char *path, uint16_t mode, return node; } +tree_node_t *fstree_add_generic(fstree_t *fs, const char *path, + const struct stat *sb, const char *extra) +{ + size_t payload = 0; + tree_node_t *node; + + if (S_ISREG(sb->st_mode)) { + return fstree_add_file(fs, path, sb->st_mode, sb->st_uid, + sb->st_gid, sb->st_size, extra); + } + + if (S_ISLNK(sb->st_mode)) + payload = strlen(extra) + 1; + + node = fstree_add(fs, path, sb->st_mode, sb->st_uid, + sb->st_gid, payload); + if (node == NULL) + return NULL; + + if (S_ISLNK(sb->st_mode)) { + strcpy(node->data.slink_target, extra); + } else if (S_ISBLK(sb->st_mode) || S_ISCHR(sb->st_mode)) { + node->data.devno = sb->st_rdev; + } + + return node; +} + int fstree_add_xattr(fstree_t *fs, tree_node_t *node, const char *key, const char *value) { -- cgit v1.2.3