diff options
author | Michael Adam <obnox@samba.org> | 2008-01-10 14:27:52 +0100 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2008-01-10 14:31:25 +0100 |
commit | ba2a2552822ded95358c11972005f2c353580439 (patch) | |
tree | 57a36d983f03bb986fabc453a9d3f9d4cb5c9a04 /source3/lib/util.c | |
parent | 386caead47e97b9fdc991b713cb597f1a1c4a365 (diff) | |
download | samba-ba2a2552822ded95358c11972005f2c353580439.tar.gz samba-ba2a2552822ded95358c11972005f2c353580439.tar.bz2 samba-ba2a2552822ded95358c11972005f2c353580439.zip |
Move transfer_file and transfer_file_internal to a module of their own.
Also, don't auto-generate prototypes of the (two) exported functions
but make a start in having handwritten prototypes in dedicated header
files (not in includes.h ... :-)
Michael
(This used to be commit 395f29d8b768a56af20b37f185eccdc5f37b68d5)
Diffstat (limited to 'source3/lib/util.c')
-rw-r--r-- | source3/lib/util.c | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/source3/lib/util.c b/source3/lib/util.c index 44eaa85ab0..0653fc9d3f 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -897,93 +897,6 @@ int set_blocking(int fd, bool set) #undef FLAG_TO_SET } -/**************************************************************************** - Transfer some data between two fd's. -****************************************************************************/ - -#ifndef TRANSFER_BUF_SIZE -#define TRANSFER_BUF_SIZE 65536 -#endif - - -ssize_t transfer_file_internal(void *in_file, - void *out_file, - size_t n, - ssize_t (*read_fn)(void *, void *, size_t), - ssize_t (*write_fn)(void *, void *, size_t)) -{ - char *buf; - size_t total = 0; - ssize_t read_ret; - ssize_t write_ret; - size_t num_to_read_thistime; - size_t num_written = 0; - - if ((buf = SMB_MALLOC_ARRAY(char, TRANSFER_BUF_SIZE)) == NULL) { - return -1; - } - - while (total < n) { - num_to_read_thistime = MIN((n - total), TRANSFER_BUF_SIZE); - - read_ret = (*read_fn)(in_file, buf, num_to_read_thistime); - if (read_ret == -1) { - DEBUG(0,("transfer_file_internal: read failure. " - "Error = %s\n", strerror(errno) )); - SAFE_FREE(buf); - return -1; - } - if (read_ret == 0) { - break; - } - - num_written = 0; - - while (num_written < read_ret) { - write_ret = (*write_fn)(out_file, buf + num_written, - read_ret - num_written); - - if (write_ret == -1) { - DEBUG(0,("transfer_file_internal: " - "write failure. Error = %s\n", - strerror(errno) )); - SAFE_FREE(buf); - return -1; - } - if (write_ret == 0) { - return (ssize_t)total; - } - - num_written += (size_t)write_ret; - } - - total += (size_t)read_ret; - } - - SAFE_FREE(buf); - return (ssize_t)total; -} - -static ssize_t sys_read_fn(void *file, void *buf, size_t len) -{ - int *fd = (int *)file; - - return sys_read(*fd, buf, len); -} - -static ssize_t sys_write_fn(void *file, void *buf, size_t len) -{ - int *fd = (int *)file; - - return sys_write(*fd, buf, len); -} - -SMB_OFF_T transfer_file(int infd, int outfd, SMB_OFF_T n) -{ - return (SMB_OFF_T)transfer_file_internal(&infd, &outfd, (size_t)n, - sys_read_fn, sys_write_fn); -} - /******************************************************************* Sleep for a specified number of milliseconds. ********************************************************************/ |