mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
Fixed embarressing 16k strack trashing bug :-(.
Jeremy.
(This used to be commit b52c3219d6
)
This commit is contained in:
parent
9e0297b3ed
commit
791433434e
@ -571,13 +571,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;
|
||||
@ -585,10 +586,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) ));
|
||||
@ -597,7 +598,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;
|
||||
|
Loading…
Reference in New Issue
Block a user