From 7ca04f328e22fcbee4659d73f9a72dfdf1dd6a23 Mon Sep 17 00:00:00 2001 From: Glenn L McGrath Date: Wed, 25 Sep 2002 02:47:48 +0000 Subject: New common unarchive code. --- archival/libunarchive/copy_file_chunk_fd.c | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 archival/libunarchive/copy_file_chunk_fd.c (limited to 'archival/libunarchive/copy_file_chunk_fd.c') diff --git a/archival/libunarchive/copy_file_chunk_fd.c b/archival/libunarchive/copy_file_chunk_fd.c new file mode 100644 index 000000000..fb513e6d5 --- /dev/null +++ b/archival/libunarchive/copy_file_chunk_fd.c @@ -0,0 +1,33 @@ +#include +#include +#include "libbb.h" + +/* Copy CHUNKSIZE bytes (or untill EOF if chunksize == -1) + * from SRC_FILE to DST_FILE. */ +extern int copy_file_chunk_fd(int src_fd, int dst_fd, off_t chunksize) +{ + size_t nread, size; + char buffer[BUFSIZ]; + + while (chunksize != 0) { + if (chunksize > BUFSIZ) { + size = BUFSIZ; + } else { + size = chunksize; + } + nread = xread(src_fd, buffer, size); + if (nread == 0) { + return 1; + } + + if (write (dst_fd, buffer, nread) != nread) { + error_msg_and_die ("Short write"); + } + + if (chunksize != -1) { + chunksize -= nread; + } + } + + return 0; +} -- cgit v1.2.3