summaryrefslogtreecommitdiffstats
path: root/source/lib/util.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2002-01-03 19:57:14 +0000
committerJeremy Allison <jra@samba.org>2002-01-03 19:57:14 +0000
commit739b95c41fe5511cf26604e476c89f03e933a400 (patch)
treec0ccd51e6baa59f646ae17b5e828a759f58ea699 /source/lib/util.c
parent41e09aaa29f75189b89f77ac7700b059f39ef1d2 (diff)
downloadsamba-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.c17
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;