#ifndef foopulsememfdwrappershfoo #define foopulsememfdwrappershfoo /*** This file is part of PulseAudio. Copyright 2016 Ahmed S. Darwish PulseAudio is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. PulseAudio is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with PulseAudio; if not, see . ***/ #if defined(HAVE_MEMFD) && !defined(HAVE_MEMFD_CREATE) #include #include /* * Before glibc version 2.27 there was no wrapper for memfd_create(2), * so we have to provide our own. * * Also define memfd fcntl sealing macros. While they are already * defined in the kernel header file , that file as * a whole conflicts with the original glibc header . */ static inline int memfd_create(const char *name, unsigned int flags) { return syscall(SYS_memfd_create, name, flags); } /* memfd_create(2) flags */ #ifndef MFD_CLOEXEC #define MFD_CLOEXEC 0x0001U #endif #ifndef MFD_ALLOW_SEALING #define MFD_ALLOW_SEALING 0x0002U #endif /* fcntl() seals-related flags */ #ifndef F_LINUX_SPECIFIC_BASE #define F_LINUX_SPECIFIC_BASE 1024 #endif #ifndef F_ADD_SEALS #define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9) #define F_GET_SEALS (F_LINUX_SPECIFIC_BASE + 10) #define F_SEAL_SEAL 0x0001 /* prevent further seals from being set */ #define F_SEAL_SHRINK 0x0002 /* prevent file from shrinking */ #define F_SEAL_GROW 0x0004 /* prevent file from growing */ #define F_SEAL_WRITE 0x0008 /* prevent writes */ #endif #endif /* HAVE_MEMFD && !HAVE_MEMFD_CREATE */ #endif