summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Modules/pwdmodule.c
diff options
context:
space:
mode:
authorshadchin <[email protected]>2022-04-18 12:39:32 +0300
committershadchin <[email protected]>2022-04-18 12:39:32 +0300
commitd4be68e361f4258cf0848fc70018dfe37a2acc24 (patch)
tree153e294cd97ac8b5d7a989612704a0c1f58e8ad4 /contrib/tools/python3/src/Modules/pwdmodule.c
parent260c02f5ccf242d9d9b8a873afaf6588c00237d6 (diff)
IGNIETFERRO-1816 Update Python 3 from 3.9.12 to 3.10.4
ref:9f96be6d02ee8044fdd6f124b799b270c20ce641
Diffstat (limited to 'contrib/tools/python3/src/Modules/pwdmodule.c')
-rw-r--r--contrib/tools/python3/src/Modules/pwdmodule.c65
1 files changed, 34 insertions, 31 deletions
diff --git a/contrib/tools/python3/src/Modules/pwdmodule.c b/contrib/tools/python3/src/Modules/pwdmodule.c
index 901a3ed9a2e..14d3f9dcb1c 100644
--- a/contrib/tools/python3/src/Modules/pwdmodule.c
+++ b/contrib/tools/python3/src/Modules/pwdmodule.c
@@ -59,8 +59,6 @@ get_pwd_state(PyObject *module)
return (pwdmodulestate *)state;
}
-#define modulestate_global get_pwd_state(PyState_FindModule(&pwdmodule))
-
static struct PyModuleDef pwdmodule;
#define DEFAULT_BUFFER_SIZE 1024
@@ -79,10 +77,10 @@ sets(PyObject *v, int i, const char* val)
}
static PyObject *
-mkpwent(struct passwd *p)
+mkpwent(PyObject *module, struct passwd *p)
{
int setIndex = 0;
- PyObject *v = PyStructSequence_New(modulestate_global->StructPwdType);
+ PyObject *v = PyStructSequence_New(get_pwd_state(module)->StructPwdType);
if (v == NULL)
return NULL;
@@ -194,7 +192,7 @@ pwd_getpwuid(PyObject *module, PyObject *uidobj)
Py_DECREF(uid_obj);
return NULL;
}
- retval = mkpwent(p);
+ retval = mkpwent(module, p);
#ifdef HAVE_GETPWUID_R
PyMem_RawFree(buf);
#endif
@@ -274,7 +272,7 @@ pwd_getpwnam_impl(PyObject *module, PyObject *name)
}
goto out;
}
- retval = mkpwent(p);
+ retval = mkpwent(module, p);
out:
PyMem_RawFree(buf);
Py_DECREF(bytes);
@@ -300,7 +298,7 @@ pwd_getpwall_impl(PyObject *module)
return NULL;
setpwent();
while ((p = getpwent()) != NULL) {
- PyObject *v = mkpwent(p);
+ PyObject *v = mkpwent(module, p);
if (v == NULL || PyList_Append(d, v) != 0) {
Py_XDECREF(v);
Py_DECREF(d);
@@ -323,6 +321,26 @@ static PyMethodDef pwd_methods[] = {
{NULL, NULL} /* sentinel */
};
+static int
+pwdmodule_exec(PyObject *module)
+{
+ pwdmodulestate *state = get_pwd_state(module);
+
+ state->StructPwdType = PyStructSequence_NewType(&struct_pwd_type_desc);
+ if (state->StructPwdType == NULL) {
+ return -1;
+ }
+ if (PyModule_AddType(module, state->StructPwdType) < 0) {
+ return -1;
+ }
+ return 0;
+}
+
+static PyModuleDef_Slot pwdmodule_slots[] = {
+ {Py_mod_exec, pwdmodule_exec},
+ {0, NULL}
+};
+
static int pwdmodule_traverse(PyObject *m, visitproc visit, void *arg) {
Py_VISIT(get_pwd_state(m)->StructPwdType);
return 0;
@@ -337,34 +355,19 @@ static void pwdmodule_free(void *m) {
static struct PyModuleDef pwdmodule = {
PyModuleDef_HEAD_INIT,
- "pwd",
- pwd__doc__,
- sizeof(pwdmodulestate),
- pwd_methods,
- NULL,
- pwdmodule_traverse,
- pwdmodule_clear,
- pwdmodule_free,
+ .m_name = "pwd",
+ .m_doc = pwd__doc__,
+ .m_size = sizeof(pwdmodulestate),
+ .m_methods = pwd_methods,
+ .m_slots = pwdmodule_slots,
+ .m_traverse = pwdmodule_traverse,
+ .m_clear = pwdmodule_clear,
+ .m_free = pwdmodule_free,
};
PyMODINIT_FUNC
PyInit_pwd(void)
{
- PyObject *m;
- if ((m = PyState_FindModule(&pwdmodule)) != NULL) {
- Py_INCREF(m);
- return m;
- }
- if ((m = PyModule_Create(&pwdmodule)) == NULL)
- return NULL;
-
- pwdmodulestate *state = PyModule_GetState(m);
- state->StructPwdType = PyStructSequence_NewType(&struct_pwd_type_desc);
- if (state->StructPwdType == NULL) {
- return NULL;
- }
- Py_INCREF(state->StructPwdType);
- PyModule_AddObject(m, "struct_passwd", (PyObject *) state->StructPwdType);
- return m;
+ return PyModuleDef_Init(&pwdmodule);
}