summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <curtis.mcenroe@adgear.com>2016-09-13 10:20:18 -0400
committerJune McEnroe <curtis.mcenroe@adgear.com>2016-09-13 10:20:18 -0400
commit82b3fbec2bc6e20cadcf95f9d6fabe67937fe55a (patch)
treee294af466012ff6c2745643d8d5a1c5b409707ac
parentCompile xx.c with clang specifically (diff)
downloadsrc-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.c15
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;