10000 [3.11] gh-114670: Fix `_testbuffer` module initialization (GH-114672)… · python/cpython@f4146a2 · GitHub
[go: up one dir, main page]

Skip to content

Commit f4146a2

Browse files
[3.11] gh-114670: Fix _testbuffer module initialization (GH-114672) (#115271)
(cherry picked from commit 3a5b38e) Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
1 parent 562fe5f commit f4146a2

File tree

1 file changed

+74
-53
lines changed

1 file changed

+74
-53
lines changed

‎< 8000 !-- -->Modules/_testbuffer.c

Lines changed: 74 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2825,70 +2825,91 @@ static struct PyModuleDef _testbuffermodule = {
28252825
NULL
28262826
};
28272827

2828-
2829-
PyMODINIT_FUNC
2830-
PyInit__testbuffer(void)
2828+
static int
2829+
_testbuffer_exec(PyObject *mod)
28312830
{
2832-
PyObject *m;
2833-
2834-
m = PyModule_Create(&_testbuffermodule);
2835-
if (m == NULL)
2836-
return NULL;
2837-
28382831
Py_SET_TYPE(&NDArray_Type, &PyType_Type);
2839-
Py_INCREF(&NDArray_Type);
2840-
PyModule_AddObject(m, "ndarray", (PyObject *)&NDArray_Type);
2832+
if (PyModule_AddType(mod, &NDArray_Type) < 0) {
2833+
return -1;
2834+
}
28412835

28422836
Py_SET_TYPE(&StaticArray_Type, &PyType_Type);
2843-
Py_INCREF(&StaticArray_Type);
2844-
PyModule_AddObject(m, "staticarray", (PyObject *)&StaticArray_Type);
2837+
if (PyModule_AddType(mod, &StaticArray_Type) < 0) {
2838+
return -1;
2839+
}
28452840

28462841
structmodule = PyImport_ImportModule("struct");
2847-
if (structmodule == NULL)
2848-
return NULL;
2842+
if (structmodule == NULL) {
2843+
return -1;
2844+
}
28492845

28502846
Struct = PyObject_GetAttrString(structmodule, "Struct");
2847+
if (Struct == NULL) {
2848+
return -1;
2849+
}
28512850
calcsize = PyObject_GetAttrString(structmo 8000 dule, "calcsize");
2852-
if (Struct == NULL || calcsize == NULL)
2853-
return NULL;
2851+
if (calcsize == NULL) {
2852+
return -1;
2853+
}
28542854

28552855
simple_format = PyUnicode_FromString(simple_fmt);
2856-
if (simple_format == NULL)
2857-
return NULL;
2858-
2859-
PyModule_AddIntMacro(m, ND_MAX_NDIM);
2860-
PyModule_AddIntMacro(m, ND_VAREXPORT);
2861-
PyModule_AddIntMacro(m, ND_WRITABLE);
2862-
PyModule_AddIntMacro(m, ND_FORTRAN);
2863-
PyModule_AddIntMacro(m, ND_SCALAR);
2864-
PyModule_AddIntMacro(m, ND_PIL);
2865-
PyModule_AddIntMacro(m, ND_GETBUF_FAIL);
2866-
PyModule_AddIntMacro(m, ND_GETBUF_UNDEFINED);
2867-
PyModule_AddIntMacro(m, ND_REDIRECT);
2868-
2869-
PyModule_AddIntMacro(m, PyBUF_SIMPLE);
2870-
PyModule_AddIntMacro(m, PyBUF_WRITABLE);
2871-
PyModule_AddIntMacro(m, PyBUF_FORMAT);
2872-
PyModule_AddIntMacro(m, PyBUF_ND);
2873-
PyModule_AddIntMacro(m, PyBUF_STRIDES);
2874-
PyModule_AddIntMacro(m, PyBUF_INDIRECT);
2875-
PyModule_AddIntMacro(m, PyBUF_C_CONTIGUOUS);
2876-
PyModule_AddIntMacro(m, PyBUF_F_CONTIGUOUS);
2877-
PyModule_AddIntMacro(m, PyBUF_ANY_CONTIGUOUS);
2878-
PyModule_AddIntMacro(m, PyBUF_FULL);
2879-
PyModule_AddIntMacro(m, PyBUF_FULL_RO);
2880-
PyModule_AddIntMacro(m, PyBUF_RECORDS);
2881-
PyModule_AddIntMacro(m, PyBUF_RECORDS_RO);
2882-
PyModule_AddIntMacro(m, PyBUF_STRIDED);
2883-
PyModule_AddIntMacro(m, PyBUF_STRIDED_RO);
2884-
PyModule_AddIntMacro(m, PyBUF_CONTIG);
2885-
PyModule_AddIntMacro(m, PyBUF_CONTIG_RO);
2886-
2887-
PyModule_AddIntMacro(m, PyBUF_READ);
2888-
PyModule_AddIntMacro(m, PyBUF_WRITE);
2889-
2890-
return m;
2891-
}
2856+
if (simple_format == NULL) {
2857+
return -1;
2858+
}
28922859

2860+
#define ADD_INT_MACRO(mod, macro) \
2861+
do { \
2862+
if (PyModule_AddIntConstant(mod, #macro, macro) < 0) { \
2863+
return -1; \
2864+
} \
2865+
} while (0)
2866+
2867+
ADD_INT_MACRO(mod, ND_MAX_NDIM);
2868+
ADD_INT_MACRO(mod, ND_VAREXPORT);
2869+
ADD_INT_MACRO(mod, ND_WRITABLE);
2870+
ADD_INT_MACRO(mod, ND_FORTRAN);
2871+
ADD_INT_MACRO(mod, ND_SCALAR);
2872+
ADD_INT_MACRO(mod, ND_PIL);
2873+
ADD_INT_MACRO(mod, ND_GETBUF_FAIL);
2874+
ADD_INT_MACRO(mod, ND_GETBUF_UNDEFINED);
2875+
ADD_INT_MACRO(mod, ND_REDIRECT);
2876+
2877+
ADD_INT_MACRO(mod, PyBUF_SIMPLE);
2878+
ADD_INT_MACRO(mod, PyBUF_WRITABLE);
2879+
ADD_INT_MACRO(mod, PyBUF_FORMAT);
2880+
ADD_INT_MACRO(mod, PyBUF_ND);
2881+
ADD_INT_MACRO(mod, PyBUF_STRIDES);
2882+
ADD_INT_MACRO(mod, PyBUF_INDIRECT);
2883+
ADD_INT_MACRO(mod, PyBUF_C_CONTIGUOUS);
2884+
ADD_INT_MACRO(mod, PyBUF_F_CONTIGUOUS);
2885+
ADD_INT_MACRO(mod, PyBUF_ANY_CONTIGUOUS);
2886+
ADD_INT_MACRO(mod, PyBUF_FULL);
2887+
ADD_INT_MACRO(mod, PyBUF_FULL_RO);
2888+
ADD_INT_MACRO(mod, PyBUF_RECORDS);
2889+
ADD_INT_MACRO(mod, PyBUF_RECORDS_RO);
2890+
ADD_INT_MACRO(mod, PyBUF_STRIDED);
2891+
ADD_INT_MACRO(mod, PyBUF_STRIDED_RO);
2892+
ADD_INT_MACRO(mod, PyBUF_CONTIG);
2893+
ADD_INT_MACRO(mod, PyBUF_CONTIG_RO);
2894+
2895+
ADD_INT_MACRO(mod, PyBUF_READ);
2896+
ADD_INT_MACRO(mod, PyBUF_WRITE);
2897+
2898+
#undef ADD_INT_MACRO
28932899

2900+
return 0;
2901+
}
28942902

2903+
PyMODINIT_FUNC
2904+
PyInit__testbuffer(void)
2905+
{
2906+
PyObject *mod = PyModule_Create(&_testbuffermodule);
2907+
if (mod == NULL) {
2908+
return NULL;
2909+
}
2910+
if (_testbuffer_exec(mod) < 0) {
2911+
Py_DECREF(mod);
2912+
return NULL;
2913+
}
2914+
return mod;
2915+
}

0 commit comments

Comments
 (0)
0