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

Skip to content

Commit d19f067

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

File tree

1 file changed

+74
-53
lines changed

1 file changed

+74
-53
lines changed

Modules/_testbuffer.c

Lines changed: 74 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2819,70 +2819,91 @@ static struct PyModuleDef _testbuffermodule = {
28192819
NULL
28202820
};
28212821

2822-
2823-
PyMODINIT_FUNC
2824-
PyInit__testbuffer(void)
2822+
static int
2823+
_testbuffer_exec(PyObject *mod)
28252824
{
2826-
PyObject *m;
2827-
2828-
m = PyModule_Create(&_testbuffermodule);
2829-
if (m == NULL)
2830-
return NULL;
2831-
28322825
Py_SET_TYPE(&NDArray_Type, &PyType_Type);
2833-
Py_INCREF(&NDArray_Type);
2834-
PyModule_AddObject(m, "ndarray", (PyObject *)&NDArray_Type);
2826+
if (PyModule_AddType(mod, &NDArray_Type) < 0) {
2827+
return -1;
2828+
}
28352829

28362830
Py_SET_TYPE(&StaticArray_Type, &PyType_Type);
2837-
Py_INCREF(&StaticArray_Type);
2838-
PyModule_AddObject(m, "staticarray", (PyObject *)&StaticArray_Type);
2831+
if (PyModule_AddType(mod, &StaticArray_Type) < 0) {
2832+
return -1;
2833+
}
28392834

28402835
structmodule = PyImport_ImportModule("struct");
2841-
if (structmodule == NULL)
2842-
return NULL;
2836+
if (structmodule == NULL) {
2837+
return -1;
2838+
}
28432839

28442840
Struct = PyObject_GetAttrString(structmodule, "Struct");
2841+
if (Struct == NULL) {
2842+
return -1;
2843+
}
28452844
calcsize = PyObject_GetAttrString(structmodule, "calcsize");
2846-
if (Struct == NULL || calcsize == NULL)
2847-
return NULL;
2845+
if (calcsize == NULL) {
2846+
return -1;
2847+
}
28482848

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

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

2894+
return 0;
2895+
}
28882896

2897+
PyMODINIT_FUNC
2898+
PyInit__testbuffer(void)
2899+
{
2900+
PyObject *mod = PyModule_Create(&_testbuffermodule);
2901+
if (mod == NULL) {
2902+
return NULL;
2903+
}
2904+
if (_testbuffer_exec(mod) < 0) {
2905+
Py_DECREF(mod);
2906+
return NULL;
2907+
}
2908+
return mod;
2909+
}

0 commit comments

Comments
 (0)
0