mirror of
https://xff.cz/git/u-boot/
synced 2025-10-27 00:24:09 +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;
|
||||
}
|
||||
|
||||
@@ -39,4 +39,15 @@ int mmap_fdt(const char *cmdname, const char *fname, size_t size_inc,
|
||||
void **blobp, struct stat *sbuf, bool delete_on_error,
|
||||
bool read_only);
|
||||
|
||||
/**
|
||||
* copyfile() - Copy a file
|
||||
*
|
||||
* This uses read()/write() to copy file @src to file @dst
|
||||
*
|
||||
* @src: Filename to read from
|
||||
* @dst: Filename to write to
|
||||
* @return 0 if OK, -1 on error
|
||||
*/
|
||||
int copyfile(const char *src, const char *dst);
|
||||
|
||||
#endif /* _FIT_COMMON_H_ */
|
||||
|
||||
@@ -656,62 +656,6 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* fit_handle_file - main FIT file processing function
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user