diff options
author | Jeremy Allison <jra@samba.org> | 2002-01-03 19:57:14 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2002-01-03 19:57:14 +0000 |
commit | 739b95c41fe5511cf26604e476c89f03e933a400 (patch) | |
tree | c0ccd51e6baa59f646ae17b5e828a759f58ea699 /source/lib/util.c | |
parent | 41e09aaa29f75189b89f77ac7700b059f39ef1d2 (diff) | |
download | samba-739b95c41fe5511cf26604e476c89f03e933a400.tar.gz samba-739b95c41fe5511cf26604e476c89f03e933a400.tar.xz samba-739b95c41fe5511cf26604e476c89f03e933a400.zip |
Fixed embarressing 16k strack trashing bug :-(.
Jeremy.
Diffstat (limited to 'source/lib/util.c')
-rw-r--r-- | source/lib/util.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/source/lib/util.c b/source/lib/util.c index 760e22f1ee0..2c7b9efaec1 100644 --- a/source/lib/util.c +++ b/source/lib/util.c @@ -519,13 +519,14 @@ ssize_t transfer_file_internal(int infd, int outfd, size_t n, ssize_t (*read_fn) static char buf[16384]; size_t total = 0; ssize_t read_ret; - size_t write_total = 0; - ssize_t write_ret; + ssize_t write_ret; + size_t num_to_read_thistime; + size_t num_written = 0; while (total < n) { - size_t num_to_read_thistime = MIN((n - total), sizeof(buf)); + num_to_read_thistime = MIN((n - total), sizeof(buf)); - read_ret = (*read_fn)(infd, buf + total, num_to_read_thistime); + read_ret = (*read_fn)(infd, buf, num_to_read_thistime); if (read_ret == -1) { DEBUG(0,("transfer_file_internal: read failure. Error = %s\n", strerror(errno) )); return -1; @@ -533,10 +534,10 @@ ssize_t transfer_file_internal(int infd, int outfd, size_t n, ssize_t (*read_fn) if (read_ret == 0) break; - write_total = 0; + num_written = 0; - while (write_total < read_ret) { - write_ret = (*write_fn)(outfd,buf + total, read_ret); + while (num_written < read_ret) { + write_ret = (*write_fn)(outfd,buf + num_written, read_ret); if (write_ret == -1) { DEBUG(0,("transfer_file_internal: write failure. Error = %s\n", strerror(errno) )); @@ -545,7 +546,7 @@ ssize_t transfer_file_internal(int infd, int outfd, size_t n, ssize_t (*read_fn) if (write_ret == 0) return (ssize_t)total; - write_total += (size_t)write_ret; + num_written += (size_t)write_ret; } total += (size_t)read_ret; |