[vlc-devel] [PATCH v2 7/13] core: add vlc_MakeTmpFile() helper

Lyndon Brown jnqnfe at gmail.com
Tue Oct 6 07:59:29 CEST 2020


From: Lyndon Brown <jnqnfe at gmail.com>
Date: Tue, 6 Oct 2020 01:08:32 +0100
Subject: core: add vlc_MakeTmpFile() helper

to avoid messy and duplicated code creating temporary files.

diff --git a/include/vlc_fs.h b/include/vlc_fs.h
index f3f50ea431..50ec52c299 100644
--- a/include/vlc_fs.h
+++ b/include/vlc_fs.h
@@ -99,6 +99,21 @@ VLC_API int vlc_openat(int fd, const char *filename, int flags, ...) VLC_USED;
 
 VLC_API int vlc_mkstemp( char * );
 
+/**
+ * Temporary file creation helper
+ *
+ * Creates a unique temporary file, using config_GetTempPath() to determine the
+ * directory in which to create it, and using vlc_mkstemp() for the creation.
+ *
+ * Note, the returned `path` pointer must be free'd with free(), except when
+ * the returned file descriptor is -1 indicating error, where is it undefined.
+ *
+ * @param path [OUT] full path of the created file.
+ * @param filetemplate filename template, which must end with a sequence of 'XXXXXX'.
+ * @return file descriptor, or -1 on error.
+ */
+VLC_API int vlc_MakeTmpFile( char **path, const char *filetemplate ) VLC_USED;
+
 /**
  * Duplicates a file descriptor. The new file descriptor has the close-on-exec
  * descriptor flag preset.
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index 028891b3c9..d783c3546c 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -432,6 +432,7 @@ vlc_loaddir
 vlc_lstat
 vlc_mkdir
 vlc_mkstemp
+vlc_MakeTmpFile
 vlc_open
 vlc_openat
 vlc_memfd
diff --git a/src/text/filesystem.c b/src/text/filesystem.c
index 2f3b6470c8..fa518f6b6e 100644
--- a/src/text/filesystem.c
+++ b/src/text/filesystem.c
@@ -30,6 +30,7 @@
 
 #include <vlc_common.h>
 #include <vlc_fs.h>
+#include <vlc_configuration.h>
 #include <vlc_sort.h>
 
 #include <assert.h>
@@ -242,3 +243,21 @@ VLC_WEAK int vlc_mkstemp(char *template)
     errno = EEXIST;
     return -1;
 }
+
+int vlc_MakeTmpFile( char **path, const char *filetemplate )
+{
+    char *tmpdir = config_GetTempPath();
+    if (tmpdir == NULL)
+        return -1;
+
+    if (asprintf(path, "%s"DIR_SEP"%s", tmpdir, filetemplate) < 0) {
+        free(tmpdir);
+        return -1;
+    }
+    free(tmpdir);
+
+    int fd = vlc_mkstemp(*path);
+    if (fd == -1)
+        free(*path);
+    return fd;
+}



More information about the vlc-devel mailing list