diff --git a/Misc/NEWS.d/next/Library/2020-05-07-20-11-51.bpo-40549.6FiRSV.rst b/Misc/NEWS.d/next/Library/2020-05-07-20-11-51.bpo-40549.6FiRSV.rst new file mode 100644 index 00000000000000..873ff49c1eb00b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-05-07-20-11-51.bpo-40549.6FiRSV.rst @@ -0,0 +1,2 @@ +Convert posixmodule.c ("posix" or "nt" module) to the multiphase +initialization (PEP 489). diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index a2b4566443b517..cf6d7449bac832 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -2886,7 +2886,7 @@ PyDoc_STRVAR(os_sched_setscheduler__doc__, static PyObject * os_sched_setscheduler_impl(PyObject *module, pid_t pid, int policy, - struct sched_param *param); + PyObject *param_obj); static PyObject * os_sched_setscheduler(PyObject *module, PyObject *const *args, Py_ssize_t nargs) @@ -2894,13 +2894,13 @@ os_sched_setscheduler(PyObject *module, PyObject *const *args, Py_ssize_t nargs) PyObject *return_value = NULL; pid_t pid; int policy; - struct sched_param param; + PyObject *param_obj; - if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "iO&:sched_setscheduler", - &pid, &policy, convert_sched_param, ¶m)) { + if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "iO:sched_setscheduler", + &pid, &policy, ¶m_obj)) { goto exit; } - return_value = os_sched_setscheduler_impl(module, pid, policy, ¶m); + return_value = os_sched_setscheduler_impl(module, pid, policy, param_obj); exit: return return_value; @@ -2957,21 +2957,20 @@ PyDoc_STRVAR(os_sched_setparam__doc__, {"sched_setparam", (PyCFunction)(void(*)(void))os_sched_setparam, METH_FASTCALL, os_sched_setparam__doc__}, static PyObject * -os_sched_setparam_impl(PyObject *module, pid_t pid, - struct sched_param *param); +os_sched_setparam_impl(PyObject *module, pid_t pid, PyObject *param_obj); static PyObject * os_sched_setparam(PyObject *module, PyObject *const *args, Py_ssize_t nargs) { PyObject *return_value = NULL; pid_t pid; - struct sched_param param; + PyObject *param_obj; - if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "O&:sched_setparam", - &pid, convert_sched_param, ¶m)) { + if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "O:sched_setparam", + &pid, ¶m_obj)) { goto exit; } - return_value = os_sched_setparam_impl(module, pid, ¶m); + return_value = os_sched_setparam_impl(module, pid, param_obj); exit: return return_value; @@ -9418,4 +9417,4 @@ os_waitstatus_to_exitcode(PyObject *module, PyObject *const *args, Py_ssize_t na #ifndef OS_WAITSTATUS_TO_EXITCODE_METHODDEF #define OS_WAITSTATUS_TO_EXITCODE_METHODDEF #endif /* !defined(OS_WAITSTATUS_TO_EXITCODE_METHODDEF) */ -/*[clinic end generated code: output=ba73b68f1c435ff6 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=be90d3aba972098b input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 0163b0757aefa5..60a60e9aed76b6 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -834,7 +834,6 @@ typedef struct { PyObject *st_mode; } _posixstate; -static struct PyModuleDef posixmodule; static inline _posixstate* get_posix_state(PyObject *module) @@ -844,8 +843,6 @@ get_posix_state(PyObject *module) return (_posixstate *)state; } -#define _posixstate_global ((_posixstate *)PyModule_GetState(PyState_FindModule(&posixmodule))) - /* * A PyArg_ParseTuple "converter" function * that handles filesystem paths in the manner @@ -2156,7 +2153,7 @@ _posix_free(void *module) } static void -fill_time(PyObject *v, int index, time_t sec, unsigned long nsec) +fill_time(PyObject *module, PyObject *v, int index, time_t sec, unsigned long nsec) { PyObject *s = _PyLong_FromTime_t(sec); PyObject *ns_fractional = PyLong_FromUnsignedLong(nsec); @@ -2167,7 +2164,7 @@ fill_time(PyObject *v, int index, time_t sec, unsigned long nsec) if (!(s && ns_fractional)) goto exit; - s_in_ns = PyNumber_Multiply(s, _posixstate_global->billion); + s_in_ns = PyNumber_Multiply(s, get_posix_state(module)->billion); if (!s_in_ns) goto exit; @@ -2197,10 +2194,10 @@ fill_time(PyObject *v, int index, time_t sec, unsigned long nsec) /* pack a system stat C structure into the Python stat tuple (used by posix_stat() and posix_fstat()) */ static PyObject* -_pystat_fromstructstat(STRUCT_STAT *st) +_pystat_fromstructstat(PyObject *module, STRUCT_STAT *st) { unsigned long ansec, mnsec, cnsec; - PyObject *StatResultType = _posixstate_global->StatResultType; + PyObject *StatResultType = get_posix_state(module)->StatResultType; PyObject *v = PyStructSequence_New((PyTypeObject *)StatResultType); if (v == NULL) return NULL; @@ -2239,9 +2236,9 @@ _pystat_fromstructstat(STRUCT_STAT *st) #else ansec = mnsec = cnsec = 0; #endif - fill_time(v, 7, st->st_atime, ansec); - fill_time(v, 8, st->st_mtime, mnsec); - fill_time(v, 9, st->st_ctime, cnsec); + fill_time(module, v, 7, st->st_atime, ansec); + fill_time(module, v, 8, st->st_mtime, mnsec); + fill_time(module, v, 9, st->st_ctime, cnsec); #ifdef HAVE_STRUCT_STAT_ST_BLKSIZE PyStructSequence_SET_ITEM(v, ST_BLKSIZE_IDX, @@ -2303,7 +2300,7 @@ _pystat_fromstructstat(STRUCT_STAT *st) static PyObject * -posix_do_stat(const char *function_name, path_t *path, +posix_do_stat(PyObject *module, const char *function_name, path_t *path, int dir_fd, int follow_symlinks) { STRUCT_STAT st; @@ -2348,7 +2345,7 @@ posix_do_stat(const char *function_name, path_t *path, return path_error(path); } - return _pystat_fromstructstat(&st); + return _pystat_fromstructstat(module, &st); } /*[python input] @@ -2643,13 +2640,8 @@ class confstr_confname_converter(path_confname_converter): class sysconf_confname_converter(path_confname_converter): converter="conv_sysconf_confname" -class sched_param_converter(CConverter): - type = 'struct sched_param' - converter = 'convert_sched_param' - impl_by_reference = True; - [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=418fce0e01144461]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=f1c8ae8d744f6c8b]*/ /*[clinic input] @@ -2686,7 +2678,7 @@ static PyObject * os_stat_impl(PyObject *module, path_t *path, int dir_fd, int follow_symlinks) /*[clinic end generated code: output=7d4976e6f18a59c5 input=01d362ebcc06996b]*/ { - return posix_do_stat("stat", path, dir_fd, follow_symlinks); + return posix_do_stat(module, "stat", path, dir_fd, follow_symlinks); } @@ -2710,7 +2702,7 @@ os_lstat_impl(PyObject *module, path_t *path, int dir_fd) /*[clinic end generated code: output=ef82a5d35ce8ab37 input=0b7474765927b925]*/ { int follow_symlinks = 0; - return posix_do_stat("lstat", path, dir_fd, follow_symlinks); + return posix_do_stat(module, "lstat", path, dir_fd, follow_symlinks); } @@ -4852,11 +4844,11 @@ utime_default(utime_t *ut, const char *path) #endif static int -split_py_long_to_s_and_ns(PyObject *py_long, time_t *s, long *ns) +split_py_long_to_s_and_ns(PyObject *module, PyObject *py_long, time_t *s, long *ns) { int result = 0; PyObject *divmod; - divmod = PyNumber_Divmod(py_long, _posixstate_global->billion); + divmod = PyNumber_Divmod(py_long, get_posix_state(module)->billion); if (!divmod) goto exit; if (!PyTuple_Check(divmod) || PyTuple_GET_SIZE(divmod) != 2) { @@ -4968,9 +4960,9 @@ os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, return NULL; } utime.now = 0; - if (!split_py_long_to_s_and_ns(PyTuple_GET_ITEM(ns, 0), + if (!split_py_long_to_s_and_ns(module, PyTuple_GET_ITEM(ns, 0), &utime.atime_s, &utime.atime_ns) || - !split_py_long_to_s_and_ns(PyTuple_GET_ITEM(ns, 1), + !split_py_long_to_s_and_ns(module, PyTuple_GET_ITEM(ns, 1), &utime.mtime_s, &utime.mtime_ns)) { return NULL; } @@ -5421,11 +5413,11 @@ enum posix_spawn_file_actions_identifier { #if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM) static int -convert_sched_param(PyObject *param, struct sched_param *res); +convert_sched_param(PyObject *module, PyObject *param, struct sched_param *res); #endif static int -parse_posix_spawn_flags(const char *func_name, PyObject *setpgroup, +parse_posix_spawn_flags(PyObject *module, const char *func_name, PyObject *setpgroup, int resetids, int setsid, PyObject *setsigmask, PyObject *setsigdef, PyObject *scheduler, posix_spawnattr_t *attrp) @@ -5495,11 +5487,15 @@ parse_posix_spawn_flags(const char *func_name, PyObject *setpgroup, if (scheduler) { #ifdef POSIX_SPAWN_SETSCHEDULER PyObject *py_schedpolicy; + PyObject *schedparam_obj; struct sched_param schedparam; - if (!PyArg_ParseTuple(scheduler, "OO&" + if (!PyArg_ParseTuple(scheduler, "OO" ";A scheduler tuple must have two elements", - &py_schedpolicy, convert_sched_param, &schedparam)) { + &py_schedpolicy, &schedparam_obj)) { + goto fail; + } + if (!convert_sched_param(module, schedparam_obj, &schedparam)) { goto fail; } if (py_schedpolicy != Py_None) { @@ -5728,7 +5724,7 @@ py_posix_spawn(int use_posix_spawnp, PyObject *module, path_t *path, PyObject *a file_actionsp = &file_actions_buf; } - if (parse_posix_spawn_flags(func_name, setpgroup, resetids, setsid, + if (parse_posix_spawn_flags(module, func_name, setpgroup, resetids, setsid, setsigmask, setsigdef, scheduler, &attr)) { goto exit; } @@ -6378,11 +6374,11 @@ static PyStructSequence_Desc sched_param_desc = { }; static int -convert_sched_param(PyObject *param, struct sched_param *res) +convert_sched_param(PyObject *module, PyObject *param, struct sched_param *res) { long priority; - if (!Py_IS_TYPE(param, (PyTypeObject *)_posixstate_global->SchedParamType)) { + if (!Py_IS_TYPE(param, (PyTypeObject *)get_posix_state(module)->SchedParamType)) { PyErr_SetString(PyExc_TypeError, "must have a sched_param object"); return 0; } @@ -6405,7 +6401,7 @@ os.sched_setscheduler pid: pid_t policy: int - param: sched_param + param as param_obj: object / Set the scheduling policy for the process identified by pid. @@ -6416,15 +6412,20 @@ param is an instance of sched_param. static PyObject * os_sched_setscheduler_impl(PyObject *module, pid_t pid, int policy, - struct sched_param *param) -/*[clinic end generated code: output=b0ac0a70d3b1d705 input=c581f9469a5327dd]*/ + PyObject *param_obj) +/*[clinic end generated code: output=cde27faa55dc993e input=73013d731bd8fbe9]*/ { + struct sched_param param; + if (!convert_sched_param(module, param_obj, ¶m)) { + return NULL; + } + /* ** sched_setscheduler() returns 0 in Linux, but the previous ** scheduling policy under Solaris/Illumos, and others. ** On error, -1 is returned in all Operating Systems. */ - if (sched_setscheduler(pid, policy, param) == -1) + if (sched_setscheduler(pid, policy, ¶m) == -1) return posix_error(); Py_RETURN_NONE; } @@ -6453,7 +6454,7 @@ os_sched_getparam_impl(PyObject *module, pid_t pid) if (sched_getparam(pid, ¶m)) return posix_error(); - PyObject *SchedParamType = _posixstate_global->SchedParamType; + PyObject *SchedParamType = get_posix_state(module)->SchedParamType; result = PyStructSequence_New((PyTypeObject *)SchedParamType); if (!result) return NULL; @@ -6470,7 +6471,7 @@ os_sched_getparam_impl(PyObject *module, pid_t pid) /*[clinic input] os.sched_setparam pid: pid_t - param: sched_param + param as param_obj: object / Set scheduling parameters for the process identified by pid. @@ -6480,11 +6481,15 @@ param should be an instance of sched_param. [clinic start generated code]*/ static PyObject * -os_sched_setparam_impl(PyObject *module, pid_t pid, - struct sched_param *param) -/*[clinic end generated code: output=8af013f78a32b591 input=6b8d6dfcecdc21bd]*/ +os_sched_setparam_impl(PyObject *module, pid_t pid, PyObject *param_obj) +/*[clinic end generated code: output=f19fe020a53741c1 input=27b98337c8b2dcc7]*/ { - if (sched_setparam(pid, param)) + struct sched_param param; + if (!convert_sched_param(module, param_obj, ¶m)) { + return NULL; + } + + if (sched_setparam(pid, ¶m)) return posix_error(); Py_RETURN_NONE; } @@ -7710,7 +7715,7 @@ os_setgroups(PyObject *module, PyObject *groups) #if defined(HAVE_WAIT3) || defined(HAVE_WAIT4) static PyObject * -wait_helper(pid_t pid, int status, struct rusage *ru) +wait_helper(PyObject *module, pid_t pid, int status, struct rusage *ru) { PyObject *result; PyObject *struct_rusage; @@ -7727,7 +7732,7 @@ wait_helper(pid_t pid, int status, struct rusage *ru) PyObject *m = PyImport_ImportModuleNoBlock("resource"); if (m == NULL) return NULL; - struct_rusage = PyObject_GetAttr(m, _posixstate_global->struct_rusage); + struct_rusage = PyObject_GetAttr(m, get_posix_state(module)->struct_rusage); Py_DECREF(m); if (struct_rusage == NULL) return NULL; @@ -7803,7 +7808,7 @@ os_wait3_impl(PyObject *module, int options) if (pid < 0) return (!async_err) ? posix_error() : NULL; - return wait_helper(pid, WAIT_STATUS_INT(status), &ru); + return wait_helper(module, pid, WAIT_STATUS_INT(status), &ru); } #endif /* HAVE_WAIT3 */ @@ -7840,7 +7845,7 @@ os_wait4_impl(PyObject *module, pid_t pid, int options) if (res < 0) return (!async_err) ? posix_error() : NULL; - return wait_helper(res, WAIT_STATUS_INT(status), &ru); + return wait_helper(module, res, WAIT_STATUS_INT(status), &ru); } #endif /* HAVE_WAIT4 */ @@ -8375,11 +8380,11 @@ static PyStructSequence_Desc times_result_desc = { #ifdef HAVE_TIMES static PyObject * -build_times_result(double user, double system, +build_times_result(PyObject *module, double user, double system, double children_user, double children_system, double elapsed) { - PyObject *TimesResultType = _posixstate_global->TimesResultType; + PyObject *TimesResultType = get_posix_state(module)->TimesResultType; PyObject *value = PyStructSequence_New((PyTypeObject *)TimesResultType); if (value == NULL) return NULL; @@ -8435,7 +8440,7 @@ os_times_impl(PyObject *module) 1e7 is one second in such units; 1e-7 the inverse. 429.4967296 is 2**32 / 1e7 or 2**32 * 1e-7. */ - return build_times_result( + return build_times_result(module, (double)(user.dwHighDateTime*429.4967296 + user.dwLowDateTime*1e-7), (double)(kernel.dwHighDateTime*429.4967296 + @@ -8454,7 +8459,7 @@ os_times_impl(PyObject *module) c = times(&t); if (c == (clock_t) -1) return posix_error(); - return build_times_result( + return build_times_result(module, (double)t.tms_utime / ticks_per_second, (double)t.tms_stime / ticks_per_second, (double)t.tms_cutime / ticks_per_second, @@ -9515,7 +9520,7 @@ os_fstat_impl(PyObject *module, int fd) #endif } - return _pystat_fromstructstat(&st); + return _pystat_fromstructstat(module, &st); } @@ -10601,8 +10606,8 @@ os_WSTOPSIG_impl(PyObject *module, int status) #include static PyObject* -_pystatvfs_fromstructstatvfs(struct statvfs st) { - PyObject *StatVFSResultType = _posixstate_global->StatVFSResultType; +_pystatvfs_fromstructstatvfs(PyObject *module, struct statvfs st) { + PyObject *StatVFSResultType = get_posix_state(module)->StatVFSResultType; PyObject *v = PyStructSequence_New((PyTypeObject *)StatVFSResultType); if (v == NULL) return NULL; @@ -10679,7 +10684,7 @@ os_fstatvfs_impl(PyObject *module, int fd) if (result != 0) return (!async_err) ? posix_error() : NULL; - return _pystatvfs_fromstructstatvfs(st); + return _pystatvfs_fromstructstatvfs(module, st); } #endif /* defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H) */ @@ -10726,7 +10731,7 @@ os_statvfs_impl(PyObject *module, path_t *path) return path_error(path); } - return _pystatvfs_fromstructstatvfs(st); + return _pystatvfs_fromstructstatvfs(module, st); } #endif /* defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H) */ @@ -12768,6 +12773,12 @@ os_DirEntry_is_symlink_impl(DirEntry *self) #endif } +static inline PyObject* +DirEntry_get_module(DirEntry *self) +{ + return PyType_GetModule(Py_TYPE(self)); +} + static PyObject * DirEntry_fetch_stat(DirEntry *self, int follow_symlinks) { @@ -12805,7 +12816,7 @@ DirEntry_fetch_stat(DirEntry *self, int follow_symlinks) if (result != 0) return path_object_error(self->path); - return _pystat_fromstructstat(&st); + return _pystat_fromstructstat(DirEntry_get_module(self), &st); } static PyObject * @@ -12813,7 +12824,8 @@ DirEntry_get_lstat(DirEntry *self) { if (!self->lstat) { #ifdef MS_WINDOWS - self->lstat = _pystat_fromstructstat(&self->win32_lstat); + self->lstat = _pystat_fromstructstat(DirEntry_get_module(self), + &self->win32_lstat); #else /* POSIX */ self->lstat = DirEntry_fetch_stat(self, 0); #endif @@ -12888,7 +12900,7 @@ DirEntry_test_mode(DirEntry *self, int follow_symlinks, unsigned short mode_bits } goto error; } - st_mode = PyObject_GetAttr(stat, _posixstate_global->st_mode); + st_mode = PyObject_GetAttr(stat, get_posix_state(DirEntry_get_module(self))->st_mode); if (!st_mode) goto error; @@ -13092,14 +13104,14 @@ join_path_filenameW(const wchar_t *path_wide, const wchar_t *filename) } static PyObject * -DirEntry_from_find_data(path_t *path, WIN32_FIND_DATAW *dataW) +DirEntry_from_find_data(PyObject *module, path_t *path, WIN32_FIND_DATAW *dataW) { DirEntry *entry; BY_HANDLE_FILE_INFORMATION file_info; ULONG reparse_tag; wchar_t *joined_path; - PyObject *DirEntryType = _posixstate_global->DirEntryType; + PyObject *DirEntryType = get_posix_state(module)->DirEntryType; entry = PyObject_New(DirEntry, (PyTypeObject *)DirEntryType); if (!entry) return NULL; @@ -13177,8 +13189,8 @@ join_path_filename(const char *path_narrow, const char* filename, Py_ssize_t fil } static PyObject * -DirEntry_from_posix_info(path_t *path, const char *name, Py_ssize_t name_len, - ino_t d_ino +DirEntry_from_posix_info(PyObject *module, path_t *path, const char *name, + Py_ssize_t name_len, ino_t d_ino #ifdef HAVE_DIRENT_D_TYPE , unsigned char d_type #endif @@ -13187,7 +13199,7 @@ DirEntry_from_posix_info(path_t *path, const char *name, Py_ssize_t name_len, DirEntry *entry; char *joined_path; - PyObject *DirEntryType = _posixstate_global->DirEntryType; + PyObject *DirEntryType = get_posix_state(module)->DirEntryType; entry = PyObject_New(DirEntry, (PyTypeObject *)DirEntryType); if (!entry) return NULL; @@ -13307,8 +13319,10 @@ ScandirIterator_iternext(ScandirIterator *iterator) /* Skip over . and .. */ if (wcscmp(file_data->cFileName, L".") != 0 && - wcscmp(file_data->cFileName, L"..") != 0) { - entry = DirEntry_from_find_data(&iterator->path, file_data); + wcscmp(file_data->cFileName, L"..") != 0) + { + PyObject *module = PyType_GetModule(Py_TYPE(iterator)); + entry = DirEntry_from_find_data(module, &iterator->path, file_data); if (!entry) break; return entry; @@ -13379,10 +13393,12 @@ ScandirIterator_iternext(ScandirIterator *iterator) is_dot = direntp->d_name[0] == '.' && (name_len == 1 || (direntp->d_name[1] == '.' && name_len == 2)); if (!is_dot) { - entry = DirEntry_from_posix_info(&iterator->path, direntp->d_name, - name_len, direntp->d_ino + PyObject *module = PyType_GetModule(Py_TYPE(iterator)); + entry = DirEntry_from_posix_info(module, + &iterator->path, direntp->d_name, + name_len, direntp->d_ino #ifdef HAVE_DIRENT_D_TYPE - , direntp->d_type + , direntp->d_type #endif ); if (!entry) @@ -14632,19 +14648,6 @@ all_ins(PyObject *m) } -static struct PyModuleDef posixmodule = { - PyModuleDef_HEAD_INIT, - MODNAME, - posix__doc__, - sizeof(_posixstate), - posix_methods, - NULL, - _posix_traverse, - _posix_clear, - _posix_free, -}; - - static const char * const have_functions[] = { #ifdef HAVE_FACCESSAT @@ -14779,35 +14782,25 @@ static const char * const have_functions[] = { }; -PyMODINIT_FUNC -INITFUNC(void) +static int +posixmodule_exec(PyObject *m) { - PyObject *m, *v; + PyObject *v; PyObject *list; const char * const *trace; - m = PyState_FindModule(&posixmodule); - if (m != NULL) { - Py_INCREF(m); - return m; - } - - m = PyModule_Create(&posixmodule); - if (m == NULL) - return NULL; - /* Initialize environ dictionary */ v = convertenviron(); Py_XINCREF(v); if (v == NULL || PyModule_AddObject(m, "environ", v) != 0) - return NULL; + return -1; Py_DECREF(v); if (all_ins(m)) - return NULL; + return -1; if (setup_confname_tables(m)) - return NULL; + return -1; Py_INCREF(PyExc_OSError); PyModule_AddObject(m, "error", PyExc_OSError); @@ -14816,7 +14809,7 @@ INITFUNC(void) waitid_result_desc.name = MODNAME ".waitid_result"; PyObject *WaitidResultType = (PyObject *)PyStructSequence_NewType(&waitid_result_desc); if (WaitidResultType == NULL) { - return NULL; + return -1; } Py_INCREF(WaitidResultType); PyModule_AddObject(m, "waitid_result", WaitidResultType); @@ -14829,7 +14822,7 @@ INITFUNC(void) stat_result_desc.fields[9].name = PyStructSequence_UnnamedField; PyObject *StatResultType = (PyObject *)PyStructSequence_NewType(&stat_result_desc); if (StatResultType == NULL) { - return NULL; + return -1; } Py_INCREF(StatResultType); PyModule_AddObject(m, "stat_result", StatResultType); @@ -14840,7 +14833,7 @@ INITFUNC(void) statvfs_result_desc.name = "os.statvfs_result"; /* see issue #19209 */ PyObject *StatVFSResultType = (PyObject *)PyStructSequence_NewType(&statvfs_result_desc); if (StatVFSResultType == NULL) { - return NULL; + return -1; } Py_INCREF(StatVFSResultType); PyModule_AddObject(m, "statvfs_result", StatVFSResultType); @@ -14859,7 +14852,7 @@ INITFUNC(void) sched_param_desc.name = MODNAME ".sched_param"; PyObject *SchedParamType = (PyObject *)PyStructSequence_NewType(&sched_param_desc); if (SchedParamType == NULL) { - return NULL; + return -1; } Py_INCREF(SchedParamType); PyModule_AddObject(m, "sched_param", SchedParamType); @@ -14870,22 +14863,22 @@ INITFUNC(void) /* initialize TerminalSize_info */ PyObject *TerminalSizeType = (PyObject *)PyStructSequence_NewType(&TerminalSize_desc); if (TerminalSizeType == NULL) { - return NULL; + return -1; } Py_INCREF(TerminalSizeType); PyModule_AddObject(m, "terminal_size", TerminalSizeType); get_posix_state(m)->TerminalSizeType = TerminalSizeType; /* initialize scandir types */ - PyObject *ScandirIteratorType = PyType_FromSpec(&ScandirIteratorType_spec); + PyObject *ScandirIteratorType = PyType_FromModuleAndSpec(m, &ScandirIteratorType_spec, NULL); if (ScandirIteratorType == NULL) { - return NULL; + return -1; } get_posix_state(m)->ScandirIteratorType = ScandirIteratorType; - PyObject *DirEntryType = PyType_FromSpec(&DirEntryType_spec); + PyObject *DirEntryType = PyType_FromModuleAndSpec(m, &DirEntryType_spec, NULL); if (DirEntryType == NULL) { - return NULL; + return -1; } Py_INCREF(DirEntryType); PyModule_AddObject(m, "DirEntry", DirEntryType); @@ -14894,7 +14887,7 @@ INITFUNC(void) times_result_desc.name = MODNAME ".times_result"; PyObject *TimesResultType = (PyObject *)PyStructSequence_NewType(×_result_desc); if (TimesResultType == NULL) { - return NULL; + return -1; } Py_INCREF(TimesResultType); PyModule_AddObject(m, "times_result", TimesResultType); @@ -14902,7 +14895,7 @@ INITFUNC(void) PyTypeObject *UnameResultType = PyStructSequence_NewType(&uname_result_desc); if (UnameResultType == NULL) { - return NULL; + return -1; } Py_INCREF(UnameResultType); PyModule_AddObject(m, "uname_result", (PyObject *)UnameResultType); @@ -14922,7 +14915,7 @@ INITFUNC(void) #ifdef HAVE_FSTATVFS if (fstatvfs == NULL) { if (PyObject_DelAttrString(m, "fstatvfs") == -1) { - return NULL; + return -1; } } #endif /* HAVE_FSTATVFS */ @@ -14930,7 +14923,7 @@ INITFUNC(void) #ifdef HAVE_STATVFS if (statvfs == NULL) { if (PyObject_DelAttrString(m, "statvfs") == -1) { - return NULL; + return -1; } } #endif /* HAVE_STATVFS */ @@ -14938,7 +14931,7 @@ INITFUNC(void) # ifdef HAVE_LCHOWN if (lchown == NULL) { if (PyObject_DelAttrString(m, "lchown") == -1) { - return NULL; + return -1; } } #endif /* HAVE_LCHOWN */ @@ -14947,15 +14940,15 @@ INITFUNC(void) #endif /* __APPLE__ */ if ((get_posix_state(m)->billion = PyLong_FromLong(1000000000)) == NULL) - return NULL; + return -1; #if defined(HAVE_WAIT3) || defined(HAVE_WAIT4) get_posix_state(m)->struct_rusage = PyUnicode_InternFromString("struct_rusage"); if (get_posix_state(m)->struct_rusage == NULL) - return NULL; + return -1; #endif get_posix_state(m)->st_mode = PyUnicode_InternFromString("st_mode"); if (get_posix_state(m)->st_mode == NULL) - return NULL; + return -1; /* suppress "function not used" warnings */ { @@ -14973,18 +14966,42 @@ INITFUNC(void) */ list = PyList_New(0); if (!list) - return NULL; + return -1; for (trace = have_functions; *trace; trace++) { PyObject *unicode = PyUnicode_DecodeASCII(*trace, strlen(*trace), NULL); if (!unicode) - return NULL; + return -1; if (PyList_Append(list, unicode)) - return NULL; + return -1; Py_DECREF(unicode); } PyModule_AddObject(m, "_have_functions", list); - return m; + return 0; +} + + +static PyModuleDef_Slot posixmodile_slots[] = { + {Py_mod_exec, posixmodule_exec}, + {0, NULL} +}; + +static struct PyModuleDef posixmodule = { + PyModuleDef_HEAD_INIT, + .m_name = MODNAME, + .m_doc = posix__doc__, + .m_size = sizeof(_posixstate), + .m_methods = posix_methods, + .m_slots = posixmodile_slots, + .m_traverse = _posix_traverse, + .m_clear = _posix_clear, + .m_free = _posix_free, +}; + +PyMODINIT_FUNC +INITFUNC(void) +{ + return PyModuleDef_Init(&posixmodule); } #ifdef __cplusplus pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy