Message ID | 20210812160140.990229-3-brauner@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Extend idmapped mount testsuite | expand |
> - while ((ret = getopt_long(argc, argv, "", longopts, &index)) != -1) { > + while ((ret = getopt_long_only(argc, argv, "d:f:m:sh", longopts, &index)) != -1) { Hmm. From the manpage: "(If the program accepts only long options, then optstring should be specified as an empty string (""), not NULL.)" So I think the empty opstring should remain. Also later in the man page: " getopt_long_only() is like getopt_long(), but '-' as well as "--" can indicate a long option." So maybe my advise to switch to getopt_long_only wasn't needed or is even not that helpful. Sorry, it's been a while since I wrote programs with non-trivial option parsing.
On Sat, Aug 14, 2021 at 10:42:34AM +0200, Christoph Hellwig wrote: > > - while ((ret = getopt_long(argc, argv, "", longopts, &index)) != -1) { > > + while ((ret = getopt_long_only(argc, argv, "d:f:m:sh", longopts, &index)) != -1) { > > Hmm. From the manpage: > > "(If the program accepts only long options, then optstring should be specified > as an empty string (""), not NULL.)" > > So I think the empty opstring should remain. > > Also later in the man page: > > " getopt_long_only() is like getopt_long(), but '-' as well as "--" can > indicate a long option." > > So maybe my advise to switch to getopt_long_only wasn't needed or is > even not that helpful. Sorry, it's been a while since I wrote programs > with non-trivial option parsing. Nah, that's perfectly fine. I think the getopt_long_only() switch was good. We don't anywhere use and shouldn't encourage using shortopts. It's much more descriptive to see $here/src/idmapped-mounts/idmapped-mounts \ --test-btrfs \ --device "$TEST_DEV" \ --mountpoint "$TEST_DIR" \ --scratch-device "$SCRATCH_DEV" \ --scratch-mountpoint "$SCRATCH_MNT" --fstype "$FSTYP" than it is to see e.g.: $here/src/idmapped-mounts/idmapped-mounts \ -b -d "$TEST_DEV" \ -m "$TEST_DIR" \ -s "$SCRATCH_DEV" \ -a "$SCRATCH_MNT" \ -f "$FSTYP" In the second case I have to go check the source code to make sure that this is the correct option. In the first case I can just read it in the test itself. So I think we'll keep it but I'll remove the option string like you pointed out. Christian
diff --git a/src/idmapped-mounts/idmapped-mounts.c b/src/idmapped-mounts/idmapped-mounts.c index 69dcc027..e565246e 100644 --- a/src/idmapped-mounts/idmapped-mounts.c +++ b/src/idmapped-mounts/idmapped-mounts.c @@ -8717,8 +8717,11 @@ static void usage(void) fprintf(stderr, " Run idmapped mount tests\n\n"); fprintf(stderr, "Arguments:\n"); - fprintf(stderr, "-d --device Device used in the tests\n"); - fprintf(stderr, "-m --mountpoint Mountpoint of device\n"); + fprintf(stderr, "--device Device used in the tests\n"); + fprintf(stderr, "--fstype Filesystem type used in the tests\n"); + fprintf(stderr, "--help Print help\n"); + fprintf(stderr, "--mountpoint Mountpoint of device\n"); + fprintf(stderr, "--supported Test whether idmapped mounts are supported on this filesystem\n"); _exit(EXIT_SUCCESS); } @@ -8826,7 +8829,7 @@ int main(int argc, char *argv[]) int index = 0; bool supported = false; - while ((ret = getopt_long(argc, argv, "", longopts, &index)) != -1) { + while ((ret = getopt_long_only(argc, argv, "d:f:m:sh", longopts, &index)) != -1) { switch (ret) { case 'd': t_device = optarg;