tools: Move copyfile() into a common file
authorSimon Glass <sjg@chromium.org>
Fri, 12 Nov 2021 19:28:04 +0000 (12:28 -0700)
committerSimon Glass <sjg@chromium.org>
Wed, 26 Jan 2022 15:50:43 +0000 (08:50 -0700)
This function is useful in other places. Move it to a common file.

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

index 5c8920d..4370de2 100644 (file)
@@ -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;
+}
index 0e8ee79..872d8af 100644 (file)
@@ -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_ */
index 9ac5256..0e31f7d 100644 (file)
@@ -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
  *