[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