Rewrote copyfd to use library functions, terminate, and copy correct data.

This commit is contained in:
Matt Kraai 2001-05-18 14:14:55 +00:00
parent 6943815400
commit d6ef07406d
3 changed files with 18 additions and 26 deletions

View File

@ -133,7 +133,7 @@ extern pid_t* find_pid_by_name( char* pidName);
extern char *find_real_root_device_name(const char* name);
extern char *get_line_from_file(FILE *file);
extern void print_file(FILE *file);
extern size_t copyfd(int fd1, int fd2);
extern int copyfd(int fd1, int fd2);
extern int print_file_by_name(char *filename);
extern char process_escape_sequence(const char **ptr);
extern char *get_last_path_component(char *path);

View File

@ -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 */

View File

@ -133,7 +133,7 @@ extern pid_t* find_pid_by_name( char* pidName);
extern char *find_real_root_device_name(const char* name);
extern char *get_line_from_file(FILE *file);
extern void print_file(FILE *file);
extern size_t copyfd(int fd1, int fd2);
extern int copyfd(int fd1, int fd2);
extern int print_file_by_name(char *filename);
extern char process_escape_sequence(const char **ptr);
extern char *get_last_path_component(char *path);