From 82b3fbec2bc6e20cadcf95f9d6fabe67937fe55a Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Tue, 13 Sep 2016 10:20:18 -0400 Subject: Use return value of getopt in xx On macOS/FreeBSD, optopt is always set after calling getopt. On Linux, optopt is only set if an unrecognized option was found. What is the point of POSIX if such behaviour can differ? --- .bin/xx.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.bin/xx.c b/.bin/xx.c index 867ef8e4..689d3d0b 100755 --- a/.bin/xx.c +++ b/.bin/xx.c @@ -27,20 +27,21 @@ int main(int argc, char **argv) { uint8_t flags = FLAG_ASCII | FLAG_OFFSET; char *path = NULL; - while (getopt(argc, argv, "ac:fg:hk") > 0) { - if (optopt == 'a') + int opt; + while ((opt = getopt(argc, argv, "ac:fg:hk")) > 0) { + if (opt == 'a') flags ^= FLAG_ASCII; - else if (optopt == 'c') + else if (opt == 'c') cols = (size_t) strtol(optarg, NULL, 10); - else if (optopt == 'f') + else if (opt == 'f') flags ^= FLAG_OFFSET; - else if (optopt == 'g') + else if (opt == 'g') group = (size_t) strtol(optarg, NULL, 10); - else if (optopt == 'k') + else if (opt == 'k') flags ^= FLAG_SKIP; else { printf("usage: xx [-afk] [-c N] [-g N] [FILE]\n"); - return (optopt == 'h') ? EXIT_SUCCESS : EXIT_FAILURE; + return (opt == 'h') ? EXIT_SUCCESS : EXIT_FAILURE; } } if (!cols) return EXIT_FAILURE; -- cgit 1.4.1