summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2016-09-13 10:20:18 -0400
committerJune McEnroe <june@causal.agency>2016-09-13 10:20:18 -0400
commit2bc3152a4198c7796805ab24768a020a0330913a (patch)
treeda120f78c745ba26a6cd0993e28ad5faf69947db
parentCompile xx.c with clang specifically (diff)
downloadsrc-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.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;