summaryrefslogtreecommitdiffstats
path: root/PC
diff options
context:
space:
mode:
authorAN Long <aisk@users.noreply.github.com>2023-04-12 10:41:21 (GMT)
committerGitHub <noreply@github.com>2023-04-12 10:41:21 (GMT)
commitdce2d38cb04b541bad477ccc1040a68fa70a9a69 (patch)
treeb4b40bcf4dce0fc1969ff0080ab6139c2228dfd0 /PC
parentf2b7ecb7783299c4555e89125ca9ba8e89854643 (diff)
downloadcpython-dce2d38cb04b541bad477ccc1040a68fa70a9a69.zip
cpython-dce2d38cb04b541bad477ccc1040a68fa70a9a69.tar.gz
cpython-dce2d38cb04b541bad477ccc1040a68fa70a9a69.tar.bz2
gh-103092: Isolate msvcrt (#103248)
Diffstat (limited to 'PC')
-rw-r--r--PC/msvcrtmodule.c53
1 files changed, 25 insertions, 28 deletions
diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c
index 6e8b423..de9a889 100644
--- a/PC/msvcrtmodule.c
+++ b/PC/msvcrtmodule.c
@@ -564,19 +564,6 @@ static struct PyMethodDef msvcrt_functions[] = {
{NULL, NULL}
};
-
-static struct PyModuleDef msvcrtmodule = {
- PyModuleDef_HEAD_INIT,
- "msvcrt",
- NULL,
- -1,
- msvcrt_functions,
- NULL,
- NULL,
- NULL,
- NULL
-};
-
static void
insertint(PyObject *d, char *name, int value)
{
@@ -605,14 +592,10 @@ insertptr(PyObject *d, char *name, void *value)
}
}
-PyMODINIT_FUNC
-PyInit_msvcrt(void)
+static int
+exec_module(PyObject* m)
{
int st;
- PyObject *m = PyModule_Create(&msvcrtmodule);
- if (m == NULL) {
- return NULL;
- }
PyObject *d = PyModule_GetDict(m); // Borrowed ref.
/* constants for the locking() function's mode argument */
@@ -645,21 +628,21 @@ PyInit_msvcrt(void)
st = PyModule_AddStringConstant(m, "VC_ASSEMBLY_PUBLICKEYTOKEN",
_VC_ASSEMBLY_PUBLICKEYTOKEN);
if (st < 0) {
- goto error;
+ return -1;
}
#endif
#ifdef _CRT_ASSEMBLY_VERSION
st = PyModule_AddStringConstant(m, "CRT_ASSEMBLY_VERSION",
_CRT_ASSEMBLY_VERSION);
if (st < 0) {
- goto error;
+ return -1;
}
#endif
#ifdef __LIBRARIES_ASSEMBLY_NAME_PREFIX
st = PyModule_AddStringConstant(m, "LIBRARIES_ASSEMBLY_NAME_PREFIX",
__LIBRARIES_ASSEMBLY_NAME_PREFIX);
if (st < 0) {
- goto error;
+ return -1;
}
#endif
@@ -671,20 +654,34 @@ PyInit_msvcrt(void)
_VC_CRT_BUILD_VERSION,
_VC_CRT_RBUILD_VERSION);
if (version == NULL) {
- goto error;
+ return -1;
}
st = PyModule_AddObjectRef(m, "CRT_ASSEMBLY_VERSION", version);
Py_DECREF(version);
if (st < 0) {
- goto error;
+ return -1;
}
#endif
/* make compiler warning quiet if st is unused */
(void)st;
- return m;
+ return 0;
+}
+
+static PyModuleDef_Slot msvcrt_slots[] = {
+ {Py_mod_exec, exec_module},
+ {0, NULL}
+};
-error:
- Py_DECREF(m);
- return NULL;
+static struct PyModuleDef msvcrtmodule = {
+ .m_base = PyModuleDef_HEAD_INIT,
+ .m_name = "msvcrt",
+ .m_methods = msvcrt_functions,
+ .m_slots = msvcrt_slots,
+};
+
+PyMODINIT_FUNC
+PyInit_msvcrt(void)
+{
+ return PyModuleDef_Init(&msvcrtmodule);
}