mirror of
https://xff.cz/git/u-boot/
synced 2025-10-27 16:43:32 +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;
|
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,
|
void **blobp, struct stat *sbuf, bool delete_on_error,
|
||||||
bool read_only);
|
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_ */
|
#endif /* _FIT_COMMON_H_ */
|
||||||
|
|||||||
@@ -656,62 +656,6 @@ err:
|
|||||||
return ret;
|
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
|
* fit_handle_file - main FIT file processing function
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user