projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for displaying the licence window.
[u/mdw/putty]
/
unix
/
uxplink.c
diff --git
a/unix/uxplink.c
b/unix/uxplink.c
index
8f828a5
..
99ace88
100644
(file)
--- a/
unix/uxplink.c
+++ b/
unix/uxplink.c
@@
-111,6
+111,9
@@
void try_output(int is_stderr)
void *senddata;
int sendlen, ret;
void *senddata;
int sendlen, ret;
+ if (bufchain_size(chain) == 0)
+ return;
+
bufchain_prefix(chain, &senddata, &sendlen);
ret = write(fd, senddata, sendlen);
if (ret > 0)
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;
int i, skcount, sksize, socketstate;
int connopen;
int exitcode;
-
void *logctx
;
+
int errors
;
void *ldisc;
ssh_get_line = console_get_line;
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;
do_defaults(NULL, &cfg);
default_protocol = cfg.protocol;
default_port = cfg.port;
+ errors = 0;
{
/*
* Override the default protocol if PLINK_PROTOCOL is set.
{
/*
* 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);
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 (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;
}
} 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
/*
* 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();
}
if (!*cfg.host) {
usage();
}
@@
-438,6
+461,7
@@
int main(int argc, char **argv)
/*
* Start up the connection.
*/
/*
* Start up the connection.
*/
+ logctx = log_init(NULL);
{
char *error;
char *realhost;
{
char *error;
char *realhost;
@@
-447,12
+471,11
@@
int main(int argc, char **argv)
error = back->init(NULL, &backhandle, cfg.host, cfg.port,
&realhost, nodelay);
if (error) {
error = back->init(NULL, &backhandle, cfg.host, cfg.port,
&realhost, nodelay);
if (error) {
- fprintf(stderr, "Unable to open connection:\n%s", error);
+ fprintf(stderr, "Unable to open connection:\n%s
\n
", error);
return 1;
}
return 1;
}
- logctx = log_init(NULL);
back->provide_logctx(backhandle, logctx);
back->provide_logctx(backhandle, logctx);
- ldisc = ldisc_create(NULL, back, backhandle, NULL);
+ ldisc = ldisc_create(
&cfg,
NULL, back, backhandle, NULL);
sfree(realhost);
}
connopen = 1;
sfree(realhost);
}
connopen = 1;
@@
-532,12
+555,17
@@
int main(int argc, char **argv)
for (i = 0; i < skcount; i++) {
socket = sklist[i];
for (i = 0; i < skcount; i++) {
socket = sklist[i];
+ /*
+ * We must process exceptional notifications before
+ * ordinary readability ones, or we may go straight
+ * past the urgent marker.
+ */
+ if (FD_ISSET(socket, &xset))
+ select_result(socket, 4);
if (FD_ISSET(socket, &rset))
select_result(socket, 1);
if (FD_ISSET(socket, &wset))
select_result(socket, 2);
if (FD_ISSET(socket, &rset))
select_result(socket, 1);
if (FD_ISSET(socket, &wset))
select_result(socket, 2);
- if (FD_ISSET(socket, &xset))
- select_result(socket, 4);
}
if (FD_ISSET(0, &rset)) {
}
if (FD_ISSET(0, &rset)) {
@@
-576,5
+604,6
@@
int main(int argc, char **argv)
fprintf(stderr, "Remote process exit code unavailable\n");
exitcode = 1; /* this is an error condition */
}
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 */
}
}