Fixes for more robust handling of command-line parse errors.
[u/mdw/putty] / plink.c
diff --git a/plink.c b/plink.c
index 3b33264..b4f8e84 100644 (file)
--- a/plink.c
+++ b/plink.c
@@ -40,7 +40,7 @@ void modalfatalbox(char *p, ...)
     WSACleanup();
     cleanup_exit(1);
 }
-void connection_fatal(char *p, ...)
+void connection_fatal(void *frontend, char *p, ...)
 {
     va_list ap;
     fprintf(stderr, "FATAL ERROR: ");
@@ -69,6 +69,9 @@ DWORD orig_console_mode;
 
 WSAEVENT netevent;
 
+static Backend *back;
+static void *backhandle;
+
 int term_ldisc(Terminal *term, int mode)
 {
     return FALSE;
@@ -253,6 +256,7 @@ int main(int argc, char **argv)
     int skcount, sksize;
     int connopen;
     int exitcode;
+    int errors;
 
     ssh_get_line = console_get_line;
 
@@ -272,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.
@@ -296,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) {
@@ -423,6 +432,9 @@ int main(int argc, char **argv)
        }
     }
 
+    if (errors)
+       return 1;
+
     if (!*cfg.host) {
        usage();
     }
@@ -535,6 +547,8 @@ int main(int argc, char **argv)
            fprintf(stderr, "Unable to open connection:\n%s", error);
            return 1;
        }
+       logctx = log_init(NULL);
+       back->provide_logctx(backhandle, logctx);
        sfree(realhost);
     }
     connopen = 1;