From d1b1c885d8f276a0b1ff2e327270916396a8b842 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Mon, 4 Apr 2022 20:13:42 +0300 Subject: bpo-47208: Allow vendors to override CTYPES_MAX_ARGCOUNT (GH-32297) --- Lib/ctypes/test/test_callbacks.py | 3 +-- Misc/NEWS.d/next/Library/2022-04-04-08-54-31.bpo-47208.cOh9xZ.rst | 1 + Modules/_ctypes/_ctypes.c | 1 + Modules/_ctypes/ctypes.h | 4 +++- 4 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2022-04-04-08-54-31.bpo-47208.cOh9xZ.rst diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py index 5561ffe..1099cf9 100644 --- a/Lib/ctypes/test/test_callbacks.py +++ b/Lib/ctypes/test/test_callbacks.py @@ -4,6 +4,7 @@ from test import support from ctypes import * from ctypes.test import need_symbol +from _ctypes import CTYPES_MAX_ARGCOUNT import _ctypes_test class Callbacks(unittest.TestCase): @@ -293,8 +294,6 @@ class SampleCallbacksTestCase(unittest.TestCase): def func(*args): return len(args) - CTYPES_MAX_ARGCOUNT = 1024 - # valid call with nargs <= CTYPES_MAX_ARGCOUNT proto = CFUNCTYPE(c_int, *(c_int,) * CTYPES_MAX_ARGCOUNT) cb = proto(func) diff --git a/Misc/NEWS.d/next/Library/2022-04-04-08-54-31.bpo-47208.cOh9xZ.rst b/Misc/NEWS.d/next/Library/2022-04-04-08-54-31.bpo-47208.cOh9xZ.rst new file mode 100644 index 0000000..a5da321 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-04-04-08-54-31.bpo-47208.cOh9xZ.rst @@ -0,0 +1 @@ +Allow vendors to override :const:`CTYPES_MAX_ARGCOUNT`. diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 9177225..0415923 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -5781,6 +5781,7 @@ _ctypes_add_objects(PyObject *mod) #endif MOD_ADD("RTLD_LOCAL", PyLong_FromLong(RTLD_LOCAL)); MOD_ADD("RTLD_GLOBAL", PyLong_FromLong(RTLD_GLOBAL)); + MOD_ADD("CTYPES_MAX_ARGCOUNT", PyLong_FromLong(CTYPES_MAX_ARGCOUNT)); MOD_ADD("ArgumentError", Py_NewRef(PyExc_ArgError)); return 0; #undef MOD_ADD diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index 0badb48..da1941c 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -18,7 +18,9 @@ * This limit is enforced for the `alloca()` call in `_ctypes_callproc`, * to avoid allocating a massive buffer on the stack. */ -#define CTYPES_MAX_ARGCOUNT 1024 +#ifndef CTYPES_MAX_ARGCOUNT + #define CTYPES_MAX_ARGCOUNT 1024 +#endif typedef struct tagPyCArgObject PyCArgObject; typedef struct tagCDataObject CDataObject; -- cgit v0.12