From 86256dc6603a868a4aca9ea47a9d23de5c25e893 Mon Sep 17 00:00:00 2001 From: simon Date: Wed, 20 Nov 2002 20:09:02 +0000 Subject: [PATCH] Fixes for more robust handling of command-line parse errors. git-svn-id: svn://svn.tartarus.org/sgt/putty@2236 cda61777-01e9-0310-a592-d414129be87e --- plink.c | 9 +++++++++ psftp.c | 8 +++++--- scp.c | 7 ++++--- unix/uxplink.c | 18 +++++++++++++++--- window.c | 2 ++ 5 files changed, 35 insertions(+), 9 deletions(-) diff --git a/plink.c b/plink.c index 528eee65..b4f8e848 100644 --- 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 8ed4e20e..47f8b634 100644 --- 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 dc439610..ea81f01e 100644 --- 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; diff --git a/unix/uxplink.c b/unix/uxplink.c index 179f2545..2e5017ae 100644 --- a/unix/uxplink.c +++ b/unix/uxplink.c @@ -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(); } diff --git a/window.c b/window.c index 9fa45bae..11e199d3 100644 --- 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); } } } -- 2.11.0