summary refs log tree commit diff
path: root/.bin/xx.c
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 /.bin/xx.c
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?
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;