From d6ef07406d217a728d334ae5e49c4734b4ed26f5 Mon Sep 17 00:00:00 2001 From: Matt Kraai Date: Fri, 18 May 2001 14:14:55 +0000 Subject: Rewrote copyfd to use library functions, terminate, and copy correct data. --- libbb/copyfd.c | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) (limited to 'libbb/copyfd.c') diff --git a/libbb/copyfd.c b/libbb/copyfd.c index 253a8cf6e..aa938d105 100644 --- a/libbb/copyfd.c +++ b/libbb/copyfd.c @@ -25,36 +25,28 @@ #include "libbb.h" -extern size_t copyfd(int fd1, int fd2) +extern int copyfd(int fd1, int fd2) { - char buf[32768], *writebuf; - int status = TRUE; - size_t totalread = 0, bytesread, byteswritten; + char buf[8192]; + ssize_t nread, nwrote; - while(status) { - bytesread = read(fd1, &buf, sizeof(buf)); - if(bytesread == -1) { - error_msg("read: %s", strerror(errno)); - status = FALSE; + while (1) { + nread = safe_read(fd1, buf, sizeof(buf)); + if (nread == 0) break; + if (nread == -1) { + perror_msg("read"); + return -1; } - byteswritten = 0; - writebuf = buf; - while(bytesread) { - byteswritten = write( fd2, &writebuf, bytesread ); - if(byteswritten == -1) { - error_msg("write: %s", strerror(errno)); - status = FALSE; - break; - } - bytesread -= byteswritten; - writebuf += byteswritten; + + nwrote = full_write(fd2, buf, nread); + if (nwrote == -1) { + perror_msg("write"); + return -1; } } - if ( status == TRUE ) - return totalread; - else - return -1; + + return 0; } /* END CODE */ -- cgit v1.2.3