~mdw
/
sgt
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix character set problems. Some systems lack the ISO8859 codepages,
[sgt/putty]
/
plink.c
diff --git
a/plink.c
b/plink.c
index
d8ef32b
..
80c5b6a
100644
(file)
--- a/
plink.c
+++ b/
plink.c
@@
-314,11
+314,7
@@
void try_output(int is_stderr)
int from_backend(int is_stderr, char *data, int len)
{
int from_backend(int is_stderr, char *data, int len)
{
- int pos;
- DWORD ret;
HANDLE h = (is_stderr ? errhandle : outhandle);
HANDLE h = (is_stderr ? errhandle : outhandle);
- void *writedata;
- int writelen;
int osize, esize;
if (is_stderr) {
int osize, esize;
if (is_stderr) {
@@
-343,6
+339,7
@@
static void usage(void)
printf("PuTTY Link: command-line connection utility\n");
printf("%s\n", ver);
printf("Usage: plink [options] [user@]host [command]\n");
printf("PuTTY Link: command-line connection utility\n");
printf("%s\n", ver);
printf("Usage: plink [options] [user@]host [command]\n");
+ printf(" (\"host\" can also be a PuTTY saved session name)\n");
printf("Options:\n");
printf(" -v show verbose messages\n");
printf(" -ssh force use of ssh protocol\n");
printf("Options:\n");
printf(" -v show verbose messages\n");
printf(" -ssh force use of ssh protocol\n");
@@
-356,7
+353,8
@@
char *do_select(SOCKET skt, int startup)
{
int events;
if (startup) {
{
int events;
if (startup) {
- events = FD_READ | FD_WRITE | FD_OOB | FD_CLOSE | FD_ACCEPT;
+ events = (FD_CONNECT | FD_READ | FD_WRITE |
+ FD_OOB | FD_CLOSE | FD_ACCEPT);
} else {
events = 0;
}
} else {
events = 0;
}
@@
-771,6
+769,8
@@
int main(int argc, char **argv)
if (!WSAEnumNetworkEvents(socket, NULL, &things)) {
noise_ultralight(socket);
noise_ultralight(things.lNetworkEvents);
if (!WSAEnumNetworkEvents(socket, NULL, &things)) {
noise_ultralight(socket);
noise_ultralight(things.lNetworkEvents);
+ if (things.lNetworkEvents & FD_CONNECT)
+ connopen &= select_result(wp, (LPARAM) FD_CONNECT);
if (things.lNetworkEvents & FD_READ)
connopen &= select_result(wp, (LPARAM) FD_READ);
if (things.lNetworkEvents & FD_CLOSE)
if (things.lNetworkEvents & FD_READ)
connopen &= select_result(wp, (LPARAM) FD_READ);
if (things.lNetworkEvents & FD_CLOSE)
@@
-787,10
+787,12
@@
int main(int argc, char **argv)
} else if (n == 1) {
reading = 0;
noise_ultralight(idata.len);
} else if (n == 1) {
reading = 0;
noise_ultralight(idata.len);
- if (idata.len > 0) {
- back->send(idata.buffer, idata.len);
- } else {
- back->special(TS_EOF);
+ if (connopen && back->socket() != NULL) {
+ if (idata.len > 0) {
+ back->send(idata.buffer, idata.len);
+ } else {
+ back->special(TS_EOF);
+ }
}
} else if (n == 2) {
odata.busy = 0;
}
} else if (n == 2) {
odata.busy = 0;
@@
-801,8
+803,10
@@
int main(int argc, char **argv)
bufchain_consume(&stdout_data, odata.lenwritten);
if (bufchain_size(&stdout_data) > 0)
try_output(0);
bufchain_consume(&stdout_data, odata.lenwritten);
if (bufchain_size(&stdout_data) > 0)
try_output(0);
- back->unthrottle(bufchain_size(&stdout_data) +
- bufchain_size(&stderr_data));
+ if (connopen && back->socket() != NULL) {
+ back->unthrottle(bufchain_size(&stdout_data) +
+ bufchain_size(&stderr_data));
+ }
} else if (n == 3) {
edata.busy = 0;
if (!edata.writeret) {
} else if (n == 3) {
edata.busy = 0;
if (!edata.writeret) {
@@
-812,14
+816,18
@@
int main(int argc, char **argv)
bufchain_consume(&stderr_data, edata.lenwritten);
if (bufchain_size(&stderr_data) > 0)
try_output(1);
bufchain_consume(&stderr_data, edata.lenwritten);
if (bufchain_size(&stderr_data) > 0)
try_output(1);
- back->unthrottle(bufchain_size(&stdout_data) +
- bufchain_size(&stderr_data));
+ if (connopen && back->socket() != NULL) {
+ back->unthrottle(bufchain_size(&stdout_data) +
+ bufchain_size(&stderr_data));
+ }
}
if (!reading && back->sendbuffer() < MAX_STDIN_BACKLOG) {
SetEvent(idata.eventback);
reading = 1;
}
}
if (!reading && back->sendbuffer() < MAX_STDIN_BACKLOG) {
SetEvent(idata.eventback);
reading = 1;
}
- if (!connopen || back->socket() == NULL)
+ if ((!connopen || back->socket() == NULL) &&
+ bufchain_size(&stdout_data) == 0 &&
+ bufchain_size(&stderr_data) == 0)
break; /* we closed the connection */
}
WSACleanup();
break; /* we closed the connection */
}
WSACleanup();