Fix command-line error handling in pterm. (Hint: wrapping a multi-
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Tue, 5 Nov 2002 13:20:42 +0000 (13:20 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Tue, 5 Nov 2002 13:20:42 +0000 (13:20 +0000)
statement macro in `do ... while (0)' and putting a `continue'
within it don't go well together. Oops.)

git-svn-id: svn://svn.tartarus.org/sgt/putty@2192 cda61777-01e9-0310-a592-d414129be87e

unix/pterm.c

index b1b98c1..5bc1885 100644 (file)
@@ -1779,18 +1779,22 @@ int do_cmdline(int argc, char **argv, int do_everything)
     extern char **pty_argv;           /* declared in pty.c */
 
     /*
-     * Macros to make argument handling easier.
+     * Macros to make argument handling easier. Note that because
+     * they need to call `continue', they cannot be contained in
+     * the usual do {...} while (0) wrapper to make them
+     * syntactically single statements; hence it is not legal to
+     * use one of these macros as an unbraced statement between
+     * `if' and `else'.
      */
-#define EXPECTS_ARG do { \
+#define EXPECTS_ARG { \
     if (--argc <= 0) { \
        err = 1; \
        fprintf(stderr, "pterm: %s expects an argument\n", p); \
+        continue; \
     } else \
        val = *++argv; \
-} while (0)
-#define SECOND_PASS_ONLY do { \
-    if (!do_everything) continue; \
-} while (0)
+}
+#define SECOND_PASS_ONLY { if (!do_everything) continue; }
 
     /*
      * TODO: