diff --git a/common/flatpak-bwrap-private.h b/common/flatpak-bwrap-private.h index 9effed8a..d7a73304 100644 --- a/common/flatpak-bwrap-private.h +++ b/common/flatpak-bwrap-private.h @@ -63,6 +63,11 @@ void flatpak_bwrap_append_bwrap (FlatpakBwrap *bwrap, FlatpakBwrap *other); /* Steals the fds */ void flatpak_bwrap_append_args (FlatpakBwrap *bwrap, GPtrArray *other_array); +gboolean flatpak_bwrap_add_args_data_fd_dup (FlatpakBwrap *bwrap, + const char *op, + int fd, + const char *path_optional, + GError **error); void flatpak_bwrap_add_args_data_fd (FlatpakBwrap *bwrap, const char *op, int fd, diff --git a/common/flatpak-bwrap.c b/common/flatpak-bwrap.c index f7e8b10e..a3d29782 100644 --- a/common/flatpak-bwrap.c +++ b/common/flatpak-bwrap.c @@ -146,6 +146,26 @@ flatpak_bwrap_add_fd (FlatpakBwrap *bwrap, g_array_append_val (bwrap->fds, fd); } +gboolean +flatpak_bwrap_add_args_data_fd_dup (FlatpakBwrap *bwrap, + const char *op, + int fd, + const char *path_optional, + GError **error) +{ + glnx_autofd int fd_dup = -1; + + fd_dup = fcntl (fd, F_DUPFD_CLOEXEC, 3); + if (fd_dup < 0) + return glnx_throw_errno_prefix (error, "Failed to dup fd %d", fd); + + flatpak_bwrap_add_args_data_fd (bwrap, + op, + g_steal_fd (&fd_dup), + path_optional); + return TRUE; +} + void flatpak_bwrap_add_arg_printf (FlatpakBwrap *bwrap, const char *format, ...) {