]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-1635741: Port sha256 module to multiphase init (PEP 489) (GH-21189)
authorMohamed Koubaa <koubaa.m@gmail.com>
Fri, 3 Jul 2020 08:59:47 +0000 (03:59 -0500)
committerGitHub <noreply@github.com>
Fri, 3 Jul 2020 08:59:47 +0000 (17:59 +0900)
Misc/NEWS.d/next/Core and Builtins/2020-07-01-20-17-38.bpo-1635741.-AtPYu.rst [new file with mode: 0644]
Modules/sha256module.c

diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-07-01-20-17-38.bpo-1635741.-AtPYu.rst b/Misc/NEWS.d/next/Core and Builtins/2020-07-01-20-17-38.bpo-1635741.-AtPYu.rst
new file mode 100644 (file)
index 0000000..c529923
--- /dev/null
@@ -0,0 +1 @@
+Port :mod:`sha256` to multiphase initialization\r
index 261f9daee280728fbc4ec0dbfc895b874fb94456..06e4430bd7c33365f659342f997896001ddfa935 100644 (file)
@@ -681,43 +681,45 @@ static struct PyMethodDef SHA_functions[] = {
     {NULL,      NULL}            /* Sentinel */
 };
 
-
-/* Initialize this module. */
-
-static struct PyModuleDef _sha256module = {
-        PyModuleDef_HEAD_INIT,
-        "_sha256",
-        NULL,
-        -1,
-        SHA_functions,
-        NULL,
-        NULL,
-        NULL,
-        NULL
-};
-
-PyMODINIT_FUNC
-PyInit__sha256(void)
+static int sha256_exec(PyObject *module)
 {
-    PyObject *m;
-
     Py_SET_TYPE(&SHA224type, &PyType_Type);
     if (PyType_Ready(&SHA224type) < 0) {
-        return NULL;
+        return -1;
     }
     Py_SET_TYPE(&SHA256type, &PyType_Type);
     if (PyType_Ready(&SHA256type) < 0) {
-        return NULL;
+        return -1;
     }
 
-    m = PyModule_Create(&_sha256module);
-    if (m == NULL)
-        return NULL;
-
     Py_INCREF((PyObject *)&SHA224type);
-    PyModule_AddObject(m, "SHA224Type", (PyObject *)&SHA224type);
+    if (PyModule_AddObject(module, "SHA224Type", (PyObject *)&SHA224type) < 0) {
+        Py_DECREF((PyObject *)&SHA224type);
+        return -1;
+    }
     Py_INCREF((PyObject *)&SHA256type);
-    PyModule_AddObject(m, "SHA256Type", (PyObject *)&SHA256type);
-    return m;
+    if (PyModule_AddObject(module, "SHA256Type", (PyObject *)&SHA256type) < 0) {
+        Py_DECREF((PyObject *)&SHA256type);
+        return -1;
+    }
+    return 0;
+}
+
+static PyModuleDef_Slot _sha256_slots[] = {
+    {Py_mod_exec, sha256_exec},
+    {0, NULL}
+};
+
+static struct PyModuleDef _sha256module = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = "_sha256",
+    .m_methods = SHA_functions,
+    .m_slots = _sha256_slots,
+};
 
+/* Initialize this module. */
+PyMODINIT_FUNC
+PyInit__sha256(void)
+{
+    return PyModuleDef_Init(&_sha256module);
 }