1
1

examples: fixed and made them more similar

The channel read/write functions can return 0 in legitimate cases
without it being an error, and we need to loop properly if they
return short.
Этот коммит содержится в:
Daniel Stenberg 2010-04-26 16:49:30 +02:00
родитель c511177d39
Коммит cb42be1a9c
5 изменённых файлов: 24 добавлений и 19 удалений

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

@ -47,7 +47,7 @@ int main(int argc, char *argv[])
FILE *local;
int rc;
char mem[1024];
size_t nread, sent;
size_t nread;
char *ptr;
struct stat fileinfo;
@ -168,20 +168,21 @@ int main(int argc, char *argv[])
break;
}
ptr = mem;
sent = 0;
do {
/* write the same data over and over, until error or completion */
rc = libssh2_channel_write(channel, ptr, nread);
if (rc < 0) {
fprintf(stderr, "ERROR %d\n", rc);
} else {
/* rc indicates how many bytes were written this time */
sent += rc;
break;
}
} while (rc > 0 && sent < nread);
else {
/* rc indicates how many bytes were written this time */
ptr += rc;
nread -= rc;
}
} while (nread);
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, sent;
size_t nread;
char *ptr;
struct stat fileinfo;
@ -182,7 +182,6 @@ int main(int argc, char *argv[])
break;
}
ptr = mem;
sent = 0;
do {
/* write the same data over and over, until error or completion */
@ -191,12 +190,14 @@ int main(int argc, char *argv[])
continue;
} else if (rc < 0) {
fprintf(stderr, "ERROR %d\n", rc);
break;
} else {
/* rc indicates how many bytes were written this time */
sent += rc;
nread -= rc;
ptr += rc;
}
} while (rc > 0 && sent < nread);
} while (1);
} while (nread);
} while (!nread); /* only continue if nread was drained */
fprintf(stderr, "Sending EOF\n");
while (libssh2_channel_send_eof(channel) == LIBSSH2_ERROR_EAGAIN);

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

@ -246,7 +246,7 @@ int main(int argc, char *argv[])
nread);
ptr += rc;
nread -= nread;
} while (rc > 0);
} while (rc >= 0);
if(rc != LIBSSH2_ERROR_EAGAIN) {
/* error or end of file */

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

@ -185,10 +185,13 @@ int main(int argc, char *argv[])
do {
/* write data in a loop until we block */
rc = libssh2_sftp_write(sftp_handle, ptr, nread);
if(rc < 0)
break;
ptr += rc;
nread -= nread;
} while (rc > 0);
} while (1);
nread -= rc;
} while (nread);
} while (rc > 0);
libssh2_sftp_close(sftp_handle);
libssh2_sftp_shutdown(sftp_session);

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

@ -199,9 +199,9 @@ int main(int argc, char *argv[])
;
}
ptr += rc;
nread -= nread;
} while (rc > 0);
} while (1);
nread -= rc;
} while (nread);
} while (rc > 0);
fclose(local);
libssh2_sftp_close(sftp_handle);