34 lines
617 B
C
34 lines
617 B
C
|
#include <unistd.h>
|
||
|
#include <sys/types.h>
|
||
|
#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;
|
||
|
}
|