mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-05 21:42:47 -05:00
pscp, psftp: use a bufchain in ssh_scp_recv.
The ad-hoc code that received data from the SCP or SFTP server predated even not-very-modern conveniences such as bufchain, and was quite horrible and cumbersome. Particularly nasty was the part where ssh_scp_recv set a _global_ pointer variable to the buffer it was in the middle of writing to, and then recursed and expected a callback to use that pointer. That caused clang-analyzer to grumble at me, in a particular case where the output buffer was in the ultimate caller's stack frame; even though I'm confident the code _worked_, I can't blame clang for being unhappy! So now we do things the modern and much simpler way: the callback when data comes in just puts it on a bufchain, and the top-level ssh_scp_recv repeatedly waits until data arrives in the bufchain and then copies it to the output buffer.
This commit is contained in:
1
misc.h
1
misc.h
@ -106,6 +106,7 @@ void bufchain_consume(bufchain *ch, int len);
|
||||
void bufchain_fetch(bufchain *ch, void *data, int len);
|
||||
void bufchain_fetch_consume(bufchain *ch, void *data, int len);
|
||||
bool bufchain_try_fetch_consume(bufchain *ch, void *data, int len);
|
||||
int bufchain_fetch_consume_up_to(bufchain *ch, void *data, int len);
|
||||
|
||||
void sanitise_term_data(bufchain *out, const void *vdata, int len);
|
||||
|
||||
|
Reference in New Issue
Block a user