diff options
author | June McEnroe <curtis.mcenroe@adgear.com> | 2016-09-13 10:20:18 -0400 |
---|---|---|
committer | June McEnroe <curtis.mcenroe@adgear.com> | 2016-09-13 10:20:18 -0400 |
commit | 82b3fbec2bc6e20cadcf95f9d6fabe67937fe55a (patch) | |
tree | e294af466012ff6c2745643d8d5a1c5b409707ac | |
parent | Compile xx.c with clang specifically (diff) | |
download | src-82b3fbec2bc6e20cadcf95f9d6fabe67937fe55a.tar.gz src-82b3fbec2bc6e20cadcf95f9d6fabe67937fe55a.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?
Diffstat (limited to '')
-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; |