X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/885f465fb25defc371ade539453b0fee29323aa5..4ceef22460eca9798463c80ff09c74942d0f25b6:/unix/uxplink.c diff --git a/unix/uxplink.c b/unix/uxplink.c index 0c34a296..d76bbcaa 100644 --- a/unix/uxplink.c +++ b/unix/uxplink.c @@ -107,8 +107,8 @@ char *platform_default_s(const char *name) { if (!strcmp(name, "TermType")) return dupstr(getenv("TERM")); - if (!strcmp(name, "UserName")) - return get_username(); + if (!strcmp(name, "UserName")) + return get_username(); if (!strcmp(name, "SerialLine")) return dupstr("/dev/ttyS0"); return NULL; @@ -513,7 +513,8 @@ int signalpipe[2]; void sigwinch(int signum) { - write(signalpipe[1], "x", 1); + if (write(signalpipe[1], "x", 1) <= 0) + /* not much we can do about it */; } /* @@ -537,7 +538,7 @@ static void usage(void) printf(" -pgpfp print PGP key fingerprints and exit\n"); printf(" -v show verbose messages\n"); printf(" -load sessname Load settings from saved session\n"); - printf(" -ssh -telnet -rlogin -raw\n"); + printf(" -ssh -telnet -rlogin -raw -serial\n"); printf(" force use of a particular protocol\n"); printf(" -P port connect to specified port\n"); printf(" -l user connect with specified username\n"); @@ -564,6 +565,8 @@ static void usage(void) printf(" -N don't start a shell/command (SSH-2 only)\n"); printf(" -nc host:port\n"); printf(" open tunnel in place of session (SSH-2 only)\n"); + printf(" -sercfg configuration-string (e.g. 19200,8,n,1,X)\n"); + printf(" Specify the serial configuration (serial only)\n"); exit(1); } @@ -584,7 +587,7 @@ int main(int argc, char **argv) int exitcode; int errors; int use_subsystem = 0; - void *ldisc; + int got_host = FALSE; long now; fdlist = NULL; @@ -657,7 +660,7 @@ int main(int argc, char **argv) errors = 1; } } else if (*p) { - if (!cfg_launchable(&cfg)) { + if (!cfg_launchable(&cfg) || !(got_host || loaded_session)) { char *q = p; /* @@ -684,6 +687,7 @@ int main(int argc, char **argv) cfg.port = -1; strncpy(cfg.host, q, sizeof(cfg.host) - 1); cfg.host[sizeof(cfg.host) - 1] = '\0'; + got_host = TRUE; } else { char *r, *user, *host; /* @@ -732,8 +736,10 @@ int main(int argc, char **argv) strncpy(cfg.host, host, sizeof(cfg.host) - 1); cfg.host[sizeof(cfg.host) - 1] = '\0'; cfg.port = default_port; + got_host = TRUE; } else { cfg = cfg2; + loaded_session = TRUE; } } @@ -780,7 +786,7 @@ int main(int argc, char **argv) if (errors) return 1; - if (!cfg_launchable(&cfg)) { + if (!cfg_launchable(&cfg) || !(got_host || loaded_session)) { usage(); } @@ -894,7 +900,7 @@ int main(int argc, char **argv) return 1; } back->provide_logctx(backhandle, logctx); - ldisc = ldisc_create(&cfg, NULL, back, backhandle, NULL); + ldisc_create(&cfg, NULL, back, backhandle, NULL); sfree(realhost); } connopen = 1; @@ -1030,7 +1036,9 @@ int main(int argc, char **argv) if (FD_ISSET(signalpipe[0], &rset)) { char c[1]; struct winsize size; - read(signalpipe[0], c, 1); /* ignore its value; it'll be `x' */ + if (read(signalpipe[0], c, 1) <= 0) + /* ignore error */; + /* ignore its value; it'll be `x' */ if (ioctl(0, TIOCGWINSZ, (void *)&size) >= 0) back->size(backhandle, size.ws_col, size.ws_row); }