1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-02 12:02:47 -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

21
scp.c
View File

@ -246,20 +246,25 @@ void connection_fatal(char *fmt, ...)
* is available.
*
* To do this, we repeatedly call the SSH protocol module, with our
* own trap in term_out() to catch the data that comes back. We do
* this until we have enough data.
* own trap in from_backend() to catch the data that comes back. We
* do this until we have enough data.
*/
static unsigned char *outptr; /* where to put the data */
static unsigned outlen; /* how much data required */
static unsigned char *pending = NULL; /* any spare data */
static unsigned pendlen=0, pendsize=0; /* length and phys. size of buffer */
void term_out(void) {
void from_backend(int is_stderr, char *data, int datalen) {
unsigned char *p = (unsigned char *)data;
unsigned len = (unsigned)datalen;
/*
* Here we must deal with a block of data, in `inbuf', size
* `inbuf_head'.
* stderr data is just spouted to local stderr and otherwise
* ignored.
*/
unsigned char *p = inbuf;
unsigned len = inbuf_head;
if (is_stderr) {
fwrite(data, 1, len, stderr);
return;
}
inbuf_head = 0;
@ -329,7 +334,6 @@ static int ssh_scp_recv(unsigned char *buf, int len) {
if (select(1, &readfds, NULL, NULL, NULL) < 0)
return 0; /* doom */
back->msg(0, FD_READ);
term_out();
}
return len;
@ -351,7 +355,6 @@ static void ssh_scp_init(void) {
if (select(1, &readfds, NULL, NULL, NULL) < 0)
return; /* doom */
back->msg(0, FD_READ);
term_out();
}
}