mirror of
https://xff.cz/git/u-boot/
synced 2025-10-26 16:13:55 +01:00
tools: Move copyfile() into a common file
This function is useful in other places. Move it to a common file. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -119,3 +119,59 @@ err:
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int copyfile(const char *src, const char *dst)
|
||||
{
|
||||
int fd_src = -1, fd_dst = -1;
|
||||
void *buf = NULL;
|
||||
ssize_t size;
|
||||
size_t count;
|
||||
int ret = -1;
|
||||
|
||||
fd_src = open(src, O_RDONLY);
|
||||
if (fd_src < 0) {
|
||||
printf("Can't open file %s (%s)\n", src, strerror(errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
fd_dst = open(dst, O_WRONLY | O_CREAT, 0666);
|
||||
if (fd_dst < 0) {
|
||||
printf("Can't open file %s (%s)\n", dst, strerror(errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
buf = calloc(1, 512);
|
||||
if (!buf) {
|
||||
printf("Can't allocate buffer to copy file\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
size = read(fd_src, buf, 512);
|
||||
if (size < 0) {
|
||||
printf("Can't read file %s\n", src);
|
||||
goto out;
|
||||
}
|
||||
if (!size)
|
||||
break;
|
||||
|
||||
count = size;
|
||||
size = write(fd_dst, buf, count);
|
||||
if (size < 0) {
|
||||
printf("Can't write file %s\n", dst);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
out:
|
||||
if (fd_src >= 0)
|
||||
close(fd_src);
|
||||
if (fd_dst >= 0)
|
||||
close(fd_dst);
|
||||
if (buf)
|
||||
free(buf);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user