29 lines
587 B
C
29 lines
587 B
C
#include <unistd.h>
|
|
#include <ioall.h>
|
|
extern void notify_progress(int, int);
|
|
|
|
char * copy_file(int outfd, int infd, long long size)
|
|
{
|
|
char buf[4096];
|
|
long long written = 0;
|
|
int ret;
|
|
int count;
|
|
while (written < size) {
|
|
if (size - written > sizeof(buf))
|
|
count = sizeof buf;
|
|
else
|
|
count = size - written;
|
|
ret = read(infd, buf, count);
|
|
if (!ret)
|
|
return("EOF while reading file");
|
|
if (ret < 0)
|
|
return("error reading file");
|
|
if (!write_all(outfd, buf, ret))
|
|
return("error writing file content");
|
|
notify_progress(ret, 0);
|
|
written += ret;
|
|
}
|
|
return NULL;
|
|
}
|
|
|