[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