From cee38cf1e56fc09bbcac222ad804eed8a5539e67 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Sun, 3 Sep 2023 22:34:26 +0300 Subject: [PATCH] LibCore: Use SHM_ANON for anon_create() when available On FreeBSD and GNU/Hurd, SHM_ANON is a nice way to create anonymous files using the usual shm_open() API. This is a lot like the fallback shm_open() branch that follows, except we don't have to fool around with choosing a unique name (with retrying) and unlinking the file afterwards; it just does the right thing. Isn't this nice? --- Userland/Libraries/LibCore/System.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index b689a4c2be..ca4446a174 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -479,6 +479,15 @@ ErrorOr anon_create([[maybe_unused]] size_t size, [[maybe_unused]] int opti TRY(close(fd)); return Error::from_errno(saved_errno); } +#elif defined(SHM_ANON) + fd = shm_open(SHM_ANON, O_RDWR | O_CREAT | options, 0600); + if (fd < 0) + return Error::from_errno(errno); + if (::ftruncate(fd, size) < 0) { + auto saved_errno = errno; + TRY(close(fd)); + return Error::from_errno(saved_errno); + } #elif defined(AK_OS_BSD_GENERIC) || defined(AK_OS_EMSCRIPTEN) struct timespec time; clock_gettime(CLOCK_REALTIME, &time);