Fixes for more robust handling of command-line parse errors.
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 20 Nov 2002 20:09:02 +0000 (20:09 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 20 Nov 2002 20:09:02 +0000 (20:09 +0000)
git-svn-id: svn://svn.tartarus.org/sgt/putty@2236 cda61777-01e9-0310-a592-d414129be87e

plink.c
psftp.c
scp.c
unix/uxplink.c
window.c

diff --git a/plink.c b/plink.c
index 528eee6..b4f8e84 100644 (file)
--- a/plink.c
+++ b/plink.c
@@ -256,6 +256,7 @@ int main(int argc, char **argv)
     int skcount, sksize;
     int connopen;
     int exitcode;
+    int errors;
 
     ssh_get_line = console_get_line;
 
@@ -275,6 +276,7 @@ int main(int argc, char **argv)
     do_defaults(NULL, &cfg);
     default_protocol = cfg.protocol;
     default_port = cfg.port;
+    errors = 0;
     {
        /*
         * Override the default protocol if PLINK_PROTOCOL is set.
@@ -299,12 +301,16 @@ int main(int argc, char **argv)
            if (ret == -2) {
                fprintf(stderr,
                        "plink: option \"%s\" requires an argument\n", p);
+               errors = 1;
            } else if (ret == 2) {
                --argc, ++argv;
            } else if (ret == 1) {
                continue;
            } else if (!strcmp(p, "-batch")) {
                console_batch_mode = 1;
+           } else {
+               fprintf(stderr, "plink: unknown option \"%s\"\n", p);
+               errors = 1;
            }
        } else if (*p) {
            if (!*cfg.host) {
@@ -426,6 +432,9 @@ int main(int argc, char **argv)
        }
     }
 
+    if (errors)
+       return 1;
+
     if (!*cfg.host) {
        usage();
     }
diff --git a/psftp.c b/psftp.c
index 8ed4e20..47f8b63 100644 (file)
--- a/psftp.c
+++ b/psftp.c
@@ -1844,11 +1844,11 @@ static int psftp_connect(char *userhost, char *user, int portnumber)
 void cmdline_error(char *p, ...)
 {
     va_list ap;
-    fprintf(stderr, "pscp: ");
+    fprintf(stderr, "psftp: ");
     va_start(ap, p);
     vfprintf(stderr, p, ap);
     va_end(ap);
-    fputc('\n', stderr);
+    fprintf(stderr, "\n       try typing \"psftp -h\" for help\n");
     exit(1);
 }
 
@@ -1863,6 +1863,7 @@ int main(int argc, char *argv[])
     int mode = 0;
     int modeflags = 0;
     char *batchfile = NULL;
+    int errors = 0;
 
     flags = FLAG_STDERR | FLAG_INTERACTIVE;
     cmdline_tooltype = TOOLTYPE_FILETRANSFER;
@@ -1872,6 +1873,7 @@ int main(int argc, char *argv[])
 
     userhost = user = NULL;
 
+    errors = 0;
     for (i = 1; i < argc; i++) {
        int ret;
        if (argv[i][0] != '-') {
@@ -1906,7 +1908,7 @@ int main(int argc, char *argv[])
            i++;
            break;
        } else {
-           usage();
+           cmdline_error("unknown option \"%s\"", argv[i]);
        }
     }
     argc -= i;
diff --git a/scp.c b/scp.c
index dc43961..ea81f01 100644 (file)
--- a/scp.c
+++ b/scp.c
@@ -2166,7 +2166,7 @@ void cmdline_error(char *p, ...)
     va_start(ap, p);
     vfprintf(stderr, p, ap);
     va_end(ap);
-    fputc('\n', stderr);
+    fprintf(stderr, "\n      try typing just \"pscp\" for help\n");
     exit(1);
 }
 
@@ -2219,8 +2219,9 @@ int main(int argc, char *argv[])
        } else if (strcmp(argv[i], "--") == 0) {
            i++;
            break;
-       } else
-           usage();
+       } else {
+           cmdline_error("unknown option \"%s\"", argv[i]);
+       }
     }
     argc -= i;
     argv += i;
index 179f254..2e5017a 100644 (file)
@@ -186,6 +186,7 @@ int main(int argc, char **argv)
     int i, skcount, sksize, socketstate;
     int connopen;
     int exitcode;
+    int errors;
     void *ldisc;
 
     ssh_get_line = console_get_line;
@@ -206,6 +207,7 @@ int main(int argc, char **argv)
     do_defaults(NULL, &cfg);
     default_protocol = cfg.protocol;
     default_port = cfg.port;
+    errors = 0;
     {
        /*
         * Override the default protocol if PLINK_PROTOCOL is set.
@@ -230,6 +232,7 @@ int main(int argc, char **argv)
            if (ret == -2) {
                fprintf(stderr,
                        "plink: option \"%s\" requires an argument\n", p);
+               errors = 1;
            } else if (ret == 2) {
                --argc, ++argv;
            } else if (ret == 1) {
@@ -237,11 +240,17 @@ int main(int argc, char **argv)
            } else if (!strcmp(p, "-batch")) {
                console_batch_mode = 1;
            } else if (!strcmp(p, "-o")) {
-                if (argc <= 1)
+                if (argc <= 1) {
                     fprintf(stderr,
                             "plink: option \"-o\" requires an argument\n");
-                else
-                    --argc, provide_xrm_string(*++argv);
+                   errors = 1;
+               } else {
+                    --argc;
+                   provide_xrm_string(*++argv);
+               }
+           } else {
+               fprintf(stderr, "plink: unknown option \"%s\"\n", p);
+               errors = 1;
            }
        } else if (*p) {
            if (!*cfg.host) {
@@ -366,6 +375,9 @@ int main(int argc, char **argv)
        }
     }
 
+    if (errors)
+       return 1;
+
     if (!*cfg.host) {
        usage();
     }
index 9fa45ba..11e199d 100644 (file)
--- a/window.c
+++ b/window.c
@@ -406,6 +406,8 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
                        cfg.host[sizeof(cfg.host) - 1] = '\0';
                        got_host = 1;
                    }
+               } else {
+                   cmdline_error("unknown option \"%s\"", p);
                }
            }
        }