]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arch: sandbox: Add function to create temporary files
authorSean Anderson <seanga2@gmail.com>
Sat, 4 Nov 2023 20:37:51 +0000 (16:37 -0400)
committerTom Rini <trini@konsulko.com>
Thu, 16 Nov 2023 17:43:49 +0000 (12:43 -0500)
When working with sparse data buffers that may be larger than the address
space, it is convenient to work with files instead. Add a function to create
temporary files of a certain size.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
arch/sandbox/cpu/os.c
include/os.h

index 85d0d6a17035d7038718f9316b4a7f140d1b4f44..8847c4cd0a8721ebdfbecb6f958fd99595895e54 100644 (file)
@@ -282,6 +282,23 @@ int os_persistent_file(char *buf, int maxsize, const char *fname)
        return 0;
 }
 
+int os_mktemp(char *fname, off_t size)
+{
+       int fd;
+
+       fd = mkostemp(fname, O_CLOEXEC);
+       if (fd < 0)
+               return -errno;
+
+       if (unlink(fname) < 0)
+               return -errno;
+
+       if (ftruncate(fd, size))
+               return -errno;
+
+       return fd;
+}
+
 /* Restore tty state when we exit */
 static struct termios orig_term;
 static bool term_setup;
index fc8a1b15cbf08828a04d2634692f7da97f318d03..877404a6c1385134c975004a5c54c85c7a73dbce 100644 (file)
@@ -108,6 +108,19 @@ int os_unlink(const char *pathname);
  */
 int os_persistent_file(char *buf, int maxsize, const char *fname);
 
+/**
+ * os_mktemp() - Create a temporary file
+ * @fname: The template to use for the file name. This must end with 6 Xs. It
+ *         will be modified to the opened filename on success.
+ * @size: The size of the file
+ *
+ * Create a temporary file using @fname as a template, unlink it, and truncate
+ * it to @size.
+ *
+ * Return: A file descriptor, or negative errno on error
+ */
+int os_mktemp(char *fname, off_t size);
+
 /**
  * os_exit() - access to the OS exit() system call
  *