mirror of
https://github.com/upa/mscp.git
synced 2026-05-21 12:57:29 +08:00
fix incorrect ret handling for read/write
This commit is contained in:
18
src/file.c
18
src/file.c
@@ -623,7 +623,7 @@ static int chunk_copy_internal(struct chunk *c, int fd, sftp_file sf,
|
|||||||
size_t sftp_buf_sz, size_t io_buf_sz,
|
size_t sftp_buf_sz, size_t io_buf_sz,
|
||||||
bool reverse, size_t *counter)
|
bool reverse, size_t *counter)
|
||||||
{
|
{
|
||||||
size_t remaind, read_bytes, write_bytes;
|
ssize_t read_bytes, write_bytes, remaind;
|
||||||
char buf[io_buf_sz];
|
char buf[io_buf_sz];
|
||||||
|
|
||||||
/* if reverse is false, copy fd->sf (local to remote).
|
/* if reverse is false, copy fd->sf (local to remote).
|
||||||
@@ -639,8 +639,12 @@ static int chunk_copy_internal(struct chunk *c, int fd, sftp_file sf,
|
|||||||
sftp_buf_sz);
|
sftp_buf_sz);
|
||||||
|
|
||||||
if (read_bytes < 0) {
|
if (read_bytes < 0) {
|
||||||
pr_err("failed to read %s: %s\n", c->f->dst_path,
|
if (!reverse)
|
||||||
!reverse ? strerrno() : sftp_get_ssh_error(sf->sftp));
|
pr_err("failed to read %s: %s\n",
|
||||||
|
c->f->src_path, strerrno());
|
||||||
|
else
|
||||||
|
pr_err("failed to read %s: SFTP error code %d\n",
|
||||||
|
c->f->src_path, sftp_get_error(sf->sftp));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -650,8 +654,12 @@ static int chunk_copy_internal(struct chunk *c, int fd, sftp_file sf,
|
|||||||
write_bytes = write(fd, buf, read_bytes);
|
write_bytes = write(fd, buf, read_bytes);
|
||||||
|
|
||||||
if (write_bytes < 0) {
|
if (write_bytes < 0) {
|
||||||
pr_err("failed to write %s: %s\n", c->f->dst_path,
|
if (!reverse)
|
||||||
!reverse ? strerrno() : sftp_get_ssh_error(sf->sftp));
|
pr_err("failed to write to %s: SFTP error code %d\n",
|
||||||
|
c->f->dst_path, sftp_get_error(sf->sftp));
|
||||||
|
else
|
||||||
|
pr_err("failed to write to %s: %s\n",
|
||||||
|
c->f->dst_path, strerrno());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
13
src/main.c
13
src/main.c
@@ -494,7 +494,7 @@ static void print_progress(struct timeval *start, struct timeval *end,
|
|||||||
char *byte_units[] = { "B", "KB", "MB", "GB", "TB", "PB" };
|
char *byte_units[] = { "B", "KB", "MB", "GB", "TB", "PB" };
|
||||||
char suffix[128];
|
char suffix[128];
|
||||||
int bps_u, byte_tu, byte_du;
|
int bps_u, byte_tu, byte_du;
|
||||||
size_t total_round;
|
size_t total_round, done_round;
|
||||||
int percent;
|
int percent;
|
||||||
double bps;
|
double bps;
|
||||||
|
|
||||||
@@ -515,11 +515,14 @@ static void print_progress(struct timeval *start, struct timeval *end,
|
|||||||
bps /= 1000;
|
bps /= 1000;
|
||||||
|
|
||||||
percent = floor(((double)(done) / (double)total) * 100);
|
percent = floor(((double)(done) / (double)total) * 100);
|
||||||
for (byte_du = 0; done > 1000 && byte_du < array_size(byte_units) - 1; byte_du++)
|
|
||||||
done /= 1024;
|
done_round = done;
|
||||||
|
for (byte_du = 0; done_round > 1000 && byte_du < array_size(byte_units) - 1;
|
||||||
|
byte_du++)
|
||||||
|
done_round /= 1024;
|
||||||
|
|
||||||
snprintf(suffix, sizeof(suffix), "%lu%s/%lu%s %.2f%s ",
|
snprintf(suffix, sizeof(suffix), "%lu%s/%lu%s %.2f%s ",
|
||||||
done, byte_units[byte_du], total_round, byte_units[byte_tu],
|
done_round, byte_units[byte_du], total_round, byte_units[byte_tu],
|
||||||
bps, bps_units[bps_u]);
|
bps, bps_units[bps_u]);
|
||||||
|
|
||||||
print_progress_bar(percent, suffix);
|
print_progress_bar(percent, suffix);
|
||||||
@@ -582,7 +585,7 @@ void *mscp_monitor_thread(void *arg)
|
|||||||
usleep(500000);
|
usleep(500000);
|
||||||
|
|
||||||
for (n = 0; n < nr_threads; n++) {
|
for (n = 0; n < nr_threads; n++) {
|
||||||
done += threads[n].done;;
|
done += threads[n].done;
|
||||||
if (!threads[n].finished)
|
if (!threads[n].finished)
|
||||||
all_done = false;
|
all_done = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -246,9 +246,9 @@ void ssh_sftp_close(sftp_session sftp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int sftp_write2(sftp_file sf, const void *buf, size_t len, size_t sftp_buf_sz)
|
ssize_t sftp_write2(sftp_file sf, const void *buf, size_t len, size_t sftp_buf_sz)
|
||||||
{
|
{
|
||||||
int ret, nbytes;
|
ssize_t ret, nbytes;
|
||||||
|
|
||||||
for (nbytes = 0; nbytes < len;) {
|
for (nbytes = 0; nbytes < len;) {
|
||||||
ret = sftp_write(sf, buf + nbytes,
|
ret = sftp_write(sf, buf + nbytes,
|
||||||
@@ -260,9 +260,9 @@ int sftp_write2(sftp_file sf, const void *buf, size_t len, size_t sftp_buf_sz)
|
|||||||
return nbytes;
|
return nbytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sftp_read2(sftp_file sf, void *buf, size_t len, size_t sftp_buf_sz)
|
ssize_t sftp_read2(sftp_file sf, void *buf, size_t len, size_t sftp_buf_sz)
|
||||||
{
|
{
|
||||||
int ret, nbytes;
|
ssize_t ret, nbytes;
|
||||||
|
|
||||||
for (nbytes = 0; nbytes < len;) {
|
for (nbytes = 0; nbytes < len;) {
|
||||||
ret = sftp_read(sf, buf + nbytes,
|
ret = sftp_read(sf, buf + nbytes,
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ void ssh_sftp_close(sftp_session sftp);
|
|||||||
#define sftp_get_ssh_error(sftp) ssh_get_error(sftp_ssh(sftp))
|
#define sftp_get_ssh_error(sftp) ssh_get_error(sftp_ssh(sftp))
|
||||||
|
|
||||||
/* wrapping multiple sftp_read|write */
|
/* wrapping multiple sftp_read|write */
|
||||||
int sftp_write2(sftp_file sf, const void *buf, size_t len, size_t sftp_buf_sz);
|
ssize_t sftp_write2(sftp_file sf, const void *buf, size_t len, size_t sftp_buf_sz);
|
||||||
int sftp_read2(sftp_file sf, void *buf, size_t len, size_t sftp_buf_sz);
|
ssize_t sftp_read2(sftp_file sf, void *buf, size_t len, size_t sftp_buf_sz);
|
||||||
|
|
||||||
#endif /* _SSH_H_ */
|
#endif /* _SSH_H_ */
|
||||||
|
|||||||
Reference in New Issue
Block a user