X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/56e5b2db28757ed9b09f15c66e5b13eae241d4e6..b7a189f38294c745ae4ea6efb55891c8196e275b:/unix/uxplink.c diff --git a/unix/uxplink.c b/unix/uxplink.c index dab69475..99ace88a 100644 --- a/unix/uxplink.c +++ b/unix/uxplink.c @@ -111,6 +111,9 @@ void try_output(int is_stderr) void *senddata; int sendlen, ret; + if (bufchain_size(chain) == 0) + return; + bufchain_prefix(chain, &senddata, &sendlen); ret = write(fd, senddata, sendlen); if (ret > 0) @@ -183,7 +186,7 @@ int main(int argc, char **argv) int i, skcount, sksize, socketstate; int connopen; int exitcode; - void *logctx; + int errors; void *ldisc; ssh_get_line = console_get_line; @@ -204,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. @@ -228,16 +232,32 @@ 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 if (!strcmp(p, "-o")) { + if (argc <= 1) { + fprintf(stderr, + "plink: option \"-o\" requires an argument\n"); + 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) { char *q = p; + + do_defaults(NULL, &cfg); + /* * If the hostname starts with "telnet:", set the * protocol to Telnet and process the string as a @@ -355,6 +375,9 @@ int main(int argc, char **argv) } } + if (errors) + return 1; + if (!*cfg.host) { usage(); } @@ -438,6 +461,7 @@ int main(int argc, char **argv) /* * Start up the connection. */ + logctx = log_init(NULL); { char *error; char *realhost; @@ -450,9 +474,8 @@ int main(int argc, char **argv) fprintf(stderr, "Unable to open connection:\n%s\n", error); return 1; } - logctx = log_init(NULL); back->provide_logctx(backhandle, logctx); - ldisc = ldisc_create(NULL, back, backhandle, NULL); + ldisc = ldisc_create(&cfg, NULL, back, backhandle, NULL); sfree(realhost); } connopen = 1; @@ -581,5 +604,6 @@ int main(int argc, char **argv) fprintf(stderr, "Remote process exit code unavailable\n"); exitcode = 1; /* this is an error condition */ } - return exitcode; + cleanup_exit(exitcode); + return exitcode; /* shouldn't happen, but placates gcc */ }