tools: Avoid leaving extra data at the end of copied files
authorSimon Glass <sjg@chromium.org>
Fri, 12 Nov 2021 19:28:05 +0000 (12:28 -0700)
committerSimon Glass <sjg@chromium.org>
Wed, 26 Jan 2022 15:50:43 +0000 (08:50 -0700)
The copyfile() implementation has strange behaviour if the destination
file already exists. Update it to ensure that any existing data in the
destination file is dropped.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/fit_common.c
tools/fit_common.h

index 4370de2..5ea43f5 100644 (file)
@@ -134,7 +134,7 @@ int copyfile(const char *src, const char *dst)
                goto out;
        }
 
-       fd_dst = open(dst, O_WRONLY | O_CREAT, 0666);
+       fd_dst = open(dst, O_WRONLY | O_CREAT | O_TRUNC, 0666);
        if (fd_dst < 0) {
                printf("Can't open file %s (%s)\n", dst, strerror(errno));
                goto out;
index 872d8af..c600dc2 100644 (file)
@@ -44,6 +44,8 @@ int mmap_fdt(const char *cmdname, const char *fname, size_t size_inc,
  *
  * This uses read()/write() to copy file @src to file @dst
  *
+ * If @dst exists, it is overwritten and truncated to the correct size.
+ *
  * @src: Filename to read from
  * @dst: Filename to write to
  * @return 0 if OK, -1 on error