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;
 | 
						|
}
 |