X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/fcbb94d3f7a319dcb2b1808e99e4c999be97b6ac..fe50e8140a2dbb3ba357a0ab777f34e07d568c23:/plink.c diff --git a/plink.c b/plink.c index 89b2f2c7..26a17292 100644 --- a/plink.c +++ b/plink.c @@ -11,6 +11,7 @@ #define PUTTY_DO_GLOBALS /* actually _define_ globals */ #include "putty.h" +#include "winstuff.h" #include "storage.h" void fatalbox (char *p, ...) { @@ -117,7 +118,7 @@ void verify_ssh_host_key(char *host, int port, char *keytype, } } -HANDLE outhandle; +HANDLE outhandle, errhandle; DWORD orig_console_mode; void begin_session(void) { @@ -127,17 +128,17 @@ void begin_session(void) { SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), orig_console_mode); } -void term_out(void) -{ - int reap; +void from_backend(int is_stderr, char *data, int len) { + int pos; DWORD ret; - reap = 0; - while (reap < inbuf_head) { - if (!WriteFile(outhandle, inbuf+reap, inbuf_head-reap, &ret, NULL)) + HANDLE h = (is_stderr ? errhandle : outhandle); + + pos = 0; + while (pos < len) { + if (!WriteFile(h, data+pos, len-pos, &ret, NULL)) return; /* give up in panic */ - reap += ret; + pos += ret; } - inbuf_head = 0; } struct input_data { @@ -449,6 +450,7 @@ int main(int argc, char **argv) { GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &orig_console_mode); SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_PROCESSED_INPUT); outhandle = GetStdHandle(STD_OUTPUT_HANDLE); + errhandle = GetStdHandle(STD_ERROR_HANDLE); /* * Now we must send the back end oodles of stuff. @@ -503,7 +505,6 @@ int main(int argc, char **argv) { break; } } - term_out(); } else if (n == 1) { if (idata.len > 0) { back->send(idata.buffer, idata.len); @@ -511,6 +512,8 @@ int main(int argc, char **argv) { back->special(TS_EOF); } } + if (back->socket() == INVALID_SOCKET) + break; /* we closed the connection */ } WSACleanup(); return 0;