[vlc-devel] [PATCH v2 9/13] fs: add optional dir param to vlc_MakeTmpFile()
Thomas Guillem
thomas at gllm.fr
Tue Oct 6 09:26:24 CEST 2020
Should be squashed with 7/13
Or maybe, add a new function for that particular case ?
On Tue, Oct 6, 2020, at 08:00, Lyndon Brown wrote:
> From: Lyndon Brown <jnqnfe at gmail.com>
> Date: Tue, 6 Oct 2020 01:27:52 +0100
> Subject: fs: add optional dir param to vlc_MakeTmpFile()
>
> to avoid code duplication in cases where caller wants to possibly control
> the directory chosen rather than just rely on default temporary directory.
>
> diff --git a/include/vlc_fs.h b/include/vlc_fs.h
> index 50ec52c299..07bf682c66 100644
> --- a/include/vlc_fs.h
> +++ b/include/vlc_fs.h
> @@ -103,16 +103,19 @@ 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.
> + * directory in which to create it (unless the caller specifies an
> alternaive
> + * location), 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'.
> + * @param directory an optional caller chosen directory to use instead
> of the one
> + * returned by config_GetTempPath().
> * @return file descriptor, or -1 on error.
> */
> -VLC_API int vlc_MakeTmpFile( char **path, const char *filetemplate )
> VLC_USED;
> +VLC_API int vlc_MakeTmpFile( char **path, const char *filetemplate,
> const char *directory ) VLC_USED;
>
> /**
> * Duplicates a file descriptor. The new file descriptor has the close-on-exec
> diff --git a/src/linux/filesystem.c b/src/linux/filesystem.c
> index c2ec9c3a5a..d08e7a59ca 100644
> --- a/src/linux/filesystem.c
> +++ b/src/linux/filesystem.c
> @@ -59,7 +59,7 @@ int vlc_memfd(void)
> * EISDIR, or EOPNOTSUPP, cf. man open(2). */
> const char *filetemplate = PACKAGE_NAME"XXXXXX";
> char *bufpath;
> - fd = vlc_MakeTmpFile(&bufpath, filetemplate);
> + fd = vlc_MakeTmpFile(&bufpath, filetemplate, NULL);
>
> if (fd != -1)
> unlink(bufpath);
> diff --git a/src/posix/filesystem.c b/src/posix/filesystem.c
> index 01d4aa1ab0..6e8332ebc2 100644
> --- a/src/posix/filesystem.c
> +++ b/src/posix/filesystem.c
> @@ -92,7 +92,7 @@ VLC_WEAK int vlc_memfd(void)
> {
> const char *filetemplate = PACKAGE_NAME"XXXXXX";
> char *bufpath;
> - int fd = vlc_MakeTmpFile(&bufpath, filetemplate);
> + int fd = vlc_MakeTmpFile(&bufpath, filetemplate, NULL);
>
> if (fd != -1)
> unlink (bufpath);
> diff --git a/src/text/filesystem.c b/src/text/filesystem.c
> index fa518f6b6e..f73f16bac0 100644
> --- a/src/text/filesystem.c
> +++ b/src/text/filesystem.c
> @@ -244,20 +244,25 @@ VLC_WEAK int vlc_mkstemp(char *template)
> return -1;
> }
>
> -int vlc_MakeTmpFile( char **path, const char *filetemplate )
> +int vlc_MakeTmpFile( char **path, const char *filetemplate, const char
> *directory )
> {
> - char *tmpdir = config_GetTempPath();
> - if (tmpdir == NULL)
> - return -1;
> + char *dir_actual;
> + if (directory != NULL)
> + dir_actual = (char *)directory;
> + else {
> + dir_actual = config_GetTempPath();
> + if (dir_actual == NULL)
> + return -1;
> + }
>
> - if (asprintf(path, "%s"DIR_SEP"%s", tmpdir, filetemplate) < 0) {
> - free(tmpdir);
> - return -1;
> + int fd = -1;
> + if (asprintf(path, "%s"DIR_SEP"%s", dir_actual, filetemplate) >= 0) {
> + fd = vlc_mkstemp(*path);
> + if (fd == -1)
> + free(*path);
> }
> - free(tmpdir);
>
> - int fd = vlc_mkstemp(*path);
> - if (fd == -1)
> - free(*path);
> + if (directory == NULL)
> + free(dir_actual);
> return fd;
> }
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list