diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2023-01-31 11:21:30 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2023-01-31 13:51:49 +0100 |
commit | cdccc69c62579b0c13b35fad0728079652b8f3c9 (patch) | |
tree | 9fa54c710f73c5e08a9c8466e7a712eb63ee07ac /bin/rdsquashfs/describe.c | |
parent | 2182129c8f359c4fa1390eaba7a65b595ccd4182 (diff) |
Move library source into src sub-directory
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'bin/rdsquashfs/describe.c')
-rw-r--r-- | bin/rdsquashfs/describe.c | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/bin/rdsquashfs/describe.c b/bin/rdsquashfs/describe.c deleted file mode 100644 index 540b126..0000000 --- a/bin/rdsquashfs/describe.c +++ /dev/null @@ -1,139 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * describe.c - * - * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> - */ -#include "rdsquashfs.h" - -static int print_name(const sqfs_tree_node_t *n, bool dont_escape) -{ - char *start, *ptr, *name; - int ret; - - ret = sqfs_tree_node_get_path(n, &name); - if (ret != 0) { - sqfs_perror(NULL, "Recovering file path of tree node", ret); - return -1; - } - - if (canonicalize_name(name) != 0) { - fprintf(stderr, "Error sanitizing file path '%s'\n", name); - sqfs_free(name); - return -1; - } - - if (dont_escape || (strchr(name, ' ') == NULL && - strchr(name, '"') == NULL)) { - fputs(name, stdout); - } else { - fputc('"', stdout); - - ptr = strchr(name, '"'); - - if (ptr != NULL) { - start = name; - - do { - fwrite(start, 1, ptr - start, stdout); - fputs("\\\"", stdout); - start = ptr + 1; - ptr = strchr(start, '"'); - } while (ptr != NULL); - - fputs(start, stdout); - } else { - fputs(name, stdout); - } - - fputc('"', stdout); - } - - sqfs_free(name); - return 0; -} - -static void print_perm(const sqfs_tree_node_t *n) -{ - printf(" 0%o %u %u", (unsigned int)n->inode->base.mode & (~S_IFMT), - n->uid, n->gid); -} - -static int print_simple(const char *type, const sqfs_tree_node_t *n, - const char *extra) -{ - printf("%s ", type); - if (print_name(n, false)) - return -1; - print_perm(n); - if (extra != NULL) - printf(" %s", extra); - fputc('\n', stdout); - return 0; -} - -int describe_tree(const sqfs_tree_node_t *root, const char *unpack_root) -{ - const sqfs_tree_node_t *n; - - if (!is_filename_sane((const char *)root->name, false)) { - fprintf(stderr, "Encountered illegal file name '%s'\n", - root->name); - return -1; - } - - switch (root->inode->base.mode & S_IFMT) { - case S_IFSOCK: - return print_simple("sock", root, NULL); - case S_IFLNK: - return print_simple("slink", root, - (const char *)root->inode->extra); - case S_IFIFO: - return print_simple("pipe", root, NULL); - case S_IFREG: - if (unpack_root == NULL) - return print_simple("file", root, NULL); - - fputs("file ", stdout); - if (print_name(root, false)) - return -1; - print_perm(root); - printf(" %s/", unpack_root); - if (print_name(root, true)) - return -1; - fputc('\n', stdout); - break; - case S_IFCHR: - case S_IFBLK: { - char buffer[32]; - sqfs_u32 devno; - - if (root->inode->base.type == SQFS_INODE_EXT_BDEV || - root->inode->base.type == SQFS_INODE_EXT_CDEV) { - devno = root->inode->data.dev_ext.devno; - } else { - devno = root->inode->data.dev.devno; - } - - sprintf(buffer, "%c %u %u", - S_ISCHR(root->inode->base.mode) ? 'c' : 'b', - major(devno), minor(devno)); - return print_simple("nod", root, buffer); - } - case S_IFDIR: - if (root->name[0] != '\0') { - if (print_simple("dir", root, NULL)) - return -1; - } - - for (n = root->children; n != NULL; n = n->next) { - if (describe_tree(n, unpack_root)) - return -1; - } - break; - default: - break; - } - - return 0; -} |