1
1

Fix scp examples to loop correctly over libssh2_channel_write()

Этот коммит содержится в:
Peter Stuge 2009-09-20 01:35:19 +02:00
родитель 683aa0f6b5
Коммит 3cc2f143c1
2 изменённых файлов: 25 добавлений и 13 удалений

Просмотреть файл

@ -47,7 +47,7 @@ int main(int argc, char *argv[])
FILE *local;
int rc;
char mem[1024];
size_t nread;
size_t nread, sent;
char *ptr;
struct stat fileinfo;
@ -159,13 +159,20 @@ int main(int argc, char *argv[])
break;
}
ptr = mem;
sent = 0;
do {
/* write data in a loop until we block */
/* write the same data over and over, until error or completion */
rc = libssh2_channel_write(channel, ptr, nread);
ptr += rc;
nread -= nread;
} while (rc > 0);
if (rc < 0) {
fprintf(stderr, "ERROR %d\n", rc);
} else {
/* rc indicates how many bytes were written this time */
sent += rc;
}
} while (rc > 0 && sent < nread);
ptr += sent;
nread -= sent;
} while (1);
fprintf(stderr, "Sending EOF\n");

Просмотреть файл

@ -51,7 +51,7 @@ int main(int argc, char *argv[])
long flag = 1;
#endif
char mem[1024];
size_t nread;
size_t nread, sent;
char *ptr;
struct stat fileinfo;
@ -176,17 +176,22 @@ int main(int argc, char *argv[])
break;
}
ptr = mem;
sent = 0;
do {
/* write data in a loop until we block */
while ((rc = libssh2_channel_write(channel, ptr, nread)) ==
LIBSSH2_ERROR_EAGAIN);
if (rc < 0) {
/* write the same data over and over, until error or completion */
rc = libssh2_channel_write(channel, ptr, nread);
if (LIBSSH2_ERROR_EAGAIN == rc) { /* must loop around */
continue;
} else if (rc < 0) {
fprintf(stderr, "ERROR %d\n", rc);
} else {
/* rc indicates how many bytes were written this time */
sent += rc;
}
ptr += rc;
nread -= rc;
} while (nread > 0);
} while (rc > 0 && sent < nread);
ptr += sent;
nread -= sent;
} while (1);
fprintf(stderr, "Sending EOF\n");