diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/fstree/Makemodule.am | 4 | ||||
-rw-r--r-- | lib/fstree/node_from_path.c | 46 | ||||
-rw-r--r-- | lib/fstree/node_stat.c | 49 | ||||
-rw-r--r-- | lib/sqfshelper/Makemodule.am | 1 | ||||
-rw-r--r-- | lib/sqfshelper/xattr_reader.c | 113 | ||||
-rw-r--r-- | lib/util/Makemodule.am | 2 | ||||
-rw-r--r-- | lib/util/read_data_at.c | 39 |
7 files changed, 3 insertions, 251 deletions
diff --git a/lib/fstree/Makemodule.am b/lib/fstree/Makemodule.am index d282de7..6d3498a 100644 --- a/lib/fstree/Makemodule.am +++ b/lib/fstree/Makemodule.am @@ -1,9 +1,9 @@ libfstree_a_SOURCES = lib/fstree/fstree.c lib/fstree/fstree_from_file.c libfstree_a_SOURCES += lib/fstree/fstree_sort.c lib/fstree/fstree_from_dir.c libfstree_a_SOURCES += lib/fstree/gen_inode_table.c lib/fstree/get_path.c -libfstree_a_SOURCES += lib/fstree/node_stat.c lib/fstree/mknode.c +libfstree_a_SOURCES += lib/fstree/mknode.c libfstree_a_SOURCES += lib/fstree/add_by_path.c lib/fstree/xattr.c -libfstree_a_SOURCES += lib/fstree/node_from_path.c include/fstree.h +libfstree_a_SOURCES += include/fstree.h libfstree_a_SOURCES += lib/fstree/gen_file_list.c libfstree_a_SOURCES += lib/fstree/source_date_epoch.c libfstree_a_CFLAGS = $(AM_CFLAGS) $(LIBSELINUX_CFLAGS) diff --git a/lib/fstree/node_from_path.c b/lib/fstree/node_from_path.c deleted file mode 100644 index 9140b2d..0000000 --- a/lib/fstree/node_from_path.c +++ /dev/null @@ -1,46 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * node_from_path.c - * - * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> - */ -#include "config.h" - -#include "fstree.h" - -#include <string.h> -#include <errno.h> - -tree_node_t *fstree_node_from_path(fstree_t *fs, const char *path) -{ - tree_node_t *n = fs->root; - const char *end; - size_t len; - - while (path != NULL && *path != '\0') { - if (!S_ISDIR(n->mode)) { - errno = ENOTDIR; - return NULL; - } - - end = strchrnul(path, '/'); - len = end - path; - - for (n = n->data.dir->children; n != NULL; n = n->next) { - if (strncmp(path, n->name, len) != 0) - continue; - if (n->name[len] != '\0') - continue; - break; - } - - if (n == NULL) { - errno = ENOENT; - return NULL; - } - - path = *end ? (end + 1) : end; - } - - return n; -} diff --git a/lib/fstree/node_stat.c b/lib/fstree/node_stat.c deleted file mode 100644 index d17d244..0000000 --- a/lib/fstree/node_stat.c +++ /dev/null @@ -1,49 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * node_stat.c - * - * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> - */ -#include "config.h" - -#include "fstree.h" - -#include <string.h> - -void fstree_node_stat(fstree_t *fs, tree_node_t *node, struct stat *sb) -{ - tree_node_t *n; - - *sb = fs->defaults; - sb->st_ino = node->inode_num; - sb->st_mode = node->mode; - sb->st_nlink = 1; - sb->st_uid = node->uid; - sb->st_gid = node->gid; - sb->st_mtime = node->mod_time; - sb->st_atime = node->mod_time; - sb->st_ctime = node->mod_time; - - switch (node->mode & S_IFMT) { - case S_IFDIR: - sb->st_nlink = 2; - - for (n = node->data.dir->children; n != NULL; n = n->next) - sb->st_nlink += 1; - - sb->st_size = node->data.dir->size; - break; - case S_IFREG: - sb->st_size = node->data.file->size; - break; - case S_IFLNK: - sb->st_size = strlen(node->data.slink_target); - break; - case S_IFBLK: - case S_IFCHR: - sb->st_rdev = node->data.devno; - break; - } - - sb->st_blocks = sb->st_size / fs->block_size; -} diff --git a/lib/sqfshelper/Makemodule.am b/lib/sqfshelper/Makemodule.am index 67f81a4..5078f69 100644 --- a/lib/sqfshelper/Makemodule.am +++ b/lib/sqfshelper/Makemodule.am @@ -6,7 +6,6 @@ libsqfshelper_a_SOURCES += lib/sqfshelper/sqfs_reader.c libsqfshelper_a_SOURCES += lib/sqfshelper/tree_node_to_inode.c libsqfshelper_a_SOURCES += lib/sqfshelper/write_export_table.c libsqfshelper_a_SOURCES += lib/sqfshelper/print_version.c -libsqfshelper_a_SOURCES += lib/sqfshelper/xattr_reader.c libsqfshelper_a_SOURCES += lib/sqfshelper/inode_stat.c libsqfshelper_a_SOURCES += lib/sqfshelper/compress.c lib/sqfshelper/comp_opt.c libsqfshelper_a_SOURCES += include/data_reader.h lib/sqfshelper/data_reader.c diff --git a/lib/sqfshelper/xattr_reader.c b/lib/sqfshelper/xattr_reader.c deleted file mode 100644 index 376fdb2..0000000 --- a/lib/sqfshelper/xattr_reader.c +++ /dev/null @@ -1,113 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * xattr_reader.c - * - * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> - */ -#include "config.h" - -#include "highlevel.h" -#include "util.h" - -#include <assert.h> -#include <stdlib.h> -#include <string.h> -#include <stdio.h> -#include <errno.h> - -static int restore_kv_pairs(sqfs_xattr_reader_t *xr, fstree_t *fs, - tree_node_t *node) -{ - size_t i, key_idx, val_idx; - sqfs_xattr_entry_t *key; - sqfs_xattr_value_t *val; - int ret; - - for (i = 0; i < node->xattr->num_attr; ++i) { - if (sqfs_xattr_reader_read_key(xr, &key)) - return -1; - - if (sqfs_xattr_reader_read_value(xr, key, &val)) - goto fail_key; - - ret = str_table_get_index(&fs->xattr_keys, - (const char *)key->key, &key_idx); - if (ret) - goto fail_kv; - - ret = str_table_get_index(&fs->xattr_values, - (const char *)val->value, &val_idx); - if (ret) - goto fail_kv; - - if (sizeof(size_t) > sizeof(uint32_t)) { - if (key_idx > 0xFFFFFFFFUL) { - fputs("too many unique xattr keys\n", stderr); - goto fail_kv; - } - - if (val_idx > 0xFFFFFFFFUL) { - fputs("too many unique xattr values\n", stderr); - goto fail_kv; - } - } - - node->xattr->attr[i].key_index = key_idx; - node->xattr->attr[i].value_index = val_idx; - - free(key); - free(val); - } - - return 0; -fail_kv: - free(val); -fail_key: - free(key); - return -1; -} - -int xattr_reader_restore_node(sqfs_xattr_reader_t *xr, fstree_t *fs, - tree_node_t *node, uint32_t xattr) -{ - sqfs_xattr_id_t desc; - tree_xattr_t *it; - - for (it = fs->xattr; it != NULL; it = it->next) { - if (it->index == xattr) { - node->xattr = it; - return 0; - } - } - - if (sqfs_xattr_reader_get_desc(xr, xattr, &desc)) - return -1; - - if (desc.count == 0 || desc.size == 0) - return 0; - - node->xattr = alloc_flex(sizeof(*node->xattr), - sizeof(node->xattr->attr[0]), desc.count); - if (node->xattr == NULL) { - perror("creating xattr structure"); - return -1; - } - - node->xattr->num_attr = desc.count; - node->xattr->max_attr = desc.count; - node->xattr->size = desc.size; - node->xattr->index = xattr; - node->xattr->owner = node; - - if (sqfs_xattr_reader_seek_kv(xr, &desc)) - return -1; - - if (restore_kv_pairs(xr, fs, node)) { - free(node->xattr); - return -1; - } - - node->xattr->next = fs->xattr; - fs->xattr = node->xattr; - return 0; -} diff --git a/lib/util/Makemodule.am b/lib/util/Makemodule.am index 2692c01..1d77fd5 100644 --- a/lib/util/Makemodule.am +++ b/lib/util/Makemodule.am @@ -3,7 +3,7 @@ libutil_la_SOURCES += lib/util/read_data.c include/util.h libutil_la_SOURCES += lib/util/mkdir_p.c libutil_la_SOURCES += lib/util/str_table.c include/str_table.h libutil_la_SOURCES += lib/util/dirstack.c lib/util/padd_file.c -libutil_la_SOURCES += lib/util/read_data_at.c lib/util/alloc.c +libutil_la_SOURCES += lib/util/alloc.c libutil_la_SOURCES += lib/util/canonicalize_name.c libutil_la_CFLAGS = $(AM_CFLAGS) libutil_la_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/lib/util/read_data_at.c b/lib/util/read_data_at.c deleted file mode 100644 index 058909a..0000000 --- a/lib/util/read_data_at.c +++ /dev/null @@ -1,39 +0,0 @@ -/* SPDX-License-Identifier: LGPL-3.0-or-later */ -/* - * read_data_at.c - * - * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> - */ -#include "config.h" - -#include <unistd.h> -#include <errno.h> -#include <stdio.h> - -#include "util.h" - -int read_data_at(const char *errstr, off_t location, int fd, - void *buffer, size_t size) -{ - ssize_t ret; - - while (size > 0) { - ret = pread(fd, buffer, size, location); - if (ret < 0) { - if (errno == EINTR) - continue; - perror(errstr); - return -1; - } - if (ret == 0) { - fprintf(stderr, "%s: short read\n", errstr); - return -1; - } - - size -= ret; - buffer = (char *)buffer + ret; - location += ret; - } - - return 0; -} |