diff options
author | June McEnroe <june@causal.agency> | 2016-09-13 10:20:18 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2016-09-13 10:20:18 -0400 |
commit | 2bc3152a4198c7796805ab24768a020a0330913a (patch) | |
tree | da120f78c745ba26a6cd0993e28ad5faf69947db | |
parent | Compile xx.c with clang specifically (diff) | |
download | src-2bc3152a4198c7796805ab24768a020a0330913a.tar.gz src-2bc3152a4198c7796805ab24768a020a0330913a.zip |
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?
-rwxr-xr-x | .bin/xx.c | 15 |
1 files 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; |