C standard defines `stdin` as a macro so we can’t use it as an
identifier. See also
https://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20130506/173524.html

--- a/pbzx.c
+++ b/pbzx.c
@@ -34,7 +34,7 @@
 
 /* Structure to hold the command-line options. */
 struct options {
-    bool stdin;    /* True if data should be read from stdin. */
+    bool usestdin; /* True if data should be read from stdin. */
     bool noxar;    /* The input data is not a XAR archive but the pbzx Payload. */
     bool help;     /* Print usage with details and exit. */
     bool version;  /* Print version and exit. */
@@ -74,7 +74,7 @@
         /* Skip arguments that are not flags. */
         if (argv[i][0] != '-') continue;
         /* Match available arguments. */
-        if      (strcmp(argv[i], "-")  == 0) opts->stdin = true;
+        if      (strcmp(argv[i], "-")  == 0) opts->usestdin = true;
         else if (strcmp(argv[i], "-n") == 0) opts->noxar = true;
         else if (strcmp(argv[i], "-h") == 0) opts->help = true;
         else if (strcmp(argv[i], "-v") == 0) opts->version = true;
@@ -204,9 +204,9 @@
     parse_args(&argc, argv, &opts);
     if (opts.version) version();
     if (opts.help) usage(NULL);
-    if (!opts.stdin && argc < 2)
+    if (!opts.usestdin && argc < 2)
         usage("missing filename argument");
-    else if ((!opts.stdin && argc > 2) || (opts.stdin && argc > 1))
+    else if ((!opts.usestdin && argc > 2) || (opts.usestdin && argc > 1))
         usage("unhandled positional argument(s)");
 
     char const* filename = NULL;
@@ -216,7 +216,7 @@
     struct stream stream;
     stream_init(&stream);
     bool success = false;
-    if (opts.stdin) {
+    if (opts.usestdin) {
         stream.type = STREAM_FP;
         stream.fp = stdin;
         success = true;
@@ -291,6 +291,6 @@
     }
     free(zbuf);
     lzma_end(&zs);
-    if (!opts.stdin) stream_close(&stream);
+    if (!opts.usestdin) stream_close(&stream);
     return 0;
 }