From 7fb8303fe94e23c267db66a899db2504825868b6 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Tue, 1 Apr 2025 03:25:02 +0800 Subject: [PATCH] FileDescriptor: provide fallback if F_DUPFD_CLOEXEC is undefined --- include/hyprutils/os/FileDescriptor.hpp | 5 +++++ src/os/FileDescriptor.cpp | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/hyprutils/os/FileDescriptor.hpp b/include/hyprutils/os/FileDescriptor.hpp index 96761d0..aa9dbf2 100644 --- a/include/hyprutils/os/FileDescriptor.hpp +++ b/include/hyprutils/os/FileDescriptor.hpp @@ -1,6 +1,11 @@ #pragma once #include + +#ifndef F_DUPFD_CLOEXEC +#define F_DUPFD_CLOEXEC F_DUPFD +#endif + namespace Hyprutils { namespace OS { class CFileDescriptor { diff --git a/src/os/FileDescriptor.cpp b/src/os/FileDescriptor.cpp index f13a3ee..3d3c766 100644 --- a/src/os/FileDescriptor.cpp +++ b/src/os/FileDescriptor.cpp @@ -55,7 +55,14 @@ CFileDescriptor CFileDescriptor::duplicate(int flags) const { if (m_fd == -1) return {}; - return CFileDescriptor{fcntl(m_fd, flags, 0)}; + int new_fd; +#ifdef F_DUPFD_CLOEXEC + new_fd = fcntl(m_fd, flags, 0); +#else + new_fd = fcntl(m_fd, flags | FD_CLOEXEC, 0); +#endif + + return CFileDescriptor{new_fd}; } bool CFileDescriptor::isClosed() const {