diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2023-05-05 01:25:43 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2023-05-05 01:26:06 +0200 |
commit | 7ce4b36d517ac5fade36240d293ff784ef6a9305 (patch) | |
tree | f0c246595251d27f62010aca770b25bb5f7ea336 /lib/fstree/src/mknode.c | |
parent | 7a39921d7fff089c87ac183d3c0d6e42e5cbaa04 (diff) |
Internalize fstree_mknode, consolidate fstree functionality
The fstree_mknode function is only used internally, remove the
declaration from the header and internalize it. The code using it is
consolidated into fstree.c.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/fstree/src/mknode.c')
-rw-r--r-- | lib/fstree/src/mknode.c | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/lib/fstree/src/mknode.c b/lib/fstree/src/mknode.c deleted file mode 100644 index a48cf06..0000000 --- a/lib/fstree/src/mknode.c +++ /dev/null @@ -1,101 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * mknode.c - * - * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> - */ -#include "config.h" -#include "fstree.h" - -#include <string.h> -#include <stdlib.h> -#include <errno.h> - -static void insert_sorted(tree_node_t *root, tree_node_t *n) -{ - tree_node_t *it = root->data.children, *prev = NULL; - - while (it != NULL && strcmp(it->name, n->name) < 0) { - prev = it; - it = it->next; - } - - n->parent = root; - n->next = it; - - if (prev == NULL) { - root->data.children = n; - } else { - prev->next = n; - } -} - -tree_node_t *fstree_mknode(tree_node_t *parent, const char *name, - size_t name_len, const char *extra, - const struct stat *sb) -{ - tree_node_t *n; - size_t size; - char *ptr; - - if (S_ISLNK(sb->st_mode) && extra == NULL) { - errno = EINVAL; - return NULL; - } - - size = sizeof(tree_node_t) + name_len + 1; - if (extra != NULL) - size += strlen(extra) + 1; - - n = calloc(1, size); - if (n == NULL) - return NULL; - - n->xattr_idx = 0xFFFFFFFF; - n->uid = sb->st_uid; - n->gid = sb->st_gid; - n->mode = sb->st_mode; - n->mod_time = sb->st_mtime; - n->link_count = 1; - n->name = (char *)n->payload; - memcpy(n->name, name, name_len); - - if (extra != NULL) { - ptr = n->name + name_len + 1; - strcpy(ptr, extra); - } else { - ptr = NULL; - } - - switch (sb->st_mode & S_IFMT) { - case S_IFREG: - n->data.file.input_file = ptr; - break; - case S_IFLNK: - n->mode = S_IFLNK | 0777; - n->data.target = ptr; - break; - case S_IFBLK: - case S_IFCHR: - n->data.devno = sb->st_rdev; - break; - case S_IFDIR: - n->link_count = 2; - break; - default: - break; - } - - if (parent != NULL) { - if (parent->link_count == 0xFFFFFFFF) { - free(n); - errno = EMLINK; - return NULL; - } - - insert_sorted(parent, n); - parent->link_count++; - } - - return n; -} |