Message ID | 20220804121946.19564-6-pvorel@suse.cz |
---|---|
State | Superseded |
Headers | show |
Series | [v3,01/10] tst_test.sh: Fix tst_mkfs() for tmpfs | expand |
Hi, Acked-by: Richard Palethorpe <rpalethorpe@suse.com> Petr Vorel <pvorel@suse.cz> writes: > as it will be needed for $ALL_FILESYSTEMS shell implementation in the > next commit. Pass tmpfs to LVM scripts (as it was required there), > but allow to use zram01.sh with tmpfs as it works with it. > > Signed-off-by: Petr Vorel <pvorel@suse.cz> > --- > New in v3 > > testcases/lib/tst_supported_fs.c | 56 +++++++++++++++++----- > testcases/misc/lvm/generate_lvm_runfile.sh | 2 +- > testcases/misc/lvm/prepare_lvm.sh | 2 +- > 3 files changed, 46 insertions(+), 14 deletions(-) > > diff --git a/testcases/lib/tst_supported_fs.c b/testcases/lib/tst_supported_fs.c > index 43eac194f..87be2b759 100644 > --- a/testcases/lib/tst_supported_fs.c > +++ b/testcases/lib/tst_supported_fs.c > @@ -5,42 +5,74 @@ > */ > > #include <stdio.h> > +#include <stdlib.h> > #include <string.h> > > +#define SKIP_DELIMITER ',' > + > #define TST_NO_DEFAULT_MAIN > #include "tst_test.h" > #include "tst_fs.h" > > static void usage(void) > { > - fprintf(stderr, "Usage: tst_supported_fs [fs_type]\n"); > + fprintf(stderr, "Usage: tst_supported_fs [-s skip_list] [fs_type]\n"); > fprintf(stderr, " If fs_type is supported, return 0\n"); > fprintf(stderr, " If fs_type isn't supported, return 1\n"); > fprintf(stderr, " If fs_type isn't specified, print the list of supported filesystems\n"); > fprintf(stderr, " fs_type - a specified filesystem type\n"); > + fprintf(stderr, " skip_list - filesystems to skip, delimiter: '%c'\n", > + SKIP_DELIMITER); > } > > int main(int argc, char *argv[]) > { > - const char *skiplist[] = {"tmpfs", NULL}; > const char *const *filesystems; > - int i; > + int i, ret, cnt = 1; > + char **skiplist = NULL; > + char *fs; > > - if (argc > 2) { > - fprintf(stderr, "Can't specify multiple fs_type\n"); > - usage(); > - return 2; > + while ((ret = getopt(argc, argv, "hs:"))) { > + if (ret < 0) > + break; > + > + switch (ret) { > + case '?': > + return 1; > + > + case 'h': > + usage(); > + return 0; > + > + case 's': > + fs = optarg; > + for (i = 0; fs[i]; i++) { > + if (optarg[i] == SKIP_DELIMITER) > + cnt++; > + } > + skiplist = malloc(++cnt * sizeof(char *)); > + if (!skiplist) { > + fprintf(stderr, "malloc() failed\n"); > + return 1; > + } > + > + fs = optarg; > + for (i = 0; i < cnt; i++) > + skiplist[i] = strtok_r(fs, TST_TO_STR(SKIP_DELIMITER), &fs); > + break; > + } > } > > - if (argv[1] && !strcmp(argv[1], "-h")) { > + if (argc - optind > 1) { > + fprintf(stderr, "Can't specify multiple fs_type\n"); > usage(); > - return 0; > + return 2; > } > > - if (argv[1]) > - return !tst_fs_is_supported(argv[1]); > + if (optind < argc) > + return !tst_fs_is_supported(argv[optind]); > > - filesystems = tst_get_supported_fs_types(skiplist); > + filesystems = tst_get_supported_fs_types((const char * const*)skiplist); > for (i = 0; filesystems[i]; i++) > printf("%s\n", filesystems[i]); > > diff --git a/testcases/misc/lvm/generate_lvm_runfile.sh b/testcases/misc/lvm/generate_lvm_runfile.sh > index 72b286a69..843dd6bb8 100755 > --- a/testcases/misc/lvm/generate_lvm_runfile.sh > +++ b/testcases/misc/lvm/generate_lvm_runfile.sh > @@ -16,7 +16,7 @@ generate_runfile() > trap 'tst_brk TBROK "Cannot create LVM runfile"' ERR > INFILE="$LTPROOT/testcases/data/lvm/runfile.tpl" > OUTFILE="$LTPROOT/runtest/lvm.local" > - FS_LIST=`tst_supported_fs` > + FS_LIST=$(tst_supported_fs -s tmpfs) > echo -n "" >"$OUTFILE" > > for fsname in $FS_LIST; do > diff --git a/testcases/misc/lvm/prepare_lvm.sh b/testcases/misc/lvm/prepare_lvm.sh > index d3ae4b23f..29f386df8 100755 > --- a/testcases/misc/lvm/prepare_lvm.sh > +++ b/testcases/misc/lvm/prepare_lvm.sh > @@ -70,7 +70,7 @@ prepare_mounts() > > prepare_lvm() > { > - FS_LIST=`tst_supported_fs | sort -u` > + FS_LIST=$(tst_supported_fs -s tmpfs | sort -u) > ROD mkdir -p "$LVM_TMPDIR" > ROD mkdir -p "$LVM_IMGDIR" > chmod 777 "$LVM_TMPDIR" > -- > 2.37.1
diff --git a/testcases/lib/tst_supported_fs.c b/testcases/lib/tst_supported_fs.c index 43eac194f..87be2b759 100644 --- a/testcases/lib/tst_supported_fs.c +++ b/testcases/lib/tst_supported_fs.c @@ -5,42 +5,74 @@ */ #include <stdio.h> +#include <stdlib.h> #include <string.h> +#define SKIP_DELIMITER ',' + #define TST_NO_DEFAULT_MAIN #include "tst_test.h" #include "tst_fs.h" static void usage(void) { - fprintf(stderr, "Usage: tst_supported_fs [fs_type]\n"); + fprintf(stderr, "Usage: tst_supported_fs [-s skip_list] [fs_type]\n"); fprintf(stderr, " If fs_type is supported, return 0\n"); fprintf(stderr, " If fs_type isn't supported, return 1\n"); fprintf(stderr, " If fs_type isn't specified, print the list of supported filesystems\n"); fprintf(stderr, " fs_type - a specified filesystem type\n"); + fprintf(stderr, " skip_list - filesystems to skip, delimiter: '%c'\n", + SKIP_DELIMITER); } int main(int argc, char *argv[]) { - const char *skiplist[] = {"tmpfs", NULL}; const char *const *filesystems; - int i; + int i, ret, cnt = 1; + char **skiplist = NULL; + char *fs; - if (argc > 2) { - fprintf(stderr, "Can't specify multiple fs_type\n"); - usage(); - return 2; + while ((ret = getopt(argc, argv, "hs:"))) { + if (ret < 0) + break; + + switch (ret) { + case '?': + return 1; + + case 'h': + usage(); + return 0; + + case 's': + fs = optarg; + for (i = 0; fs[i]; i++) { + if (optarg[i] == SKIP_DELIMITER) + cnt++; + } + skiplist = malloc(++cnt * sizeof(char *)); + if (!skiplist) { + fprintf(stderr, "malloc() failed\n"); + return 1; + } + + fs = optarg; + for (i = 0; i < cnt; i++) + skiplist[i] = strtok_r(fs, TST_TO_STR(SKIP_DELIMITER), &fs); + break; + } } - if (argv[1] && !strcmp(argv[1], "-h")) { + if (argc - optind > 1) { + fprintf(stderr, "Can't specify multiple fs_type\n"); usage(); - return 0; + return 2; } - if (argv[1]) - return !tst_fs_is_supported(argv[1]); + if (optind < argc) + return !tst_fs_is_supported(argv[optind]); - filesystems = tst_get_supported_fs_types(skiplist); + filesystems = tst_get_supported_fs_types((const char * const*)skiplist); for (i = 0; filesystems[i]; i++) printf("%s\n", filesystems[i]); diff --git a/testcases/misc/lvm/generate_lvm_runfile.sh b/testcases/misc/lvm/generate_lvm_runfile.sh index 72b286a69..843dd6bb8 100755 --- a/testcases/misc/lvm/generate_lvm_runfile.sh +++ b/testcases/misc/lvm/generate_lvm_runfile.sh @@ -16,7 +16,7 @@ generate_runfile() trap 'tst_brk TBROK "Cannot create LVM runfile"' ERR INFILE="$LTPROOT/testcases/data/lvm/runfile.tpl" OUTFILE="$LTPROOT/runtest/lvm.local" - FS_LIST=`tst_supported_fs` + FS_LIST=$(tst_supported_fs -s tmpfs) echo -n "" >"$OUTFILE" for fsname in $FS_LIST; do diff --git a/testcases/misc/lvm/prepare_lvm.sh b/testcases/misc/lvm/prepare_lvm.sh index d3ae4b23f..29f386df8 100755 --- a/testcases/misc/lvm/prepare_lvm.sh +++ b/testcases/misc/lvm/prepare_lvm.sh @@ -70,7 +70,7 @@ prepare_mounts() prepare_lvm() { - FS_LIST=`tst_supported_fs | sort -u` + FS_LIST=$(tst_supported_fs -s tmpfs | sort -u) ROD mkdir -p "$LVM_TMPDIR" ROD mkdir -p "$LVM_IMGDIR" chmod 777 "$LVM_TMPDIR"
as it will be needed for $ALL_FILESYSTEMS shell implementation in the next commit. Pass tmpfs to LVM scripts (as it was required there), but allow to use zram01.sh with tmpfs as it works with it. Signed-off-by: Petr Vorel <pvorel@suse.cz> --- New in v3 testcases/lib/tst_supported_fs.c | 56 +++++++++++++++++----- testcases/misc/lvm/generate_lvm_runfile.sh | 2 +- testcases/misc/lvm/prepare_lvm.sh | 2 +- 3 files changed, 46 insertions(+), 14 deletions(-)