mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
bpo-26836: Add os.memfd_create() (#13567)
* bpo-26836: Add os.memfd_create() * Use the glibc wrapper for memfd_create() Co-Authored-By: Christian Heimes <christian@python.org> * Fix deletions caused by autoreconf. * Use MFD_CLOEXEC as the default value for *flags*. * Add memset_s to configure.ac. * Revert memset_s changes. * Apply the requested changes. * Tweak the docs.
This commit is contained in:
parent
0c2f930564
commit
43fdbd2729
10 changed files with 259 additions and 12 deletions
|
@ -389,6 +389,19 @@ extern char *ctermid_r(char *);
|
|||
#define HAVE_STRUCT_STAT_ST_FSTYPE 1
|
||||
#endif
|
||||
|
||||
/* memfd_create is either defined in sys/mman.h or sys/memfd.h
|
||||
* linux/memfd.h defines additional flags
|
||||
*/
|
||||
#ifdef HAVE_SYS_MMAN_H
|
||||
#include <sys/mman.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_MEMFD_H
|
||||
#include <sys/memfd.h>
|
||||
#endif
|
||||
#ifdef HAVE_LINUX_MEMFD_H
|
||||
#include <linux/memfd.h>
|
||||
#endif
|
||||
|
||||
#ifdef _Py_MEMORY_SANITIZER
|
||||
# include <sanitizer/msan_interface.h>
|
||||
#endif
|
||||
|
@ -11897,6 +11910,31 @@ os_urandom_impl(PyObject *module, Py_ssize_t size)
|
|||
return bytes;
|
||||
}
|
||||
|
||||
#ifdef HAVE_MEMFD_CREATE
|
||||
/*[clinic input]
|
||||
os.memfd_create
|
||||
|
||||
name: FSConverter
|
||||
flags: unsigned_int(bitwise=True, c_default="MFD_CLOEXEC") = MFD_CLOEXEC
|
||||
|
||||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
os_memfd_create_impl(PyObject *module, PyObject *name, unsigned int flags)
|
||||
/*[clinic end generated code: output=6681ede983bdb9a6 input=a42cfc199bcd56e9]*/
|
||||
{
|
||||
int fd;
|
||||
const char *bytes = PyBytes_AS_STRING(name);
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
fd = memfd_create(bytes, flags);
|
||||
Py_END_ALLOW_THREADS
|
||||
if (fd == -1) {
|
||||
return PyErr_SetFromErrno(PyExc_OSError);
|
||||
}
|
||||
return PyLong_FromLong(fd);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Terminal size querying */
|
||||
|
||||
static PyTypeObject* TerminalSizeType;
|
||||
|
@ -13554,6 +13592,7 @@ static PyMethodDef posix_methods[] = {
|
|||
OS_SCANDIR_METHODDEF
|
||||
OS_FSPATH_METHODDEF
|
||||
OS_GETRANDOM_METHODDEF
|
||||
OS_MEMFD_CREATE_METHODDEF
|
||||
#ifdef MS_WINDOWS
|
||||
OS__ADD_DLL_DIRECTORY_METHODDEF
|
||||
OS__REMOVE_DLL_DIRECTORY_METHODDEF
|
||||
|
@ -14003,6 +14042,27 @@ all_ins(PyObject *m)
|
|||
if (PyModule_AddIntMacro(m, GRND_RANDOM)) return -1;
|
||||
if (PyModule_AddIntMacro(m, GRND_NONBLOCK)) return -1;
|
||||
#endif
|
||||
#ifdef HAVE_MEMFD_CREATE
|
||||
if (PyModule_AddIntMacro(m, MFD_CLOEXEC)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_ALLOW_SEALING)) return -1;
|
||||
#ifdef MFD_HUGETLB
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGETLB)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_SHIFT)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_MASK)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_64KB)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_512KB)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_1MB)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_2MB)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_8MB)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_16MB)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_32MB)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_256MB)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_512MB)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_1GB)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_2GB)) return -1;
|
||||
if (PyModule_AddIntMacro(m, MFD_HUGE_16GB)) return -1;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__)
|
||||
if (PyModule_AddIntConstant(m, "_COPYFILE_DATA", COPYFILE_DATA)) return -1;
|
||||
|
@ -14119,6 +14179,10 @@ static const char * const have_functions[] = {
|
|||
"HAVE_LUTIMES",
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_MEMFD_CREATE
|
||||
"HAVE_MEMFD_CREATE",
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_MKDIRAT
|
||||
"HAVE_MKDIRAT",
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue