[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