[vlc-devel] [PATCH 1/2] filesystem: add vlc_dup2() wrapper

Thomas Guillem thomas at gllm.fr
Mon Nov 30 09:43:16 CET 2020


Set LGTM

On Sun, Nov 29, 2020, at 14:56, remi at remlab.net wrote:
> From: RĂ©mi Denis-Courmont <remi at remlab.net>
> 
> ---
>  include/vlc_fs.h       | 17 +++++++++++++++++
>  src/libvlccore.sym     |  1 +
>  src/posix/filesystem.c | 12 ++++++++++++
>  src/win32/filesystem.c |  8 ++++++++
>  4 files changed, 38 insertions(+)
> 
> diff --git a/include/vlc_fs.h b/include/vlc_fs.h
> index 4a50288be0..9ad2028053 100644
> --- a/include/vlc_fs.h
> +++ b/include/vlc_fs.h
> @@ -110,6 +110,23 @@ VLC_API int vlc_mkstemp( char * );
>   */
>  VLC_API int vlc_dup(int oldfd) VLC_USED;
>  
> +/**
> + * Replaces a file descriptor.
> + *
> + * This function duplicates a file descriptor to a specified file descriptor.
> + * This is primarily used to atomically replace a described file.
> + *
> + * @param oldfd source file descriptor to copy
> + * @param newfd destination file descriptor to replace
> + *
> + * @note Contrary to standard dup2(), the new file descriptor has the
> + * close-on-exec descriptor flag preset.
> + *
> + * @retval newfd success
> + * @retval -1 failure (see @c errno)
> + */
> +VLC_API int vlc_dup2(int oldfd, int newfd);
> +
>  /**
>   * Creates a pipe (see "man pipe" for further reference). The new file
>   * descriptors have the close-on-exec flag preset.
> diff --git a/src/libvlccore.sym b/src/libvlccore.sym
> index e3a2de9f6d..2cfe0d376c 100644
> --- a/src/libvlccore.sym
> +++ b/src/libvlccore.sym
> @@ -448,6 +448,7 @@ vlc_unlink
>  vlc_rename
>  vlc_getcwd
>  vlc_dup
> +vlc_dup2
>  vlc_pipe
>  vlc_write
>  vlc_writev
> diff --git a/src/posix/filesystem.c b/src/posix/filesystem.c
> index 60a997d9e0..18105a643c 100644
> --- a/src/posix/filesystem.c
> +++ b/src/posix/filesystem.c
> @@ -178,6 +178,18 @@ int vlc_dup (int oldfd)
>      return fcntl (oldfd, F_DUPFD_CLOEXEC, 0);
>  }
>  
> +int vlc_dup2(int oldfd, int newfd)
> +{
> +#ifdef HAVE_DUP3
> +    return dup3(oldfd, newfd, O_CLOEXEC);
> +#else
> +    int ret = dup2(oldfd, newfd);
> +    if (ret >= 0)
> +        vlc_cloexec(newfd);
> +    return ret;
> +#endif
> +}
> +
>  int vlc_pipe (int fds[2])
>  {
>  #ifdef HAVE_PIPE2
> diff --git a/src/win32/filesystem.c b/src/win32/filesystem.c
> index d8e3cc1127..09b8ec70d3 100644
> --- a/src/win32/filesystem.c
> +++ b/src/win32/filesystem.c
> @@ -304,6 +304,14 @@ int vlc_dup (int oldfd)
>      return fd;
>  }
>  
> +int vlc_dup2(int oldfd, int newfd)
> +{
> +    int fd = dup2(oldfd, newfd);
> +    if (fd != -1)
> +        setmode(fd, O_BINARY);
> +    return fd;
> +}
> +
>  int vlc_pipe (int fds[2])
>  {
>  #if VLC_WINSTORE_APP
> -- 
> 2.29.2
> 
> _______________________________________________
> 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