1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-01 03:22:48 -05:00

Introduce a sane interface function, from_backend(), for backends to

use when they have data from the network. Replaces the utterly daft
inbuf / inbuf_head / term_out() interface, which only made sense
when feeding to terminal.c. (terminal.c now implements
from_backend() as a small function that gateways to the old
interface.)

As a side effect, from_backend() also has an `is_stderr' parameter,
so scp can once again separate the server's pronouncements on stderr
from the actual protocol progress on stdout.

[originally from svn r729]
This commit is contained in:
Simon Tatham
2000-10-20 13:51:46 +00:00
parent 31374678c0
commit e32603347c
9 changed files with 51 additions and 44 deletions

20
plink.c
View File

@ -118,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) {
@ -128,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 {
@ -450,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.
@ -504,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);