mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-14 21:45:33 +00:00
ssh: libssh2_channel_write() behaves like send()
When the stream writing function was written, it assume that libssh2_channel_write() would always write all of the data to the wire. This is only true for the first 32k of data, which it tries to fit into one ssh packet. Since it can perform short writes, call it in a loop like we do for send(), advancing the buffer offset.
This commit is contained in:
parent
28f087c864
commit
0963716b3f
@ -132,11 +132,22 @@ static int ssh_stream_write(
|
||||
size_t len)
|
||||
{
|
||||
ssh_stream *s = (ssh_stream *)stream;
|
||||
size_t off = 0;
|
||||
ssize_t ret = 0;
|
||||
|
||||
if (!s->sent_command && send_command(s) < 0)
|
||||
return -1;
|
||||
|
||||
if (libssh2_channel_write(s->channel, buffer, len) < LIBSSH2_ERROR_NONE) {
|
||||
do {
|
||||
ret = libssh2_channel_write(s->channel, buffer + off, len - off);
|
||||
if (ret < 0)
|
||||
break;
|
||||
|
||||
off += ret;
|
||||
|
||||
} while (off < len);
|
||||
|
||||
if (ret < 0) {
|
||||
ssh_error(s->session, "SSH could not write data");
|
||||
return -1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user