diff options
Diffstat (limited to 'unpack')
-rw-r--r-- | unpack/rdsquashfs.c | 9 | ||||
-rw-r--r-- | unpack/rdsquashfs.h | 1 | ||||
-rw-r--r-- | unpack/restore_fstree.c | 16 |
3 files changed, 24 insertions, 2 deletions
diff --git a/unpack/rdsquashfs.c b/unpack/rdsquashfs.c index c286a78..f09847d 100644 --- a/unpack/rdsquashfs.c +++ b/unpack/rdsquashfs.c @@ -20,11 +20,12 @@ static struct option long_opts[] = { { "no-empty-dir", no_argument, NULL, 'E' }, { "chmod", no_argument, NULL, 'C' }, { "chown", no_argument, NULL, 'O' }, + { "quiet", no_argument, NULL, 'q' }, { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, 'V' }, }; -static const char *short_opts = "l:c:u:p:DSFLCOEhV"; +static const char *short_opts = "l:c:u:p:DSFLCOEqhV"; static const char *help_string = "Usage: %s [OPTIONS] <squashfs-file>\n" @@ -48,7 +49,8 @@ static const char *help_string = " --chmod, -C Change permission flags of unpacked files to those\n" " store in the squashfs image.\n" " --chown, -O Change ownership of unpacked files to the UID/GID\n" -" set in the squashfs iamge.\n" +" set in the squashfs image.\n" +" --quiet, -q Do not print out progress while unpacking.\n" "\n" " --help, -h Print help text and exit.\n" " --version, -V Print version information and exit.\n" @@ -201,6 +203,9 @@ int main(int argc, char **argv) case 'p': cmdpath = get_path(cmdpath, optarg); break; + case 'q': + info.flags |= UNPACK_QUIET; + break; case 'h': printf(help_string, __progname); status = EXIT_SUCCESS; diff --git a/unpack/rdsquashfs.h b/unpack/rdsquashfs.h index c06afb2..a9d5bdf 100644 --- a/unpack/rdsquashfs.h +++ b/unpack/rdsquashfs.h @@ -27,6 +27,7 @@ enum UNPACK_FLAGS { UNPACK_NO_EMPTY = 0x10, UNPACK_CHMOD = 0x20, UNPACK_CHOWN = 0x40, + UNPACK_QUIET = 0x80, }; typedef struct { diff --git a/unpack/restore_fstree.c b/unpack/restore_fstree.c index c06cd2b..c1320ea 100644 --- a/unpack/restore_fstree.c +++ b/unpack/restore_fstree.c @@ -1,10 +1,26 @@ /* SPDX-License-Identifier: GPL-3.0-or-later */ #include "rdsquashfs.h" +static void print_name(tree_node_t *n) +{ + if (n->parent != NULL) { + print_name(n->parent); + fputc('/', stdout); + } + + fputs(n->name, stdout); +} + static int create_node(int dirfd, tree_node_t *n, unsqfs_info_t *info) { int fd; + if (!(info->flags & UNPACK_QUIET)) { + fputs("unpacking ", stdout); + print_name(n); + fputc('\n', stdout); + } + switch (n->mode & S_IFMT) { case S_IFDIR: if (mkdirat(dirfd, n->name, 0755) && errno != EEXIST) { |