17db96d56Sopenharmony_ci/*[clinic input]
27db96d56Sopenharmony_cipreserve
37db96d56Sopenharmony_ci[clinic start generated code]*/
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciPyDoc_STRVAR(os_stat__doc__,
67db96d56Sopenharmony_ci"stat($module, /, path, *, dir_fd=None, follow_symlinks=True)\n"
77db96d56Sopenharmony_ci"--\n"
87db96d56Sopenharmony_ci"\n"
97db96d56Sopenharmony_ci"Perform a stat system call on the given path.\n"
107db96d56Sopenharmony_ci"\n"
117db96d56Sopenharmony_ci"  path\n"
127db96d56Sopenharmony_ci"    Path to be examined; can be string, bytes, a path-like object or\n"
137db96d56Sopenharmony_ci"    open-file-descriptor int.\n"
147db96d56Sopenharmony_ci"  dir_fd\n"
157db96d56Sopenharmony_ci"    If not None, it should be a file descriptor open to a directory,\n"
167db96d56Sopenharmony_ci"    and path should be a relative string; path will then be relative to\n"
177db96d56Sopenharmony_ci"    that directory.\n"
187db96d56Sopenharmony_ci"  follow_symlinks\n"
197db96d56Sopenharmony_ci"    If False, and the last element of the path is a symbolic link,\n"
207db96d56Sopenharmony_ci"    stat will examine the symbolic link itself instead of the file\n"
217db96d56Sopenharmony_ci"    the link points to.\n"
227db96d56Sopenharmony_ci"\n"
237db96d56Sopenharmony_ci"dir_fd and follow_symlinks may not be implemented\n"
247db96d56Sopenharmony_ci"  on your platform.  If they are unavailable, using them will raise a\n"
257db96d56Sopenharmony_ci"  NotImplementedError.\n"
267db96d56Sopenharmony_ci"\n"
277db96d56Sopenharmony_ci"It\'s an error to use dir_fd or follow_symlinks when specifying path as\n"
287db96d56Sopenharmony_ci"  an open file descriptor.");
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci#define OS_STAT_METHODDEF    \
317db96d56Sopenharmony_ci    {"stat", _PyCFunction_CAST(os_stat), METH_FASTCALL|METH_KEYWORDS, os_stat__doc__},
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_cistatic PyObject *
347db96d56Sopenharmony_cios_stat_impl(PyObject *module, path_t *path, int dir_fd, int follow_symlinks);
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_cistatic PyObject *
377db96d56Sopenharmony_cios_stat(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
387db96d56Sopenharmony_ci{
397db96d56Sopenharmony_ci    PyObject *return_value = NULL;
407db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "dir_fd", "follow_symlinks", NULL};
417db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "stat", 0};
427db96d56Sopenharmony_ci    PyObject *argsbuf[3];
437db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
447db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("stat", "path", 0, 1);
457db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
467db96d56Sopenharmony_ci    int follow_symlinks = 1;
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
497db96d56Sopenharmony_ci    if (!args) {
507db96d56Sopenharmony_ci        goto exit;
517db96d56Sopenharmony_ci    }
527db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
537db96d56Sopenharmony_ci        goto exit;
547db96d56Sopenharmony_ci    }
557db96d56Sopenharmony_ci    if (!noptargs) {
567db96d56Sopenharmony_ci        goto skip_optional_kwonly;
577db96d56Sopenharmony_ci    }
587db96d56Sopenharmony_ci    if (args[1]) {
597db96d56Sopenharmony_ci        if (!FSTATAT_DIR_FD_CONVERTER(args[1], &dir_fd)) {
607db96d56Sopenharmony_ci            goto exit;
617db96d56Sopenharmony_ci        }
627db96d56Sopenharmony_ci        if (!--noptargs) {
637db96d56Sopenharmony_ci            goto skip_optional_kwonly;
647db96d56Sopenharmony_ci        }
657db96d56Sopenharmony_ci    }
667db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[2]);
677db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
687db96d56Sopenharmony_ci        goto exit;
697db96d56Sopenharmony_ci    }
707db96d56Sopenharmony_ciskip_optional_kwonly:
717db96d56Sopenharmony_ci    return_value = os_stat_impl(module, &path, dir_fd, follow_symlinks);
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ciexit:
747db96d56Sopenharmony_ci    /* Cleanup for path */
757db96d56Sopenharmony_ci    path_cleanup(&path);
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci    return return_value;
787db96d56Sopenharmony_ci}
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ciPyDoc_STRVAR(os_lstat__doc__,
817db96d56Sopenharmony_ci"lstat($module, /, path, *, dir_fd=None)\n"
827db96d56Sopenharmony_ci"--\n"
837db96d56Sopenharmony_ci"\n"
847db96d56Sopenharmony_ci"Perform a stat system call on the given path, without following symbolic links.\n"
857db96d56Sopenharmony_ci"\n"
867db96d56Sopenharmony_ci"Like stat(), but do not follow symbolic links.\n"
877db96d56Sopenharmony_ci"Equivalent to stat(path, follow_symlinks=False).");
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci#define OS_LSTAT_METHODDEF    \
907db96d56Sopenharmony_ci    {"lstat", _PyCFunction_CAST(os_lstat), METH_FASTCALL|METH_KEYWORDS, os_lstat__doc__},
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_cistatic PyObject *
937db96d56Sopenharmony_cios_lstat_impl(PyObject *module, path_t *path, int dir_fd);
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_cistatic PyObject *
967db96d56Sopenharmony_cios_lstat(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
977db96d56Sopenharmony_ci{
987db96d56Sopenharmony_ci    PyObject *return_value = NULL;
997db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "dir_fd", NULL};
1007db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "lstat", 0};
1017db96d56Sopenharmony_ci    PyObject *argsbuf[2];
1027db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
1037db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("lstat", "path", 0, 0);
1047db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
1077db96d56Sopenharmony_ci    if (!args) {
1087db96d56Sopenharmony_ci        goto exit;
1097db96d56Sopenharmony_ci    }
1107db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
1117db96d56Sopenharmony_ci        goto exit;
1127db96d56Sopenharmony_ci    }
1137db96d56Sopenharmony_ci    if (!noptargs) {
1147db96d56Sopenharmony_ci        goto skip_optional_kwonly;
1157db96d56Sopenharmony_ci    }
1167db96d56Sopenharmony_ci    if (!FSTATAT_DIR_FD_CONVERTER(args[1], &dir_fd)) {
1177db96d56Sopenharmony_ci        goto exit;
1187db96d56Sopenharmony_ci    }
1197db96d56Sopenharmony_ciskip_optional_kwonly:
1207db96d56Sopenharmony_ci    return_value = os_lstat_impl(module, &path, dir_fd);
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ciexit:
1237db96d56Sopenharmony_ci    /* Cleanup for path */
1247db96d56Sopenharmony_ci    path_cleanup(&path);
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci    return return_value;
1277db96d56Sopenharmony_ci}
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ciPyDoc_STRVAR(os_access__doc__,
1307db96d56Sopenharmony_ci"access($module, /, path, mode, *, dir_fd=None, effective_ids=False,\n"
1317db96d56Sopenharmony_ci"       follow_symlinks=True)\n"
1327db96d56Sopenharmony_ci"--\n"
1337db96d56Sopenharmony_ci"\n"
1347db96d56Sopenharmony_ci"Use the real uid/gid to test for access to a path.\n"
1357db96d56Sopenharmony_ci"\n"
1367db96d56Sopenharmony_ci"  path\n"
1377db96d56Sopenharmony_ci"    Path to be tested; can be string, bytes, or a path-like object.\n"
1387db96d56Sopenharmony_ci"  mode\n"
1397db96d56Sopenharmony_ci"    Operating-system mode bitfield.  Can be F_OK to test existence,\n"
1407db96d56Sopenharmony_ci"    or the inclusive-OR of R_OK, W_OK, and X_OK.\n"
1417db96d56Sopenharmony_ci"  dir_fd\n"
1427db96d56Sopenharmony_ci"    If not None, it should be a file descriptor open to a directory,\n"
1437db96d56Sopenharmony_ci"    and path should be relative; path will then be relative to that\n"
1447db96d56Sopenharmony_ci"    directory.\n"
1457db96d56Sopenharmony_ci"  effective_ids\n"
1467db96d56Sopenharmony_ci"    If True, access will use the effective uid/gid instead of\n"
1477db96d56Sopenharmony_ci"    the real uid/gid.\n"
1487db96d56Sopenharmony_ci"  follow_symlinks\n"
1497db96d56Sopenharmony_ci"    If False, and the last element of the path is a symbolic link,\n"
1507db96d56Sopenharmony_ci"    access will examine the symbolic link itself instead of the file\n"
1517db96d56Sopenharmony_ci"    the link points to.\n"
1527db96d56Sopenharmony_ci"\n"
1537db96d56Sopenharmony_ci"dir_fd, effective_ids, and follow_symlinks may not be implemented\n"
1547db96d56Sopenharmony_ci"  on your platform.  If they are unavailable, using them will raise a\n"
1557db96d56Sopenharmony_ci"  NotImplementedError.\n"
1567db96d56Sopenharmony_ci"\n"
1577db96d56Sopenharmony_ci"Note that most operations will use the effective uid/gid, therefore this\n"
1587db96d56Sopenharmony_ci"  routine can be used in a suid/sgid environment to test if the invoking user\n"
1597db96d56Sopenharmony_ci"  has the specified access to the path.");
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci#define OS_ACCESS_METHODDEF    \
1627db96d56Sopenharmony_ci    {"access", _PyCFunction_CAST(os_access), METH_FASTCALL|METH_KEYWORDS, os_access__doc__},
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_cistatic int
1657db96d56Sopenharmony_cios_access_impl(PyObject *module, path_t *path, int mode, int dir_fd,
1667db96d56Sopenharmony_ci               int effective_ids, int follow_symlinks);
1677db96d56Sopenharmony_ci
1687db96d56Sopenharmony_cistatic PyObject *
1697db96d56Sopenharmony_cios_access(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1707db96d56Sopenharmony_ci{
1717db96d56Sopenharmony_ci    PyObject *return_value = NULL;
1727db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "mode", "dir_fd", "effective_ids", "follow_symlinks", NULL};
1737db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "access", 0};
1747db96d56Sopenharmony_ci    PyObject *argsbuf[5];
1757db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
1767db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("access", "path", 0, 0);
1777db96d56Sopenharmony_ci    int mode;
1787db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
1797db96d56Sopenharmony_ci    int effective_ids = 0;
1807db96d56Sopenharmony_ci    int follow_symlinks = 1;
1817db96d56Sopenharmony_ci    int _return_value;
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
1847db96d56Sopenharmony_ci    if (!args) {
1857db96d56Sopenharmony_ci        goto exit;
1867db96d56Sopenharmony_ci    }
1877db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
1887db96d56Sopenharmony_ci        goto exit;
1897db96d56Sopenharmony_ci    }
1907db96d56Sopenharmony_ci    mode = _PyLong_AsInt(args[1]);
1917db96d56Sopenharmony_ci    if (mode == -1 && PyErr_Occurred()) {
1927db96d56Sopenharmony_ci        goto exit;
1937db96d56Sopenharmony_ci    }
1947db96d56Sopenharmony_ci    if (!noptargs) {
1957db96d56Sopenharmony_ci        goto skip_optional_kwonly;
1967db96d56Sopenharmony_ci    }
1977db96d56Sopenharmony_ci    if (args[2]) {
1987db96d56Sopenharmony_ci        if (!FACCESSAT_DIR_FD_CONVERTER(args[2], &dir_fd)) {
1997db96d56Sopenharmony_ci            goto exit;
2007db96d56Sopenharmony_ci        }
2017db96d56Sopenharmony_ci        if (!--noptargs) {
2027db96d56Sopenharmony_ci            goto skip_optional_kwonly;
2037db96d56Sopenharmony_ci        }
2047db96d56Sopenharmony_ci    }
2057db96d56Sopenharmony_ci    if (args[3]) {
2067db96d56Sopenharmony_ci        effective_ids = PyObject_IsTrue(args[3]);
2077db96d56Sopenharmony_ci        if (effective_ids < 0) {
2087db96d56Sopenharmony_ci            goto exit;
2097db96d56Sopenharmony_ci        }
2107db96d56Sopenharmony_ci        if (!--noptargs) {
2117db96d56Sopenharmony_ci            goto skip_optional_kwonly;
2127db96d56Sopenharmony_ci        }
2137db96d56Sopenharmony_ci    }
2147db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[4]);
2157db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
2167db96d56Sopenharmony_ci        goto exit;
2177db96d56Sopenharmony_ci    }
2187db96d56Sopenharmony_ciskip_optional_kwonly:
2197db96d56Sopenharmony_ci    _return_value = os_access_impl(module, &path, mode, dir_fd, effective_ids, follow_symlinks);
2207db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
2217db96d56Sopenharmony_ci        goto exit;
2227db96d56Sopenharmony_ci    }
2237db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ciexit:
2267db96d56Sopenharmony_ci    /* Cleanup for path */
2277db96d56Sopenharmony_ci    path_cleanup(&path);
2287db96d56Sopenharmony_ci
2297db96d56Sopenharmony_ci    return return_value;
2307db96d56Sopenharmony_ci}
2317db96d56Sopenharmony_ci
2327db96d56Sopenharmony_ci#if defined(HAVE_TTYNAME)
2337db96d56Sopenharmony_ci
2347db96d56Sopenharmony_ciPyDoc_STRVAR(os_ttyname__doc__,
2357db96d56Sopenharmony_ci"ttyname($module, fd, /)\n"
2367db96d56Sopenharmony_ci"--\n"
2377db96d56Sopenharmony_ci"\n"
2387db96d56Sopenharmony_ci"Return the name of the terminal device connected to \'fd\'.\n"
2397db96d56Sopenharmony_ci"\n"
2407db96d56Sopenharmony_ci"  fd\n"
2417db96d56Sopenharmony_ci"    Integer file descriptor handle.");
2427db96d56Sopenharmony_ci
2437db96d56Sopenharmony_ci#define OS_TTYNAME_METHODDEF    \
2447db96d56Sopenharmony_ci    {"ttyname", (PyCFunction)os_ttyname, METH_O, os_ttyname__doc__},
2457db96d56Sopenharmony_ci
2467db96d56Sopenharmony_cistatic PyObject *
2477db96d56Sopenharmony_cios_ttyname_impl(PyObject *module, int fd);
2487db96d56Sopenharmony_ci
2497db96d56Sopenharmony_cistatic PyObject *
2507db96d56Sopenharmony_cios_ttyname(PyObject *module, PyObject *arg)
2517db96d56Sopenharmony_ci{
2527db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2537db96d56Sopenharmony_ci    int fd;
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci    fd = _PyLong_AsInt(arg);
2567db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
2577db96d56Sopenharmony_ci        goto exit;
2587db96d56Sopenharmony_ci    }
2597db96d56Sopenharmony_ci    return_value = os_ttyname_impl(module, fd);
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ciexit:
2627db96d56Sopenharmony_ci    return return_value;
2637db96d56Sopenharmony_ci}
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_ci#endif /* defined(HAVE_TTYNAME) */
2667db96d56Sopenharmony_ci
2677db96d56Sopenharmony_ci#if defined(HAVE_CTERMID)
2687db96d56Sopenharmony_ci
2697db96d56Sopenharmony_ciPyDoc_STRVAR(os_ctermid__doc__,
2707db96d56Sopenharmony_ci"ctermid($module, /)\n"
2717db96d56Sopenharmony_ci"--\n"
2727db96d56Sopenharmony_ci"\n"
2737db96d56Sopenharmony_ci"Return the name of the controlling terminal for this process.");
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci#define OS_CTERMID_METHODDEF    \
2767db96d56Sopenharmony_ci    {"ctermid", (PyCFunction)os_ctermid, METH_NOARGS, os_ctermid__doc__},
2777db96d56Sopenharmony_ci
2787db96d56Sopenharmony_cistatic PyObject *
2797db96d56Sopenharmony_cios_ctermid_impl(PyObject *module);
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_cistatic PyObject *
2827db96d56Sopenharmony_cios_ctermid(PyObject *module, PyObject *Py_UNUSED(ignored))
2837db96d56Sopenharmony_ci{
2847db96d56Sopenharmony_ci    return os_ctermid_impl(module);
2857db96d56Sopenharmony_ci}
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ci#endif /* defined(HAVE_CTERMID) */
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ciPyDoc_STRVAR(os_chdir__doc__,
2907db96d56Sopenharmony_ci"chdir($module, /, path)\n"
2917db96d56Sopenharmony_ci"--\n"
2927db96d56Sopenharmony_ci"\n"
2937db96d56Sopenharmony_ci"Change the current working directory to the specified path.\n"
2947db96d56Sopenharmony_ci"\n"
2957db96d56Sopenharmony_ci"path may always be specified as a string.\n"
2967db96d56Sopenharmony_ci"On some platforms, path may also be specified as an open file descriptor.\n"
2977db96d56Sopenharmony_ci"  If this functionality is unavailable, using it raises an exception.");
2987db96d56Sopenharmony_ci
2997db96d56Sopenharmony_ci#define OS_CHDIR_METHODDEF    \
3007db96d56Sopenharmony_ci    {"chdir", _PyCFunction_CAST(os_chdir), METH_FASTCALL|METH_KEYWORDS, os_chdir__doc__},
3017db96d56Sopenharmony_ci
3027db96d56Sopenharmony_cistatic PyObject *
3037db96d56Sopenharmony_cios_chdir_impl(PyObject *module, path_t *path);
3047db96d56Sopenharmony_ci
3057db96d56Sopenharmony_cistatic PyObject *
3067db96d56Sopenharmony_cios_chdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
3077db96d56Sopenharmony_ci{
3087db96d56Sopenharmony_ci    PyObject *return_value = NULL;
3097db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", NULL};
3107db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "chdir", 0};
3117db96d56Sopenharmony_ci    PyObject *argsbuf[1];
3127db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("chdir", "path", 0, PATH_HAVE_FCHDIR);
3137db96d56Sopenharmony_ci
3147db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
3157db96d56Sopenharmony_ci    if (!args) {
3167db96d56Sopenharmony_ci        goto exit;
3177db96d56Sopenharmony_ci    }
3187db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
3197db96d56Sopenharmony_ci        goto exit;
3207db96d56Sopenharmony_ci    }
3217db96d56Sopenharmony_ci    return_value = os_chdir_impl(module, &path);
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ciexit:
3247db96d56Sopenharmony_ci    /* Cleanup for path */
3257db96d56Sopenharmony_ci    path_cleanup(&path);
3267db96d56Sopenharmony_ci
3277db96d56Sopenharmony_ci    return return_value;
3287db96d56Sopenharmony_ci}
3297db96d56Sopenharmony_ci
3307db96d56Sopenharmony_ci#if defined(HAVE_FCHDIR)
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ciPyDoc_STRVAR(os_fchdir__doc__,
3337db96d56Sopenharmony_ci"fchdir($module, /, fd)\n"
3347db96d56Sopenharmony_ci"--\n"
3357db96d56Sopenharmony_ci"\n"
3367db96d56Sopenharmony_ci"Change to the directory of the given file descriptor.\n"
3377db96d56Sopenharmony_ci"\n"
3387db96d56Sopenharmony_ci"fd must be opened on a directory, not a file.\n"
3397db96d56Sopenharmony_ci"Equivalent to os.chdir(fd).");
3407db96d56Sopenharmony_ci
3417db96d56Sopenharmony_ci#define OS_FCHDIR_METHODDEF    \
3427db96d56Sopenharmony_ci    {"fchdir", _PyCFunction_CAST(os_fchdir), METH_FASTCALL|METH_KEYWORDS, os_fchdir__doc__},
3437db96d56Sopenharmony_ci
3447db96d56Sopenharmony_cistatic PyObject *
3457db96d56Sopenharmony_cios_fchdir_impl(PyObject *module, int fd);
3467db96d56Sopenharmony_ci
3477db96d56Sopenharmony_cistatic PyObject *
3487db96d56Sopenharmony_cios_fchdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
3497db96d56Sopenharmony_ci{
3507db96d56Sopenharmony_ci    PyObject *return_value = NULL;
3517db96d56Sopenharmony_ci    static const char * const _keywords[] = {"fd", NULL};
3527db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "fchdir", 0};
3537db96d56Sopenharmony_ci    PyObject *argsbuf[1];
3547db96d56Sopenharmony_ci    int fd;
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
3577db96d56Sopenharmony_ci    if (!args) {
3587db96d56Sopenharmony_ci        goto exit;
3597db96d56Sopenharmony_ci    }
3607db96d56Sopenharmony_ci    if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
3617db96d56Sopenharmony_ci        goto exit;
3627db96d56Sopenharmony_ci    }
3637db96d56Sopenharmony_ci    return_value = os_fchdir_impl(module, fd);
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ciexit:
3667db96d56Sopenharmony_ci    return return_value;
3677db96d56Sopenharmony_ci}
3687db96d56Sopenharmony_ci
3697db96d56Sopenharmony_ci#endif /* defined(HAVE_FCHDIR) */
3707db96d56Sopenharmony_ci
3717db96d56Sopenharmony_ciPyDoc_STRVAR(os_chmod__doc__,
3727db96d56Sopenharmony_ci"chmod($module, /, path, mode, *, dir_fd=None, follow_symlinks=True)\n"
3737db96d56Sopenharmony_ci"--\n"
3747db96d56Sopenharmony_ci"\n"
3757db96d56Sopenharmony_ci"Change the access permissions of a file.\n"
3767db96d56Sopenharmony_ci"\n"
3777db96d56Sopenharmony_ci"  path\n"
3787db96d56Sopenharmony_ci"    Path to be modified.  May always be specified as a str, bytes, or a path-like object.\n"
3797db96d56Sopenharmony_ci"    On some platforms, path may also be specified as an open file descriptor.\n"
3807db96d56Sopenharmony_ci"    If this functionality is unavailable, using it raises an exception.\n"
3817db96d56Sopenharmony_ci"  mode\n"
3827db96d56Sopenharmony_ci"    Operating-system mode bitfield.\n"
3837db96d56Sopenharmony_ci"  dir_fd\n"
3847db96d56Sopenharmony_ci"    If not None, it should be a file descriptor open to a directory,\n"
3857db96d56Sopenharmony_ci"    and path should be relative; path will then be relative to that\n"
3867db96d56Sopenharmony_ci"    directory.\n"
3877db96d56Sopenharmony_ci"  follow_symlinks\n"
3887db96d56Sopenharmony_ci"    If False, and the last element of the path is a symbolic link,\n"
3897db96d56Sopenharmony_ci"    chmod will modify the symbolic link itself instead of the file\n"
3907db96d56Sopenharmony_ci"    the link points to.\n"
3917db96d56Sopenharmony_ci"\n"
3927db96d56Sopenharmony_ci"It is an error to use dir_fd or follow_symlinks when specifying path as\n"
3937db96d56Sopenharmony_ci"  an open file descriptor.\n"
3947db96d56Sopenharmony_ci"dir_fd and follow_symlinks may not be implemented on your platform.\n"
3957db96d56Sopenharmony_ci"  If they are unavailable, using them will raise a NotImplementedError.");
3967db96d56Sopenharmony_ci
3977db96d56Sopenharmony_ci#define OS_CHMOD_METHODDEF    \
3987db96d56Sopenharmony_ci    {"chmod", _PyCFunction_CAST(os_chmod), METH_FASTCALL|METH_KEYWORDS, os_chmod__doc__},
3997db96d56Sopenharmony_ci
4007db96d56Sopenharmony_cistatic PyObject *
4017db96d56Sopenharmony_cios_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd,
4027db96d56Sopenharmony_ci              int follow_symlinks);
4037db96d56Sopenharmony_ci
4047db96d56Sopenharmony_cistatic PyObject *
4057db96d56Sopenharmony_cios_chmod(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
4067db96d56Sopenharmony_ci{
4077db96d56Sopenharmony_ci    PyObject *return_value = NULL;
4087db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "mode", "dir_fd", "follow_symlinks", NULL};
4097db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "chmod", 0};
4107db96d56Sopenharmony_ci    PyObject *argsbuf[4];
4117db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
4127db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("chmod", "path", 0, PATH_HAVE_FCHMOD);
4137db96d56Sopenharmony_ci    int mode;
4147db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
4157db96d56Sopenharmony_ci    int follow_symlinks = 1;
4167db96d56Sopenharmony_ci
4177db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
4187db96d56Sopenharmony_ci    if (!args) {
4197db96d56Sopenharmony_ci        goto exit;
4207db96d56Sopenharmony_ci    }
4217db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
4227db96d56Sopenharmony_ci        goto exit;
4237db96d56Sopenharmony_ci    }
4247db96d56Sopenharmony_ci    mode = _PyLong_AsInt(args[1]);
4257db96d56Sopenharmony_ci    if (mode == -1 && PyErr_Occurred()) {
4267db96d56Sopenharmony_ci        goto exit;
4277db96d56Sopenharmony_ci    }
4287db96d56Sopenharmony_ci    if (!noptargs) {
4297db96d56Sopenharmony_ci        goto skip_optional_kwonly;
4307db96d56Sopenharmony_ci    }
4317db96d56Sopenharmony_ci    if (args[2]) {
4327db96d56Sopenharmony_ci        if (!FCHMODAT_DIR_FD_CONVERTER(args[2], &dir_fd)) {
4337db96d56Sopenharmony_ci            goto exit;
4347db96d56Sopenharmony_ci        }
4357db96d56Sopenharmony_ci        if (!--noptargs) {
4367db96d56Sopenharmony_ci            goto skip_optional_kwonly;
4377db96d56Sopenharmony_ci        }
4387db96d56Sopenharmony_ci    }
4397db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[3]);
4407db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
4417db96d56Sopenharmony_ci        goto exit;
4427db96d56Sopenharmony_ci    }
4437db96d56Sopenharmony_ciskip_optional_kwonly:
4447db96d56Sopenharmony_ci    return_value = os_chmod_impl(module, &path, mode, dir_fd, follow_symlinks);
4457db96d56Sopenharmony_ci
4467db96d56Sopenharmony_ciexit:
4477db96d56Sopenharmony_ci    /* Cleanup for path */
4487db96d56Sopenharmony_ci    path_cleanup(&path);
4497db96d56Sopenharmony_ci
4507db96d56Sopenharmony_ci    return return_value;
4517db96d56Sopenharmony_ci}
4527db96d56Sopenharmony_ci
4537db96d56Sopenharmony_ci#if defined(HAVE_FCHMOD)
4547db96d56Sopenharmony_ci
4557db96d56Sopenharmony_ciPyDoc_STRVAR(os_fchmod__doc__,
4567db96d56Sopenharmony_ci"fchmod($module, /, fd, mode)\n"
4577db96d56Sopenharmony_ci"--\n"
4587db96d56Sopenharmony_ci"\n"
4597db96d56Sopenharmony_ci"Change the access permissions of the file given by file descriptor fd.\n"
4607db96d56Sopenharmony_ci"\n"
4617db96d56Sopenharmony_ci"Equivalent to os.chmod(fd, mode).");
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ci#define OS_FCHMOD_METHODDEF    \
4647db96d56Sopenharmony_ci    {"fchmod", _PyCFunction_CAST(os_fchmod), METH_FASTCALL|METH_KEYWORDS, os_fchmod__doc__},
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_cistatic PyObject *
4677db96d56Sopenharmony_cios_fchmod_impl(PyObject *module, int fd, int mode);
4687db96d56Sopenharmony_ci
4697db96d56Sopenharmony_cistatic PyObject *
4707db96d56Sopenharmony_cios_fchmod(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
4717db96d56Sopenharmony_ci{
4727db96d56Sopenharmony_ci    PyObject *return_value = NULL;
4737db96d56Sopenharmony_ci    static const char * const _keywords[] = {"fd", "mode", NULL};
4747db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "fchmod", 0};
4757db96d56Sopenharmony_ci    PyObject *argsbuf[2];
4767db96d56Sopenharmony_ci    int fd;
4777db96d56Sopenharmony_ci    int mode;
4787db96d56Sopenharmony_ci
4797db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
4807db96d56Sopenharmony_ci    if (!args) {
4817db96d56Sopenharmony_ci        goto exit;
4827db96d56Sopenharmony_ci    }
4837db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
4847db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
4857db96d56Sopenharmony_ci        goto exit;
4867db96d56Sopenharmony_ci    }
4877db96d56Sopenharmony_ci    mode = _PyLong_AsInt(args[1]);
4887db96d56Sopenharmony_ci    if (mode == -1 && PyErr_Occurred()) {
4897db96d56Sopenharmony_ci        goto exit;
4907db96d56Sopenharmony_ci    }
4917db96d56Sopenharmony_ci    return_value = os_fchmod_impl(module, fd, mode);
4927db96d56Sopenharmony_ci
4937db96d56Sopenharmony_ciexit:
4947db96d56Sopenharmony_ci    return return_value;
4957db96d56Sopenharmony_ci}
4967db96d56Sopenharmony_ci
4977db96d56Sopenharmony_ci#endif /* defined(HAVE_FCHMOD) */
4987db96d56Sopenharmony_ci
4997db96d56Sopenharmony_ci#if defined(HAVE_LCHMOD)
5007db96d56Sopenharmony_ci
5017db96d56Sopenharmony_ciPyDoc_STRVAR(os_lchmod__doc__,
5027db96d56Sopenharmony_ci"lchmod($module, /, path, mode)\n"
5037db96d56Sopenharmony_ci"--\n"
5047db96d56Sopenharmony_ci"\n"
5057db96d56Sopenharmony_ci"Change the access permissions of a file, without following symbolic links.\n"
5067db96d56Sopenharmony_ci"\n"
5077db96d56Sopenharmony_ci"If path is a symlink, this affects the link itself rather than the target.\n"
5087db96d56Sopenharmony_ci"Equivalent to chmod(path, mode, follow_symlinks=False).\"");
5097db96d56Sopenharmony_ci
5107db96d56Sopenharmony_ci#define OS_LCHMOD_METHODDEF    \
5117db96d56Sopenharmony_ci    {"lchmod", _PyCFunction_CAST(os_lchmod), METH_FASTCALL|METH_KEYWORDS, os_lchmod__doc__},
5127db96d56Sopenharmony_ci
5137db96d56Sopenharmony_cistatic PyObject *
5147db96d56Sopenharmony_cios_lchmod_impl(PyObject *module, path_t *path, int mode);
5157db96d56Sopenharmony_ci
5167db96d56Sopenharmony_cistatic PyObject *
5177db96d56Sopenharmony_cios_lchmod(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
5187db96d56Sopenharmony_ci{
5197db96d56Sopenharmony_ci    PyObject *return_value = NULL;
5207db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "mode", NULL};
5217db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "lchmod", 0};
5227db96d56Sopenharmony_ci    PyObject *argsbuf[2];
5237db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("lchmod", "path", 0, 0);
5247db96d56Sopenharmony_ci    int mode;
5257db96d56Sopenharmony_ci
5267db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
5277db96d56Sopenharmony_ci    if (!args) {
5287db96d56Sopenharmony_ci        goto exit;
5297db96d56Sopenharmony_ci    }
5307db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
5317db96d56Sopenharmony_ci        goto exit;
5327db96d56Sopenharmony_ci    }
5337db96d56Sopenharmony_ci    mode = _PyLong_AsInt(args[1]);
5347db96d56Sopenharmony_ci    if (mode == -1 && PyErr_Occurred()) {
5357db96d56Sopenharmony_ci        goto exit;
5367db96d56Sopenharmony_ci    }
5377db96d56Sopenharmony_ci    return_value = os_lchmod_impl(module, &path, mode);
5387db96d56Sopenharmony_ci
5397db96d56Sopenharmony_ciexit:
5407db96d56Sopenharmony_ci    /* Cleanup for path */
5417db96d56Sopenharmony_ci    path_cleanup(&path);
5427db96d56Sopenharmony_ci
5437db96d56Sopenharmony_ci    return return_value;
5447db96d56Sopenharmony_ci}
5457db96d56Sopenharmony_ci
5467db96d56Sopenharmony_ci#endif /* defined(HAVE_LCHMOD) */
5477db96d56Sopenharmony_ci
5487db96d56Sopenharmony_ci#if defined(HAVE_CHFLAGS)
5497db96d56Sopenharmony_ci
5507db96d56Sopenharmony_ciPyDoc_STRVAR(os_chflags__doc__,
5517db96d56Sopenharmony_ci"chflags($module, /, path, flags, follow_symlinks=True)\n"
5527db96d56Sopenharmony_ci"--\n"
5537db96d56Sopenharmony_ci"\n"
5547db96d56Sopenharmony_ci"Set file flags.\n"
5557db96d56Sopenharmony_ci"\n"
5567db96d56Sopenharmony_ci"If follow_symlinks is False, and the last element of the path is a symbolic\n"
5577db96d56Sopenharmony_ci"  link, chflags will change flags on the symbolic link itself instead of the\n"
5587db96d56Sopenharmony_ci"  file the link points to.\n"
5597db96d56Sopenharmony_ci"follow_symlinks may not be implemented on your platform.  If it is\n"
5607db96d56Sopenharmony_ci"unavailable, using it will raise a NotImplementedError.");
5617db96d56Sopenharmony_ci
5627db96d56Sopenharmony_ci#define OS_CHFLAGS_METHODDEF    \
5637db96d56Sopenharmony_ci    {"chflags", _PyCFunction_CAST(os_chflags), METH_FASTCALL|METH_KEYWORDS, os_chflags__doc__},
5647db96d56Sopenharmony_ci
5657db96d56Sopenharmony_cistatic PyObject *
5667db96d56Sopenharmony_cios_chflags_impl(PyObject *module, path_t *path, unsigned long flags,
5677db96d56Sopenharmony_ci                int follow_symlinks);
5687db96d56Sopenharmony_ci
5697db96d56Sopenharmony_cistatic PyObject *
5707db96d56Sopenharmony_cios_chflags(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
5717db96d56Sopenharmony_ci{
5727db96d56Sopenharmony_ci    PyObject *return_value = NULL;
5737db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "flags", "follow_symlinks", NULL};
5747db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "chflags", 0};
5757db96d56Sopenharmony_ci    PyObject *argsbuf[3];
5767db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
5777db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("chflags", "path", 0, 0);
5787db96d56Sopenharmony_ci    unsigned long flags;
5797db96d56Sopenharmony_ci    int follow_symlinks = 1;
5807db96d56Sopenharmony_ci
5817db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 3, 0, argsbuf);
5827db96d56Sopenharmony_ci    if (!args) {
5837db96d56Sopenharmony_ci        goto exit;
5847db96d56Sopenharmony_ci    }
5857db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
5867db96d56Sopenharmony_ci        goto exit;
5877db96d56Sopenharmony_ci    }
5887db96d56Sopenharmony_ci    if (!PyLong_Check(args[1])) {
5897db96d56Sopenharmony_ci        _PyArg_BadArgument("chflags", "argument 'flags'", "int", args[1]);
5907db96d56Sopenharmony_ci        goto exit;
5917db96d56Sopenharmony_ci    }
5927db96d56Sopenharmony_ci    flags = PyLong_AsUnsignedLongMask(args[1]);
5937db96d56Sopenharmony_ci    if (!noptargs) {
5947db96d56Sopenharmony_ci        goto skip_optional_pos;
5957db96d56Sopenharmony_ci    }
5967db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[2]);
5977db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
5987db96d56Sopenharmony_ci        goto exit;
5997db96d56Sopenharmony_ci    }
6007db96d56Sopenharmony_ciskip_optional_pos:
6017db96d56Sopenharmony_ci    return_value = os_chflags_impl(module, &path, flags, follow_symlinks);
6027db96d56Sopenharmony_ci
6037db96d56Sopenharmony_ciexit:
6047db96d56Sopenharmony_ci    /* Cleanup for path */
6057db96d56Sopenharmony_ci    path_cleanup(&path);
6067db96d56Sopenharmony_ci
6077db96d56Sopenharmony_ci    return return_value;
6087db96d56Sopenharmony_ci}
6097db96d56Sopenharmony_ci
6107db96d56Sopenharmony_ci#endif /* defined(HAVE_CHFLAGS) */
6117db96d56Sopenharmony_ci
6127db96d56Sopenharmony_ci#if defined(HAVE_LCHFLAGS)
6137db96d56Sopenharmony_ci
6147db96d56Sopenharmony_ciPyDoc_STRVAR(os_lchflags__doc__,
6157db96d56Sopenharmony_ci"lchflags($module, /, path, flags)\n"
6167db96d56Sopenharmony_ci"--\n"
6177db96d56Sopenharmony_ci"\n"
6187db96d56Sopenharmony_ci"Set file flags.\n"
6197db96d56Sopenharmony_ci"\n"
6207db96d56Sopenharmony_ci"This function will not follow symbolic links.\n"
6217db96d56Sopenharmony_ci"Equivalent to chflags(path, flags, follow_symlinks=False).");
6227db96d56Sopenharmony_ci
6237db96d56Sopenharmony_ci#define OS_LCHFLAGS_METHODDEF    \
6247db96d56Sopenharmony_ci    {"lchflags", _PyCFunction_CAST(os_lchflags), METH_FASTCALL|METH_KEYWORDS, os_lchflags__doc__},
6257db96d56Sopenharmony_ci
6267db96d56Sopenharmony_cistatic PyObject *
6277db96d56Sopenharmony_cios_lchflags_impl(PyObject *module, path_t *path, unsigned long flags);
6287db96d56Sopenharmony_ci
6297db96d56Sopenharmony_cistatic PyObject *
6307db96d56Sopenharmony_cios_lchflags(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
6317db96d56Sopenharmony_ci{
6327db96d56Sopenharmony_ci    PyObject *return_value = NULL;
6337db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "flags", NULL};
6347db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "lchflags", 0};
6357db96d56Sopenharmony_ci    PyObject *argsbuf[2];
6367db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("lchflags", "path", 0, 0);
6377db96d56Sopenharmony_ci    unsigned long flags;
6387db96d56Sopenharmony_ci
6397db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
6407db96d56Sopenharmony_ci    if (!args) {
6417db96d56Sopenharmony_ci        goto exit;
6427db96d56Sopenharmony_ci    }
6437db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
6447db96d56Sopenharmony_ci        goto exit;
6457db96d56Sopenharmony_ci    }
6467db96d56Sopenharmony_ci    if (!PyLong_Check(args[1])) {
6477db96d56Sopenharmony_ci        _PyArg_BadArgument("lchflags", "argument 'flags'", "int", args[1]);
6487db96d56Sopenharmony_ci        goto exit;
6497db96d56Sopenharmony_ci    }
6507db96d56Sopenharmony_ci    flags = PyLong_AsUnsignedLongMask(args[1]);
6517db96d56Sopenharmony_ci    return_value = os_lchflags_impl(module, &path, flags);
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ciexit:
6547db96d56Sopenharmony_ci    /* Cleanup for path */
6557db96d56Sopenharmony_ci    path_cleanup(&path);
6567db96d56Sopenharmony_ci
6577db96d56Sopenharmony_ci    return return_value;
6587db96d56Sopenharmony_ci}
6597db96d56Sopenharmony_ci
6607db96d56Sopenharmony_ci#endif /* defined(HAVE_LCHFLAGS) */
6617db96d56Sopenharmony_ci
6627db96d56Sopenharmony_ci#if defined(HAVE_CHROOT)
6637db96d56Sopenharmony_ci
6647db96d56Sopenharmony_ciPyDoc_STRVAR(os_chroot__doc__,
6657db96d56Sopenharmony_ci"chroot($module, /, path)\n"
6667db96d56Sopenharmony_ci"--\n"
6677db96d56Sopenharmony_ci"\n"
6687db96d56Sopenharmony_ci"Change root directory to path.");
6697db96d56Sopenharmony_ci
6707db96d56Sopenharmony_ci#define OS_CHROOT_METHODDEF    \
6717db96d56Sopenharmony_ci    {"chroot", _PyCFunction_CAST(os_chroot), METH_FASTCALL|METH_KEYWORDS, os_chroot__doc__},
6727db96d56Sopenharmony_ci
6737db96d56Sopenharmony_cistatic PyObject *
6747db96d56Sopenharmony_cios_chroot_impl(PyObject *module, path_t *path);
6757db96d56Sopenharmony_ci
6767db96d56Sopenharmony_cistatic PyObject *
6777db96d56Sopenharmony_cios_chroot(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
6787db96d56Sopenharmony_ci{
6797db96d56Sopenharmony_ci    PyObject *return_value = NULL;
6807db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", NULL};
6817db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "chroot", 0};
6827db96d56Sopenharmony_ci    PyObject *argsbuf[1];
6837db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("chroot", "path", 0, 0);
6847db96d56Sopenharmony_ci
6857db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
6867db96d56Sopenharmony_ci    if (!args) {
6877db96d56Sopenharmony_ci        goto exit;
6887db96d56Sopenharmony_ci    }
6897db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
6907db96d56Sopenharmony_ci        goto exit;
6917db96d56Sopenharmony_ci    }
6927db96d56Sopenharmony_ci    return_value = os_chroot_impl(module, &path);
6937db96d56Sopenharmony_ci
6947db96d56Sopenharmony_ciexit:
6957db96d56Sopenharmony_ci    /* Cleanup for path */
6967db96d56Sopenharmony_ci    path_cleanup(&path);
6977db96d56Sopenharmony_ci
6987db96d56Sopenharmony_ci    return return_value;
6997db96d56Sopenharmony_ci}
7007db96d56Sopenharmony_ci
7017db96d56Sopenharmony_ci#endif /* defined(HAVE_CHROOT) */
7027db96d56Sopenharmony_ci
7037db96d56Sopenharmony_ci#if defined(HAVE_FSYNC)
7047db96d56Sopenharmony_ci
7057db96d56Sopenharmony_ciPyDoc_STRVAR(os_fsync__doc__,
7067db96d56Sopenharmony_ci"fsync($module, /, fd)\n"
7077db96d56Sopenharmony_ci"--\n"
7087db96d56Sopenharmony_ci"\n"
7097db96d56Sopenharmony_ci"Force write of fd to disk.");
7107db96d56Sopenharmony_ci
7117db96d56Sopenharmony_ci#define OS_FSYNC_METHODDEF    \
7127db96d56Sopenharmony_ci    {"fsync", _PyCFunction_CAST(os_fsync), METH_FASTCALL|METH_KEYWORDS, os_fsync__doc__},
7137db96d56Sopenharmony_ci
7147db96d56Sopenharmony_cistatic PyObject *
7157db96d56Sopenharmony_cios_fsync_impl(PyObject *module, int fd);
7167db96d56Sopenharmony_ci
7177db96d56Sopenharmony_cistatic PyObject *
7187db96d56Sopenharmony_cios_fsync(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
7197db96d56Sopenharmony_ci{
7207db96d56Sopenharmony_ci    PyObject *return_value = NULL;
7217db96d56Sopenharmony_ci    static const char * const _keywords[] = {"fd", NULL};
7227db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "fsync", 0};
7237db96d56Sopenharmony_ci    PyObject *argsbuf[1];
7247db96d56Sopenharmony_ci    int fd;
7257db96d56Sopenharmony_ci
7267db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
7277db96d56Sopenharmony_ci    if (!args) {
7287db96d56Sopenharmony_ci        goto exit;
7297db96d56Sopenharmony_ci    }
7307db96d56Sopenharmony_ci    if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
7317db96d56Sopenharmony_ci        goto exit;
7327db96d56Sopenharmony_ci    }
7337db96d56Sopenharmony_ci    return_value = os_fsync_impl(module, fd);
7347db96d56Sopenharmony_ci
7357db96d56Sopenharmony_ciexit:
7367db96d56Sopenharmony_ci    return return_value;
7377db96d56Sopenharmony_ci}
7387db96d56Sopenharmony_ci
7397db96d56Sopenharmony_ci#endif /* defined(HAVE_FSYNC) */
7407db96d56Sopenharmony_ci
7417db96d56Sopenharmony_ci#if defined(HAVE_SYNC)
7427db96d56Sopenharmony_ci
7437db96d56Sopenharmony_ciPyDoc_STRVAR(os_sync__doc__,
7447db96d56Sopenharmony_ci"sync($module, /)\n"
7457db96d56Sopenharmony_ci"--\n"
7467db96d56Sopenharmony_ci"\n"
7477db96d56Sopenharmony_ci"Force write of everything to disk.");
7487db96d56Sopenharmony_ci
7497db96d56Sopenharmony_ci#define OS_SYNC_METHODDEF    \
7507db96d56Sopenharmony_ci    {"sync", (PyCFunction)os_sync, METH_NOARGS, os_sync__doc__},
7517db96d56Sopenharmony_ci
7527db96d56Sopenharmony_cistatic PyObject *
7537db96d56Sopenharmony_cios_sync_impl(PyObject *module);
7547db96d56Sopenharmony_ci
7557db96d56Sopenharmony_cistatic PyObject *
7567db96d56Sopenharmony_cios_sync(PyObject *module, PyObject *Py_UNUSED(ignored))
7577db96d56Sopenharmony_ci{
7587db96d56Sopenharmony_ci    return os_sync_impl(module);
7597db96d56Sopenharmony_ci}
7607db96d56Sopenharmony_ci
7617db96d56Sopenharmony_ci#endif /* defined(HAVE_SYNC) */
7627db96d56Sopenharmony_ci
7637db96d56Sopenharmony_ci#if defined(HAVE_FDATASYNC)
7647db96d56Sopenharmony_ci
7657db96d56Sopenharmony_ciPyDoc_STRVAR(os_fdatasync__doc__,
7667db96d56Sopenharmony_ci"fdatasync($module, /, fd)\n"
7677db96d56Sopenharmony_ci"--\n"
7687db96d56Sopenharmony_ci"\n"
7697db96d56Sopenharmony_ci"Force write of fd to disk without forcing update of metadata.");
7707db96d56Sopenharmony_ci
7717db96d56Sopenharmony_ci#define OS_FDATASYNC_METHODDEF    \
7727db96d56Sopenharmony_ci    {"fdatasync", _PyCFunction_CAST(os_fdatasync), METH_FASTCALL|METH_KEYWORDS, os_fdatasync__doc__},
7737db96d56Sopenharmony_ci
7747db96d56Sopenharmony_cistatic PyObject *
7757db96d56Sopenharmony_cios_fdatasync_impl(PyObject *module, int fd);
7767db96d56Sopenharmony_ci
7777db96d56Sopenharmony_cistatic PyObject *
7787db96d56Sopenharmony_cios_fdatasync(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
7797db96d56Sopenharmony_ci{
7807db96d56Sopenharmony_ci    PyObject *return_value = NULL;
7817db96d56Sopenharmony_ci    static const char * const _keywords[] = {"fd", NULL};
7827db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "fdatasync", 0};
7837db96d56Sopenharmony_ci    PyObject *argsbuf[1];
7847db96d56Sopenharmony_ci    int fd;
7857db96d56Sopenharmony_ci
7867db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
7877db96d56Sopenharmony_ci    if (!args) {
7887db96d56Sopenharmony_ci        goto exit;
7897db96d56Sopenharmony_ci    }
7907db96d56Sopenharmony_ci    if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
7917db96d56Sopenharmony_ci        goto exit;
7927db96d56Sopenharmony_ci    }
7937db96d56Sopenharmony_ci    return_value = os_fdatasync_impl(module, fd);
7947db96d56Sopenharmony_ci
7957db96d56Sopenharmony_ciexit:
7967db96d56Sopenharmony_ci    return return_value;
7977db96d56Sopenharmony_ci}
7987db96d56Sopenharmony_ci
7997db96d56Sopenharmony_ci#endif /* defined(HAVE_FDATASYNC) */
8007db96d56Sopenharmony_ci
8017db96d56Sopenharmony_ci#if defined(HAVE_CHOWN)
8027db96d56Sopenharmony_ci
8037db96d56Sopenharmony_ciPyDoc_STRVAR(os_chown__doc__,
8047db96d56Sopenharmony_ci"chown($module, /, path, uid, gid, *, dir_fd=None, follow_symlinks=True)\n"
8057db96d56Sopenharmony_ci"--\n"
8067db96d56Sopenharmony_ci"\n"
8077db96d56Sopenharmony_ci"Change the owner and group id of path to the numeric uid and gid.\\\n"
8087db96d56Sopenharmony_ci"\n"
8097db96d56Sopenharmony_ci"  path\n"
8107db96d56Sopenharmony_ci"    Path to be examined; can be string, bytes, a path-like object, or open-file-descriptor int.\n"
8117db96d56Sopenharmony_ci"  dir_fd\n"
8127db96d56Sopenharmony_ci"    If not None, it should be a file descriptor open to a directory,\n"
8137db96d56Sopenharmony_ci"    and path should be relative; path will then be relative to that\n"
8147db96d56Sopenharmony_ci"    directory.\n"
8157db96d56Sopenharmony_ci"  follow_symlinks\n"
8167db96d56Sopenharmony_ci"    If False, and the last element of the path is a symbolic link,\n"
8177db96d56Sopenharmony_ci"    stat will examine the symbolic link itself instead of the file\n"
8187db96d56Sopenharmony_ci"    the link points to.\n"
8197db96d56Sopenharmony_ci"\n"
8207db96d56Sopenharmony_ci"path may always be specified as a string.\n"
8217db96d56Sopenharmony_ci"On some platforms, path may also be specified as an open file descriptor.\n"
8227db96d56Sopenharmony_ci"  If this functionality is unavailable, using it raises an exception.\n"
8237db96d56Sopenharmony_ci"If dir_fd is not None, it should be a file descriptor open to a directory,\n"
8247db96d56Sopenharmony_ci"  and path should be relative; path will then be relative to that directory.\n"
8257db96d56Sopenharmony_ci"If follow_symlinks is False, and the last element of the path is a symbolic\n"
8267db96d56Sopenharmony_ci"  link, chown will modify the symbolic link itself instead of the file the\n"
8277db96d56Sopenharmony_ci"  link points to.\n"
8287db96d56Sopenharmony_ci"It is an error to use dir_fd or follow_symlinks when specifying path as\n"
8297db96d56Sopenharmony_ci"  an open file descriptor.\n"
8307db96d56Sopenharmony_ci"dir_fd and follow_symlinks may not be implemented on your platform.\n"
8317db96d56Sopenharmony_ci"  If they are unavailable, using them will raise a NotImplementedError.");
8327db96d56Sopenharmony_ci
8337db96d56Sopenharmony_ci#define OS_CHOWN_METHODDEF    \
8347db96d56Sopenharmony_ci    {"chown", _PyCFunction_CAST(os_chown), METH_FASTCALL|METH_KEYWORDS, os_chown__doc__},
8357db96d56Sopenharmony_ci
8367db96d56Sopenharmony_cistatic PyObject *
8377db96d56Sopenharmony_cios_chown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid,
8387db96d56Sopenharmony_ci              int dir_fd, int follow_symlinks);
8397db96d56Sopenharmony_ci
8407db96d56Sopenharmony_cistatic PyObject *
8417db96d56Sopenharmony_cios_chown(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
8427db96d56Sopenharmony_ci{
8437db96d56Sopenharmony_ci    PyObject *return_value = NULL;
8447db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "uid", "gid", "dir_fd", "follow_symlinks", NULL};
8457db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "chown", 0};
8467db96d56Sopenharmony_ci    PyObject *argsbuf[5];
8477db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3;
8487db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("chown", "path", 0, PATH_HAVE_FCHOWN);
8497db96d56Sopenharmony_ci    uid_t uid;
8507db96d56Sopenharmony_ci    gid_t gid;
8517db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
8527db96d56Sopenharmony_ci    int follow_symlinks = 1;
8537db96d56Sopenharmony_ci
8547db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf);
8557db96d56Sopenharmony_ci    if (!args) {
8567db96d56Sopenharmony_ci        goto exit;
8577db96d56Sopenharmony_ci    }
8587db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
8597db96d56Sopenharmony_ci        goto exit;
8607db96d56Sopenharmony_ci    }
8617db96d56Sopenharmony_ci    if (!_Py_Uid_Converter(args[1], &uid)) {
8627db96d56Sopenharmony_ci        goto exit;
8637db96d56Sopenharmony_ci    }
8647db96d56Sopenharmony_ci    if (!_Py_Gid_Converter(args[2], &gid)) {
8657db96d56Sopenharmony_ci        goto exit;
8667db96d56Sopenharmony_ci    }
8677db96d56Sopenharmony_ci    if (!noptargs) {
8687db96d56Sopenharmony_ci        goto skip_optional_kwonly;
8697db96d56Sopenharmony_ci    }
8707db96d56Sopenharmony_ci    if (args[3]) {
8717db96d56Sopenharmony_ci        if (!FCHOWNAT_DIR_FD_CONVERTER(args[3], &dir_fd)) {
8727db96d56Sopenharmony_ci            goto exit;
8737db96d56Sopenharmony_ci        }
8747db96d56Sopenharmony_ci        if (!--noptargs) {
8757db96d56Sopenharmony_ci            goto skip_optional_kwonly;
8767db96d56Sopenharmony_ci        }
8777db96d56Sopenharmony_ci    }
8787db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[4]);
8797db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
8807db96d56Sopenharmony_ci        goto exit;
8817db96d56Sopenharmony_ci    }
8827db96d56Sopenharmony_ciskip_optional_kwonly:
8837db96d56Sopenharmony_ci    return_value = os_chown_impl(module, &path, uid, gid, dir_fd, follow_symlinks);
8847db96d56Sopenharmony_ci
8857db96d56Sopenharmony_ciexit:
8867db96d56Sopenharmony_ci    /* Cleanup for path */
8877db96d56Sopenharmony_ci    path_cleanup(&path);
8887db96d56Sopenharmony_ci
8897db96d56Sopenharmony_ci    return return_value;
8907db96d56Sopenharmony_ci}
8917db96d56Sopenharmony_ci
8927db96d56Sopenharmony_ci#endif /* defined(HAVE_CHOWN) */
8937db96d56Sopenharmony_ci
8947db96d56Sopenharmony_ci#if defined(HAVE_FCHOWN)
8957db96d56Sopenharmony_ci
8967db96d56Sopenharmony_ciPyDoc_STRVAR(os_fchown__doc__,
8977db96d56Sopenharmony_ci"fchown($module, /, fd, uid, gid)\n"
8987db96d56Sopenharmony_ci"--\n"
8997db96d56Sopenharmony_ci"\n"
9007db96d56Sopenharmony_ci"Change the owner and group id of the file specified by file descriptor.\n"
9017db96d56Sopenharmony_ci"\n"
9027db96d56Sopenharmony_ci"Equivalent to os.chown(fd, uid, gid).");
9037db96d56Sopenharmony_ci
9047db96d56Sopenharmony_ci#define OS_FCHOWN_METHODDEF    \
9057db96d56Sopenharmony_ci    {"fchown", _PyCFunction_CAST(os_fchown), METH_FASTCALL|METH_KEYWORDS, os_fchown__doc__},
9067db96d56Sopenharmony_ci
9077db96d56Sopenharmony_cistatic PyObject *
9087db96d56Sopenharmony_cios_fchown_impl(PyObject *module, int fd, uid_t uid, gid_t gid);
9097db96d56Sopenharmony_ci
9107db96d56Sopenharmony_cistatic PyObject *
9117db96d56Sopenharmony_cios_fchown(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
9127db96d56Sopenharmony_ci{
9137db96d56Sopenharmony_ci    PyObject *return_value = NULL;
9147db96d56Sopenharmony_ci    static const char * const _keywords[] = {"fd", "uid", "gid", NULL};
9157db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "fchown", 0};
9167db96d56Sopenharmony_ci    PyObject *argsbuf[3];
9177db96d56Sopenharmony_ci    int fd;
9187db96d56Sopenharmony_ci    uid_t uid;
9197db96d56Sopenharmony_ci    gid_t gid;
9207db96d56Sopenharmony_ci
9217db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf);
9227db96d56Sopenharmony_ci    if (!args) {
9237db96d56Sopenharmony_ci        goto exit;
9247db96d56Sopenharmony_ci    }
9257db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
9267db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
9277db96d56Sopenharmony_ci        goto exit;
9287db96d56Sopenharmony_ci    }
9297db96d56Sopenharmony_ci    if (!_Py_Uid_Converter(args[1], &uid)) {
9307db96d56Sopenharmony_ci        goto exit;
9317db96d56Sopenharmony_ci    }
9327db96d56Sopenharmony_ci    if (!_Py_Gid_Converter(args[2], &gid)) {
9337db96d56Sopenharmony_ci        goto exit;
9347db96d56Sopenharmony_ci    }
9357db96d56Sopenharmony_ci    return_value = os_fchown_impl(module, fd, uid, gid);
9367db96d56Sopenharmony_ci
9377db96d56Sopenharmony_ciexit:
9387db96d56Sopenharmony_ci    return return_value;
9397db96d56Sopenharmony_ci}
9407db96d56Sopenharmony_ci
9417db96d56Sopenharmony_ci#endif /* defined(HAVE_FCHOWN) */
9427db96d56Sopenharmony_ci
9437db96d56Sopenharmony_ci#if defined(HAVE_LCHOWN)
9447db96d56Sopenharmony_ci
9457db96d56Sopenharmony_ciPyDoc_STRVAR(os_lchown__doc__,
9467db96d56Sopenharmony_ci"lchown($module, /, path, uid, gid)\n"
9477db96d56Sopenharmony_ci"--\n"
9487db96d56Sopenharmony_ci"\n"
9497db96d56Sopenharmony_ci"Change the owner and group id of path to the numeric uid and gid.\n"
9507db96d56Sopenharmony_ci"\n"
9517db96d56Sopenharmony_ci"This function will not follow symbolic links.\n"
9527db96d56Sopenharmony_ci"Equivalent to os.chown(path, uid, gid, follow_symlinks=False).");
9537db96d56Sopenharmony_ci
9547db96d56Sopenharmony_ci#define OS_LCHOWN_METHODDEF    \
9557db96d56Sopenharmony_ci    {"lchown", _PyCFunction_CAST(os_lchown), METH_FASTCALL|METH_KEYWORDS, os_lchown__doc__},
9567db96d56Sopenharmony_ci
9577db96d56Sopenharmony_cistatic PyObject *
9587db96d56Sopenharmony_cios_lchown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid);
9597db96d56Sopenharmony_ci
9607db96d56Sopenharmony_cistatic PyObject *
9617db96d56Sopenharmony_cios_lchown(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
9627db96d56Sopenharmony_ci{
9637db96d56Sopenharmony_ci    PyObject *return_value = NULL;
9647db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "uid", "gid", NULL};
9657db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "lchown", 0};
9667db96d56Sopenharmony_ci    PyObject *argsbuf[3];
9677db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("lchown", "path", 0, 0);
9687db96d56Sopenharmony_ci    uid_t uid;
9697db96d56Sopenharmony_ci    gid_t gid;
9707db96d56Sopenharmony_ci
9717db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf);
9727db96d56Sopenharmony_ci    if (!args) {
9737db96d56Sopenharmony_ci        goto exit;
9747db96d56Sopenharmony_ci    }
9757db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
9767db96d56Sopenharmony_ci        goto exit;
9777db96d56Sopenharmony_ci    }
9787db96d56Sopenharmony_ci    if (!_Py_Uid_Converter(args[1], &uid)) {
9797db96d56Sopenharmony_ci        goto exit;
9807db96d56Sopenharmony_ci    }
9817db96d56Sopenharmony_ci    if (!_Py_Gid_Converter(args[2], &gid)) {
9827db96d56Sopenharmony_ci        goto exit;
9837db96d56Sopenharmony_ci    }
9847db96d56Sopenharmony_ci    return_value = os_lchown_impl(module, &path, uid, gid);
9857db96d56Sopenharmony_ci
9867db96d56Sopenharmony_ciexit:
9877db96d56Sopenharmony_ci    /* Cleanup for path */
9887db96d56Sopenharmony_ci    path_cleanup(&path);
9897db96d56Sopenharmony_ci
9907db96d56Sopenharmony_ci    return return_value;
9917db96d56Sopenharmony_ci}
9927db96d56Sopenharmony_ci
9937db96d56Sopenharmony_ci#endif /* defined(HAVE_LCHOWN) */
9947db96d56Sopenharmony_ci
9957db96d56Sopenharmony_ciPyDoc_STRVAR(os_getcwd__doc__,
9967db96d56Sopenharmony_ci"getcwd($module, /)\n"
9977db96d56Sopenharmony_ci"--\n"
9987db96d56Sopenharmony_ci"\n"
9997db96d56Sopenharmony_ci"Return a unicode string representing the current working directory.");
10007db96d56Sopenharmony_ci
10017db96d56Sopenharmony_ci#define OS_GETCWD_METHODDEF    \
10027db96d56Sopenharmony_ci    {"getcwd", (PyCFunction)os_getcwd, METH_NOARGS, os_getcwd__doc__},
10037db96d56Sopenharmony_ci
10047db96d56Sopenharmony_cistatic PyObject *
10057db96d56Sopenharmony_cios_getcwd_impl(PyObject *module);
10067db96d56Sopenharmony_ci
10077db96d56Sopenharmony_cistatic PyObject *
10087db96d56Sopenharmony_cios_getcwd(PyObject *module, PyObject *Py_UNUSED(ignored))
10097db96d56Sopenharmony_ci{
10107db96d56Sopenharmony_ci    return os_getcwd_impl(module);
10117db96d56Sopenharmony_ci}
10127db96d56Sopenharmony_ci
10137db96d56Sopenharmony_ciPyDoc_STRVAR(os_getcwdb__doc__,
10147db96d56Sopenharmony_ci"getcwdb($module, /)\n"
10157db96d56Sopenharmony_ci"--\n"
10167db96d56Sopenharmony_ci"\n"
10177db96d56Sopenharmony_ci"Return a bytes string representing the current working directory.");
10187db96d56Sopenharmony_ci
10197db96d56Sopenharmony_ci#define OS_GETCWDB_METHODDEF    \
10207db96d56Sopenharmony_ci    {"getcwdb", (PyCFunction)os_getcwdb, METH_NOARGS, os_getcwdb__doc__},
10217db96d56Sopenharmony_ci
10227db96d56Sopenharmony_cistatic PyObject *
10237db96d56Sopenharmony_cios_getcwdb_impl(PyObject *module);
10247db96d56Sopenharmony_ci
10257db96d56Sopenharmony_cistatic PyObject *
10267db96d56Sopenharmony_cios_getcwdb(PyObject *module, PyObject *Py_UNUSED(ignored))
10277db96d56Sopenharmony_ci{
10287db96d56Sopenharmony_ci    return os_getcwdb_impl(module);
10297db96d56Sopenharmony_ci}
10307db96d56Sopenharmony_ci
10317db96d56Sopenharmony_ci#if defined(HAVE_LINK)
10327db96d56Sopenharmony_ci
10337db96d56Sopenharmony_ciPyDoc_STRVAR(os_link__doc__,
10347db96d56Sopenharmony_ci"link($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None,\n"
10357db96d56Sopenharmony_ci"     follow_symlinks=True)\n"
10367db96d56Sopenharmony_ci"--\n"
10377db96d56Sopenharmony_ci"\n"
10387db96d56Sopenharmony_ci"Create a hard link to a file.\n"
10397db96d56Sopenharmony_ci"\n"
10407db96d56Sopenharmony_ci"If either src_dir_fd or dst_dir_fd is not None, it should be a file\n"
10417db96d56Sopenharmony_ci"  descriptor open to a directory, and the respective path string (src or dst)\n"
10427db96d56Sopenharmony_ci"  should be relative; the path will then be relative to that directory.\n"
10437db96d56Sopenharmony_ci"If follow_symlinks is False, and the last element of src is a symbolic\n"
10447db96d56Sopenharmony_ci"  link, link will create a link to the symbolic link itself instead of the\n"
10457db96d56Sopenharmony_ci"  file the link points to.\n"
10467db96d56Sopenharmony_ci"src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your\n"
10477db96d56Sopenharmony_ci"  platform.  If they are unavailable, using them will raise a\n"
10487db96d56Sopenharmony_ci"  NotImplementedError.");
10497db96d56Sopenharmony_ci
10507db96d56Sopenharmony_ci#define OS_LINK_METHODDEF    \
10517db96d56Sopenharmony_ci    {"link", _PyCFunction_CAST(os_link), METH_FASTCALL|METH_KEYWORDS, os_link__doc__},
10527db96d56Sopenharmony_ci
10537db96d56Sopenharmony_cistatic PyObject *
10547db96d56Sopenharmony_cios_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd,
10557db96d56Sopenharmony_ci             int dst_dir_fd, int follow_symlinks);
10567db96d56Sopenharmony_ci
10577db96d56Sopenharmony_cistatic PyObject *
10587db96d56Sopenharmony_cios_link(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
10597db96d56Sopenharmony_ci{
10607db96d56Sopenharmony_ci    PyObject *return_value = NULL;
10617db96d56Sopenharmony_ci    static const char * const _keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", "follow_symlinks", NULL};
10627db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "link", 0};
10637db96d56Sopenharmony_ci    PyObject *argsbuf[5];
10647db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
10657db96d56Sopenharmony_ci    path_t src = PATH_T_INITIALIZE("link", "src", 0, 0);
10667db96d56Sopenharmony_ci    path_t dst = PATH_T_INITIALIZE("link", "dst", 0, 0);
10677db96d56Sopenharmony_ci    int src_dir_fd = DEFAULT_DIR_FD;
10687db96d56Sopenharmony_ci    int dst_dir_fd = DEFAULT_DIR_FD;
10697db96d56Sopenharmony_ci    int follow_symlinks = 1;
10707db96d56Sopenharmony_ci
10717db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
10727db96d56Sopenharmony_ci    if (!args) {
10737db96d56Sopenharmony_ci        goto exit;
10747db96d56Sopenharmony_ci    }
10757db96d56Sopenharmony_ci    if (!path_converter(args[0], &src)) {
10767db96d56Sopenharmony_ci        goto exit;
10777db96d56Sopenharmony_ci    }
10787db96d56Sopenharmony_ci    if (!path_converter(args[1], &dst)) {
10797db96d56Sopenharmony_ci        goto exit;
10807db96d56Sopenharmony_ci    }
10817db96d56Sopenharmony_ci    if (!noptargs) {
10827db96d56Sopenharmony_ci        goto skip_optional_kwonly;
10837db96d56Sopenharmony_ci    }
10847db96d56Sopenharmony_ci    if (args[2]) {
10857db96d56Sopenharmony_ci        if (!dir_fd_converter(args[2], &src_dir_fd)) {
10867db96d56Sopenharmony_ci            goto exit;
10877db96d56Sopenharmony_ci        }
10887db96d56Sopenharmony_ci        if (!--noptargs) {
10897db96d56Sopenharmony_ci            goto skip_optional_kwonly;
10907db96d56Sopenharmony_ci        }
10917db96d56Sopenharmony_ci    }
10927db96d56Sopenharmony_ci    if (args[3]) {
10937db96d56Sopenharmony_ci        if (!dir_fd_converter(args[3], &dst_dir_fd)) {
10947db96d56Sopenharmony_ci            goto exit;
10957db96d56Sopenharmony_ci        }
10967db96d56Sopenharmony_ci        if (!--noptargs) {
10977db96d56Sopenharmony_ci            goto skip_optional_kwonly;
10987db96d56Sopenharmony_ci        }
10997db96d56Sopenharmony_ci    }
11007db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[4]);
11017db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
11027db96d56Sopenharmony_ci        goto exit;
11037db96d56Sopenharmony_ci    }
11047db96d56Sopenharmony_ciskip_optional_kwonly:
11057db96d56Sopenharmony_ci    return_value = os_link_impl(module, &src, &dst, src_dir_fd, dst_dir_fd, follow_symlinks);
11067db96d56Sopenharmony_ci
11077db96d56Sopenharmony_ciexit:
11087db96d56Sopenharmony_ci    /* Cleanup for src */
11097db96d56Sopenharmony_ci    path_cleanup(&src);
11107db96d56Sopenharmony_ci    /* Cleanup for dst */
11117db96d56Sopenharmony_ci    path_cleanup(&dst);
11127db96d56Sopenharmony_ci
11137db96d56Sopenharmony_ci    return return_value;
11147db96d56Sopenharmony_ci}
11157db96d56Sopenharmony_ci
11167db96d56Sopenharmony_ci#endif /* defined(HAVE_LINK) */
11177db96d56Sopenharmony_ci
11187db96d56Sopenharmony_ciPyDoc_STRVAR(os_listdir__doc__,
11197db96d56Sopenharmony_ci"listdir($module, /, path=None)\n"
11207db96d56Sopenharmony_ci"--\n"
11217db96d56Sopenharmony_ci"\n"
11227db96d56Sopenharmony_ci"Return a list containing the names of the files in the directory.\n"
11237db96d56Sopenharmony_ci"\n"
11247db96d56Sopenharmony_ci"path can be specified as either str, bytes, or a path-like object.  If path is bytes,\n"
11257db96d56Sopenharmony_ci"  the filenames returned will also be bytes; in all other circumstances\n"
11267db96d56Sopenharmony_ci"  the filenames returned will be str.\n"
11277db96d56Sopenharmony_ci"If path is None, uses the path=\'.\'.\n"
11287db96d56Sopenharmony_ci"On some platforms, path may also be specified as an open file descriptor;\\\n"
11297db96d56Sopenharmony_ci"  the file descriptor must refer to a directory.\n"
11307db96d56Sopenharmony_ci"  If this functionality is unavailable, using it raises NotImplementedError.\n"
11317db96d56Sopenharmony_ci"\n"
11327db96d56Sopenharmony_ci"The list is in arbitrary order.  It does not include the special\n"
11337db96d56Sopenharmony_ci"entries \'.\' and \'..\' even if they are present in the directory.");
11347db96d56Sopenharmony_ci
11357db96d56Sopenharmony_ci#define OS_LISTDIR_METHODDEF    \
11367db96d56Sopenharmony_ci    {"listdir", _PyCFunction_CAST(os_listdir), METH_FASTCALL|METH_KEYWORDS, os_listdir__doc__},
11377db96d56Sopenharmony_ci
11387db96d56Sopenharmony_cistatic PyObject *
11397db96d56Sopenharmony_cios_listdir_impl(PyObject *module, path_t *path);
11407db96d56Sopenharmony_ci
11417db96d56Sopenharmony_cistatic PyObject *
11427db96d56Sopenharmony_cios_listdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
11437db96d56Sopenharmony_ci{
11447db96d56Sopenharmony_ci    PyObject *return_value = NULL;
11457db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", NULL};
11467db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "listdir", 0};
11477db96d56Sopenharmony_ci    PyObject *argsbuf[1];
11487db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
11497db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("listdir", "path", 1, PATH_HAVE_FDOPENDIR);
11507db96d56Sopenharmony_ci
11517db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
11527db96d56Sopenharmony_ci    if (!args) {
11537db96d56Sopenharmony_ci        goto exit;
11547db96d56Sopenharmony_ci    }
11557db96d56Sopenharmony_ci    if (!noptargs) {
11567db96d56Sopenharmony_ci        goto skip_optional_pos;
11577db96d56Sopenharmony_ci    }
11587db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
11597db96d56Sopenharmony_ci        goto exit;
11607db96d56Sopenharmony_ci    }
11617db96d56Sopenharmony_ciskip_optional_pos:
11627db96d56Sopenharmony_ci    return_value = os_listdir_impl(module, &path);
11637db96d56Sopenharmony_ci
11647db96d56Sopenharmony_ciexit:
11657db96d56Sopenharmony_ci    /* Cleanup for path */
11667db96d56Sopenharmony_ci    path_cleanup(&path);
11677db96d56Sopenharmony_ci
11687db96d56Sopenharmony_ci    return return_value;
11697db96d56Sopenharmony_ci}
11707db96d56Sopenharmony_ci
11717db96d56Sopenharmony_ci#if defined(MS_WINDOWS)
11727db96d56Sopenharmony_ci
11737db96d56Sopenharmony_ciPyDoc_STRVAR(os__getfullpathname__doc__,
11747db96d56Sopenharmony_ci"_getfullpathname($module, path, /)\n"
11757db96d56Sopenharmony_ci"--\n"
11767db96d56Sopenharmony_ci"\n");
11777db96d56Sopenharmony_ci
11787db96d56Sopenharmony_ci#define OS__GETFULLPATHNAME_METHODDEF    \
11797db96d56Sopenharmony_ci    {"_getfullpathname", (PyCFunction)os__getfullpathname, METH_O, os__getfullpathname__doc__},
11807db96d56Sopenharmony_ci
11817db96d56Sopenharmony_cistatic PyObject *
11827db96d56Sopenharmony_cios__getfullpathname_impl(PyObject *module, path_t *path);
11837db96d56Sopenharmony_ci
11847db96d56Sopenharmony_cistatic PyObject *
11857db96d56Sopenharmony_cios__getfullpathname(PyObject *module, PyObject *arg)
11867db96d56Sopenharmony_ci{
11877db96d56Sopenharmony_ci    PyObject *return_value = NULL;
11887db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("_getfullpathname", "path", 0, 0);
11897db96d56Sopenharmony_ci
11907db96d56Sopenharmony_ci    if (!path_converter(arg, &path)) {
11917db96d56Sopenharmony_ci        goto exit;
11927db96d56Sopenharmony_ci    }
11937db96d56Sopenharmony_ci    return_value = os__getfullpathname_impl(module, &path);
11947db96d56Sopenharmony_ci
11957db96d56Sopenharmony_ciexit:
11967db96d56Sopenharmony_ci    /* Cleanup for path */
11977db96d56Sopenharmony_ci    path_cleanup(&path);
11987db96d56Sopenharmony_ci
11997db96d56Sopenharmony_ci    return return_value;
12007db96d56Sopenharmony_ci}
12017db96d56Sopenharmony_ci
12027db96d56Sopenharmony_ci#endif /* defined(MS_WINDOWS) */
12037db96d56Sopenharmony_ci
12047db96d56Sopenharmony_ci#if defined(MS_WINDOWS)
12057db96d56Sopenharmony_ci
12067db96d56Sopenharmony_ciPyDoc_STRVAR(os__getfinalpathname__doc__,
12077db96d56Sopenharmony_ci"_getfinalpathname($module, path, /)\n"
12087db96d56Sopenharmony_ci"--\n"
12097db96d56Sopenharmony_ci"\n"
12107db96d56Sopenharmony_ci"A helper function for samepath on windows.");
12117db96d56Sopenharmony_ci
12127db96d56Sopenharmony_ci#define OS__GETFINALPATHNAME_METHODDEF    \
12137db96d56Sopenharmony_ci    {"_getfinalpathname", (PyCFunction)os__getfinalpathname, METH_O, os__getfinalpathname__doc__},
12147db96d56Sopenharmony_ci
12157db96d56Sopenharmony_cistatic PyObject *
12167db96d56Sopenharmony_cios__getfinalpathname_impl(PyObject *module, path_t *path);
12177db96d56Sopenharmony_ci
12187db96d56Sopenharmony_cistatic PyObject *
12197db96d56Sopenharmony_cios__getfinalpathname(PyObject *module, PyObject *arg)
12207db96d56Sopenharmony_ci{
12217db96d56Sopenharmony_ci    PyObject *return_value = NULL;
12227db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("_getfinalpathname", "path", 0, 0);
12237db96d56Sopenharmony_ci
12247db96d56Sopenharmony_ci    if (!path_converter(arg, &path)) {
12257db96d56Sopenharmony_ci        goto exit;
12267db96d56Sopenharmony_ci    }
12277db96d56Sopenharmony_ci    return_value = os__getfinalpathname_impl(module, &path);
12287db96d56Sopenharmony_ci
12297db96d56Sopenharmony_ciexit:
12307db96d56Sopenharmony_ci    /* Cleanup for path */
12317db96d56Sopenharmony_ci    path_cleanup(&path);
12327db96d56Sopenharmony_ci
12337db96d56Sopenharmony_ci    return return_value;
12347db96d56Sopenharmony_ci}
12357db96d56Sopenharmony_ci
12367db96d56Sopenharmony_ci#endif /* defined(MS_WINDOWS) */
12377db96d56Sopenharmony_ci
12387db96d56Sopenharmony_ci#if defined(MS_WINDOWS)
12397db96d56Sopenharmony_ci
12407db96d56Sopenharmony_ciPyDoc_STRVAR(os__getvolumepathname__doc__,
12417db96d56Sopenharmony_ci"_getvolumepathname($module, /, path)\n"
12427db96d56Sopenharmony_ci"--\n"
12437db96d56Sopenharmony_ci"\n"
12447db96d56Sopenharmony_ci"A helper function for ismount on Win32.");
12457db96d56Sopenharmony_ci
12467db96d56Sopenharmony_ci#define OS__GETVOLUMEPATHNAME_METHODDEF    \
12477db96d56Sopenharmony_ci    {"_getvolumepathname", _PyCFunction_CAST(os__getvolumepathname), METH_FASTCALL|METH_KEYWORDS, os__getvolumepathname__doc__},
12487db96d56Sopenharmony_ci
12497db96d56Sopenharmony_cistatic PyObject *
12507db96d56Sopenharmony_cios__getvolumepathname_impl(PyObject *module, path_t *path);
12517db96d56Sopenharmony_ci
12527db96d56Sopenharmony_cistatic PyObject *
12537db96d56Sopenharmony_cios__getvolumepathname(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
12547db96d56Sopenharmony_ci{
12557db96d56Sopenharmony_ci    PyObject *return_value = NULL;
12567db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", NULL};
12577db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "_getvolumepathname", 0};
12587db96d56Sopenharmony_ci    PyObject *argsbuf[1];
12597db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("_getvolumepathname", "path", 0, 0);
12607db96d56Sopenharmony_ci
12617db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
12627db96d56Sopenharmony_ci    if (!args) {
12637db96d56Sopenharmony_ci        goto exit;
12647db96d56Sopenharmony_ci    }
12657db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
12667db96d56Sopenharmony_ci        goto exit;
12677db96d56Sopenharmony_ci    }
12687db96d56Sopenharmony_ci    return_value = os__getvolumepathname_impl(module, &path);
12697db96d56Sopenharmony_ci
12707db96d56Sopenharmony_ciexit:
12717db96d56Sopenharmony_ci    /* Cleanup for path */
12727db96d56Sopenharmony_ci    path_cleanup(&path);
12737db96d56Sopenharmony_ci
12747db96d56Sopenharmony_ci    return return_value;
12757db96d56Sopenharmony_ci}
12767db96d56Sopenharmony_ci
12777db96d56Sopenharmony_ci#endif /* defined(MS_WINDOWS) */
12787db96d56Sopenharmony_ci
12797db96d56Sopenharmony_ci#if defined(MS_WINDOWS)
12807db96d56Sopenharmony_ci
12817db96d56Sopenharmony_ciPyDoc_STRVAR(os__path_splitroot__doc__,
12827db96d56Sopenharmony_ci"_path_splitroot($module, /, path)\n"
12837db96d56Sopenharmony_ci"--\n"
12847db96d56Sopenharmony_ci"\n"
12857db96d56Sopenharmony_ci"Removes everything after the root on Win32.");
12867db96d56Sopenharmony_ci
12877db96d56Sopenharmony_ci#define OS__PATH_SPLITROOT_METHODDEF    \
12887db96d56Sopenharmony_ci    {"_path_splitroot", _PyCFunction_CAST(os__path_splitroot), METH_FASTCALL|METH_KEYWORDS, os__path_splitroot__doc__},
12897db96d56Sopenharmony_ci
12907db96d56Sopenharmony_cistatic PyObject *
12917db96d56Sopenharmony_cios__path_splitroot_impl(PyObject *module, path_t *path);
12927db96d56Sopenharmony_ci
12937db96d56Sopenharmony_cistatic PyObject *
12947db96d56Sopenharmony_cios__path_splitroot(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
12957db96d56Sopenharmony_ci{
12967db96d56Sopenharmony_ci    PyObject *return_value = NULL;
12977db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", NULL};
12987db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "_path_splitroot", 0};
12997db96d56Sopenharmony_ci    PyObject *argsbuf[1];
13007db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("_path_splitroot", "path", 0, 0);
13017db96d56Sopenharmony_ci
13027db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
13037db96d56Sopenharmony_ci    if (!args) {
13047db96d56Sopenharmony_ci        goto exit;
13057db96d56Sopenharmony_ci    }
13067db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
13077db96d56Sopenharmony_ci        goto exit;
13087db96d56Sopenharmony_ci    }
13097db96d56Sopenharmony_ci    return_value = os__path_splitroot_impl(module, &path);
13107db96d56Sopenharmony_ci
13117db96d56Sopenharmony_ciexit:
13127db96d56Sopenharmony_ci    /* Cleanup for path */
13137db96d56Sopenharmony_ci    path_cleanup(&path);
13147db96d56Sopenharmony_ci
13157db96d56Sopenharmony_ci    return return_value;
13167db96d56Sopenharmony_ci}
13177db96d56Sopenharmony_ci
13187db96d56Sopenharmony_ci#endif /* defined(MS_WINDOWS) */
13197db96d56Sopenharmony_ci
13207db96d56Sopenharmony_ciPyDoc_STRVAR(os__path_normpath__doc__,
13217db96d56Sopenharmony_ci"_path_normpath($module, /, path)\n"
13227db96d56Sopenharmony_ci"--\n"
13237db96d56Sopenharmony_ci"\n"
13247db96d56Sopenharmony_ci"Basic path normalization.");
13257db96d56Sopenharmony_ci
13267db96d56Sopenharmony_ci#define OS__PATH_NORMPATH_METHODDEF    \
13277db96d56Sopenharmony_ci    {"_path_normpath", _PyCFunction_CAST(os__path_normpath), METH_FASTCALL|METH_KEYWORDS, os__path_normpath__doc__},
13287db96d56Sopenharmony_ci
13297db96d56Sopenharmony_cistatic PyObject *
13307db96d56Sopenharmony_cios__path_normpath_impl(PyObject *module, PyObject *path);
13317db96d56Sopenharmony_ci
13327db96d56Sopenharmony_cistatic PyObject *
13337db96d56Sopenharmony_cios__path_normpath(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
13347db96d56Sopenharmony_ci{
13357db96d56Sopenharmony_ci    PyObject *return_value = NULL;
13367db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", NULL};
13377db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "_path_normpath", 0};
13387db96d56Sopenharmony_ci    PyObject *argsbuf[1];
13397db96d56Sopenharmony_ci    PyObject *path;
13407db96d56Sopenharmony_ci
13417db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
13427db96d56Sopenharmony_ci    if (!args) {
13437db96d56Sopenharmony_ci        goto exit;
13447db96d56Sopenharmony_ci    }
13457db96d56Sopenharmony_ci    path = args[0];
13467db96d56Sopenharmony_ci    return_value = os__path_normpath_impl(module, path);
13477db96d56Sopenharmony_ci
13487db96d56Sopenharmony_ciexit:
13497db96d56Sopenharmony_ci    return return_value;
13507db96d56Sopenharmony_ci}
13517db96d56Sopenharmony_ci
13527db96d56Sopenharmony_ciPyDoc_STRVAR(os_mkdir__doc__,
13537db96d56Sopenharmony_ci"mkdir($module, /, path, mode=511, *, dir_fd=None)\n"
13547db96d56Sopenharmony_ci"--\n"
13557db96d56Sopenharmony_ci"\n"
13567db96d56Sopenharmony_ci"Create a directory.\n"
13577db96d56Sopenharmony_ci"\n"
13587db96d56Sopenharmony_ci"If dir_fd is not None, it should be a file descriptor open to a directory,\n"
13597db96d56Sopenharmony_ci"  and path should be relative; path will then be relative to that directory.\n"
13607db96d56Sopenharmony_ci"dir_fd may not be implemented on your platform.\n"
13617db96d56Sopenharmony_ci"  If it is unavailable, using it will raise a NotImplementedError.\n"
13627db96d56Sopenharmony_ci"\n"
13637db96d56Sopenharmony_ci"The mode argument is ignored on Windows. Where it is used, the current umask\n"
13647db96d56Sopenharmony_ci"value is first masked out.");
13657db96d56Sopenharmony_ci
13667db96d56Sopenharmony_ci#define OS_MKDIR_METHODDEF    \
13677db96d56Sopenharmony_ci    {"mkdir", _PyCFunction_CAST(os_mkdir), METH_FASTCALL|METH_KEYWORDS, os_mkdir__doc__},
13687db96d56Sopenharmony_ci
13697db96d56Sopenharmony_cistatic PyObject *
13707db96d56Sopenharmony_cios_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd);
13717db96d56Sopenharmony_ci
13727db96d56Sopenharmony_cistatic PyObject *
13737db96d56Sopenharmony_cios_mkdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
13747db96d56Sopenharmony_ci{
13757db96d56Sopenharmony_ci    PyObject *return_value = NULL;
13767db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "mode", "dir_fd", NULL};
13777db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "mkdir", 0};
13787db96d56Sopenharmony_ci    PyObject *argsbuf[3];
13797db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
13807db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("mkdir", "path", 0, 0);
13817db96d56Sopenharmony_ci    int mode = 511;
13827db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
13837db96d56Sopenharmony_ci
13847db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
13857db96d56Sopenharmony_ci    if (!args) {
13867db96d56Sopenharmony_ci        goto exit;
13877db96d56Sopenharmony_ci    }
13887db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
13897db96d56Sopenharmony_ci        goto exit;
13907db96d56Sopenharmony_ci    }
13917db96d56Sopenharmony_ci    if (!noptargs) {
13927db96d56Sopenharmony_ci        goto skip_optional_pos;
13937db96d56Sopenharmony_ci    }
13947db96d56Sopenharmony_ci    if (args[1]) {
13957db96d56Sopenharmony_ci        mode = _PyLong_AsInt(args[1]);
13967db96d56Sopenharmony_ci        if (mode == -1 && PyErr_Occurred()) {
13977db96d56Sopenharmony_ci            goto exit;
13987db96d56Sopenharmony_ci        }
13997db96d56Sopenharmony_ci        if (!--noptargs) {
14007db96d56Sopenharmony_ci            goto skip_optional_pos;
14017db96d56Sopenharmony_ci        }
14027db96d56Sopenharmony_ci    }
14037db96d56Sopenharmony_ciskip_optional_pos:
14047db96d56Sopenharmony_ci    if (!noptargs) {
14057db96d56Sopenharmony_ci        goto skip_optional_kwonly;
14067db96d56Sopenharmony_ci    }
14077db96d56Sopenharmony_ci    if (!MKDIRAT_DIR_FD_CONVERTER(args[2], &dir_fd)) {
14087db96d56Sopenharmony_ci        goto exit;
14097db96d56Sopenharmony_ci    }
14107db96d56Sopenharmony_ciskip_optional_kwonly:
14117db96d56Sopenharmony_ci    return_value = os_mkdir_impl(module, &path, mode, dir_fd);
14127db96d56Sopenharmony_ci
14137db96d56Sopenharmony_ciexit:
14147db96d56Sopenharmony_ci    /* Cleanup for path */
14157db96d56Sopenharmony_ci    path_cleanup(&path);
14167db96d56Sopenharmony_ci
14177db96d56Sopenharmony_ci    return return_value;
14187db96d56Sopenharmony_ci}
14197db96d56Sopenharmony_ci
14207db96d56Sopenharmony_ci#if defined(HAVE_NICE)
14217db96d56Sopenharmony_ci
14227db96d56Sopenharmony_ciPyDoc_STRVAR(os_nice__doc__,
14237db96d56Sopenharmony_ci"nice($module, increment, /)\n"
14247db96d56Sopenharmony_ci"--\n"
14257db96d56Sopenharmony_ci"\n"
14267db96d56Sopenharmony_ci"Add increment to the priority of process and return the new priority.");
14277db96d56Sopenharmony_ci
14287db96d56Sopenharmony_ci#define OS_NICE_METHODDEF    \
14297db96d56Sopenharmony_ci    {"nice", (PyCFunction)os_nice, METH_O, os_nice__doc__},
14307db96d56Sopenharmony_ci
14317db96d56Sopenharmony_cistatic PyObject *
14327db96d56Sopenharmony_cios_nice_impl(PyObject *module, int increment);
14337db96d56Sopenharmony_ci
14347db96d56Sopenharmony_cistatic PyObject *
14357db96d56Sopenharmony_cios_nice(PyObject *module, PyObject *arg)
14367db96d56Sopenharmony_ci{
14377db96d56Sopenharmony_ci    PyObject *return_value = NULL;
14387db96d56Sopenharmony_ci    int increment;
14397db96d56Sopenharmony_ci
14407db96d56Sopenharmony_ci    increment = _PyLong_AsInt(arg);
14417db96d56Sopenharmony_ci    if (increment == -1 && PyErr_Occurred()) {
14427db96d56Sopenharmony_ci        goto exit;
14437db96d56Sopenharmony_ci    }
14447db96d56Sopenharmony_ci    return_value = os_nice_impl(module, increment);
14457db96d56Sopenharmony_ci
14467db96d56Sopenharmony_ciexit:
14477db96d56Sopenharmony_ci    return return_value;
14487db96d56Sopenharmony_ci}
14497db96d56Sopenharmony_ci
14507db96d56Sopenharmony_ci#endif /* defined(HAVE_NICE) */
14517db96d56Sopenharmony_ci
14527db96d56Sopenharmony_ci#if defined(HAVE_GETPRIORITY)
14537db96d56Sopenharmony_ci
14547db96d56Sopenharmony_ciPyDoc_STRVAR(os_getpriority__doc__,
14557db96d56Sopenharmony_ci"getpriority($module, /, which, who)\n"
14567db96d56Sopenharmony_ci"--\n"
14577db96d56Sopenharmony_ci"\n"
14587db96d56Sopenharmony_ci"Return program scheduling priority.");
14597db96d56Sopenharmony_ci
14607db96d56Sopenharmony_ci#define OS_GETPRIORITY_METHODDEF    \
14617db96d56Sopenharmony_ci    {"getpriority", _PyCFunction_CAST(os_getpriority), METH_FASTCALL|METH_KEYWORDS, os_getpriority__doc__},
14627db96d56Sopenharmony_ci
14637db96d56Sopenharmony_cistatic PyObject *
14647db96d56Sopenharmony_cios_getpriority_impl(PyObject *module, int which, int who);
14657db96d56Sopenharmony_ci
14667db96d56Sopenharmony_cistatic PyObject *
14677db96d56Sopenharmony_cios_getpriority(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
14687db96d56Sopenharmony_ci{
14697db96d56Sopenharmony_ci    PyObject *return_value = NULL;
14707db96d56Sopenharmony_ci    static const char * const _keywords[] = {"which", "who", NULL};
14717db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "getpriority", 0};
14727db96d56Sopenharmony_ci    PyObject *argsbuf[2];
14737db96d56Sopenharmony_ci    int which;
14747db96d56Sopenharmony_ci    int who;
14757db96d56Sopenharmony_ci
14767db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
14777db96d56Sopenharmony_ci    if (!args) {
14787db96d56Sopenharmony_ci        goto exit;
14797db96d56Sopenharmony_ci    }
14807db96d56Sopenharmony_ci    which = _PyLong_AsInt(args[0]);
14817db96d56Sopenharmony_ci    if (which == -1 && PyErr_Occurred()) {
14827db96d56Sopenharmony_ci        goto exit;
14837db96d56Sopenharmony_ci    }
14847db96d56Sopenharmony_ci    who = _PyLong_AsInt(args[1]);
14857db96d56Sopenharmony_ci    if (who == -1 && PyErr_Occurred()) {
14867db96d56Sopenharmony_ci        goto exit;
14877db96d56Sopenharmony_ci    }
14887db96d56Sopenharmony_ci    return_value = os_getpriority_impl(module, which, who);
14897db96d56Sopenharmony_ci
14907db96d56Sopenharmony_ciexit:
14917db96d56Sopenharmony_ci    return return_value;
14927db96d56Sopenharmony_ci}
14937db96d56Sopenharmony_ci
14947db96d56Sopenharmony_ci#endif /* defined(HAVE_GETPRIORITY) */
14957db96d56Sopenharmony_ci
14967db96d56Sopenharmony_ci#if defined(HAVE_SETPRIORITY)
14977db96d56Sopenharmony_ci
14987db96d56Sopenharmony_ciPyDoc_STRVAR(os_setpriority__doc__,
14997db96d56Sopenharmony_ci"setpriority($module, /, which, who, priority)\n"
15007db96d56Sopenharmony_ci"--\n"
15017db96d56Sopenharmony_ci"\n"
15027db96d56Sopenharmony_ci"Set program scheduling priority.");
15037db96d56Sopenharmony_ci
15047db96d56Sopenharmony_ci#define OS_SETPRIORITY_METHODDEF    \
15057db96d56Sopenharmony_ci    {"setpriority", _PyCFunction_CAST(os_setpriority), METH_FASTCALL|METH_KEYWORDS, os_setpriority__doc__},
15067db96d56Sopenharmony_ci
15077db96d56Sopenharmony_cistatic PyObject *
15087db96d56Sopenharmony_cios_setpriority_impl(PyObject *module, int which, int who, int priority);
15097db96d56Sopenharmony_ci
15107db96d56Sopenharmony_cistatic PyObject *
15117db96d56Sopenharmony_cios_setpriority(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
15127db96d56Sopenharmony_ci{
15137db96d56Sopenharmony_ci    PyObject *return_value = NULL;
15147db96d56Sopenharmony_ci    static const char * const _keywords[] = {"which", "who", "priority", NULL};
15157db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "setpriority", 0};
15167db96d56Sopenharmony_ci    PyObject *argsbuf[3];
15177db96d56Sopenharmony_ci    int which;
15187db96d56Sopenharmony_ci    int who;
15197db96d56Sopenharmony_ci    int priority;
15207db96d56Sopenharmony_ci
15217db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf);
15227db96d56Sopenharmony_ci    if (!args) {
15237db96d56Sopenharmony_ci        goto exit;
15247db96d56Sopenharmony_ci    }
15257db96d56Sopenharmony_ci    which = _PyLong_AsInt(args[0]);
15267db96d56Sopenharmony_ci    if (which == -1 && PyErr_Occurred()) {
15277db96d56Sopenharmony_ci        goto exit;
15287db96d56Sopenharmony_ci    }
15297db96d56Sopenharmony_ci    who = _PyLong_AsInt(args[1]);
15307db96d56Sopenharmony_ci    if (who == -1 && PyErr_Occurred()) {
15317db96d56Sopenharmony_ci        goto exit;
15327db96d56Sopenharmony_ci    }
15337db96d56Sopenharmony_ci    priority = _PyLong_AsInt(args[2]);
15347db96d56Sopenharmony_ci    if (priority == -1 && PyErr_Occurred()) {
15357db96d56Sopenharmony_ci        goto exit;
15367db96d56Sopenharmony_ci    }
15377db96d56Sopenharmony_ci    return_value = os_setpriority_impl(module, which, who, priority);
15387db96d56Sopenharmony_ci
15397db96d56Sopenharmony_ciexit:
15407db96d56Sopenharmony_ci    return return_value;
15417db96d56Sopenharmony_ci}
15427db96d56Sopenharmony_ci
15437db96d56Sopenharmony_ci#endif /* defined(HAVE_SETPRIORITY) */
15447db96d56Sopenharmony_ci
15457db96d56Sopenharmony_ciPyDoc_STRVAR(os_rename__doc__,
15467db96d56Sopenharmony_ci"rename($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n"
15477db96d56Sopenharmony_ci"--\n"
15487db96d56Sopenharmony_ci"\n"
15497db96d56Sopenharmony_ci"Rename a file or directory.\n"
15507db96d56Sopenharmony_ci"\n"
15517db96d56Sopenharmony_ci"If either src_dir_fd or dst_dir_fd is not None, it should be a file\n"
15527db96d56Sopenharmony_ci"  descriptor open to a directory, and the respective path string (src or dst)\n"
15537db96d56Sopenharmony_ci"  should be relative; the path will then be relative to that directory.\n"
15547db96d56Sopenharmony_ci"src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n"
15557db96d56Sopenharmony_ci"  If they are unavailable, using them will raise a NotImplementedError.");
15567db96d56Sopenharmony_ci
15577db96d56Sopenharmony_ci#define OS_RENAME_METHODDEF    \
15587db96d56Sopenharmony_ci    {"rename", _PyCFunction_CAST(os_rename), METH_FASTCALL|METH_KEYWORDS, os_rename__doc__},
15597db96d56Sopenharmony_ci
15607db96d56Sopenharmony_cistatic PyObject *
15617db96d56Sopenharmony_cios_rename_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd,
15627db96d56Sopenharmony_ci               int dst_dir_fd);
15637db96d56Sopenharmony_ci
15647db96d56Sopenharmony_cistatic PyObject *
15657db96d56Sopenharmony_cios_rename(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
15667db96d56Sopenharmony_ci{
15677db96d56Sopenharmony_ci    PyObject *return_value = NULL;
15687db96d56Sopenharmony_ci    static const char * const _keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL};
15697db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "rename", 0};
15707db96d56Sopenharmony_ci    PyObject *argsbuf[4];
15717db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
15727db96d56Sopenharmony_ci    path_t src = PATH_T_INITIALIZE("rename", "src", 0, 0);
15737db96d56Sopenharmony_ci    path_t dst = PATH_T_INITIALIZE("rename", "dst", 0, 0);
15747db96d56Sopenharmony_ci    int src_dir_fd = DEFAULT_DIR_FD;
15757db96d56Sopenharmony_ci    int dst_dir_fd = DEFAULT_DIR_FD;
15767db96d56Sopenharmony_ci
15777db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
15787db96d56Sopenharmony_ci    if (!args) {
15797db96d56Sopenharmony_ci        goto exit;
15807db96d56Sopenharmony_ci    }
15817db96d56Sopenharmony_ci    if (!path_converter(args[0], &src)) {
15827db96d56Sopenharmony_ci        goto exit;
15837db96d56Sopenharmony_ci    }
15847db96d56Sopenharmony_ci    if (!path_converter(args[1], &dst)) {
15857db96d56Sopenharmony_ci        goto exit;
15867db96d56Sopenharmony_ci    }
15877db96d56Sopenharmony_ci    if (!noptargs) {
15887db96d56Sopenharmony_ci        goto skip_optional_kwonly;
15897db96d56Sopenharmony_ci    }
15907db96d56Sopenharmony_ci    if (args[2]) {
15917db96d56Sopenharmony_ci        if (!dir_fd_converter(args[2], &src_dir_fd)) {
15927db96d56Sopenharmony_ci            goto exit;
15937db96d56Sopenharmony_ci        }
15947db96d56Sopenharmony_ci        if (!--noptargs) {
15957db96d56Sopenharmony_ci            goto skip_optional_kwonly;
15967db96d56Sopenharmony_ci        }
15977db96d56Sopenharmony_ci    }
15987db96d56Sopenharmony_ci    if (!dir_fd_converter(args[3], &dst_dir_fd)) {
15997db96d56Sopenharmony_ci        goto exit;
16007db96d56Sopenharmony_ci    }
16017db96d56Sopenharmony_ciskip_optional_kwonly:
16027db96d56Sopenharmony_ci    return_value = os_rename_impl(module, &src, &dst, src_dir_fd, dst_dir_fd);
16037db96d56Sopenharmony_ci
16047db96d56Sopenharmony_ciexit:
16057db96d56Sopenharmony_ci    /* Cleanup for src */
16067db96d56Sopenharmony_ci    path_cleanup(&src);
16077db96d56Sopenharmony_ci    /* Cleanup for dst */
16087db96d56Sopenharmony_ci    path_cleanup(&dst);
16097db96d56Sopenharmony_ci
16107db96d56Sopenharmony_ci    return return_value;
16117db96d56Sopenharmony_ci}
16127db96d56Sopenharmony_ci
16137db96d56Sopenharmony_ciPyDoc_STRVAR(os_replace__doc__,
16147db96d56Sopenharmony_ci"replace($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n"
16157db96d56Sopenharmony_ci"--\n"
16167db96d56Sopenharmony_ci"\n"
16177db96d56Sopenharmony_ci"Rename a file or directory, overwriting the destination.\n"
16187db96d56Sopenharmony_ci"\n"
16197db96d56Sopenharmony_ci"If either src_dir_fd or dst_dir_fd is not None, it should be a file\n"
16207db96d56Sopenharmony_ci"  descriptor open to a directory, and the respective path string (src or dst)\n"
16217db96d56Sopenharmony_ci"  should be relative; the path will then be relative to that directory.\n"
16227db96d56Sopenharmony_ci"src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n"
16237db96d56Sopenharmony_ci"  If they are unavailable, using them will raise a NotImplementedError.");
16247db96d56Sopenharmony_ci
16257db96d56Sopenharmony_ci#define OS_REPLACE_METHODDEF    \
16267db96d56Sopenharmony_ci    {"replace", _PyCFunction_CAST(os_replace), METH_FASTCALL|METH_KEYWORDS, os_replace__doc__},
16277db96d56Sopenharmony_ci
16287db96d56Sopenharmony_cistatic PyObject *
16297db96d56Sopenharmony_cios_replace_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd,
16307db96d56Sopenharmony_ci                int dst_dir_fd);
16317db96d56Sopenharmony_ci
16327db96d56Sopenharmony_cistatic PyObject *
16337db96d56Sopenharmony_cios_replace(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
16347db96d56Sopenharmony_ci{
16357db96d56Sopenharmony_ci    PyObject *return_value = NULL;
16367db96d56Sopenharmony_ci    static const char * const _keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL};
16377db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "replace", 0};
16387db96d56Sopenharmony_ci    PyObject *argsbuf[4];
16397db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
16407db96d56Sopenharmony_ci    path_t src = PATH_T_INITIALIZE("replace", "src", 0, 0);
16417db96d56Sopenharmony_ci    path_t dst = PATH_T_INITIALIZE("replace", "dst", 0, 0);
16427db96d56Sopenharmony_ci    int src_dir_fd = DEFAULT_DIR_FD;
16437db96d56Sopenharmony_ci    int dst_dir_fd = DEFAULT_DIR_FD;
16447db96d56Sopenharmony_ci
16457db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
16467db96d56Sopenharmony_ci    if (!args) {
16477db96d56Sopenharmony_ci        goto exit;
16487db96d56Sopenharmony_ci    }
16497db96d56Sopenharmony_ci    if (!path_converter(args[0], &src)) {
16507db96d56Sopenharmony_ci        goto exit;
16517db96d56Sopenharmony_ci    }
16527db96d56Sopenharmony_ci    if (!path_converter(args[1], &dst)) {
16537db96d56Sopenharmony_ci        goto exit;
16547db96d56Sopenharmony_ci    }
16557db96d56Sopenharmony_ci    if (!noptargs) {
16567db96d56Sopenharmony_ci        goto skip_optional_kwonly;
16577db96d56Sopenharmony_ci    }
16587db96d56Sopenharmony_ci    if (args[2]) {
16597db96d56Sopenharmony_ci        if (!dir_fd_converter(args[2], &src_dir_fd)) {
16607db96d56Sopenharmony_ci            goto exit;
16617db96d56Sopenharmony_ci        }
16627db96d56Sopenharmony_ci        if (!--noptargs) {
16637db96d56Sopenharmony_ci            goto skip_optional_kwonly;
16647db96d56Sopenharmony_ci        }
16657db96d56Sopenharmony_ci    }
16667db96d56Sopenharmony_ci    if (!dir_fd_converter(args[3], &dst_dir_fd)) {
16677db96d56Sopenharmony_ci        goto exit;
16687db96d56Sopenharmony_ci    }
16697db96d56Sopenharmony_ciskip_optional_kwonly:
16707db96d56Sopenharmony_ci    return_value = os_replace_impl(module, &src, &dst, src_dir_fd, dst_dir_fd);
16717db96d56Sopenharmony_ci
16727db96d56Sopenharmony_ciexit:
16737db96d56Sopenharmony_ci    /* Cleanup for src */
16747db96d56Sopenharmony_ci    path_cleanup(&src);
16757db96d56Sopenharmony_ci    /* Cleanup for dst */
16767db96d56Sopenharmony_ci    path_cleanup(&dst);
16777db96d56Sopenharmony_ci
16787db96d56Sopenharmony_ci    return return_value;
16797db96d56Sopenharmony_ci}
16807db96d56Sopenharmony_ci
16817db96d56Sopenharmony_ciPyDoc_STRVAR(os_rmdir__doc__,
16827db96d56Sopenharmony_ci"rmdir($module, /, path, *, dir_fd=None)\n"
16837db96d56Sopenharmony_ci"--\n"
16847db96d56Sopenharmony_ci"\n"
16857db96d56Sopenharmony_ci"Remove a directory.\n"
16867db96d56Sopenharmony_ci"\n"
16877db96d56Sopenharmony_ci"If dir_fd is not None, it should be a file descriptor open to a directory,\n"
16887db96d56Sopenharmony_ci"  and path should be relative; path will then be relative to that directory.\n"
16897db96d56Sopenharmony_ci"dir_fd may not be implemented on your platform.\n"
16907db96d56Sopenharmony_ci"  If it is unavailable, using it will raise a NotImplementedError.");
16917db96d56Sopenharmony_ci
16927db96d56Sopenharmony_ci#define OS_RMDIR_METHODDEF    \
16937db96d56Sopenharmony_ci    {"rmdir", _PyCFunction_CAST(os_rmdir), METH_FASTCALL|METH_KEYWORDS, os_rmdir__doc__},
16947db96d56Sopenharmony_ci
16957db96d56Sopenharmony_cistatic PyObject *
16967db96d56Sopenharmony_cios_rmdir_impl(PyObject *module, path_t *path, int dir_fd);
16977db96d56Sopenharmony_ci
16987db96d56Sopenharmony_cistatic PyObject *
16997db96d56Sopenharmony_cios_rmdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
17007db96d56Sopenharmony_ci{
17017db96d56Sopenharmony_ci    PyObject *return_value = NULL;
17027db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "dir_fd", NULL};
17037db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "rmdir", 0};
17047db96d56Sopenharmony_ci    PyObject *argsbuf[2];
17057db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
17067db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("rmdir", "path", 0, 0);
17077db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
17087db96d56Sopenharmony_ci
17097db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
17107db96d56Sopenharmony_ci    if (!args) {
17117db96d56Sopenharmony_ci        goto exit;
17127db96d56Sopenharmony_ci    }
17137db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
17147db96d56Sopenharmony_ci        goto exit;
17157db96d56Sopenharmony_ci    }
17167db96d56Sopenharmony_ci    if (!noptargs) {
17177db96d56Sopenharmony_ci        goto skip_optional_kwonly;
17187db96d56Sopenharmony_ci    }
17197db96d56Sopenharmony_ci    if (!UNLINKAT_DIR_FD_CONVERTER(args[1], &dir_fd)) {
17207db96d56Sopenharmony_ci        goto exit;
17217db96d56Sopenharmony_ci    }
17227db96d56Sopenharmony_ciskip_optional_kwonly:
17237db96d56Sopenharmony_ci    return_value = os_rmdir_impl(module, &path, dir_fd);
17247db96d56Sopenharmony_ci
17257db96d56Sopenharmony_ciexit:
17267db96d56Sopenharmony_ci    /* Cleanup for path */
17277db96d56Sopenharmony_ci    path_cleanup(&path);
17287db96d56Sopenharmony_ci
17297db96d56Sopenharmony_ci    return return_value;
17307db96d56Sopenharmony_ci}
17317db96d56Sopenharmony_ci
17327db96d56Sopenharmony_ci#if defined(HAVE_SYSTEM) && defined(MS_WINDOWS)
17337db96d56Sopenharmony_ci
17347db96d56Sopenharmony_ciPyDoc_STRVAR(os_system__doc__,
17357db96d56Sopenharmony_ci"system($module, /, command)\n"
17367db96d56Sopenharmony_ci"--\n"
17377db96d56Sopenharmony_ci"\n"
17387db96d56Sopenharmony_ci"Execute the command in a subshell.");
17397db96d56Sopenharmony_ci
17407db96d56Sopenharmony_ci#define OS_SYSTEM_METHODDEF    \
17417db96d56Sopenharmony_ci    {"system", _PyCFunction_CAST(os_system), METH_FASTCALL|METH_KEYWORDS, os_system__doc__},
17427db96d56Sopenharmony_ci
17437db96d56Sopenharmony_cistatic long
17447db96d56Sopenharmony_cios_system_impl(PyObject *module, const Py_UNICODE *command);
17457db96d56Sopenharmony_ci
17467db96d56Sopenharmony_cistatic PyObject *
17477db96d56Sopenharmony_cios_system(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
17487db96d56Sopenharmony_ci{
17497db96d56Sopenharmony_ci    PyObject *return_value = NULL;
17507db96d56Sopenharmony_ci    static const char * const _keywords[] = {"command", NULL};
17517db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "system", 0};
17527db96d56Sopenharmony_ci    PyObject *argsbuf[1];
17537db96d56Sopenharmony_ci    const Py_UNICODE *command = NULL;
17547db96d56Sopenharmony_ci    long _return_value;
17557db96d56Sopenharmony_ci
17567db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
17577db96d56Sopenharmony_ci    if (!args) {
17587db96d56Sopenharmony_ci        goto exit;
17597db96d56Sopenharmony_ci    }
17607db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[0])) {
17617db96d56Sopenharmony_ci        _PyArg_BadArgument("system", "argument 'command'", "str", args[0]);
17627db96d56Sopenharmony_ci        goto exit;
17637db96d56Sopenharmony_ci    }
17647db96d56Sopenharmony_ci    #if USE_UNICODE_WCHAR_CACHE
17657db96d56Sopenharmony_ci    command = _PyUnicode_AsUnicode(args[0]);
17667db96d56Sopenharmony_ci    #else /* USE_UNICODE_WCHAR_CACHE */
17677db96d56Sopenharmony_ci    command = PyUnicode_AsWideCharString(args[0], NULL);
17687db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
17697db96d56Sopenharmony_ci    if (command == NULL) {
17707db96d56Sopenharmony_ci        goto exit;
17717db96d56Sopenharmony_ci    }
17727db96d56Sopenharmony_ci    _return_value = os_system_impl(module, command);
17737db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
17747db96d56Sopenharmony_ci        goto exit;
17757db96d56Sopenharmony_ci    }
17767db96d56Sopenharmony_ci    return_value = PyLong_FromLong(_return_value);
17777db96d56Sopenharmony_ci
17787db96d56Sopenharmony_ciexit:
17797db96d56Sopenharmony_ci    /* Cleanup for command */
17807db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
17817db96d56Sopenharmony_ci    PyMem_Free((void *)command);
17827db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
17837db96d56Sopenharmony_ci
17847db96d56Sopenharmony_ci    return return_value;
17857db96d56Sopenharmony_ci}
17867db96d56Sopenharmony_ci
17877db96d56Sopenharmony_ci#endif /* defined(HAVE_SYSTEM) && defined(MS_WINDOWS) */
17887db96d56Sopenharmony_ci
17897db96d56Sopenharmony_ci#if defined(HAVE_SYSTEM) && !defined(MS_WINDOWS)
17907db96d56Sopenharmony_ci
17917db96d56Sopenharmony_ciPyDoc_STRVAR(os_system__doc__,
17927db96d56Sopenharmony_ci"system($module, /, command)\n"
17937db96d56Sopenharmony_ci"--\n"
17947db96d56Sopenharmony_ci"\n"
17957db96d56Sopenharmony_ci"Execute the command in a subshell.");
17967db96d56Sopenharmony_ci
17977db96d56Sopenharmony_ci#define OS_SYSTEM_METHODDEF    \
17987db96d56Sopenharmony_ci    {"system", _PyCFunction_CAST(os_system), METH_FASTCALL|METH_KEYWORDS, os_system__doc__},
17997db96d56Sopenharmony_ci
18007db96d56Sopenharmony_cistatic long
18017db96d56Sopenharmony_cios_system_impl(PyObject *module, PyObject *command);
18027db96d56Sopenharmony_ci
18037db96d56Sopenharmony_cistatic PyObject *
18047db96d56Sopenharmony_cios_system(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
18057db96d56Sopenharmony_ci{
18067db96d56Sopenharmony_ci    PyObject *return_value = NULL;
18077db96d56Sopenharmony_ci    static const char * const _keywords[] = {"command", NULL};
18087db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "system", 0};
18097db96d56Sopenharmony_ci    PyObject *argsbuf[1];
18107db96d56Sopenharmony_ci    PyObject *command = NULL;
18117db96d56Sopenharmony_ci    long _return_value;
18127db96d56Sopenharmony_ci
18137db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
18147db96d56Sopenharmony_ci    if (!args) {
18157db96d56Sopenharmony_ci        goto exit;
18167db96d56Sopenharmony_ci    }
18177db96d56Sopenharmony_ci    if (!PyUnicode_FSConverter(args[0], &command)) {
18187db96d56Sopenharmony_ci        goto exit;
18197db96d56Sopenharmony_ci    }
18207db96d56Sopenharmony_ci    _return_value = os_system_impl(module, command);
18217db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
18227db96d56Sopenharmony_ci        goto exit;
18237db96d56Sopenharmony_ci    }
18247db96d56Sopenharmony_ci    return_value = PyLong_FromLong(_return_value);
18257db96d56Sopenharmony_ci
18267db96d56Sopenharmony_ciexit:
18277db96d56Sopenharmony_ci    /* Cleanup for command */
18287db96d56Sopenharmony_ci    Py_XDECREF(command);
18297db96d56Sopenharmony_ci
18307db96d56Sopenharmony_ci    return return_value;
18317db96d56Sopenharmony_ci}
18327db96d56Sopenharmony_ci
18337db96d56Sopenharmony_ci#endif /* defined(HAVE_SYSTEM) && !defined(MS_WINDOWS) */
18347db96d56Sopenharmony_ci
18357db96d56Sopenharmony_ci#if defined(HAVE_UMASK)
18367db96d56Sopenharmony_ci
18377db96d56Sopenharmony_ciPyDoc_STRVAR(os_umask__doc__,
18387db96d56Sopenharmony_ci"umask($module, mask, /)\n"
18397db96d56Sopenharmony_ci"--\n"
18407db96d56Sopenharmony_ci"\n"
18417db96d56Sopenharmony_ci"Set the current numeric umask and return the previous umask.");
18427db96d56Sopenharmony_ci
18437db96d56Sopenharmony_ci#define OS_UMASK_METHODDEF    \
18447db96d56Sopenharmony_ci    {"umask", (PyCFunction)os_umask, METH_O, os_umask__doc__},
18457db96d56Sopenharmony_ci
18467db96d56Sopenharmony_cistatic PyObject *
18477db96d56Sopenharmony_cios_umask_impl(PyObject *module, int mask);
18487db96d56Sopenharmony_ci
18497db96d56Sopenharmony_cistatic PyObject *
18507db96d56Sopenharmony_cios_umask(PyObject *module, PyObject *arg)
18517db96d56Sopenharmony_ci{
18527db96d56Sopenharmony_ci    PyObject *return_value = NULL;
18537db96d56Sopenharmony_ci    int mask;
18547db96d56Sopenharmony_ci
18557db96d56Sopenharmony_ci    mask = _PyLong_AsInt(arg);
18567db96d56Sopenharmony_ci    if (mask == -1 && PyErr_Occurred()) {
18577db96d56Sopenharmony_ci        goto exit;
18587db96d56Sopenharmony_ci    }
18597db96d56Sopenharmony_ci    return_value = os_umask_impl(module, mask);
18607db96d56Sopenharmony_ci
18617db96d56Sopenharmony_ciexit:
18627db96d56Sopenharmony_ci    return return_value;
18637db96d56Sopenharmony_ci}
18647db96d56Sopenharmony_ci
18657db96d56Sopenharmony_ci#endif /* defined(HAVE_UMASK) */
18667db96d56Sopenharmony_ci
18677db96d56Sopenharmony_ciPyDoc_STRVAR(os_unlink__doc__,
18687db96d56Sopenharmony_ci"unlink($module, /, path, *, dir_fd=None)\n"
18697db96d56Sopenharmony_ci"--\n"
18707db96d56Sopenharmony_ci"\n"
18717db96d56Sopenharmony_ci"Remove a file (same as remove()).\n"
18727db96d56Sopenharmony_ci"\n"
18737db96d56Sopenharmony_ci"If dir_fd is not None, it should be a file descriptor open to a directory,\n"
18747db96d56Sopenharmony_ci"  and path should be relative; path will then be relative to that directory.\n"
18757db96d56Sopenharmony_ci"dir_fd may not be implemented on your platform.\n"
18767db96d56Sopenharmony_ci"  If it is unavailable, using it will raise a NotImplementedError.");
18777db96d56Sopenharmony_ci
18787db96d56Sopenharmony_ci#define OS_UNLINK_METHODDEF    \
18797db96d56Sopenharmony_ci    {"unlink", _PyCFunction_CAST(os_unlink), METH_FASTCALL|METH_KEYWORDS, os_unlink__doc__},
18807db96d56Sopenharmony_ci
18817db96d56Sopenharmony_cistatic PyObject *
18827db96d56Sopenharmony_cios_unlink_impl(PyObject *module, path_t *path, int dir_fd);
18837db96d56Sopenharmony_ci
18847db96d56Sopenharmony_cistatic PyObject *
18857db96d56Sopenharmony_cios_unlink(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
18867db96d56Sopenharmony_ci{
18877db96d56Sopenharmony_ci    PyObject *return_value = NULL;
18887db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "dir_fd", NULL};
18897db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "unlink", 0};
18907db96d56Sopenharmony_ci    PyObject *argsbuf[2];
18917db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
18927db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("unlink", "path", 0, 0);
18937db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
18947db96d56Sopenharmony_ci
18957db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
18967db96d56Sopenharmony_ci    if (!args) {
18977db96d56Sopenharmony_ci        goto exit;
18987db96d56Sopenharmony_ci    }
18997db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
19007db96d56Sopenharmony_ci        goto exit;
19017db96d56Sopenharmony_ci    }
19027db96d56Sopenharmony_ci    if (!noptargs) {
19037db96d56Sopenharmony_ci        goto skip_optional_kwonly;
19047db96d56Sopenharmony_ci    }
19057db96d56Sopenharmony_ci    if (!UNLINKAT_DIR_FD_CONVERTER(args[1], &dir_fd)) {
19067db96d56Sopenharmony_ci        goto exit;
19077db96d56Sopenharmony_ci    }
19087db96d56Sopenharmony_ciskip_optional_kwonly:
19097db96d56Sopenharmony_ci    return_value = os_unlink_impl(module, &path, dir_fd);
19107db96d56Sopenharmony_ci
19117db96d56Sopenharmony_ciexit:
19127db96d56Sopenharmony_ci    /* Cleanup for path */
19137db96d56Sopenharmony_ci    path_cleanup(&path);
19147db96d56Sopenharmony_ci
19157db96d56Sopenharmony_ci    return return_value;
19167db96d56Sopenharmony_ci}
19177db96d56Sopenharmony_ci
19187db96d56Sopenharmony_ciPyDoc_STRVAR(os_remove__doc__,
19197db96d56Sopenharmony_ci"remove($module, /, path, *, dir_fd=None)\n"
19207db96d56Sopenharmony_ci"--\n"
19217db96d56Sopenharmony_ci"\n"
19227db96d56Sopenharmony_ci"Remove a file (same as unlink()).\n"
19237db96d56Sopenharmony_ci"\n"
19247db96d56Sopenharmony_ci"If dir_fd is not None, it should be a file descriptor open to a directory,\n"
19257db96d56Sopenharmony_ci"  and path should be relative; path will then be relative to that directory.\n"
19267db96d56Sopenharmony_ci"dir_fd may not be implemented on your platform.\n"
19277db96d56Sopenharmony_ci"  If it is unavailable, using it will raise a NotImplementedError.");
19287db96d56Sopenharmony_ci
19297db96d56Sopenharmony_ci#define OS_REMOVE_METHODDEF    \
19307db96d56Sopenharmony_ci    {"remove", _PyCFunction_CAST(os_remove), METH_FASTCALL|METH_KEYWORDS, os_remove__doc__},
19317db96d56Sopenharmony_ci
19327db96d56Sopenharmony_cistatic PyObject *
19337db96d56Sopenharmony_cios_remove_impl(PyObject *module, path_t *path, int dir_fd);
19347db96d56Sopenharmony_ci
19357db96d56Sopenharmony_cistatic PyObject *
19367db96d56Sopenharmony_cios_remove(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
19377db96d56Sopenharmony_ci{
19387db96d56Sopenharmony_ci    PyObject *return_value = NULL;
19397db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "dir_fd", NULL};
19407db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "remove", 0};
19417db96d56Sopenharmony_ci    PyObject *argsbuf[2];
19427db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
19437db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("remove", "path", 0, 0);
19447db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
19457db96d56Sopenharmony_ci
19467db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
19477db96d56Sopenharmony_ci    if (!args) {
19487db96d56Sopenharmony_ci        goto exit;
19497db96d56Sopenharmony_ci    }
19507db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
19517db96d56Sopenharmony_ci        goto exit;
19527db96d56Sopenharmony_ci    }
19537db96d56Sopenharmony_ci    if (!noptargs) {
19547db96d56Sopenharmony_ci        goto skip_optional_kwonly;
19557db96d56Sopenharmony_ci    }
19567db96d56Sopenharmony_ci    if (!UNLINKAT_DIR_FD_CONVERTER(args[1], &dir_fd)) {
19577db96d56Sopenharmony_ci        goto exit;
19587db96d56Sopenharmony_ci    }
19597db96d56Sopenharmony_ciskip_optional_kwonly:
19607db96d56Sopenharmony_ci    return_value = os_remove_impl(module, &path, dir_fd);
19617db96d56Sopenharmony_ci
19627db96d56Sopenharmony_ciexit:
19637db96d56Sopenharmony_ci    /* Cleanup for path */
19647db96d56Sopenharmony_ci    path_cleanup(&path);
19657db96d56Sopenharmony_ci
19667db96d56Sopenharmony_ci    return return_value;
19677db96d56Sopenharmony_ci}
19687db96d56Sopenharmony_ci
19697db96d56Sopenharmony_ci#if defined(HAVE_UNAME)
19707db96d56Sopenharmony_ci
19717db96d56Sopenharmony_ciPyDoc_STRVAR(os_uname__doc__,
19727db96d56Sopenharmony_ci"uname($module, /)\n"
19737db96d56Sopenharmony_ci"--\n"
19747db96d56Sopenharmony_ci"\n"
19757db96d56Sopenharmony_ci"Return an object identifying the current operating system.\n"
19767db96d56Sopenharmony_ci"\n"
19777db96d56Sopenharmony_ci"The object behaves like a named tuple with the following fields:\n"
19787db96d56Sopenharmony_ci"  (sysname, nodename, release, version, machine)");
19797db96d56Sopenharmony_ci
19807db96d56Sopenharmony_ci#define OS_UNAME_METHODDEF    \
19817db96d56Sopenharmony_ci    {"uname", (PyCFunction)os_uname, METH_NOARGS, os_uname__doc__},
19827db96d56Sopenharmony_ci
19837db96d56Sopenharmony_cistatic PyObject *
19847db96d56Sopenharmony_cios_uname_impl(PyObject *module);
19857db96d56Sopenharmony_ci
19867db96d56Sopenharmony_cistatic PyObject *
19877db96d56Sopenharmony_cios_uname(PyObject *module, PyObject *Py_UNUSED(ignored))
19887db96d56Sopenharmony_ci{
19897db96d56Sopenharmony_ci    return os_uname_impl(module);
19907db96d56Sopenharmony_ci}
19917db96d56Sopenharmony_ci
19927db96d56Sopenharmony_ci#endif /* defined(HAVE_UNAME) */
19937db96d56Sopenharmony_ci
19947db96d56Sopenharmony_ciPyDoc_STRVAR(os_utime__doc__,
19957db96d56Sopenharmony_ci"utime($module, /, path, times=None, *, ns=<unrepresentable>,\n"
19967db96d56Sopenharmony_ci"      dir_fd=None, follow_symlinks=True)\n"
19977db96d56Sopenharmony_ci"--\n"
19987db96d56Sopenharmony_ci"\n"
19997db96d56Sopenharmony_ci"Set the access and modified time of path.\n"
20007db96d56Sopenharmony_ci"\n"
20017db96d56Sopenharmony_ci"path may always be specified as a string.\n"
20027db96d56Sopenharmony_ci"On some platforms, path may also be specified as an open file descriptor.\n"
20037db96d56Sopenharmony_ci"  If this functionality is unavailable, using it raises an exception.\n"
20047db96d56Sopenharmony_ci"\n"
20057db96d56Sopenharmony_ci"If times is not None, it must be a tuple (atime, mtime);\n"
20067db96d56Sopenharmony_ci"    atime and mtime should be expressed as float seconds since the epoch.\n"
20077db96d56Sopenharmony_ci"If ns is specified, it must be a tuple (atime_ns, mtime_ns);\n"
20087db96d56Sopenharmony_ci"    atime_ns and mtime_ns should be expressed as integer nanoseconds\n"
20097db96d56Sopenharmony_ci"    since the epoch.\n"
20107db96d56Sopenharmony_ci"If times is None and ns is unspecified, utime uses the current time.\n"
20117db96d56Sopenharmony_ci"Specifying tuples for both times and ns is an error.\n"
20127db96d56Sopenharmony_ci"\n"
20137db96d56Sopenharmony_ci"If dir_fd is not None, it should be a file descriptor open to a directory,\n"
20147db96d56Sopenharmony_ci"  and path should be relative; path will then be relative to that directory.\n"
20157db96d56Sopenharmony_ci"If follow_symlinks is False, and the last element of the path is a symbolic\n"
20167db96d56Sopenharmony_ci"  link, utime will modify the symbolic link itself instead of the file the\n"
20177db96d56Sopenharmony_ci"  link points to.\n"
20187db96d56Sopenharmony_ci"It is an error to use dir_fd or follow_symlinks when specifying path\n"
20197db96d56Sopenharmony_ci"  as an open file descriptor.\n"
20207db96d56Sopenharmony_ci"dir_fd and follow_symlinks may not be available on your platform.\n"
20217db96d56Sopenharmony_ci"  If they are unavailable, using them will raise a NotImplementedError.");
20227db96d56Sopenharmony_ci
20237db96d56Sopenharmony_ci#define OS_UTIME_METHODDEF    \
20247db96d56Sopenharmony_ci    {"utime", _PyCFunction_CAST(os_utime), METH_FASTCALL|METH_KEYWORDS, os_utime__doc__},
20257db96d56Sopenharmony_ci
20267db96d56Sopenharmony_cistatic PyObject *
20277db96d56Sopenharmony_cios_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns,
20287db96d56Sopenharmony_ci              int dir_fd, int follow_symlinks);
20297db96d56Sopenharmony_ci
20307db96d56Sopenharmony_cistatic PyObject *
20317db96d56Sopenharmony_cios_utime(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
20327db96d56Sopenharmony_ci{
20337db96d56Sopenharmony_ci    PyObject *return_value = NULL;
20347db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "times", "ns", "dir_fd", "follow_symlinks", NULL};
20357db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "utime", 0};
20367db96d56Sopenharmony_ci    PyObject *argsbuf[5];
20377db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
20387db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("utime", "path", 0, PATH_UTIME_HAVE_FD);
20397db96d56Sopenharmony_ci    PyObject *times = Py_None;
20407db96d56Sopenharmony_ci    PyObject *ns = NULL;
20417db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
20427db96d56Sopenharmony_ci    int follow_symlinks = 1;
20437db96d56Sopenharmony_ci
20447db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
20457db96d56Sopenharmony_ci    if (!args) {
20467db96d56Sopenharmony_ci        goto exit;
20477db96d56Sopenharmony_ci    }
20487db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
20497db96d56Sopenharmony_ci        goto exit;
20507db96d56Sopenharmony_ci    }
20517db96d56Sopenharmony_ci    if (!noptargs) {
20527db96d56Sopenharmony_ci        goto skip_optional_pos;
20537db96d56Sopenharmony_ci    }
20547db96d56Sopenharmony_ci    if (args[1]) {
20557db96d56Sopenharmony_ci        times = args[1];
20567db96d56Sopenharmony_ci        if (!--noptargs) {
20577db96d56Sopenharmony_ci            goto skip_optional_pos;
20587db96d56Sopenharmony_ci        }
20597db96d56Sopenharmony_ci    }
20607db96d56Sopenharmony_ciskip_optional_pos:
20617db96d56Sopenharmony_ci    if (!noptargs) {
20627db96d56Sopenharmony_ci        goto skip_optional_kwonly;
20637db96d56Sopenharmony_ci    }
20647db96d56Sopenharmony_ci    if (args[2]) {
20657db96d56Sopenharmony_ci        ns = args[2];
20667db96d56Sopenharmony_ci        if (!--noptargs) {
20677db96d56Sopenharmony_ci            goto skip_optional_kwonly;
20687db96d56Sopenharmony_ci        }
20697db96d56Sopenharmony_ci    }
20707db96d56Sopenharmony_ci    if (args[3]) {
20717db96d56Sopenharmony_ci        if (!FUTIMENSAT_DIR_FD_CONVERTER(args[3], &dir_fd)) {
20727db96d56Sopenharmony_ci            goto exit;
20737db96d56Sopenharmony_ci        }
20747db96d56Sopenharmony_ci        if (!--noptargs) {
20757db96d56Sopenharmony_ci            goto skip_optional_kwonly;
20767db96d56Sopenharmony_ci        }
20777db96d56Sopenharmony_ci    }
20787db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[4]);
20797db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
20807db96d56Sopenharmony_ci        goto exit;
20817db96d56Sopenharmony_ci    }
20827db96d56Sopenharmony_ciskip_optional_kwonly:
20837db96d56Sopenharmony_ci    return_value = os_utime_impl(module, &path, times, ns, dir_fd, follow_symlinks);
20847db96d56Sopenharmony_ci
20857db96d56Sopenharmony_ciexit:
20867db96d56Sopenharmony_ci    /* Cleanup for path */
20877db96d56Sopenharmony_ci    path_cleanup(&path);
20887db96d56Sopenharmony_ci
20897db96d56Sopenharmony_ci    return return_value;
20907db96d56Sopenharmony_ci}
20917db96d56Sopenharmony_ci
20927db96d56Sopenharmony_ciPyDoc_STRVAR(os__exit__doc__,
20937db96d56Sopenharmony_ci"_exit($module, /, status)\n"
20947db96d56Sopenharmony_ci"--\n"
20957db96d56Sopenharmony_ci"\n"
20967db96d56Sopenharmony_ci"Exit to the system with specified status, without normal exit processing.");
20977db96d56Sopenharmony_ci
20987db96d56Sopenharmony_ci#define OS__EXIT_METHODDEF    \
20997db96d56Sopenharmony_ci    {"_exit", _PyCFunction_CAST(os__exit), METH_FASTCALL|METH_KEYWORDS, os__exit__doc__},
21007db96d56Sopenharmony_ci
21017db96d56Sopenharmony_cistatic PyObject *
21027db96d56Sopenharmony_cios__exit_impl(PyObject *module, int status);
21037db96d56Sopenharmony_ci
21047db96d56Sopenharmony_cistatic PyObject *
21057db96d56Sopenharmony_cios__exit(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
21067db96d56Sopenharmony_ci{
21077db96d56Sopenharmony_ci    PyObject *return_value = NULL;
21087db96d56Sopenharmony_ci    static const char * const _keywords[] = {"status", NULL};
21097db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "_exit", 0};
21107db96d56Sopenharmony_ci    PyObject *argsbuf[1];
21117db96d56Sopenharmony_ci    int status;
21127db96d56Sopenharmony_ci
21137db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
21147db96d56Sopenharmony_ci    if (!args) {
21157db96d56Sopenharmony_ci        goto exit;
21167db96d56Sopenharmony_ci    }
21177db96d56Sopenharmony_ci    status = _PyLong_AsInt(args[0]);
21187db96d56Sopenharmony_ci    if (status == -1 && PyErr_Occurred()) {
21197db96d56Sopenharmony_ci        goto exit;
21207db96d56Sopenharmony_ci    }
21217db96d56Sopenharmony_ci    return_value = os__exit_impl(module, status);
21227db96d56Sopenharmony_ci
21237db96d56Sopenharmony_ciexit:
21247db96d56Sopenharmony_ci    return return_value;
21257db96d56Sopenharmony_ci}
21267db96d56Sopenharmony_ci
21277db96d56Sopenharmony_ci#if defined(HAVE_EXECV)
21287db96d56Sopenharmony_ci
21297db96d56Sopenharmony_ciPyDoc_STRVAR(os_execv__doc__,
21307db96d56Sopenharmony_ci"execv($module, path, argv, /)\n"
21317db96d56Sopenharmony_ci"--\n"
21327db96d56Sopenharmony_ci"\n"
21337db96d56Sopenharmony_ci"Execute an executable path with arguments, replacing current process.\n"
21347db96d56Sopenharmony_ci"\n"
21357db96d56Sopenharmony_ci"  path\n"
21367db96d56Sopenharmony_ci"    Path of executable file.\n"
21377db96d56Sopenharmony_ci"  argv\n"
21387db96d56Sopenharmony_ci"    Tuple or list of strings.");
21397db96d56Sopenharmony_ci
21407db96d56Sopenharmony_ci#define OS_EXECV_METHODDEF    \
21417db96d56Sopenharmony_ci    {"execv", _PyCFunction_CAST(os_execv), METH_FASTCALL, os_execv__doc__},
21427db96d56Sopenharmony_ci
21437db96d56Sopenharmony_cistatic PyObject *
21447db96d56Sopenharmony_cios_execv_impl(PyObject *module, path_t *path, PyObject *argv);
21457db96d56Sopenharmony_ci
21467db96d56Sopenharmony_cistatic PyObject *
21477db96d56Sopenharmony_cios_execv(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
21487db96d56Sopenharmony_ci{
21497db96d56Sopenharmony_ci    PyObject *return_value = NULL;
21507db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("execv", "path", 0, 0);
21517db96d56Sopenharmony_ci    PyObject *argv;
21527db96d56Sopenharmony_ci
21537db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("execv", nargs, 2, 2)) {
21547db96d56Sopenharmony_ci        goto exit;
21557db96d56Sopenharmony_ci    }
21567db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
21577db96d56Sopenharmony_ci        goto exit;
21587db96d56Sopenharmony_ci    }
21597db96d56Sopenharmony_ci    argv = args[1];
21607db96d56Sopenharmony_ci    return_value = os_execv_impl(module, &path, argv);
21617db96d56Sopenharmony_ci
21627db96d56Sopenharmony_ciexit:
21637db96d56Sopenharmony_ci    /* Cleanup for path */
21647db96d56Sopenharmony_ci    path_cleanup(&path);
21657db96d56Sopenharmony_ci
21667db96d56Sopenharmony_ci    return return_value;
21677db96d56Sopenharmony_ci}
21687db96d56Sopenharmony_ci
21697db96d56Sopenharmony_ci#endif /* defined(HAVE_EXECV) */
21707db96d56Sopenharmony_ci
21717db96d56Sopenharmony_ci#if defined(HAVE_EXECV)
21727db96d56Sopenharmony_ci
21737db96d56Sopenharmony_ciPyDoc_STRVAR(os_execve__doc__,
21747db96d56Sopenharmony_ci"execve($module, /, path, argv, env)\n"
21757db96d56Sopenharmony_ci"--\n"
21767db96d56Sopenharmony_ci"\n"
21777db96d56Sopenharmony_ci"Execute an executable path with arguments, replacing current process.\n"
21787db96d56Sopenharmony_ci"\n"
21797db96d56Sopenharmony_ci"  path\n"
21807db96d56Sopenharmony_ci"    Path of executable file.\n"
21817db96d56Sopenharmony_ci"  argv\n"
21827db96d56Sopenharmony_ci"    Tuple or list of strings.\n"
21837db96d56Sopenharmony_ci"  env\n"
21847db96d56Sopenharmony_ci"    Dictionary of strings mapping to strings.");
21857db96d56Sopenharmony_ci
21867db96d56Sopenharmony_ci#define OS_EXECVE_METHODDEF    \
21877db96d56Sopenharmony_ci    {"execve", _PyCFunction_CAST(os_execve), METH_FASTCALL|METH_KEYWORDS, os_execve__doc__},
21887db96d56Sopenharmony_ci
21897db96d56Sopenharmony_cistatic PyObject *
21907db96d56Sopenharmony_cios_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env);
21917db96d56Sopenharmony_ci
21927db96d56Sopenharmony_cistatic PyObject *
21937db96d56Sopenharmony_cios_execve(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
21947db96d56Sopenharmony_ci{
21957db96d56Sopenharmony_ci    PyObject *return_value = NULL;
21967db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "argv", "env", NULL};
21977db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "execve", 0};
21987db96d56Sopenharmony_ci    PyObject *argsbuf[3];
21997db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("execve", "path", 0, PATH_HAVE_FEXECVE);
22007db96d56Sopenharmony_ci    PyObject *argv;
22017db96d56Sopenharmony_ci    PyObject *env;
22027db96d56Sopenharmony_ci
22037db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf);
22047db96d56Sopenharmony_ci    if (!args) {
22057db96d56Sopenharmony_ci        goto exit;
22067db96d56Sopenharmony_ci    }
22077db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
22087db96d56Sopenharmony_ci        goto exit;
22097db96d56Sopenharmony_ci    }
22107db96d56Sopenharmony_ci    argv = args[1];
22117db96d56Sopenharmony_ci    env = args[2];
22127db96d56Sopenharmony_ci    return_value = os_execve_impl(module, &path, argv, env);
22137db96d56Sopenharmony_ci
22147db96d56Sopenharmony_ciexit:
22157db96d56Sopenharmony_ci    /* Cleanup for path */
22167db96d56Sopenharmony_ci    path_cleanup(&path);
22177db96d56Sopenharmony_ci
22187db96d56Sopenharmony_ci    return return_value;
22197db96d56Sopenharmony_ci}
22207db96d56Sopenharmony_ci
22217db96d56Sopenharmony_ci#endif /* defined(HAVE_EXECV) */
22227db96d56Sopenharmony_ci
22237db96d56Sopenharmony_ci#if defined(HAVE_POSIX_SPAWN)
22247db96d56Sopenharmony_ci
22257db96d56Sopenharmony_ciPyDoc_STRVAR(os_posix_spawn__doc__,
22267db96d56Sopenharmony_ci"posix_spawn($module, path, argv, env, /, *, file_actions=(),\n"
22277db96d56Sopenharmony_ci"            setpgroup=<unrepresentable>, resetids=False, setsid=False,\n"
22287db96d56Sopenharmony_ci"            setsigmask=(), setsigdef=(), scheduler=<unrepresentable>)\n"
22297db96d56Sopenharmony_ci"--\n"
22307db96d56Sopenharmony_ci"\n"
22317db96d56Sopenharmony_ci"Execute the program specified by path in a new process.\n"
22327db96d56Sopenharmony_ci"\n"
22337db96d56Sopenharmony_ci"  path\n"
22347db96d56Sopenharmony_ci"    Path of executable file.\n"
22357db96d56Sopenharmony_ci"  argv\n"
22367db96d56Sopenharmony_ci"    Tuple or list of strings.\n"
22377db96d56Sopenharmony_ci"  env\n"
22387db96d56Sopenharmony_ci"    Dictionary of strings mapping to strings.\n"
22397db96d56Sopenharmony_ci"  file_actions\n"
22407db96d56Sopenharmony_ci"    A sequence of file action tuples.\n"
22417db96d56Sopenharmony_ci"  setpgroup\n"
22427db96d56Sopenharmony_ci"    The pgroup to use with the POSIX_SPAWN_SETPGROUP flag.\n"
22437db96d56Sopenharmony_ci"  resetids\n"
22447db96d56Sopenharmony_ci"    If the value is `true` the POSIX_SPAWN_RESETIDS will be activated.\n"
22457db96d56Sopenharmony_ci"  setsid\n"
22467db96d56Sopenharmony_ci"    If the value is `true` the POSIX_SPAWN_SETSID or POSIX_SPAWN_SETSID_NP will be activated.\n"
22477db96d56Sopenharmony_ci"  setsigmask\n"
22487db96d56Sopenharmony_ci"    The sigmask to use with the POSIX_SPAWN_SETSIGMASK flag.\n"
22497db96d56Sopenharmony_ci"  setsigdef\n"
22507db96d56Sopenharmony_ci"    The sigmask to use with the POSIX_SPAWN_SETSIGDEF flag.\n"
22517db96d56Sopenharmony_ci"  scheduler\n"
22527db96d56Sopenharmony_ci"    A tuple with the scheduler policy (optional) and parameters.");
22537db96d56Sopenharmony_ci
22547db96d56Sopenharmony_ci#define OS_POSIX_SPAWN_METHODDEF    \
22557db96d56Sopenharmony_ci    {"posix_spawn", _PyCFunction_CAST(os_posix_spawn), METH_FASTCALL|METH_KEYWORDS, os_posix_spawn__doc__},
22567db96d56Sopenharmony_ci
22577db96d56Sopenharmony_cistatic PyObject *
22587db96d56Sopenharmony_cios_posix_spawn_impl(PyObject *module, path_t *path, PyObject *argv,
22597db96d56Sopenharmony_ci                    PyObject *env, PyObject *file_actions,
22607db96d56Sopenharmony_ci                    PyObject *setpgroup, int resetids, int setsid,
22617db96d56Sopenharmony_ci                    PyObject *setsigmask, PyObject *setsigdef,
22627db96d56Sopenharmony_ci                    PyObject *scheduler);
22637db96d56Sopenharmony_ci
22647db96d56Sopenharmony_cistatic PyObject *
22657db96d56Sopenharmony_cios_posix_spawn(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
22667db96d56Sopenharmony_ci{
22677db96d56Sopenharmony_ci    PyObject *return_value = NULL;
22687db96d56Sopenharmony_ci    static const char * const _keywords[] = {"", "", "", "file_actions", "setpgroup", "resetids", "setsid", "setsigmask", "setsigdef", "scheduler", NULL};
22697db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "posix_spawn", 0};
22707db96d56Sopenharmony_ci    PyObject *argsbuf[10];
22717db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3;
22727db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("posix_spawn", "path", 0, 0);
22737db96d56Sopenharmony_ci    PyObject *argv;
22747db96d56Sopenharmony_ci    PyObject *env;
22757db96d56Sopenharmony_ci    PyObject *file_actions = NULL;
22767db96d56Sopenharmony_ci    PyObject *setpgroup = NULL;
22777db96d56Sopenharmony_ci    int resetids = 0;
22787db96d56Sopenharmony_ci    int setsid = 0;
22797db96d56Sopenharmony_ci    PyObject *setsigmask = NULL;
22807db96d56Sopenharmony_ci    PyObject *setsigdef = NULL;
22817db96d56Sopenharmony_ci    PyObject *scheduler = NULL;
22827db96d56Sopenharmony_ci
22837db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf);
22847db96d56Sopenharmony_ci    if (!args) {
22857db96d56Sopenharmony_ci        goto exit;
22867db96d56Sopenharmony_ci    }
22877db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
22887db96d56Sopenharmony_ci        goto exit;
22897db96d56Sopenharmony_ci    }
22907db96d56Sopenharmony_ci    argv = args[1];
22917db96d56Sopenharmony_ci    env = args[2];
22927db96d56Sopenharmony_ci    if (!noptargs) {
22937db96d56Sopenharmony_ci        goto skip_optional_kwonly;
22947db96d56Sopenharmony_ci    }
22957db96d56Sopenharmony_ci    if (args[3]) {
22967db96d56Sopenharmony_ci        file_actions = args[3];
22977db96d56Sopenharmony_ci        if (!--noptargs) {
22987db96d56Sopenharmony_ci            goto skip_optional_kwonly;
22997db96d56Sopenharmony_ci        }
23007db96d56Sopenharmony_ci    }
23017db96d56Sopenharmony_ci    if (args[4]) {
23027db96d56Sopenharmony_ci        setpgroup = args[4];
23037db96d56Sopenharmony_ci        if (!--noptargs) {
23047db96d56Sopenharmony_ci            goto skip_optional_kwonly;
23057db96d56Sopenharmony_ci        }
23067db96d56Sopenharmony_ci    }
23077db96d56Sopenharmony_ci    if (args[5]) {
23087db96d56Sopenharmony_ci        resetids = _PyLong_AsInt(args[5]);
23097db96d56Sopenharmony_ci        if (resetids == -1 && PyErr_Occurred()) {
23107db96d56Sopenharmony_ci            goto exit;
23117db96d56Sopenharmony_ci        }
23127db96d56Sopenharmony_ci        if (!--noptargs) {
23137db96d56Sopenharmony_ci            goto skip_optional_kwonly;
23147db96d56Sopenharmony_ci        }
23157db96d56Sopenharmony_ci    }
23167db96d56Sopenharmony_ci    if (args[6]) {
23177db96d56Sopenharmony_ci        setsid = _PyLong_AsInt(args[6]);
23187db96d56Sopenharmony_ci        if (setsid == -1 && PyErr_Occurred()) {
23197db96d56Sopenharmony_ci            goto exit;
23207db96d56Sopenharmony_ci        }
23217db96d56Sopenharmony_ci        if (!--noptargs) {
23227db96d56Sopenharmony_ci            goto skip_optional_kwonly;
23237db96d56Sopenharmony_ci        }
23247db96d56Sopenharmony_ci    }
23257db96d56Sopenharmony_ci    if (args[7]) {
23267db96d56Sopenharmony_ci        setsigmask = args[7];
23277db96d56Sopenharmony_ci        if (!--noptargs) {
23287db96d56Sopenharmony_ci            goto skip_optional_kwonly;
23297db96d56Sopenharmony_ci        }
23307db96d56Sopenharmony_ci    }
23317db96d56Sopenharmony_ci    if (args[8]) {
23327db96d56Sopenharmony_ci        setsigdef = args[8];
23337db96d56Sopenharmony_ci        if (!--noptargs) {
23347db96d56Sopenharmony_ci            goto skip_optional_kwonly;
23357db96d56Sopenharmony_ci        }
23367db96d56Sopenharmony_ci    }
23377db96d56Sopenharmony_ci    scheduler = args[9];
23387db96d56Sopenharmony_ciskip_optional_kwonly:
23397db96d56Sopenharmony_ci    return_value = os_posix_spawn_impl(module, &path, argv, env, file_actions, setpgroup, resetids, setsid, setsigmask, setsigdef, scheduler);
23407db96d56Sopenharmony_ci
23417db96d56Sopenharmony_ciexit:
23427db96d56Sopenharmony_ci    /* Cleanup for path */
23437db96d56Sopenharmony_ci    path_cleanup(&path);
23447db96d56Sopenharmony_ci
23457db96d56Sopenharmony_ci    return return_value;
23467db96d56Sopenharmony_ci}
23477db96d56Sopenharmony_ci
23487db96d56Sopenharmony_ci#endif /* defined(HAVE_POSIX_SPAWN) */
23497db96d56Sopenharmony_ci
23507db96d56Sopenharmony_ci#if defined(HAVE_POSIX_SPAWNP)
23517db96d56Sopenharmony_ci
23527db96d56Sopenharmony_ciPyDoc_STRVAR(os_posix_spawnp__doc__,
23537db96d56Sopenharmony_ci"posix_spawnp($module, path, argv, env, /, *, file_actions=(),\n"
23547db96d56Sopenharmony_ci"             setpgroup=<unrepresentable>, resetids=False, setsid=False,\n"
23557db96d56Sopenharmony_ci"             setsigmask=(), setsigdef=(), scheduler=<unrepresentable>)\n"
23567db96d56Sopenharmony_ci"--\n"
23577db96d56Sopenharmony_ci"\n"
23587db96d56Sopenharmony_ci"Execute the program specified by path in a new process.\n"
23597db96d56Sopenharmony_ci"\n"
23607db96d56Sopenharmony_ci"  path\n"
23617db96d56Sopenharmony_ci"    Path of executable file.\n"
23627db96d56Sopenharmony_ci"  argv\n"
23637db96d56Sopenharmony_ci"    Tuple or list of strings.\n"
23647db96d56Sopenharmony_ci"  env\n"
23657db96d56Sopenharmony_ci"    Dictionary of strings mapping to strings.\n"
23667db96d56Sopenharmony_ci"  file_actions\n"
23677db96d56Sopenharmony_ci"    A sequence of file action tuples.\n"
23687db96d56Sopenharmony_ci"  setpgroup\n"
23697db96d56Sopenharmony_ci"    The pgroup to use with the POSIX_SPAWN_SETPGROUP flag.\n"
23707db96d56Sopenharmony_ci"  resetids\n"
23717db96d56Sopenharmony_ci"    If the value is `True` the POSIX_SPAWN_RESETIDS will be activated.\n"
23727db96d56Sopenharmony_ci"  setsid\n"
23737db96d56Sopenharmony_ci"    If the value is `True` the POSIX_SPAWN_SETSID or POSIX_SPAWN_SETSID_NP will be activated.\n"
23747db96d56Sopenharmony_ci"  setsigmask\n"
23757db96d56Sopenharmony_ci"    The sigmask to use with the POSIX_SPAWN_SETSIGMASK flag.\n"
23767db96d56Sopenharmony_ci"  setsigdef\n"
23777db96d56Sopenharmony_ci"    The sigmask to use with the POSIX_SPAWN_SETSIGDEF flag.\n"
23787db96d56Sopenharmony_ci"  scheduler\n"
23797db96d56Sopenharmony_ci"    A tuple with the scheduler policy (optional) and parameters.");
23807db96d56Sopenharmony_ci
23817db96d56Sopenharmony_ci#define OS_POSIX_SPAWNP_METHODDEF    \
23827db96d56Sopenharmony_ci    {"posix_spawnp", _PyCFunction_CAST(os_posix_spawnp), METH_FASTCALL|METH_KEYWORDS, os_posix_spawnp__doc__},
23837db96d56Sopenharmony_ci
23847db96d56Sopenharmony_cistatic PyObject *
23857db96d56Sopenharmony_cios_posix_spawnp_impl(PyObject *module, path_t *path, PyObject *argv,
23867db96d56Sopenharmony_ci                     PyObject *env, PyObject *file_actions,
23877db96d56Sopenharmony_ci                     PyObject *setpgroup, int resetids, int setsid,
23887db96d56Sopenharmony_ci                     PyObject *setsigmask, PyObject *setsigdef,
23897db96d56Sopenharmony_ci                     PyObject *scheduler);
23907db96d56Sopenharmony_ci
23917db96d56Sopenharmony_cistatic PyObject *
23927db96d56Sopenharmony_cios_posix_spawnp(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
23937db96d56Sopenharmony_ci{
23947db96d56Sopenharmony_ci    PyObject *return_value = NULL;
23957db96d56Sopenharmony_ci    static const char * const _keywords[] = {"", "", "", "file_actions", "setpgroup", "resetids", "setsid", "setsigmask", "setsigdef", "scheduler", NULL};
23967db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "posix_spawnp", 0};
23977db96d56Sopenharmony_ci    PyObject *argsbuf[10];
23987db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3;
23997db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("posix_spawnp", "path", 0, 0);
24007db96d56Sopenharmony_ci    PyObject *argv;
24017db96d56Sopenharmony_ci    PyObject *env;
24027db96d56Sopenharmony_ci    PyObject *file_actions = NULL;
24037db96d56Sopenharmony_ci    PyObject *setpgroup = NULL;
24047db96d56Sopenharmony_ci    int resetids = 0;
24057db96d56Sopenharmony_ci    int setsid = 0;
24067db96d56Sopenharmony_ci    PyObject *setsigmask = NULL;
24077db96d56Sopenharmony_ci    PyObject *setsigdef = NULL;
24087db96d56Sopenharmony_ci    PyObject *scheduler = NULL;
24097db96d56Sopenharmony_ci
24107db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf);
24117db96d56Sopenharmony_ci    if (!args) {
24127db96d56Sopenharmony_ci        goto exit;
24137db96d56Sopenharmony_ci    }
24147db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
24157db96d56Sopenharmony_ci        goto exit;
24167db96d56Sopenharmony_ci    }
24177db96d56Sopenharmony_ci    argv = args[1];
24187db96d56Sopenharmony_ci    env = args[2];
24197db96d56Sopenharmony_ci    if (!noptargs) {
24207db96d56Sopenharmony_ci        goto skip_optional_kwonly;
24217db96d56Sopenharmony_ci    }
24227db96d56Sopenharmony_ci    if (args[3]) {
24237db96d56Sopenharmony_ci        file_actions = args[3];
24247db96d56Sopenharmony_ci        if (!--noptargs) {
24257db96d56Sopenharmony_ci            goto skip_optional_kwonly;
24267db96d56Sopenharmony_ci        }
24277db96d56Sopenharmony_ci    }
24287db96d56Sopenharmony_ci    if (args[4]) {
24297db96d56Sopenharmony_ci        setpgroup = args[4];
24307db96d56Sopenharmony_ci        if (!--noptargs) {
24317db96d56Sopenharmony_ci            goto skip_optional_kwonly;
24327db96d56Sopenharmony_ci        }
24337db96d56Sopenharmony_ci    }
24347db96d56Sopenharmony_ci    if (args[5]) {
24357db96d56Sopenharmony_ci        resetids = _PyLong_AsInt(args[5]);
24367db96d56Sopenharmony_ci        if (resetids == -1 && PyErr_Occurred()) {
24377db96d56Sopenharmony_ci            goto exit;
24387db96d56Sopenharmony_ci        }
24397db96d56Sopenharmony_ci        if (!--noptargs) {
24407db96d56Sopenharmony_ci            goto skip_optional_kwonly;
24417db96d56Sopenharmony_ci        }
24427db96d56Sopenharmony_ci    }
24437db96d56Sopenharmony_ci    if (args[6]) {
24447db96d56Sopenharmony_ci        setsid = _PyLong_AsInt(args[6]);
24457db96d56Sopenharmony_ci        if (setsid == -1 && PyErr_Occurred()) {
24467db96d56Sopenharmony_ci            goto exit;
24477db96d56Sopenharmony_ci        }
24487db96d56Sopenharmony_ci        if (!--noptargs) {
24497db96d56Sopenharmony_ci            goto skip_optional_kwonly;
24507db96d56Sopenharmony_ci        }
24517db96d56Sopenharmony_ci    }
24527db96d56Sopenharmony_ci    if (args[7]) {
24537db96d56Sopenharmony_ci        setsigmask = args[7];
24547db96d56Sopenharmony_ci        if (!--noptargs) {
24557db96d56Sopenharmony_ci            goto skip_optional_kwonly;
24567db96d56Sopenharmony_ci        }
24577db96d56Sopenharmony_ci    }
24587db96d56Sopenharmony_ci    if (args[8]) {
24597db96d56Sopenharmony_ci        setsigdef = args[8];
24607db96d56Sopenharmony_ci        if (!--noptargs) {
24617db96d56Sopenharmony_ci            goto skip_optional_kwonly;
24627db96d56Sopenharmony_ci        }
24637db96d56Sopenharmony_ci    }
24647db96d56Sopenharmony_ci    scheduler = args[9];
24657db96d56Sopenharmony_ciskip_optional_kwonly:
24667db96d56Sopenharmony_ci    return_value = os_posix_spawnp_impl(module, &path, argv, env, file_actions, setpgroup, resetids, setsid, setsigmask, setsigdef, scheduler);
24677db96d56Sopenharmony_ci
24687db96d56Sopenharmony_ciexit:
24697db96d56Sopenharmony_ci    /* Cleanup for path */
24707db96d56Sopenharmony_ci    path_cleanup(&path);
24717db96d56Sopenharmony_ci
24727db96d56Sopenharmony_ci    return return_value;
24737db96d56Sopenharmony_ci}
24747db96d56Sopenharmony_ci
24757db96d56Sopenharmony_ci#endif /* defined(HAVE_POSIX_SPAWNP) */
24767db96d56Sopenharmony_ci
24777db96d56Sopenharmony_ci#if (defined(HAVE_SPAWNV) || defined(HAVE_WSPAWNV) || defined(HAVE_RTPSPAWN))
24787db96d56Sopenharmony_ci
24797db96d56Sopenharmony_ciPyDoc_STRVAR(os_spawnv__doc__,
24807db96d56Sopenharmony_ci"spawnv($module, mode, path, argv, /)\n"
24817db96d56Sopenharmony_ci"--\n"
24827db96d56Sopenharmony_ci"\n"
24837db96d56Sopenharmony_ci"Execute the program specified by path in a new process.\n"
24847db96d56Sopenharmony_ci"\n"
24857db96d56Sopenharmony_ci"  mode\n"
24867db96d56Sopenharmony_ci"    Mode of process creation.\n"
24877db96d56Sopenharmony_ci"  path\n"
24887db96d56Sopenharmony_ci"    Path of executable file.\n"
24897db96d56Sopenharmony_ci"  argv\n"
24907db96d56Sopenharmony_ci"    Tuple or list of strings.");
24917db96d56Sopenharmony_ci
24927db96d56Sopenharmony_ci#define OS_SPAWNV_METHODDEF    \
24937db96d56Sopenharmony_ci    {"spawnv", _PyCFunction_CAST(os_spawnv), METH_FASTCALL, os_spawnv__doc__},
24947db96d56Sopenharmony_ci
24957db96d56Sopenharmony_cistatic PyObject *
24967db96d56Sopenharmony_cios_spawnv_impl(PyObject *module, int mode, path_t *path, PyObject *argv);
24977db96d56Sopenharmony_ci
24987db96d56Sopenharmony_cistatic PyObject *
24997db96d56Sopenharmony_cios_spawnv(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
25007db96d56Sopenharmony_ci{
25017db96d56Sopenharmony_ci    PyObject *return_value = NULL;
25027db96d56Sopenharmony_ci    int mode;
25037db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("spawnv", "path", 0, 0);
25047db96d56Sopenharmony_ci    PyObject *argv;
25057db96d56Sopenharmony_ci
25067db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("spawnv", nargs, 3, 3)) {
25077db96d56Sopenharmony_ci        goto exit;
25087db96d56Sopenharmony_ci    }
25097db96d56Sopenharmony_ci    mode = _PyLong_AsInt(args[0]);
25107db96d56Sopenharmony_ci    if (mode == -1 && PyErr_Occurred()) {
25117db96d56Sopenharmony_ci        goto exit;
25127db96d56Sopenharmony_ci    }
25137db96d56Sopenharmony_ci    if (!path_converter(args[1], &path)) {
25147db96d56Sopenharmony_ci        goto exit;
25157db96d56Sopenharmony_ci    }
25167db96d56Sopenharmony_ci    argv = args[2];
25177db96d56Sopenharmony_ci    return_value = os_spawnv_impl(module, mode, &path, argv);
25187db96d56Sopenharmony_ci
25197db96d56Sopenharmony_ciexit:
25207db96d56Sopenharmony_ci    /* Cleanup for path */
25217db96d56Sopenharmony_ci    path_cleanup(&path);
25227db96d56Sopenharmony_ci
25237db96d56Sopenharmony_ci    return return_value;
25247db96d56Sopenharmony_ci}
25257db96d56Sopenharmony_ci
25267db96d56Sopenharmony_ci#endif /* (defined(HAVE_SPAWNV) || defined(HAVE_WSPAWNV) || defined(HAVE_RTPSPAWN)) */
25277db96d56Sopenharmony_ci
25287db96d56Sopenharmony_ci#if (defined(HAVE_SPAWNV) || defined(HAVE_WSPAWNV) || defined(HAVE_RTPSPAWN))
25297db96d56Sopenharmony_ci
25307db96d56Sopenharmony_ciPyDoc_STRVAR(os_spawnve__doc__,
25317db96d56Sopenharmony_ci"spawnve($module, mode, path, argv, env, /)\n"
25327db96d56Sopenharmony_ci"--\n"
25337db96d56Sopenharmony_ci"\n"
25347db96d56Sopenharmony_ci"Execute the program specified by path in a new process.\n"
25357db96d56Sopenharmony_ci"\n"
25367db96d56Sopenharmony_ci"  mode\n"
25377db96d56Sopenharmony_ci"    Mode of process creation.\n"
25387db96d56Sopenharmony_ci"  path\n"
25397db96d56Sopenharmony_ci"    Path of executable file.\n"
25407db96d56Sopenharmony_ci"  argv\n"
25417db96d56Sopenharmony_ci"    Tuple or list of strings.\n"
25427db96d56Sopenharmony_ci"  env\n"
25437db96d56Sopenharmony_ci"    Dictionary of strings mapping to strings.");
25447db96d56Sopenharmony_ci
25457db96d56Sopenharmony_ci#define OS_SPAWNVE_METHODDEF    \
25467db96d56Sopenharmony_ci    {"spawnve", _PyCFunction_CAST(os_spawnve), METH_FASTCALL, os_spawnve__doc__},
25477db96d56Sopenharmony_ci
25487db96d56Sopenharmony_cistatic PyObject *
25497db96d56Sopenharmony_cios_spawnve_impl(PyObject *module, int mode, path_t *path, PyObject *argv,
25507db96d56Sopenharmony_ci                PyObject *env);
25517db96d56Sopenharmony_ci
25527db96d56Sopenharmony_cistatic PyObject *
25537db96d56Sopenharmony_cios_spawnve(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
25547db96d56Sopenharmony_ci{
25557db96d56Sopenharmony_ci    PyObject *return_value = NULL;
25567db96d56Sopenharmony_ci    int mode;
25577db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("spawnve", "path", 0, 0);
25587db96d56Sopenharmony_ci    PyObject *argv;
25597db96d56Sopenharmony_ci    PyObject *env;
25607db96d56Sopenharmony_ci
25617db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("spawnve", nargs, 4, 4)) {
25627db96d56Sopenharmony_ci        goto exit;
25637db96d56Sopenharmony_ci    }
25647db96d56Sopenharmony_ci    mode = _PyLong_AsInt(args[0]);
25657db96d56Sopenharmony_ci    if (mode == -1 && PyErr_Occurred()) {
25667db96d56Sopenharmony_ci        goto exit;
25677db96d56Sopenharmony_ci    }
25687db96d56Sopenharmony_ci    if (!path_converter(args[1], &path)) {
25697db96d56Sopenharmony_ci        goto exit;
25707db96d56Sopenharmony_ci    }
25717db96d56Sopenharmony_ci    argv = args[2];
25727db96d56Sopenharmony_ci    env = args[3];
25737db96d56Sopenharmony_ci    return_value = os_spawnve_impl(module, mode, &path, argv, env);
25747db96d56Sopenharmony_ci
25757db96d56Sopenharmony_ciexit:
25767db96d56Sopenharmony_ci    /* Cleanup for path */
25777db96d56Sopenharmony_ci    path_cleanup(&path);
25787db96d56Sopenharmony_ci
25797db96d56Sopenharmony_ci    return return_value;
25807db96d56Sopenharmony_ci}
25817db96d56Sopenharmony_ci
25827db96d56Sopenharmony_ci#endif /* (defined(HAVE_SPAWNV) || defined(HAVE_WSPAWNV) || defined(HAVE_RTPSPAWN)) */
25837db96d56Sopenharmony_ci
25847db96d56Sopenharmony_ci#if defined(HAVE_FORK)
25857db96d56Sopenharmony_ci
25867db96d56Sopenharmony_ciPyDoc_STRVAR(os_register_at_fork__doc__,
25877db96d56Sopenharmony_ci"register_at_fork($module, /, *, before=<unrepresentable>,\n"
25887db96d56Sopenharmony_ci"                 after_in_child=<unrepresentable>,\n"
25897db96d56Sopenharmony_ci"                 after_in_parent=<unrepresentable>)\n"
25907db96d56Sopenharmony_ci"--\n"
25917db96d56Sopenharmony_ci"\n"
25927db96d56Sopenharmony_ci"Register callables to be called when forking a new process.\n"
25937db96d56Sopenharmony_ci"\n"
25947db96d56Sopenharmony_ci"  before\n"
25957db96d56Sopenharmony_ci"    A callable to be called in the parent before the fork() syscall.\n"
25967db96d56Sopenharmony_ci"  after_in_child\n"
25977db96d56Sopenharmony_ci"    A callable to be called in the child after fork().\n"
25987db96d56Sopenharmony_ci"  after_in_parent\n"
25997db96d56Sopenharmony_ci"    A callable to be called in the parent after fork().\n"
26007db96d56Sopenharmony_ci"\n"
26017db96d56Sopenharmony_ci"\'before\' callbacks are called in reverse order.\n"
26027db96d56Sopenharmony_ci"\'after_in_child\' and \'after_in_parent\' callbacks are called in order.");
26037db96d56Sopenharmony_ci
26047db96d56Sopenharmony_ci#define OS_REGISTER_AT_FORK_METHODDEF    \
26057db96d56Sopenharmony_ci    {"register_at_fork", _PyCFunction_CAST(os_register_at_fork), METH_FASTCALL|METH_KEYWORDS, os_register_at_fork__doc__},
26067db96d56Sopenharmony_ci
26077db96d56Sopenharmony_cistatic PyObject *
26087db96d56Sopenharmony_cios_register_at_fork_impl(PyObject *module, PyObject *before,
26097db96d56Sopenharmony_ci                         PyObject *after_in_child, PyObject *after_in_parent);
26107db96d56Sopenharmony_ci
26117db96d56Sopenharmony_cistatic PyObject *
26127db96d56Sopenharmony_cios_register_at_fork(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
26137db96d56Sopenharmony_ci{
26147db96d56Sopenharmony_ci    PyObject *return_value = NULL;
26157db96d56Sopenharmony_ci    static const char * const _keywords[] = {"before", "after_in_child", "after_in_parent", NULL};
26167db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "register_at_fork", 0};
26177db96d56Sopenharmony_ci    PyObject *argsbuf[3];
26187db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
26197db96d56Sopenharmony_ci    PyObject *before = NULL;
26207db96d56Sopenharmony_ci    PyObject *after_in_child = NULL;
26217db96d56Sopenharmony_ci    PyObject *after_in_parent = NULL;
26227db96d56Sopenharmony_ci
26237db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf);
26247db96d56Sopenharmony_ci    if (!args) {
26257db96d56Sopenharmony_ci        goto exit;
26267db96d56Sopenharmony_ci    }
26277db96d56Sopenharmony_ci    if (!noptargs) {
26287db96d56Sopenharmony_ci        goto skip_optional_kwonly;
26297db96d56Sopenharmony_ci    }
26307db96d56Sopenharmony_ci    if (args[0]) {
26317db96d56Sopenharmony_ci        before = args[0];
26327db96d56Sopenharmony_ci        if (!--noptargs) {
26337db96d56Sopenharmony_ci            goto skip_optional_kwonly;
26347db96d56Sopenharmony_ci        }
26357db96d56Sopenharmony_ci    }
26367db96d56Sopenharmony_ci    if (args[1]) {
26377db96d56Sopenharmony_ci        after_in_child = args[1];
26387db96d56Sopenharmony_ci        if (!--noptargs) {
26397db96d56Sopenharmony_ci            goto skip_optional_kwonly;
26407db96d56Sopenharmony_ci        }
26417db96d56Sopenharmony_ci    }
26427db96d56Sopenharmony_ci    after_in_parent = args[2];
26437db96d56Sopenharmony_ciskip_optional_kwonly:
26447db96d56Sopenharmony_ci    return_value = os_register_at_fork_impl(module, before, after_in_child, after_in_parent);
26457db96d56Sopenharmony_ci
26467db96d56Sopenharmony_ciexit:
26477db96d56Sopenharmony_ci    return return_value;
26487db96d56Sopenharmony_ci}
26497db96d56Sopenharmony_ci
26507db96d56Sopenharmony_ci#endif /* defined(HAVE_FORK) */
26517db96d56Sopenharmony_ci
26527db96d56Sopenharmony_ci#if defined(HAVE_FORK1)
26537db96d56Sopenharmony_ci
26547db96d56Sopenharmony_ciPyDoc_STRVAR(os_fork1__doc__,
26557db96d56Sopenharmony_ci"fork1($module, /)\n"
26567db96d56Sopenharmony_ci"--\n"
26577db96d56Sopenharmony_ci"\n"
26587db96d56Sopenharmony_ci"Fork a child process with a single multiplexed (i.e., not bound) thread.\n"
26597db96d56Sopenharmony_ci"\n"
26607db96d56Sopenharmony_ci"Return 0 to child process and PID of child to parent process.");
26617db96d56Sopenharmony_ci
26627db96d56Sopenharmony_ci#define OS_FORK1_METHODDEF    \
26637db96d56Sopenharmony_ci    {"fork1", (PyCFunction)os_fork1, METH_NOARGS, os_fork1__doc__},
26647db96d56Sopenharmony_ci
26657db96d56Sopenharmony_cistatic PyObject *
26667db96d56Sopenharmony_cios_fork1_impl(PyObject *module);
26677db96d56Sopenharmony_ci
26687db96d56Sopenharmony_cistatic PyObject *
26697db96d56Sopenharmony_cios_fork1(PyObject *module, PyObject *Py_UNUSED(ignored))
26707db96d56Sopenharmony_ci{
26717db96d56Sopenharmony_ci    return os_fork1_impl(module);
26727db96d56Sopenharmony_ci}
26737db96d56Sopenharmony_ci
26747db96d56Sopenharmony_ci#endif /* defined(HAVE_FORK1) */
26757db96d56Sopenharmony_ci
26767db96d56Sopenharmony_ci#if defined(HAVE_FORK)
26777db96d56Sopenharmony_ci
26787db96d56Sopenharmony_ciPyDoc_STRVAR(os_fork__doc__,
26797db96d56Sopenharmony_ci"fork($module, /)\n"
26807db96d56Sopenharmony_ci"--\n"
26817db96d56Sopenharmony_ci"\n"
26827db96d56Sopenharmony_ci"Fork a child process.\n"
26837db96d56Sopenharmony_ci"\n"
26847db96d56Sopenharmony_ci"Return 0 to child process and PID of child to parent process.");
26857db96d56Sopenharmony_ci
26867db96d56Sopenharmony_ci#define OS_FORK_METHODDEF    \
26877db96d56Sopenharmony_ci    {"fork", (PyCFunction)os_fork, METH_NOARGS, os_fork__doc__},
26887db96d56Sopenharmony_ci
26897db96d56Sopenharmony_cistatic PyObject *
26907db96d56Sopenharmony_cios_fork_impl(PyObject *module);
26917db96d56Sopenharmony_ci
26927db96d56Sopenharmony_cistatic PyObject *
26937db96d56Sopenharmony_cios_fork(PyObject *module, PyObject *Py_UNUSED(ignored))
26947db96d56Sopenharmony_ci{
26957db96d56Sopenharmony_ci    return os_fork_impl(module);
26967db96d56Sopenharmony_ci}
26977db96d56Sopenharmony_ci
26987db96d56Sopenharmony_ci#endif /* defined(HAVE_FORK) */
26997db96d56Sopenharmony_ci
27007db96d56Sopenharmony_ci#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_GET_PRIORITY_MAX)
27017db96d56Sopenharmony_ci
27027db96d56Sopenharmony_ciPyDoc_STRVAR(os_sched_get_priority_max__doc__,
27037db96d56Sopenharmony_ci"sched_get_priority_max($module, /, policy)\n"
27047db96d56Sopenharmony_ci"--\n"
27057db96d56Sopenharmony_ci"\n"
27067db96d56Sopenharmony_ci"Get the maximum scheduling priority for policy.");
27077db96d56Sopenharmony_ci
27087db96d56Sopenharmony_ci#define OS_SCHED_GET_PRIORITY_MAX_METHODDEF    \
27097db96d56Sopenharmony_ci    {"sched_get_priority_max", _PyCFunction_CAST(os_sched_get_priority_max), METH_FASTCALL|METH_KEYWORDS, os_sched_get_priority_max__doc__},
27107db96d56Sopenharmony_ci
27117db96d56Sopenharmony_cistatic PyObject *
27127db96d56Sopenharmony_cios_sched_get_priority_max_impl(PyObject *module, int policy);
27137db96d56Sopenharmony_ci
27147db96d56Sopenharmony_cistatic PyObject *
27157db96d56Sopenharmony_cios_sched_get_priority_max(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
27167db96d56Sopenharmony_ci{
27177db96d56Sopenharmony_ci    PyObject *return_value = NULL;
27187db96d56Sopenharmony_ci    static const char * const _keywords[] = {"policy", NULL};
27197db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "sched_get_priority_max", 0};
27207db96d56Sopenharmony_ci    PyObject *argsbuf[1];
27217db96d56Sopenharmony_ci    int policy;
27227db96d56Sopenharmony_ci
27237db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
27247db96d56Sopenharmony_ci    if (!args) {
27257db96d56Sopenharmony_ci        goto exit;
27267db96d56Sopenharmony_ci    }
27277db96d56Sopenharmony_ci    policy = _PyLong_AsInt(args[0]);
27287db96d56Sopenharmony_ci    if (policy == -1 && PyErr_Occurred()) {
27297db96d56Sopenharmony_ci        goto exit;
27307db96d56Sopenharmony_ci    }
27317db96d56Sopenharmony_ci    return_value = os_sched_get_priority_max_impl(module, policy);
27327db96d56Sopenharmony_ci
27337db96d56Sopenharmony_ciexit:
27347db96d56Sopenharmony_ci    return return_value;
27357db96d56Sopenharmony_ci}
27367db96d56Sopenharmony_ci
27377db96d56Sopenharmony_ci#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_GET_PRIORITY_MAX) */
27387db96d56Sopenharmony_ci
27397db96d56Sopenharmony_ci#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_GET_PRIORITY_MAX)
27407db96d56Sopenharmony_ci
27417db96d56Sopenharmony_ciPyDoc_STRVAR(os_sched_get_priority_min__doc__,
27427db96d56Sopenharmony_ci"sched_get_priority_min($module, /, policy)\n"
27437db96d56Sopenharmony_ci"--\n"
27447db96d56Sopenharmony_ci"\n"
27457db96d56Sopenharmony_ci"Get the minimum scheduling priority for policy.");
27467db96d56Sopenharmony_ci
27477db96d56Sopenharmony_ci#define OS_SCHED_GET_PRIORITY_MIN_METHODDEF    \
27487db96d56Sopenharmony_ci    {"sched_get_priority_min", _PyCFunction_CAST(os_sched_get_priority_min), METH_FASTCALL|METH_KEYWORDS, os_sched_get_priority_min__doc__},
27497db96d56Sopenharmony_ci
27507db96d56Sopenharmony_cistatic PyObject *
27517db96d56Sopenharmony_cios_sched_get_priority_min_impl(PyObject *module, int policy);
27527db96d56Sopenharmony_ci
27537db96d56Sopenharmony_cistatic PyObject *
27547db96d56Sopenharmony_cios_sched_get_priority_min(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
27557db96d56Sopenharmony_ci{
27567db96d56Sopenharmony_ci    PyObject *return_value = NULL;
27577db96d56Sopenharmony_ci    static const char * const _keywords[] = {"policy", NULL};
27587db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "sched_get_priority_min", 0};
27597db96d56Sopenharmony_ci    PyObject *argsbuf[1];
27607db96d56Sopenharmony_ci    int policy;
27617db96d56Sopenharmony_ci
27627db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
27637db96d56Sopenharmony_ci    if (!args) {
27647db96d56Sopenharmony_ci        goto exit;
27657db96d56Sopenharmony_ci    }
27667db96d56Sopenharmony_ci    policy = _PyLong_AsInt(args[0]);
27677db96d56Sopenharmony_ci    if (policy == -1 && PyErr_Occurred()) {
27687db96d56Sopenharmony_ci        goto exit;
27697db96d56Sopenharmony_ci    }
27707db96d56Sopenharmony_ci    return_value = os_sched_get_priority_min_impl(module, policy);
27717db96d56Sopenharmony_ci
27727db96d56Sopenharmony_ciexit:
27737db96d56Sopenharmony_ci    return return_value;
27747db96d56Sopenharmony_ci}
27757db96d56Sopenharmony_ci
27767db96d56Sopenharmony_ci#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_GET_PRIORITY_MAX) */
27777db96d56Sopenharmony_ci
27787db96d56Sopenharmony_ci#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETSCHEDULER)
27797db96d56Sopenharmony_ci
27807db96d56Sopenharmony_ciPyDoc_STRVAR(os_sched_getscheduler__doc__,
27817db96d56Sopenharmony_ci"sched_getscheduler($module, pid, /)\n"
27827db96d56Sopenharmony_ci"--\n"
27837db96d56Sopenharmony_ci"\n"
27847db96d56Sopenharmony_ci"Get the scheduling policy for the process identified by pid.\n"
27857db96d56Sopenharmony_ci"\n"
27867db96d56Sopenharmony_ci"Passing 0 for pid returns the scheduling policy for the calling process.");
27877db96d56Sopenharmony_ci
27887db96d56Sopenharmony_ci#define OS_SCHED_GETSCHEDULER_METHODDEF    \
27897db96d56Sopenharmony_ci    {"sched_getscheduler", (PyCFunction)os_sched_getscheduler, METH_O, os_sched_getscheduler__doc__},
27907db96d56Sopenharmony_ci
27917db96d56Sopenharmony_cistatic PyObject *
27927db96d56Sopenharmony_cios_sched_getscheduler_impl(PyObject *module, pid_t pid);
27937db96d56Sopenharmony_ci
27947db96d56Sopenharmony_cistatic PyObject *
27957db96d56Sopenharmony_cios_sched_getscheduler(PyObject *module, PyObject *arg)
27967db96d56Sopenharmony_ci{
27977db96d56Sopenharmony_ci    PyObject *return_value = NULL;
27987db96d56Sopenharmony_ci    pid_t pid;
27997db96d56Sopenharmony_ci
28007db96d56Sopenharmony_ci    if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getscheduler", &pid)) {
28017db96d56Sopenharmony_ci        goto exit;
28027db96d56Sopenharmony_ci    }
28037db96d56Sopenharmony_ci    return_value = os_sched_getscheduler_impl(module, pid);
28047db96d56Sopenharmony_ci
28057db96d56Sopenharmony_ciexit:
28067db96d56Sopenharmony_ci    return return_value;
28077db96d56Sopenharmony_ci}
28087db96d56Sopenharmony_ci
28097db96d56Sopenharmony_ci#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETSCHEDULER) */
28107db96d56Sopenharmony_ci
28117db96d56Sopenharmony_ci#if defined(HAVE_SCHED_H) && (defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM))
28127db96d56Sopenharmony_ci
28137db96d56Sopenharmony_ciPyDoc_STRVAR(os_sched_param__doc__,
28147db96d56Sopenharmony_ci"sched_param(sched_priority)\n"
28157db96d56Sopenharmony_ci"--\n"
28167db96d56Sopenharmony_ci"\n"
28177db96d56Sopenharmony_ci"Currently has only one field: sched_priority\n"
28187db96d56Sopenharmony_ci"\n"
28197db96d56Sopenharmony_ci"  sched_priority\n"
28207db96d56Sopenharmony_ci"    A scheduling parameter.");
28217db96d56Sopenharmony_ci
28227db96d56Sopenharmony_cistatic PyObject *
28237db96d56Sopenharmony_cios_sched_param_impl(PyTypeObject *type, PyObject *sched_priority);
28247db96d56Sopenharmony_ci
28257db96d56Sopenharmony_cistatic PyObject *
28267db96d56Sopenharmony_cios_sched_param(PyTypeObject *type, PyObject *args, PyObject *kwargs)
28277db96d56Sopenharmony_ci{
28287db96d56Sopenharmony_ci    PyObject *return_value = NULL;
28297db96d56Sopenharmony_ci    static const char * const _keywords[] = {"sched_priority", NULL};
28307db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "sched_param", 0};
28317db96d56Sopenharmony_ci    PyObject *argsbuf[1];
28327db96d56Sopenharmony_ci    PyObject * const *fastargs;
28337db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
28347db96d56Sopenharmony_ci    PyObject *sched_priority;
28357db96d56Sopenharmony_ci
28367db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 1, 1, 0, argsbuf);
28377db96d56Sopenharmony_ci    if (!fastargs) {
28387db96d56Sopenharmony_ci        goto exit;
28397db96d56Sopenharmony_ci    }
28407db96d56Sopenharmony_ci    sched_priority = fastargs[0];
28417db96d56Sopenharmony_ci    return_value = os_sched_param_impl(type, sched_priority);
28427db96d56Sopenharmony_ci
28437db96d56Sopenharmony_ciexit:
28447db96d56Sopenharmony_ci    return return_value;
28457db96d56Sopenharmony_ci}
28467db96d56Sopenharmony_ci
28477db96d56Sopenharmony_ci#endif /* defined(HAVE_SCHED_H) && (defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)) */
28487db96d56Sopenharmony_ci
28497db96d56Sopenharmony_ci#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETSCHEDULER)
28507db96d56Sopenharmony_ci
28517db96d56Sopenharmony_ciPyDoc_STRVAR(os_sched_setscheduler__doc__,
28527db96d56Sopenharmony_ci"sched_setscheduler($module, pid, policy, param, /)\n"
28537db96d56Sopenharmony_ci"--\n"
28547db96d56Sopenharmony_ci"\n"
28557db96d56Sopenharmony_ci"Set the scheduling policy for the process identified by pid.\n"
28567db96d56Sopenharmony_ci"\n"
28577db96d56Sopenharmony_ci"If pid is 0, the calling process is changed.\n"
28587db96d56Sopenharmony_ci"param is an instance of sched_param.");
28597db96d56Sopenharmony_ci
28607db96d56Sopenharmony_ci#define OS_SCHED_SETSCHEDULER_METHODDEF    \
28617db96d56Sopenharmony_ci    {"sched_setscheduler", _PyCFunction_CAST(os_sched_setscheduler), METH_FASTCALL, os_sched_setscheduler__doc__},
28627db96d56Sopenharmony_ci
28637db96d56Sopenharmony_cistatic PyObject *
28647db96d56Sopenharmony_cios_sched_setscheduler_impl(PyObject *module, pid_t pid, int policy,
28657db96d56Sopenharmony_ci                           PyObject *param_obj);
28667db96d56Sopenharmony_ci
28677db96d56Sopenharmony_cistatic PyObject *
28687db96d56Sopenharmony_cios_sched_setscheduler(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
28697db96d56Sopenharmony_ci{
28707db96d56Sopenharmony_ci    PyObject *return_value = NULL;
28717db96d56Sopenharmony_ci    pid_t pid;
28727db96d56Sopenharmony_ci    int policy;
28737db96d56Sopenharmony_ci    PyObject *param_obj;
28747db96d56Sopenharmony_ci
28757db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "iO:sched_setscheduler",
28767db96d56Sopenharmony_ci        &pid, &policy, &param_obj)) {
28777db96d56Sopenharmony_ci        goto exit;
28787db96d56Sopenharmony_ci    }
28797db96d56Sopenharmony_ci    return_value = os_sched_setscheduler_impl(module, pid, policy, param_obj);
28807db96d56Sopenharmony_ci
28817db96d56Sopenharmony_ciexit:
28827db96d56Sopenharmony_ci    return return_value;
28837db96d56Sopenharmony_ci}
28847db96d56Sopenharmony_ci
28857db96d56Sopenharmony_ci#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETSCHEDULER) */
28867db96d56Sopenharmony_ci
28877db96d56Sopenharmony_ci#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETPARAM)
28887db96d56Sopenharmony_ci
28897db96d56Sopenharmony_ciPyDoc_STRVAR(os_sched_getparam__doc__,
28907db96d56Sopenharmony_ci"sched_getparam($module, pid, /)\n"
28917db96d56Sopenharmony_ci"--\n"
28927db96d56Sopenharmony_ci"\n"
28937db96d56Sopenharmony_ci"Returns scheduling parameters for the process identified by pid.\n"
28947db96d56Sopenharmony_ci"\n"
28957db96d56Sopenharmony_ci"If pid is 0, returns parameters for the calling process.\n"
28967db96d56Sopenharmony_ci"Return value is an instance of sched_param.");
28977db96d56Sopenharmony_ci
28987db96d56Sopenharmony_ci#define OS_SCHED_GETPARAM_METHODDEF    \
28997db96d56Sopenharmony_ci    {"sched_getparam", (PyCFunction)os_sched_getparam, METH_O, os_sched_getparam__doc__},
29007db96d56Sopenharmony_ci
29017db96d56Sopenharmony_cistatic PyObject *
29027db96d56Sopenharmony_cios_sched_getparam_impl(PyObject *module, pid_t pid);
29037db96d56Sopenharmony_ci
29047db96d56Sopenharmony_cistatic PyObject *
29057db96d56Sopenharmony_cios_sched_getparam(PyObject *module, PyObject *arg)
29067db96d56Sopenharmony_ci{
29077db96d56Sopenharmony_ci    PyObject *return_value = NULL;
29087db96d56Sopenharmony_ci    pid_t pid;
29097db96d56Sopenharmony_ci
29107db96d56Sopenharmony_ci    if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getparam", &pid)) {
29117db96d56Sopenharmony_ci        goto exit;
29127db96d56Sopenharmony_ci    }
29137db96d56Sopenharmony_ci    return_value = os_sched_getparam_impl(module, pid);
29147db96d56Sopenharmony_ci
29157db96d56Sopenharmony_ciexit:
29167db96d56Sopenharmony_ci    return return_value;
29177db96d56Sopenharmony_ci}
29187db96d56Sopenharmony_ci
29197db96d56Sopenharmony_ci#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETPARAM) */
29207db96d56Sopenharmony_ci
29217db96d56Sopenharmony_ci#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETPARAM)
29227db96d56Sopenharmony_ci
29237db96d56Sopenharmony_ciPyDoc_STRVAR(os_sched_setparam__doc__,
29247db96d56Sopenharmony_ci"sched_setparam($module, pid, param, /)\n"
29257db96d56Sopenharmony_ci"--\n"
29267db96d56Sopenharmony_ci"\n"
29277db96d56Sopenharmony_ci"Set scheduling parameters for the process identified by pid.\n"
29287db96d56Sopenharmony_ci"\n"
29297db96d56Sopenharmony_ci"If pid is 0, sets parameters for the calling process.\n"
29307db96d56Sopenharmony_ci"param should be an instance of sched_param.");
29317db96d56Sopenharmony_ci
29327db96d56Sopenharmony_ci#define OS_SCHED_SETPARAM_METHODDEF    \
29337db96d56Sopenharmony_ci    {"sched_setparam", _PyCFunction_CAST(os_sched_setparam), METH_FASTCALL, os_sched_setparam__doc__},
29347db96d56Sopenharmony_ci
29357db96d56Sopenharmony_cistatic PyObject *
29367db96d56Sopenharmony_cios_sched_setparam_impl(PyObject *module, pid_t pid, PyObject *param_obj);
29377db96d56Sopenharmony_ci
29387db96d56Sopenharmony_cistatic PyObject *
29397db96d56Sopenharmony_cios_sched_setparam(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
29407db96d56Sopenharmony_ci{
29417db96d56Sopenharmony_ci    PyObject *return_value = NULL;
29427db96d56Sopenharmony_ci    pid_t pid;
29437db96d56Sopenharmony_ci    PyObject *param_obj;
29447db96d56Sopenharmony_ci
29457db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "O:sched_setparam",
29467db96d56Sopenharmony_ci        &pid, &param_obj)) {
29477db96d56Sopenharmony_ci        goto exit;
29487db96d56Sopenharmony_ci    }
29497db96d56Sopenharmony_ci    return_value = os_sched_setparam_impl(module, pid, param_obj);
29507db96d56Sopenharmony_ci
29517db96d56Sopenharmony_ciexit:
29527db96d56Sopenharmony_ci    return return_value;
29537db96d56Sopenharmony_ci}
29547db96d56Sopenharmony_ci
29557db96d56Sopenharmony_ci#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETPARAM) */
29567db96d56Sopenharmony_ci
29577db96d56Sopenharmony_ci#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_RR_GET_INTERVAL)
29587db96d56Sopenharmony_ci
29597db96d56Sopenharmony_ciPyDoc_STRVAR(os_sched_rr_get_interval__doc__,
29607db96d56Sopenharmony_ci"sched_rr_get_interval($module, pid, /)\n"
29617db96d56Sopenharmony_ci"--\n"
29627db96d56Sopenharmony_ci"\n"
29637db96d56Sopenharmony_ci"Return the round-robin quantum for the process identified by pid, in seconds.\n"
29647db96d56Sopenharmony_ci"\n"
29657db96d56Sopenharmony_ci"Value returned is a float.");
29667db96d56Sopenharmony_ci
29677db96d56Sopenharmony_ci#define OS_SCHED_RR_GET_INTERVAL_METHODDEF    \
29687db96d56Sopenharmony_ci    {"sched_rr_get_interval", (PyCFunction)os_sched_rr_get_interval, METH_O, os_sched_rr_get_interval__doc__},
29697db96d56Sopenharmony_ci
29707db96d56Sopenharmony_cistatic double
29717db96d56Sopenharmony_cios_sched_rr_get_interval_impl(PyObject *module, pid_t pid);
29727db96d56Sopenharmony_ci
29737db96d56Sopenharmony_cistatic PyObject *
29747db96d56Sopenharmony_cios_sched_rr_get_interval(PyObject *module, PyObject *arg)
29757db96d56Sopenharmony_ci{
29767db96d56Sopenharmony_ci    PyObject *return_value = NULL;
29777db96d56Sopenharmony_ci    pid_t pid;
29787db96d56Sopenharmony_ci    double _return_value;
29797db96d56Sopenharmony_ci
29807db96d56Sopenharmony_ci    if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_rr_get_interval", &pid)) {
29817db96d56Sopenharmony_ci        goto exit;
29827db96d56Sopenharmony_ci    }
29837db96d56Sopenharmony_ci    _return_value = os_sched_rr_get_interval_impl(module, pid);
29847db96d56Sopenharmony_ci    if ((_return_value == -1.0) && PyErr_Occurred()) {
29857db96d56Sopenharmony_ci        goto exit;
29867db96d56Sopenharmony_ci    }
29877db96d56Sopenharmony_ci    return_value = PyFloat_FromDouble(_return_value);
29887db96d56Sopenharmony_ci
29897db96d56Sopenharmony_ciexit:
29907db96d56Sopenharmony_ci    return return_value;
29917db96d56Sopenharmony_ci}
29927db96d56Sopenharmony_ci
29937db96d56Sopenharmony_ci#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_RR_GET_INTERVAL) */
29947db96d56Sopenharmony_ci
29957db96d56Sopenharmony_ci#if defined(HAVE_SCHED_H)
29967db96d56Sopenharmony_ci
29977db96d56Sopenharmony_ciPyDoc_STRVAR(os_sched_yield__doc__,
29987db96d56Sopenharmony_ci"sched_yield($module, /)\n"
29997db96d56Sopenharmony_ci"--\n"
30007db96d56Sopenharmony_ci"\n"
30017db96d56Sopenharmony_ci"Voluntarily relinquish the CPU.");
30027db96d56Sopenharmony_ci
30037db96d56Sopenharmony_ci#define OS_SCHED_YIELD_METHODDEF    \
30047db96d56Sopenharmony_ci    {"sched_yield", (PyCFunction)os_sched_yield, METH_NOARGS, os_sched_yield__doc__},
30057db96d56Sopenharmony_ci
30067db96d56Sopenharmony_cistatic PyObject *
30077db96d56Sopenharmony_cios_sched_yield_impl(PyObject *module);
30087db96d56Sopenharmony_ci
30097db96d56Sopenharmony_cistatic PyObject *
30107db96d56Sopenharmony_cios_sched_yield(PyObject *module, PyObject *Py_UNUSED(ignored))
30117db96d56Sopenharmony_ci{
30127db96d56Sopenharmony_ci    return os_sched_yield_impl(module);
30137db96d56Sopenharmony_ci}
30147db96d56Sopenharmony_ci
30157db96d56Sopenharmony_ci#endif /* defined(HAVE_SCHED_H) */
30167db96d56Sopenharmony_ci
30177db96d56Sopenharmony_ci#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETAFFINITY)
30187db96d56Sopenharmony_ci
30197db96d56Sopenharmony_ciPyDoc_STRVAR(os_sched_setaffinity__doc__,
30207db96d56Sopenharmony_ci"sched_setaffinity($module, pid, mask, /)\n"
30217db96d56Sopenharmony_ci"--\n"
30227db96d56Sopenharmony_ci"\n"
30237db96d56Sopenharmony_ci"Set the CPU affinity of the process identified by pid to mask.\n"
30247db96d56Sopenharmony_ci"\n"
30257db96d56Sopenharmony_ci"mask should be an iterable of integers identifying CPUs.");
30267db96d56Sopenharmony_ci
30277db96d56Sopenharmony_ci#define OS_SCHED_SETAFFINITY_METHODDEF    \
30287db96d56Sopenharmony_ci    {"sched_setaffinity", _PyCFunction_CAST(os_sched_setaffinity), METH_FASTCALL, os_sched_setaffinity__doc__},
30297db96d56Sopenharmony_ci
30307db96d56Sopenharmony_cistatic PyObject *
30317db96d56Sopenharmony_cios_sched_setaffinity_impl(PyObject *module, pid_t pid, PyObject *mask);
30327db96d56Sopenharmony_ci
30337db96d56Sopenharmony_cistatic PyObject *
30347db96d56Sopenharmony_cios_sched_setaffinity(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
30357db96d56Sopenharmony_ci{
30367db96d56Sopenharmony_ci    PyObject *return_value = NULL;
30377db96d56Sopenharmony_ci    pid_t pid;
30387db96d56Sopenharmony_ci    PyObject *mask;
30397db96d56Sopenharmony_ci
30407db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "O:sched_setaffinity",
30417db96d56Sopenharmony_ci        &pid, &mask)) {
30427db96d56Sopenharmony_ci        goto exit;
30437db96d56Sopenharmony_ci    }
30447db96d56Sopenharmony_ci    return_value = os_sched_setaffinity_impl(module, pid, mask);
30457db96d56Sopenharmony_ci
30467db96d56Sopenharmony_ciexit:
30477db96d56Sopenharmony_ci    return return_value;
30487db96d56Sopenharmony_ci}
30497db96d56Sopenharmony_ci
30507db96d56Sopenharmony_ci#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETAFFINITY) */
30517db96d56Sopenharmony_ci
30527db96d56Sopenharmony_ci#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETAFFINITY)
30537db96d56Sopenharmony_ci
30547db96d56Sopenharmony_ciPyDoc_STRVAR(os_sched_getaffinity__doc__,
30557db96d56Sopenharmony_ci"sched_getaffinity($module, pid, /)\n"
30567db96d56Sopenharmony_ci"--\n"
30577db96d56Sopenharmony_ci"\n"
30587db96d56Sopenharmony_ci"Return the affinity of the process identified by pid (or the current process if zero).\n"
30597db96d56Sopenharmony_ci"\n"
30607db96d56Sopenharmony_ci"The affinity is returned as a set of CPU identifiers.");
30617db96d56Sopenharmony_ci
30627db96d56Sopenharmony_ci#define OS_SCHED_GETAFFINITY_METHODDEF    \
30637db96d56Sopenharmony_ci    {"sched_getaffinity", (PyCFunction)os_sched_getaffinity, METH_O, os_sched_getaffinity__doc__},
30647db96d56Sopenharmony_ci
30657db96d56Sopenharmony_cistatic PyObject *
30667db96d56Sopenharmony_cios_sched_getaffinity_impl(PyObject *module, pid_t pid);
30677db96d56Sopenharmony_ci
30687db96d56Sopenharmony_cistatic PyObject *
30697db96d56Sopenharmony_cios_sched_getaffinity(PyObject *module, PyObject *arg)
30707db96d56Sopenharmony_ci{
30717db96d56Sopenharmony_ci    PyObject *return_value = NULL;
30727db96d56Sopenharmony_ci    pid_t pid;
30737db96d56Sopenharmony_ci
30747db96d56Sopenharmony_ci    if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":sched_getaffinity", &pid)) {
30757db96d56Sopenharmony_ci        goto exit;
30767db96d56Sopenharmony_ci    }
30777db96d56Sopenharmony_ci    return_value = os_sched_getaffinity_impl(module, pid);
30787db96d56Sopenharmony_ci
30797db96d56Sopenharmony_ciexit:
30807db96d56Sopenharmony_ci    return return_value;
30817db96d56Sopenharmony_ci}
30827db96d56Sopenharmony_ci
30837db96d56Sopenharmony_ci#endif /* defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETAFFINITY) */
30847db96d56Sopenharmony_ci
30857db96d56Sopenharmony_ci#if (defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(HAVE_DEV_PTMX))
30867db96d56Sopenharmony_ci
30877db96d56Sopenharmony_ciPyDoc_STRVAR(os_openpty__doc__,
30887db96d56Sopenharmony_ci"openpty($module, /)\n"
30897db96d56Sopenharmony_ci"--\n"
30907db96d56Sopenharmony_ci"\n"
30917db96d56Sopenharmony_ci"Open a pseudo-terminal.\n"
30927db96d56Sopenharmony_ci"\n"
30937db96d56Sopenharmony_ci"Return a tuple of (master_fd, slave_fd) containing open file descriptors\n"
30947db96d56Sopenharmony_ci"for both the master and slave ends.");
30957db96d56Sopenharmony_ci
30967db96d56Sopenharmony_ci#define OS_OPENPTY_METHODDEF    \
30977db96d56Sopenharmony_ci    {"openpty", (PyCFunction)os_openpty, METH_NOARGS, os_openpty__doc__},
30987db96d56Sopenharmony_ci
30997db96d56Sopenharmony_cistatic PyObject *
31007db96d56Sopenharmony_cios_openpty_impl(PyObject *module);
31017db96d56Sopenharmony_ci
31027db96d56Sopenharmony_cistatic PyObject *
31037db96d56Sopenharmony_cios_openpty(PyObject *module, PyObject *Py_UNUSED(ignored))
31047db96d56Sopenharmony_ci{
31057db96d56Sopenharmony_ci    return os_openpty_impl(module);
31067db96d56Sopenharmony_ci}
31077db96d56Sopenharmony_ci
31087db96d56Sopenharmony_ci#endif /* (defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(HAVE_DEV_PTMX)) */
31097db96d56Sopenharmony_ci
31107db96d56Sopenharmony_ci#if (defined(HAVE_LOGIN_TTY) || defined(HAVE_FALLBACK_LOGIN_TTY))
31117db96d56Sopenharmony_ci
31127db96d56Sopenharmony_ciPyDoc_STRVAR(os_login_tty__doc__,
31137db96d56Sopenharmony_ci"login_tty($module, fd, /)\n"
31147db96d56Sopenharmony_ci"--\n"
31157db96d56Sopenharmony_ci"\n"
31167db96d56Sopenharmony_ci"Prepare the tty of which fd is a file descriptor for a new login session.\n"
31177db96d56Sopenharmony_ci"\n"
31187db96d56Sopenharmony_ci"Make the calling process a session leader; make the tty the\n"
31197db96d56Sopenharmony_ci"controlling tty, the stdin, the stdout, and the stderr of the\n"
31207db96d56Sopenharmony_ci"calling process; close fd.");
31217db96d56Sopenharmony_ci
31227db96d56Sopenharmony_ci#define OS_LOGIN_TTY_METHODDEF    \
31237db96d56Sopenharmony_ci    {"login_tty", (PyCFunction)os_login_tty, METH_O, os_login_tty__doc__},
31247db96d56Sopenharmony_ci
31257db96d56Sopenharmony_cistatic PyObject *
31267db96d56Sopenharmony_cios_login_tty_impl(PyObject *module, int fd);
31277db96d56Sopenharmony_ci
31287db96d56Sopenharmony_cistatic PyObject *
31297db96d56Sopenharmony_cios_login_tty(PyObject *module, PyObject *arg)
31307db96d56Sopenharmony_ci{
31317db96d56Sopenharmony_ci    PyObject *return_value = NULL;
31327db96d56Sopenharmony_ci    int fd;
31337db96d56Sopenharmony_ci
31347db96d56Sopenharmony_ci    if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
31357db96d56Sopenharmony_ci        goto exit;
31367db96d56Sopenharmony_ci    }
31377db96d56Sopenharmony_ci    return_value = os_login_tty_impl(module, fd);
31387db96d56Sopenharmony_ci
31397db96d56Sopenharmony_ciexit:
31407db96d56Sopenharmony_ci    return return_value;
31417db96d56Sopenharmony_ci}
31427db96d56Sopenharmony_ci
31437db96d56Sopenharmony_ci#endif /* (defined(HAVE_LOGIN_TTY) || defined(HAVE_FALLBACK_LOGIN_TTY)) */
31447db96d56Sopenharmony_ci
31457db96d56Sopenharmony_ci#if defined(HAVE_FORKPTY)
31467db96d56Sopenharmony_ci
31477db96d56Sopenharmony_ciPyDoc_STRVAR(os_forkpty__doc__,
31487db96d56Sopenharmony_ci"forkpty($module, /)\n"
31497db96d56Sopenharmony_ci"--\n"
31507db96d56Sopenharmony_ci"\n"
31517db96d56Sopenharmony_ci"Fork a new process with a new pseudo-terminal as controlling tty.\n"
31527db96d56Sopenharmony_ci"\n"
31537db96d56Sopenharmony_ci"Returns a tuple of (pid, master_fd).\n"
31547db96d56Sopenharmony_ci"Like fork(), return pid of 0 to the child process,\n"
31557db96d56Sopenharmony_ci"and pid of child to the parent process.\n"
31567db96d56Sopenharmony_ci"To both, return fd of newly opened pseudo-terminal.");
31577db96d56Sopenharmony_ci
31587db96d56Sopenharmony_ci#define OS_FORKPTY_METHODDEF    \
31597db96d56Sopenharmony_ci    {"forkpty", (PyCFunction)os_forkpty, METH_NOARGS, os_forkpty__doc__},
31607db96d56Sopenharmony_ci
31617db96d56Sopenharmony_cistatic PyObject *
31627db96d56Sopenharmony_cios_forkpty_impl(PyObject *module);
31637db96d56Sopenharmony_ci
31647db96d56Sopenharmony_cistatic PyObject *
31657db96d56Sopenharmony_cios_forkpty(PyObject *module, PyObject *Py_UNUSED(ignored))
31667db96d56Sopenharmony_ci{
31677db96d56Sopenharmony_ci    return os_forkpty_impl(module);
31687db96d56Sopenharmony_ci}
31697db96d56Sopenharmony_ci
31707db96d56Sopenharmony_ci#endif /* defined(HAVE_FORKPTY) */
31717db96d56Sopenharmony_ci
31727db96d56Sopenharmony_ci#if defined(HAVE_GETEGID)
31737db96d56Sopenharmony_ci
31747db96d56Sopenharmony_ciPyDoc_STRVAR(os_getegid__doc__,
31757db96d56Sopenharmony_ci"getegid($module, /)\n"
31767db96d56Sopenharmony_ci"--\n"
31777db96d56Sopenharmony_ci"\n"
31787db96d56Sopenharmony_ci"Return the current process\'s effective group id.");
31797db96d56Sopenharmony_ci
31807db96d56Sopenharmony_ci#define OS_GETEGID_METHODDEF    \
31817db96d56Sopenharmony_ci    {"getegid", (PyCFunction)os_getegid, METH_NOARGS, os_getegid__doc__},
31827db96d56Sopenharmony_ci
31837db96d56Sopenharmony_cistatic PyObject *
31847db96d56Sopenharmony_cios_getegid_impl(PyObject *module);
31857db96d56Sopenharmony_ci
31867db96d56Sopenharmony_cistatic PyObject *
31877db96d56Sopenharmony_cios_getegid(PyObject *module, PyObject *Py_UNUSED(ignored))
31887db96d56Sopenharmony_ci{
31897db96d56Sopenharmony_ci    return os_getegid_impl(module);
31907db96d56Sopenharmony_ci}
31917db96d56Sopenharmony_ci
31927db96d56Sopenharmony_ci#endif /* defined(HAVE_GETEGID) */
31937db96d56Sopenharmony_ci
31947db96d56Sopenharmony_ci#if defined(HAVE_GETEUID)
31957db96d56Sopenharmony_ci
31967db96d56Sopenharmony_ciPyDoc_STRVAR(os_geteuid__doc__,
31977db96d56Sopenharmony_ci"geteuid($module, /)\n"
31987db96d56Sopenharmony_ci"--\n"
31997db96d56Sopenharmony_ci"\n"
32007db96d56Sopenharmony_ci"Return the current process\'s effective user id.");
32017db96d56Sopenharmony_ci
32027db96d56Sopenharmony_ci#define OS_GETEUID_METHODDEF    \
32037db96d56Sopenharmony_ci    {"geteuid", (PyCFunction)os_geteuid, METH_NOARGS, os_geteuid__doc__},
32047db96d56Sopenharmony_ci
32057db96d56Sopenharmony_cistatic PyObject *
32067db96d56Sopenharmony_cios_geteuid_impl(PyObject *module);
32077db96d56Sopenharmony_ci
32087db96d56Sopenharmony_cistatic PyObject *
32097db96d56Sopenharmony_cios_geteuid(PyObject *module, PyObject *Py_UNUSED(ignored))
32107db96d56Sopenharmony_ci{
32117db96d56Sopenharmony_ci    return os_geteuid_impl(module);
32127db96d56Sopenharmony_ci}
32137db96d56Sopenharmony_ci
32147db96d56Sopenharmony_ci#endif /* defined(HAVE_GETEUID) */
32157db96d56Sopenharmony_ci
32167db96d56Sopenharmony_ci#if defined(HAVE_GETGID)
32177db96d56Sopenharmony_ci
32187db96d56Sopenharmony_ciPyDoc_STRVAR(os_getgid__doc__,
32197db96d56Sopenharmony_ci"getgid($module, /)\n"
32207db96d56Sopenharmony_ci"--\n"
32217db96d56Sopenharmony_ci"\n"
32227db96d56Sopenharmony_ci"Return the current process\'s group id.");
32237db96d56Sopenharmony_ci
32247db96d56Sopenharmony_ci#define OS_GETGID_METHODDEF    \
32257db96d56Sopenharmony_ci    {"getgid", (PyCFunction)os_getgid, METH_NOARGS, os_getgid__doc__},
32267db96d56Sopenharmony_ci
32277db96d56Sopenharmony_cistatic PyObject *
32287db96d56Sopenharmony_cios_getgid_impl(PyObject *module);
32297db96d56Sopenharmony_ci
32307db96d56Sopenharmony_cistatic PyObject *
32317db96d56Sopenharmony_cios_getgid(PyObject *module, PyObject *Py_UNUSED(ignored))
32327db96d56Sopenharmony_ci{
32337db96d56Sopenharmony_ci    return os_getgid_impl(module);
32347db96d56Sopenharmony_ci}
32357db96d56Sopenharmony_ci
32367db96d56Sopenharmony_ci#endif /* defined(HAVE_GETGID) */
32377db96d56Sopenharmony_ci
32387db96d56Sopenharmony_ci#if defined(HAVE_GETPID)
32397db96d56Sopenharmony_ci
32407db96d56Sopenharmony_ciPyDoc_STRVAR(os_getpid__doc__,
32417db96d56Sopenharmony_ci"getpid($module, /)\n"
32427db96d56Sopenharmony_ci"--\n"
32437db96d56Sopenharmony_ci"\n"
32447db96d56Sopenharmony_ci"Return the current process id.");
32457db96d56Sopenharmony_ci
32467db96d56Sopenharmony_ci#define OS_GETPID_METHODDEF    \
32477db96d56Sopenharmony_ci    {"getpid", (PyCFunction)os_getpid, METH_NOARGS, os_getpid__doc__},
32487db96d56Sopenharmony_ci
32497db96d56Sopenharmony_cistatic PyObject *
32507db96d56Sopenharmony_cios_getpid_impl(PyObject *module);
32517db96d56Sopenharmony_ci
32527db96d56Sopenharmony_cistatic PyObject *
32537db96d56Sopenharmony_cios_getpid(PyObject *module, PyObject *Py_UNUSED(ignored))
32547db96d56Sopenharmony_ci{
32557db96d56Sopenharmony_ci    return os_getpid_impl(module);
32567db96d56Sopenharmony_ci}
32577db96d56Sopenharmony_ci
32587db96d56Sopenharmony_ci#endif /* defined(HAVE_GETPID) */
32597db96d56Sopenharmony_ci
32607db96d56Sopenharmony_ci#if defined(HAVE_GETGROUPLIST) && defined(__APPLE__)
32617db96d56Sopenharmony_ci
32627db96d56Sopenharmony_ciPyDoc_STRVAR(os_getgrouplist__doc__,
32637db96d56Sopenharmony_ci"getgrouplist($module, user, group, /)\n"
32647db96d56Sopenharmony_ci"--\n"
32657db96d56Sopenharmony_ci"\n"
32667db96d56Sopenharmony_ci"Returns a list of groups to which a user belongs.\n"
32677db96d56Sopenharmony_ci"\n"
32687db96d56Sopenharmony_ci"  user\n"
32697db96d56Sopenharmony_ci"    username to lookup\n"
32707db96d56Sopenharmony_ci"  group\n"
32717db96d56Sopenharmony_ci"    base group id of the user");
32727db96d56Sopenharmony_ci
32737db96d56Sopenharmony_ci#define OS_GETGROUPLIST_METHODDEF    \
32747db96d56Sopenharmony_ci    {"getgrouplist", _PyCFunction_CAST(os_getgrouplist), METH_FASTCALL, os_getgrouplist__doc__},
32757db96d56Sopenharmony_ci
32767db96d56Sopenharmony_cistatic PyObject *
32777db96d56Sopenharmony_cios_getgrouplist_impl(PyObject *module, const char *user, int basegid);
32787db96d56Sopenharmony_ci
32797db96d56Sopenharmony_cistatic PyObject *
32807db96d56Sopenharmony_cios_getgrouplist(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
32817db96d56Sopenharmony_ci{
32827db96d56Sopenharmony_ci    PyObject *return_value = NULL;
32837db96d56Sopenharmony_ci    const char *user;
32847db96d56Sopenharmony_ci    int basegid;
32857db96d56Sopenharmony_ci
32867db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("getgrouplist", nargs, 2, 2)) {
32877db96d56Sopenharmony_ci        goto exit;
32887db96d56Sopenharmony_ci    }
32897db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[0])) {
32907db96d56Sopenharmony_ci        _PyArg_BadArgument("getgrouplist", "argument 1", "str", args[0]);
32917db96d56Sopenharmony_ci        goto exit;
32927db96d56Sopenharmony_ci    }
32937db96d56Sopenharmony_ci    Py_ssize_t user_length;
32947db96d56Sopenharmony_ci    user = PyUnicode_AsUTF8AndSize(args[0], &user_length);
32957db96d56Sopenharmony_ci    if (user == NULL) {
32967db96d56Sopenharmony_ci        goto exit;
32977db96d56Sopenharmony_ci    }
32987db96d56Sopenharmony_ci    if (strlen(user) != (size_t)user_length) {
32997db96d56Sopenharmony_ci        PyErr_SetString(PyExc_ValueError, "embedded null character");
33007db96d56Sopenharmony_ci        goto exit;
33017db96d56Sopenharmony_ci    }
33027db96d56Sopenharmony_ci    basegid = _PyLong_AsInt(args[1]);
33037db96d56Sopenharmony_ci    if (basegid == -1 && PyErr_Occurred()) {
33047db96d56Sopenharmony_ci        goto exit;
33057db96d56Sopenharmony_ci    }
33067db96d56Sopenharmony_ci    return_value = os_getgrouplist_impl(module, user, basegid);
33077db96d56Sopenharmony_ci
33087db96d56Sopenharmony_ciexit:
33097db96d56Sopenharmony_ci    return return_value;
33107db96d56Sopenharmony_ci}
33117db96d56Sopenharmony_ci
33127db96d56Sopenharmony_ci#endif /* defined(HAVE_GETGROUPLIST) && defined(__APPLE__) */
33137db96d56Sopenharmony_ci
33147db96d56Sopenharmony_ci#if defined(HAVE_GETGROUPLIST) && !defined(__APPLE__)
33157db96d56Sopenharmony_ci
33167db96d56Sopenharmony_ciPyDoc_STRVAR(os_getgrouplist__doc__,
33177db96d56Sopenharmony_ci"getgrouplist($module, user, group, /)\n"
33187db96d56Sopenharmony_ci"--\n"
33197db96d56Sopenharmony_ci"\n"
33207db96d56Sopenharmony_ci"Returns a list of groups to which a user belongs.\n"
33217db96d56Sopenharmony_ci"\n"
33227db96d56Sopenharmony_ci"  user\n"
33237db96d56Sopenharmony_ci"    username to lookup\n"
33247db96d56Sopenharmony_ci"  group\n"
33257db96d56Sopenharmony_ci"    base group id of the user");
33267db96d56Sopenharmony_ci
33277db96d56Sopenharmony_ci#define OS_GETGROUPLIST_METHODDEF    \
33287db96d56Sopenharmony_ci    {"getgrouplist", _PyCFunction_CAST(os_getgrouplist), METH_FASTCALL, os_getgrouplist__doc__},
33297db96d56Sopenharmony_ci
33307db96d56Sopenharmony_cistatic PyObject *
33317db96d56Sopenharmony_cios_getgrouplist_impl(PyObject *module, const char *user, gid_t basegid);
33327db96d56Sopenharmony_ci
33337db96d56Sopenharmony_cistatic PyObject *
33347db96d56Sopenharmony_cios_getgrouplist(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
33357db96d56Sopenharmony_ci{
33367db96d56Sopenharmony_ci    PyObject *return_value = NULL;
33377db96d56Sopenharmony_ci    const char *user;
33387db96d56Sopenharmony_ci    gid_t basegid;
33397db96d56Sopenharmony_ci
33407db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("getgrouplist", nargs, 2, 2)) {
33417db96d56Sopenharmony_ci        goto exit;
33427db96d56Sopenharmony_ci    }
33437db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[0])) {
33447db96d56Sopenharmony_ci        _PyArg_BadArgument("getgrouplist", "argument 1", "str", args[0]);
33457db96d56Sopenharmony_ci        goto exit;
33467db96d56Sopenharmony_ci    }
33477db96d56Sopenharmony_ci    Py_ssize_t user_length;
33487db96d56Sopenharmony_ci    user = PyUnicode_AsUTF8AndSize(args[0], &user_length);
33497db96d56Sopenharmony_ci    if (user == NULL) {
33507db96d56Sopenharmony_ci        goto exit;
33517db96d56Sopenharmony_ci    }
33527db96d56Sopenharmony_ci    if (strlen(user) != (size_t)user_length) {
33537db96d56Sopenharmony_ci        PyErr_SetString(PyExc_ValueError, "embedded null character");
33547db96d56Sopenharmony_ci        goto exit;
33557db96d56Sopenharmony_ci    }
33567db96d56Sopenharmony_ci    if (!_Py_Gid_Converter(args[1], &basegid)) {
33577db96d56Sopenharmony_ci        goto exit;
33587db96d56Sopenharmony_ci    }
33597db96d56Sopenharmony_ci    return_value = os_getgrouplist_impl(module, user, basegid);
33607db96d56Sopenharmony_ci
33617db96d56Sopenharmony_ciexit:
33627db96d56Sopenharmony_ci    return return_value;
33637db96d56Sopenharmony_ci}
33647db96d56Sopenharmony_ci
33657db96d56Sopenharmony_ci#endif /* defined(HAVE_GETGROUPLIST) && !defined(__APPLE__) */
33667db96d56Sopenharmony_ci
33677db96d56Sopenharmony_ci#if defined(HAVE_GETGROUPS)
33687db96d56Sopenharmony_ci
33697db96d56Sopenharmony_ciPyDoc_STRVAR(os_getgroups__doc__,
33707db96d56Sopenharmony_ci"getgroups($module, /)\n"
33717db96d56Sopenharmony_ci"--\n"
33727db96d56Sopenharmony_ci"\n"
33737db96d56Sopenharmony_ci"Return list of supplemental group IDs for the process.");
33747db96d56Sopenharmony_ci
33757db96d56Sopenharmony_ci#define OS_GETGROUPS_METHODDEF    \
33767db96d56Sopenharmony_ci    {"getgroups", (PyCFunction)os_getgroups, METH_NOARGS, os_getgroups__doc__},
33777db96d56Sopenharmony_ci
33787db96d56Sopenharmony_cistatic PyObject *
33797db96d56Sopenharmony_cios_getgroups_impl(PyObject *module);
33807db96d56Sopenharmony_ci
33817db96d56Sopenharmony_cistatic PyObject *
33827db96d56Sopenharmony_cios_getgroups(PyObject *module, PyObject *Py_UNUSED(ignored))
33837db96d56Sopenharmony_ci{
33847db96d56Sopenharmony_ci    return os_getgroups_impl(module);
33857db96d56Sopenharmony_ci}
33867db96d56Sopenharmony_ci
33877db96d56Sopenharmony_ci#endif /* defined(HAVE_GETGROUPS) */
33887db96d56Sopenharmony_ci
33897db96d56Sopenharmony_ci#if defined(HAVE_INITGROUPS) && defined(__APPLE__)
33907db96d56Sopenharmony_ci
33917db96d56Sopenharmony_ciPyDoc_STRVAR(os_initgroups__doc__,
33927db96d56Sopenharmony_ci"initgroups($module, username, gid, /)\n"
33937db96d56Sopenharmony_ci"--\n"
33947db96d56Sopenharmony_ci"\n"
33957db96d56Sopenharmony_ci"Initialize the group access list.\n"
33967db96d56Sopenharmony_ci"\n"
33977db96d56Sopenharmony_ci"Call the system initgroups() to initialize the group access list with all of\n"
33987db96d56Sopenharmony_ci"the groups of which the specified username is a member, plus the specified\n"
33997db96d56Sopenharmony_ci"group id.");
34007db96d56Sopenharmony_ci
34017db96d56Sopenharmony_ci#define OS_INITGROUPS_METHODDEF    \
34027db96d56Sopenharmony_ci    {"initgroups", _PyCFunction_CAST(os_initgroups), METH_FASTCALL, os_initgroups__doc__},
34037db96d56Sopenharmony_ci
34047db96d56Sopenharmony_cistatic PyObject *
34057db96d56Sopenharmony_cios_initgroups_impl(PyObject *module, PyObject *oname, int gid);
34067db96d56Sopenharmony_ci
34077db96d56Sopenharmony_cistatic PyObject *
34087db96d56Sopenharmony_cios_initgroups(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
34097db96d56Sopenharmony_ci{
34107db96d56Sopenharmony_ci    PyObject *return_value = NULL;
34117db96d56Sopenharmony_ci    PyObject *oname = NULL;
34127db96d56Sopenharmony_ci    int gid;
34137db96d56Sopenharmony_ci
34147db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("initgroups", nargs, 2, 2)) {
34157db96d56Sopenharmony_ci        goto exit;
34167db96d56Sopenharmony_ci    }
34177db96d56Sopenharmony_ci    if (!PyUnicode_FSConverter(args[0], &oname)) {
34187db96d56Sopenharmony_ci        goto exit;
34197db96d56Sopenharmony_ci    }
34207db96d56Sopenharmony_ci    gid = _PyLong_AsInt(args[1]);
34217db96d56Sopenharmony_ci    if (gid == -1 && PyErr_Occurred()) {
34227db96d56Sopenharmony_ci        goto exit;
34237db96d56Sopenharmony_ci    }
34247db96d56Sopenharmony_ci    return_value = os_initgroups_impl(module, oname, gid);
34257db96d56Sopenharmony_ci
34267db96d56Sopenharmony_ciexit:
34277db96d56Sopenharmony_ci    /* Cleanup for oname */
34287db96d56Sopenharmony_ci    Py_XDECREF(oname);
34297db96d56Sopenharmony_ci
34307db96d56Sopenharmony_ci    return return_value;
34317db96d56Sopenharmony_ci}
34327db96d56Sopenharmony_ci
34337db96d56Sopenharmony_ci#endif /* defined(HAVE_INITGROUPS) && defined(__APPLE__) */
34347db96d56Sopenharmony_ci
34357db96d56Sopenharmony_ci#if defined(HAVE_INITGROUPS) && !defined(__APPLE__)
34367db96d56Sopenharmony_ci
34377db96d56Sopenharmony_ciPyDoc_STRVAR(os_initgroups__doc__,
34387db96d56Sopenharmony_ci"initgroups($module, username, gid, /)\n"
34397db96d56Sopenharmony_ci"--\n"
34407db96d56Sopenharmony_ci"\n"
34417db96d56Sopenharmony_ci"Initialize the group access list.\n"
34427db96d56Sopenharmony_ci"\n"
34437db96d56Sopenharmony_ci"Call the system initgroups() to initialize the group access list with all of\n"
34447db96d56Sopenharmony_ci"the groups of which the specified username is a member, plus the specified\n"
34457db96d56Sopenharmony_ci"group id.");
34467db96d56Sopenharmony_ci
34477db96d56Sopenharmony_ci#define OS_INITGROUPS_METHODDEF    \
34487db96d56Sopenharmony_ci    {"initgroups", _PyCFunction_CAST(os_initgroups), METH_FASTCALL, os_initgroups__doc__},
34497db96d56Sopenharmony_ci
34507db96d56Sopenharmony_cistatic PyObject *
34517db96d56Sopenharmony_cios_initgroups_impl(PyObject *module, PyObject *oname, gid_t gid);
34527db96d56Sopenharmony_ci
34537db96d56Sopenharmony_cistatic PyObject *
34547db96d56Sopenharmony_cios_initgroups(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
34557db96d56Sopenharmony_ci{
34567db96d56Sopenharmony_ci    PyObject *return_value = NULL;
34577db96d56Sopenharmony_ci    PyObject *oname = NULL;
34587db96d56Sopenharmony_ci    gid_t gid;
34597db96d56Sopenharmony_ci
34607db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("initgroups", nargs, 2, 2)) {
34617db96d56Sopenharmony_ci        goto exit;
34627db96d56Sopenharmony_ci    }
34637db96d56Sopenharmony_ci    if (!PyUnicode_FSConverter(args[0], &oname)) {
34647db96d56Sopenharmony_ci        goto exit;
34657db96d56Sopenharmony_ci    }
34667db96d56Sopenharmony_ci    if (!_Py_Gid_Converter(args[1], &gid)) {
34677db96d56Sopenharmony_ci        goto exit;
34687db96d56Sopenharmony_ci    }
34697db96d56Sopenharmony_ci    return_value = os_initgroups_impl(module, oname, gid);
34707db96d56Sopenharmony_ci
34717db96d56Sopenharmony_ciexit:
34727db96d56Sopenharmony_ci    /* Cleanup for oname */
34737db96d56Sopenharmony_ci    Py_XDECREF(oname);
34747db96d56Sopenharmony_ci
34757db96d56Sopenharmony_ci    return return_value;
34767db96d56Sopenharmony_ci}
34777db96d56Sopenharmony_ci
34787db96d56Sopenharmony_ci#endif /* defined(HAVE_INITGROUPS) && !defined(__APPLE__) */
34797db96d56Sopenharmony_ci
34807db96d56Sopenharmony_ci#if defined(HAVE_GETPGID)
34817db96d56Sopenharmony_ci
34827db96d56Sopenharmony_ciPyDoc_STRVAR(os_getpgid__doc__,
34837db96d56Sopenharmony_ci"getpgid($module, /, pid)\n"
34847db96d56Sopenharmony_ci"--\n"
34857db96d56Sopenharmony_ci"\n"
34867db96d56Sopenharmony_ci"Call the system call getpgid(), and return the result.");
34877db96d56Sopenharmony_ci
34887db96d56Sopenharmony_ci#define OS_GETPGID_METHODDEF    \
34897db96d56Sopenharmony_ci    {"getpgid", _PyCFunction_CAST(os_getpgid), METH_FASTCALL|METH_KEYWORDS, os_getpgid__doc__},
34907db96d56Sopenharmony_ci
34917db96d56Sopenharmony_cistatic PyObject *
34927db96d56Sopenharmony_cios_getpgid_impl(PyObject *module, pid_t pid);
34937db96d56Sopenharmony_ci
34947db96d56Sopenharmony_cistatic PyObject *
34957db96d56Sopenharmony_cios_getpgid(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
34967db96d56Sopenharmony_ci{
34977db96d56Sopenharmony_ci    PyObject *return_value = NULL;
34987db96d56Sopenharmony_ci    static const char * const _keywords[] = {"pid", NULL};
34997db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {"" _Py_PARSE_PID ":getpgid", _keywords, 0};
35007db96d56Sopenharmony_ci    pid_t pid;
35017db96d56Sopenharmony_ci
35027db96d56Sopenharmony_ci    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
35037db96d56Sopenharmony_ci        &pid)) {
35047db96d56Sopenharmony_ci        goto exit;
35057db96d56Sopenharmony_ci    }
35067db96d56Sopenharmony_ci    return_value = os_getpgid_impl(module, pid);
35077db96d56Sopenharmony_ci
35087db96d56Sopenharmony_ciexit:
35097db96d56Sopenharmony_ci    return return_value;
35107db96d56Sopenharmony_ci}
35117db96d56Sopenharmony_ci
35127db96d56Sopenharmony_ci#endif /* defined(HAVE_GETPGID) */
35137db96d56Sopenharmony_ci
35147db96d56Sopenharmony_ci#if defined(HAVE_GETPGRP)
35157db96d56Sopenharmony_ci
35167db96d56Sopenharmony_ciPyDoc_STRVAR(os_getpgrp__doc__,
35177db96d56Sopenharmony_ci"getpgrp($module, /)\n"
35187db96d56Sopenharmony_ci"--\n"
35197db96d56Sopenharmony_ci"\n"
35207db96d56Sopenharmony_ci"Return the current process group id.");
35217db96d56Sopenharmony_ci
35227db96d56Sopenharmony_ci#define OS_GETPGRP_METHODDEF    \
35237db96d56Sopenharmony_ci    {"getpgrp", (PyCFunction)os_getpgrp, METH_NOARGS, os_getpgrp__doc__},
35247db96d56Sopenharmony_ci
35257db96d56Sopenharmony_cistatic PyObject *
35267db96d56Sopenharmony_cios_getpgrp_impl(PyObject *module);
35277db96d56Sopenharmony_ci
35287db96d56Sopenharmony_cistatic PyObject *
35297db96d56Sopenharmony_cios_getpgrp(PyObject *module, PyObject *Py_UNUSED(ignored))
35307db96d56Sopenharmony_ci{
35317db96d56Sopenharmony_ci    return os_getpgrp_impl(module);
35327db96d56Sopenharmony_ci}
35337db96d56Sopenharmony_ci
35347db96d56Sopenharmony_ci#endif /* defined(HAVE_GETPGRP) */
35357db96d56Sopenharmony_ci
35367db96d56Sopenharmony_ci#if defined(HAVE_SETPGRP)
35377db96d56Sopenharmony_ci
35387db96d56Sopenharmony_ciPyDoc_STRVAR(os_setpgrp__doc__,
35397db96d56Sopenharmony_ci"setpgrp($module, /)\n"
35407db96d56Sopenharmony_ci"--\n"
35417db96d56Sopenharmony_ci"\n"
35427db96d56Sopenharmony_ci"Make the current process the leader of its process group.");
35437db96d56Sopenharmony_ci
35447db96d56Sopenharmony_ci#define OS_SETPGRP_METHODDEF    \
35457db96d56Sopenharmony_ci    {"setpgrp", (PyCFunction)os_setpgrp, METH_NOARGS, os_setpgrp__doc__},
35467db96d56Sopenharmony_ci
35477db96d56Sopenharmony_cistatic PyObject *
35487db96d56Sopenharmony_cios_setpgrp_impl(PyObject *module);
35497db96d56Sopenharmony_ci
35507db96d56Sopenharmony_cistatic PyObject *
35517db96d56Sopenharmony_cios_setpgrp(PyObject *module, PyObject *Py_UNUSED(ignored))
35527db96d56Sopenharmony_ci{
35537db96d56Sopenharmony_ci    return os_setpgrp_impl(module);
35547db96d56Sopenharmony_ci}
35557db96d56Sopenharmony_ci
35567db96d56Sopenharmony_ci#endif /* defined(HAVE_SETPGRP) */
35577db96d56Sopenharmony_ci
35587db96d56Sopenharmony_ci#if defined(HAVE_GETPPID)
35597db96d56Sopenharmony_ci
35607db96d56Sopenharmony_ciPyDoc_STRVAR(os_getppid__doc__,
35617db96d56Sopenharmony_ci"getppid($module, /)\n"
35627db96d56Sopenharmony_ci"--\n"
35637db96d56Sopenharmony_ci"\n"
35647db96d56Sopenharmony_ci"Return the parent\'s process id.\n"
35657db96d56Sopenharmony_ci"\n"
35667db96d56Sopenharmony_ci"If the parent process has already exited, Windows machines will still\n"
35677db96d56Sopenharmony_ci"return its id; others systems will return the id of the \'init\' process (1).");
35687db96d56Sopenharmony_ci
35697db96d56Sopenharmony_ci#define OS_GETPPID_METHODDEF    \
35707db96d56Sopenharmony_ci    {"getppid", (PyCFunction)os_getppid, METH_NOARGS, os_getppid__doc__},
35717db96d56Sopenharmony_ci
35727db96d56Sopenharmony_cistatic PyObject *
35737db96d56Sopenharmony_cios_getppid_impl(PyObject *module);
35747db96d56Sopenharmony_ci
35757db96d56Sopenharmony_cistatic PyObject *
35767db96d56Sopenharmony_cios_getppid(PyObject *module, PyObject *Py_UNUSED(ignored))
35777db96d56Sopenharmony_ci{
35787db96d56Sopenharmony_ci    return os_getppid_impl(module);
35797db96d56Sopenharmony_ci}
35807db96d56Sopenharmony_ci
35817db96d56Sopenharmony_ci#endif /* defined(HAVE_GETPPID) */
35827db96d56Sopenharmony_ci
35837db96d56Sopenharmony_ci#if defined(HAVE_GETLOGIN)
35847db96d56Sopenharmony_ci
35857db96d56Sopenharmony_ciPyDoc_STRVAR(os_getlogin__doc__,
35867db96d56Sopenharmony_ci"getlogin($module, /)\n"
35877db96d56Sopenharmony_ci"--\n"
35887db96d56Sopenharmony_ci"\n"
35897db96d56Sopenharmony_ci"Return the actual login name.");
35907db96d56Sopenharmony_ci
35917db96d56Sopenharmony_ci#define OS_GETLOGIN_METHODDEF    \
35927db96d56Sopenharmony_ci    {"getlogin", (PyCFunction)os_getlogin, METH_NOARGS, os_getlogin__doc__},
35937db96d56Sopenharmony_ci
35947db96d56Sopenharmony_cistatic PyObject *
35957db96d56Sopenharmony_cios_getlogin_impl(PyObject *module);
35967db96d56Sopenharmony_ci
35977db96d56Sopenharmony_cistatic PyObject *
35987db96d56Sopenharmony_cios_getlogin(PyObject *module, PyObject *Py_UNUSED(ignored))
35997db96d56Sopenharmony_ci{
36007db96d56Sopenharmony_ci    return os_getlogin_impl(module);
36017db96d56Sopenharmony_ci}
36027db96d56Sopenharmony_ci
36037db96d56Sopenharmony_ci#endif /* defined(HAVE_GETLOGIN) */
36047db96d56Sopenharmony_ci
36057db96d56Sopenharmony_ci#if defined(HAVE_GETUID)
36067db96d56Sopenharmony_ci
36077db96d56Sopenharmony_ciPyDoc_STRVAR(os_getuid__doc__,
36087db96d56Sopenharmony_ci"getuid($module, /)\n"
36097db96d56Sopenharmony_ci"--\n"
36107db96d56Sopenharmony_ci"\n"
36117db96d56Sopenharmony_ci"Return the current process\'s user id.");
36127db96d56Sopenharmony_ci
36137db96d56Sopenharmony_ci#define OS_GETUID_METHODDEF    \
36147db96d56Sopenharmony_ci    {"getuid", (PyCFunction)os_getuid, METH_NOARGS, os_getuid__doc__},
36157db96d56Sopenharmony_ci
36167db96d56Sopenharmony_cistatic PyObject *
36177db96d56Sopenharmony_cios_getuid_impl(PyObject *module);
36187db96d56Sopenharmony_ci
36197db96d56Sopenharmony_cistatic PyObject *
36207db96d56Sopenharmony_cios_getuid(PyObject *module, PyObject *Py_UNUSED(ignored))
36217db96d56Sopenharmony_ci{
36227db96d56Sopenharmony_ci    return os_getuid_impl(module);
36237db96d56Sopenharmony_ci}
36247db96d56Sopenharmony_ci
36257db96d56Sopenharmony_ci#endif /* defined(HAVE_GETUID) */
36267db96d56Sopenharmony_ci
36277db96d56Sopenharmony_ci#if defined(HAVE_KILL)
36287db96d56Sopenharmony_ci
36297db96d56Sopenharmony_ciPyDoc_STRVAR(os_kill__doc__,
36307db96d56Sopenharmony_ci"kill($module, pid, signal, /)\n"
36317db96d56Sopenharmony_ci"--\n"
36327db96d56Sopenharmony_ci"\n"
36337db96d56Sopenharmony_ci"Kill a process with a signal.");
36347db96d56Sopenharmony_ci
36357db96d56Sopenharmony_ci#define OS_KILL_METHODDEF    \
36367db96d56Sopenharmony_ci    {"kill", _PyCFunction_CAST(os_kill), METH_FASTCALL, os_kill__doc__},
36377db96d56Sopenharmony_ci
36387db96d56Sopenharmony_cistatic PyObject *
36397db96d56Sopenharmony_cios_kill_impl(PyObject *module, pid_t pid, Py_ssize_t signal);
36407db96d56Sopenharmony_ci
36417db96d56Sopenharmony_cistatic PyObject *
36427db96d56Sopenharmony_cios_kill(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
36437db96d56Sopenharmony_ci{
36447db96d56Sopenharmony_ci    PyObject *return_value = NULL;
36457db96d56Sopenharmony_ci    pid_t pid;
36467db96d56Sopenharmony_ci    Py_ssize_t signal;
36477db96d56Sopenharmony_ci
36487db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "n:kill",
36497db96d56Sopenharmony_ci        &pid, &signal)) {
36507db96d56Sopenharmony_ci        goto exit;
36517db96d56Sopenharmony_ci    }
36527db96d56Sopenharmony_ci    return_value = os_kill_impl(module, pid, signal);
36537db96d56Sopenharmony_ci
36547db96d56Sopenharmony_ciexit:
36557db96d56Sopenharmony_ci    return return_value;
36567db96d56Sopenharmony_ci}
36577db96d56Sopenharmony_ci
36587db96d56Sopenharmony_ci#endif /* defined(HAVE_KILL) */
36597db96d56Sopenharmony_ci
36607db96d56Sopenharmony_ci#if defined(HAVE_KILLPG)
36617db96d56Sopenharmony_ci
36627db96d56Sopenharmony_ciPyDoc_STRVAR(os_killpg__doc__,
36637db96d56Sopenharmony_ci"killpg($module, pgid, signal, /)\n"
36647db96d56Sopenharmony_ci"--\n"
36657db96d56Sopenharmony_ci"\n"
36667db96d56Sopenharmony_ci"Kill a process group with a signal.");
36677db96d56Sopenharmony_ci
36687db96d56Sopenharmony_ci#define OS_KILLPG_METHODDEF    \
36697db96d56Sopenharmony_ci    {"killpg", _PyCFunction_CAST(os_killpg), METH_FASTCALL, os_killpg__doc__},
36707db96d56Sopenharmony_ci
36717db96d56Sopenharmony_cistatic PyObject *
36727db96d56Sopenharmony_cios_killpg_impl(PyObject *module, pid_t pgid, int signal);
36737db96d56Sopenharmony_ci
36747db96d56Sopenharmony_cistatic PyObject *
36757db96d56Sopenharmony_cios_killpg(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
36767db96d56Sopenharmony_ci{
36777db96d56Sopenharmony_ci    PyObject *return_value = NULL;
36787db96d56Sopenharmony_ci    pid_t pgid;
36797db96d56Sopenharmony_ci    int signal;
36807db96d56Sopenharmony_ci
36817db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "i:killpg",
36827db96d56Sopenharmony_ci        &pgid, &signal)) {
36837db96d56Sopenharmony_ci        goto exit;
36847db96d56Sopenharmony_ci    }
36857db96d56Sopenharmony_ci    return_value = os_killpg_impl(module, pgid, signal);
36867db96d56Sopenharmony_ci
36877db96d56Sopenharmony_ciexit:
36887db96d56Sopenharmony_ci    return return_value;
36897db96d56Sopenharmony_ci}
36907db96d56Sopenharmony_ci
36917db96d56Sopenharmony_ci#endif /* defined(HAVE_KILLPG) */
36927db96d56Sopenharmony_ci
36937db96d56Sopenharmony_ci#if defined(HAVE_PLOCK)
36947db96d56Sopenharmony_ci
36957db96d56Sopenharmony_ciPyDoc_STRVAR(os_plock__doc__,
36967db96d56Sopenharmony_ci"plock($module, op, /)\n"
36977db96d56Sopenharmony_ci"--\n"
36987db96d56Sopenharmony_ci"\n"
36997db96d56Sopenharmony_ci"Lock program segments into memory.\");");
37007db96d56Sopenharmony_ci
37017db96d56Sopenharmony_ci#define OS_PLOCK_METHODDEF    \
37027db96d56Sopenharmony_ci    {"plock", (PyCFunction)os_plock, METH_O, os_plock__doc__},
37037db96d56Sopenharmony_ci
37047db96d56Sopenharmony_cistatic PyObject *
37057db96d56Sopenharmony_cios_plock_impl(PyObject *module, int op);
37067db96d56Sopenharmony_ci
37077db96d56Sopenharmony_cistatic PyObject *
37087db96d56Sopenharmony_cios_plock(PyObject *module, PyObject *arg)
37097db96d56Sopenharmony_ci{
37107db96d56Sopenharmony_ci    PyObject *return_value = NULL;
37117db96d56Sopenharmony_ci    int op;
37127db96d56Sopenharmony_ci
37137db96d56Sopenharmony_ci    op = _PyLong_AsInt(arg);
37147db96d56Sopenharmony_ci    if (op == -1 && PyErr_Occurred()) {
37157db96d56Sopenharmony_ci        goto exit;
37167db96d56Sopenharmony_ci    }
37177db96d56Sopenharmony_ci    return_value = os_plock_impl(module, op);
37187db96d56Sopenharmony_ci
37197db96d56Sopenharmony_ciexit:
37207db96d56Sopenharmony_ci    return return_value;
37217db96d56Sopenharmony_ci}
37227db96d56Sopenharmony_ci
37237db96d56Sopenharmony_ci#endif /* defined(HAVE_PLOCK) */
37247db96d56Sopenharmony_ci
37257db96d56Sopenharmony_ci#if defined(HAVE_SETUID)
37267db96d56Sopenharmony_ci
37277db96d56Sopenharmony_ciPyDoc_STRVAR(os_setuid__doc__,
37287db96d56Sopenharmony_ci"setuid($module, uid, /)\n"
37297db96d56Sopenharmony_ci"--\n"
37307db96d56Sopenharmony_ci"\n"
37317db96d56Sopenharmony_ci"Set the current process\'s user id.");
37327db96d56Sopenharmony_ci
37337db96d56Sopenharmony_ci#define OS_SETUID_METHODDEF    \
37347db96d56Sopenharmony_ci    {"setuid", (PyCFunction)os_setuid, METH_O, os_setuid__doc__},
37357db96d56Sopenharmony_ci
37367db96d56Sopenharmony_cistatic PyObject *
37377db96d56Sopenharmony_cios_setuid_impl(PyObject *module, uid_t uid);
37387db96d56Sopenharmony_ci
37397db96d56Sopenharmony_cistatic PyObject *
37407db96d56Sopenharmony_cios_setuid(PyObject *module, PyObject *arg)
37417db96d56Sopenharmony_ci{
37427db96d56Sopenharmony_ci    PyObject *return_value = NULL;
37437db96d56Sopenharmony_ci    uid_t uid;
37447db96d56Sopenharmony_ci
37457db96d56Sopenharmony_ci    if (!_Py_Uid_Converter(arg, &uid)) {
37467db96d56Sopenharmony_ci        goto exit;
37477db96d56Sopenharmony_ci    }
37487db96d56Sopenharmony_ci    return_value = os_setuid_impl(module, uid);
37497db96d56Sopenharmony_ci
37507db96d56Sopenharmony_ciexit:
37517db96d56Sopenharmony_ci    return return_value;
37527db96d56Sopenharmony_ci}
37537db96d56Sopenharmony_ci
37547db96d56Sopenharmony_ci#endif /* defined(HAVE_SETUID) */
37557db96d56Sopenharmony_ci
37567db96d56Sopenharmony_ci#if defined(HAVE_SETEUID)
37577db96d56Sopenharmony_ci
37587db96d56Sopenharmony_ciPyDoc_STRVAR(os_seteuid__doc__,
37597db96d56Sopenharmony_ci"seteuid($module, euid, /)\n"
37607db96d56Sopenharmony_ci"--\n"
37617db96d56Sopenharmony_ci"\n"
37627db96d56Sopenharmony_ci"Set the current process\'s effective user id.");
37637db96d56Sopenharmony_ci
37647db96d56Sopenharmony_ci#define OS_SETEUID_METHODDEF    \
37657db96d56Sopenharmony_ci    {"seteuid", (PyCFunction)os_seteuid, METH_O, os_seteuid__doc__},
37667db96d56Sopenharmony_ci
37677db96d56Sopenharmony_cistatic PyObject *
37687db96d56Sopenharmony_cios_seteuid_impl(PyObject *module, uid_t euid);
37697db96d56Sopenharmony_ci
37707db96d56Sopenharmony_cistatic PyObject *
37717db96d56Sopenharmony_cios_seteuid(PyObject *module, PyObject *arg)
37727db96d56Sopenharmony_ci{
37737db96d56Sopenharmony_ci    PyObject *return_value = NULL;
37747db96d56Sopenharmony_ci    uid_t euid;
37757db96d56Sopenharmony_ci
37767db96d56Sopenharmony_ci    if (!_Py_Uid_Converter(arg, &euid)) {
37777db96d56Sopenharmony_ci        goto exit;
37787db96d56Sopenharmony_ci    }
37797db96d56Sopenharmony_ci    return_value = os_seteuid_impl(module, euid);
37807db96d56Sopenharmony_ci
37817db96d56Sopenharmony_ciexit:
37827db96d56Sopenharmony_ci    return return_value;
37837db96d56Sopenharmony_ci}
37847db96d56Sopenharmony_ci
37857db96d56Sopenharmony_ci#endif /* defined(HAVE_SETEUID) */
37867db96d56Sopenharmony_ci
37877db96d56Sopenharmony_ci#if defined(HAVE_SETEGID)
37887db96d56Sopenharmony_ci
37897db96d56Sopenharmony_ciPyDoc_STRVAR(os_setegid__doc__,
37907db96d56Sopenharmony_ci"setegid($module, egid, /)\n"
37917db96d56Sopenharmony_ci"--\n"
37927db96d56Sopenharmony_ci"\n"
37937db96d56Sopenharmony_ci"Set the current process\'s effective group id.");
37947db96d56Sopenharmony_ci
37957db96d56Sopenharmony_ci#define OS_SETEGID_METHODDEF    \
37967db96d56Sopenharmony_ci    {"setegid", (PyCFunction)os_setegid, METH_O, os_setegid__doc__},
37977db96d56Sopenharmony_ci
37987db96d56Sopenharmony_cistatic PyObject *
37997db96d56Sopenharmony_cios_setegid_impl(PyObject *module, gid_t egid);
38007db96d56Sopenharmony_ci
38017db96d56Sopenharmony_cistatic PyObject *
38027db96d56Sopenharmony_cios_setegid(PyObject *module, PyObject *arg)
38037db96d56Sopenharmony_ci{
38047db96d56Sopenharmony_ci    PyObject *return_value = NULL;
38057db96d56Sopenharmony_ci    gid_t egid;
38067db96d56Sopenharmony_ci
38077db96d56Sopenharmony_ci    if (!_Py_Gid_Converter(arg, &egid)) {
38087db96d56Sopenharmony_ci        goto exit;
38097db96d56Sopenharmony_ci    }
38107db96d56Sopenharmony_ci    return_value = os_setegid_impl(module, egid);
38117db96d56Sopenharmony_ci
38127db96d56Sopenharmony_ciexit:
38137db96d56Sopenharmony_ci    return return_value;
38147db96d56Sopenharmony_ci}
38157db96d56Sopenharmony_ci
38167db96d56Sopenharmony_ci#endif /* defined(HAVE_SETEGID) */
38177db96d56Sopenharmony_ci
38187db96d56Sopenharmony_ci#if defined(HAVE_SETREUID)
38197db96d56Sopenharmony_ci
38207db96d56Sopenharmony_ciPyDoc_STRVAR(os_setreuid__doc__,
38217db96d56Sopenharmony_ci"setreuid($module, ruid, euid, /)\n"
38227db96d56Sopenharmony_ci"--\n"
38237db96d56Sopenharmony_ci"\n"
38247db96d56Sopenharmony_ci"Set the current process\'s real and effective user ids.");
38257db96d56Sopenharmony_ci
38267db96d56Sopenharmony_ci#define OS_SETREUID_METHODDEF    \
38277db96d56Sopenharmony_ci    {"setreuid", _PyCFunction_CAST(os_setreuid), METH_FASTCALL, os_setreuid__doc__},
38287db96d56Sopenharmony_ci
38297db96d56Sopenharmony_cistatic PyObject *
38307db96d56Sopenharmony_cios_setreuid_impl(PyObject *module, uid_t ruid, uid_t euid);
38317db96d56Sopenharmony_ci
38327db96d56Sopenharmony_cistatic PyObject *
38337db96d56Sopenharmony_cios_setreuid(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
38347db96d56Sopenharmony_ci{
38357db96d56Sopenharmony_ci    PyObject *return_value = NULL;
38367db96d56Sopenharmony_ci    uid_t ruid;
38377db96d56Sopenharmony_ci    uid_t euid;
38387db96d56Sopenharmony_ci
38397db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("setreuid", nargs, 2, 2)) {
38407db96d56Sopenharmony_ci        goto exit;
38417db96d56Sopenharmony_ci    }
38427db96d56Sopenharmony_ci    if (!_Py_Uid_Converter(args[0], &ruid)) {
38437db96d56Sopenharmony_ci        goto exit;
38447db96d56Sopenharmony_ci    }
38457db96d56Sopenharmony_ci    if (!_Py_Uid_Converter(args[1], &euid)) {
38467db96d56Sopenharmony_ci        goto exit;
38477db96d56Sopenharmony_ci    }
38487db96d56Sopenharmony_ci    return_value = os_setreuid_impl(module, ruid, euid);
38497db96d56Sopenharmony_ci
38507db96d56Sopenharmony_ciexit:
38517db96d56Sopenharmony_ci    return return_value;
38527db96d56Sopenharmony_ci}
38537db96d56Sopenharmony_ci
38547db96d56Sopenharmony_ci#endif /* defined(HAVE_SETREUID) */
38557db96d56Sopenharmony_ci
38567db96d56Sopenharmony_ci#if defined(HAVE_SETREGID)
38577db96d56Sopenharmony_ci
38587db96d56Sopenharmony_ciPyDoc_STRVAR(os_setregid__doc__,
38597db96d56Sopenharmony_ci"setregid($module, rgid, egid, /)\n"
38607db96d56Sopenharmony_ci"--\n"
38617db96d56Sopenharmony_ci"\n"
38627db96d56Sopenharmony_ci"Set the current process\'s real and effective group ids.");
38637db96d56Sopenharmony_ci
38647db96d56Sopenharmony_ci#define OS_SETREGID_METHODDEF    \
38657db96d56Sopenharmony_ci    {"setregid", _PyCFunction_CAST(os_setregid), METH_FASTCALL, os_setregid__doc__},
38667db96d56Sopenharmony_ci
38677db96d56Sopenharmony_cistatic PyObject *
38687db96d56Sopenharmony_cios_setregid_impl(PyObject *module, gid_t rgid, gid_t egid);
38697db96d56Sopenharmony_ci
38707db96d56Sopenharmony_cistatic PyObject *
38717db96d56Sopenharmony_cios_setregid(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
38727db96d56Sopenharmony_ci{
38737db96d56Sopenharmony_ci    PyObject *return_value = NULL;
38747db96d56Sopenharmony_ci    gid_t rgid;
38757db96d56Sopenharmony_ci    gid_t egid;
38767db96d56Sopenharmony_ci
38777db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("setregid", nargs, 2, 2)) {
38787db96d56Sopenharmony_ci        goto exit;
38797db96d56Sopenharmony_ci    }
38807db96d56Sopenharmony_ci    if (!_Py_Gid_Converter(args[0], &rgid)) {
38817db96d56Sopenharmony_ci        goto exit;
38827db96d56Sopenharmony_ci    }
38837db96d56Sopenharmony_ci    if (!_Py_Gid_Converter(args[1], &egid)) {
38847db96d56Sopenharmony_ci        goto exit;
38857db96d56Sopenharmony_ci    }
38867db96d56Sopenharmony_ci    return_value = os_setregid_impl(module, rgid, egid);
38877db96d56Sopenharmony_ci
38887db96d56Sopenharmony_ciexit:
38897db96d56Sopenharmony_ci    return return_value;
38907db96d56Sopenharmony_ci}
38917db96d56Sopenharmony_ci
38927db96d56Sopenharmony_ci#endif /* defined(HAVE_SETREGID) */
38937db96d56Sopenharmony_ci
38947db96d56Sopenharmony_ci#if defined(HAVE_SETGID)
38957db96d56Sopenharmony_ci
38967db96d56Sopenharmony_ciPyDoc_STRVAR(os_setgid__doc__,
38977db96d56Sopenharmony_ci"setgid($module, gid, /)\n"
38987db96d56Sopenharmony_ci"--\n"
38997db96d56Sopenharmony_ci"\n"
39007db96d56Sopenharmony_ci"Set the current process\'s group id.");
39017db96d56Sopenharmony_ci
39027db96d56Sopenharmony_ci#define OS_SETGID_METHODDEF    \
39037db96d56Sopenharmony_ci    {"setgid", (PyCFunction)os_setgid, METH_O, os_setgid__doc__},
39047db96d56Sopenharmony_ci
39057db96d56Sopenharmony_cistatic PyObject *
39067db96d56Sopenharmony_cios_setgid_impl(PyObject *module, gid_t gid);
39077db96d56Sopenharmony_ci
39087db96d56Sopenharmony_cistatic PyObject *
39097db96d56Sopenharmony_cios_setgid(PyObject *module, PyObject *arg)
39107db96d56Sopenharmony_ci{
39117db96d56Sopenharmony_ci    PyObject *return_value = NULL;
39127db96d56Sopenharmony_ci    gid_t gid;
39137db96d56Sopenharmony_ci
39147db96d56Sopenharmony_ci    if (!_Py_Gid_Converter(arg, &gid)) {
39157db96d56Sopenharmony_ci        goto exit;
39167db96d56Sopenharmony_ci    }
39177db96d56Sopenharmony_ci    return_value = os_setgid_impl(module, gid);
39187db96d56Sopenharmony_ci
39197db96d56Sopenharmony_ciexit:
39207db96d56Sopenharmony_ci    return return_value;
39217db96d56Sopenharmony_ci}
39227db96d56Sopenharmony_ci
39237db96d56Sopenharmony_ci#endif /* defined(HAVE_SETGID) */
39247db96d56Sopenharmony_ci
39257db96d56Sopenharmony_ci#if defined(HAVE_SETGROUPS)
39267db96d56Sopenharmony_ci
39277db96d56Sopenharmony_ciPyDoc_STRVAR(os_setgroups__doc__,
39287db96d56Sopenharmony_ci"setgroups($module, groups, /)\n"
39297db96d56Sopenharmony_ci"--\n"
39307db96d56Sopenharmony_ci"\n"
39317db96d56Sopenharmony_ci"Set the groups of the current process to list.");
39327db96d56Sopenharmony_ci
39337db96d56Sopenharmony_ci#define OS_SETGROUPS_METHODDEF    \
39347db96d56Sopenharmony_ci    {"setgroups", (PyCFunction)os_setgroups, METH_O, os_setgroups__doc__},
39357db96d56Sopenharmony_ci
39367db96d56Sopenharmony_ci#endif /* defined(HAVE_SETGROUPS) */
39377db96d56Sopenharmony_ci
39387db96d56Sopenharmony_ci#if defined(HAVE_WAIT3)
39397db96d56Sopenharmony_ci
39407db96d56Sopenharmony_ciPyDoc_STRVAR(os_wait3__doc__,
39417db96d56Sopenharmony_ci"wait3($module, /, options)\n"
39427db96d56Sopenharmony_ci"--\n"
39437db96d56Sopenharmony_ci"\n"
39447db96d56Sopenharmony_ci"Wait for completion of a child process.\n"
39457db96d56Sopenharmony_ci"\n"
39467db96d56Sopenharmony_ci"Returns a tuple of information about the child process:\n"
39477db96d56Sopenharmony_ci"  (pid, status, rusage)");
39487db96d56Sopenharmony_ci
39497db96d56Sopenharmony_ci#define OS_WAIT3_METHODDEF    \
39507db96d56Sopenharmony_ci    {"wait3", _PyCFunction_CAST(os_wait3), METH_FASTCALL|METH_KEYWORDS, os_wait3__doc__},
39517db96d56Sopenharmony_ci
39527db96d56Sopenharmony_cistatic PyObject *
39537db96d56Sopenharmony_cios_wait3_impl(PyObject *module, int options);
39547db96d56Sopenharmony_ci
39557db96d56Sopenharmony_cistatic PyObject *
39567db96d56Sopenharmony_cios_wait3(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
39577db96d56Sopenharmony_ci{
39587db96d56Sopenharmony_ci    PyObject *return_value = NULL;
39597db96d56Sopenharmony_ci    static const char * const _keywords[] = {"options", NULL};
39607db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "wait3", 0};
39617db96d56Sopenharmony_ci    PyObject *argsbuf[1];
39627db96d56Sopenharmony_ci    int options;
39637db96d56Sopenharmony_ci
39647db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
39657db96d56Sopenharmony_ci    if (!args) {
39667db96d56Sopenharmony_ci        goto exit;
39677db96d56Sopenharmony_ci    }
39687db96d56Sopenharmony_ci    options = _PyLong_AsInt(args[0]);
39697db96d56Sopenharmony_ci    if (options == -1 && PyErr_Occurred()) {
39707db96d56Sopenharmony_ci        goto exit;
39717db96d56Sopenharmony_ci    }
39727db96d56Sopenharmony_ci    return_value = os_wait3_impl(module, options);
39737db96d56Sopenharmony_ci
39747db96d56Sopenharmony_ciexit:
39757db96d56Sopenharmony_ci    return return_value;
39767db96d56Sopenharmony_ci}
39777db96d56Sopenharmony_ci
39787db96d56Sopenharmony_ci#endif /* defined(HAVE_WAIT3) */
39797db96d56Sopenharmony_ci
39807db96d56Sopenharmony_ci#if defined(HAVE_WAIT4)
39817db96d56Sopenharmony_ci
39827db96d56Sopenharmony_ciPyDoc_STRVAR(os_wait4__doc__,
39837db96d56Sopenharmony_ci"wait4($module, /, pid, options)\n"
39847db96d56Sopenharmony_ci"--\n"
39857db96d56Sopenharmony_ci"\n"
39867db96d56Sopenharmony_ci"Wait for completion of a specific child process.\n"
39877db96d56Sopenharmony_ci"\n"
39887db96d56Sopenharmony_ci"Returns a tuple of information about the child process:\n"
39897db96d56Sopenharmony_ci"  (pid, status, rusage)");
39907db96d56Sopenharmony_ci
39917db96d56Sopenharmony_ci#define OS_WAIT4_METHODDEF    \
39927db96d56Sopenharmony_ci    {"wait4", _PyCFunction_CAST(os_wait4), METH_FASTCALL|METH_KEYWORDS, os_wait4__doc__},
39937db96d56Sopenharmony_ci
39947db96d56Sopenharmony_cistatic PyObject *
39957db96d56Sopenharmony_cios_wait4_impl(PyObject *module, pid_t pid, int options);
39967db96d56Sopenharmony_ci
39977db96d56Sopenharmony_cistatic PyObject *
39987db96d56Sopenharmony_cios_wait4(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
39997db96d56Sopenharmony_ci{
40007db96d56Sopenharmony_ci    PyObject *return_value = NULL;
40017db96d56Sopenharmony_ci    static const char * const _keywords[] = {"pid", "options", NULL};
40027db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {"" _Py_PARSE_PID "i:wait4", _keywords, 0};
40037db96d56Sopenharmony_ci    pid_t pid;
40047db96d56Sopenharmony_ci    int options;
40057db96d56Sopenharmony_ci
40067db96d56Sopenharmony_ci    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
40077db96d56Sopenharmony_ci        &pid, &options)) {
40087db96d56Sopenharmony_ci        goto exit;
40097db96d56Sopenharmony_ci    }
40107db96d56Sopenharmony_ci    return_value = os_wait4_impl(module, pid, options);
40117db96d56Sopenharmony_ci
40127db96d56Sopenharmony_ciexit:
40137db96d56Sopenharmony_ci    return return_value;
40147db96d56Sopenharmony_ci}
40157db96d56Sopenharmony_ci
40167db96d56Sopenharmony_ci#endif /* defined(HAVE_WAIT4) */
40177db96d56Sopenharmony_ci
40187db96d56Sopenharmony_ci#if (defined(HAVE_WAITID) && !defined(__APPLE__))
40197db96d56Sopenharmony_ci
40207db96d56Sopenharmony_ciPyDoc_STRVAR(os_waitid__doc__,
40217db96d56Sopenharmony_ci"waitid($module, idtype, id, options, /)\n"
40227db96d56Sopenharmony_ci"--\n"
40237db96d56Sopenharmony_ci"\n"
40247db96d56Sopenharmony_ci"Returns the result of waiting for a process or processes.\n"
40257db96d56Sopenharmony_ci"\n"
40267db96d56Sopenharmony_ci"  idtype\n"
40277db96d56Sopenharmony_ci"    Must be one of be P_PID, P_PGID or P_ALL.\n"
40287db96d56Sopenharmony_ci"  id\n"
40297db96d56Sopenharmony_ci"    The id to wait on.\n"
40307db96d56Sopenharmony_ci"  options\n"
40317db96d56Sopenharmony_ci"    Constructed from the ORing of one or more of WEXITED, WSTOPPED\n"
40327db96d56Sopenharmony_ci"    or WCONTINUED and additionally may be ORed with WNOHANG or WNOWAIT.\n"
40337db96d56Sopenharmony_ci"\n"
40347db96d56Sopenharmony_ci"Returns either waitid_result or None if WNOHANG is specified and there are\n"
40357db96d56Sopenharmony_ci"no children in a waitable state.");
40367db96d56Sopenharmony_ci
40377db96d56Sopenharmony_ci#define OS_WAITID_METHODDEF    \
40387db96d56Sopenharmony_ci    {"waitid", _PyCFunction_CAST(os_waitid), METH_FASTCALL, os_waitid__doc__},
40397db96d56Sopenharmony_ci
40407db96d56Sopenharmony_cistatic PyObject *
40417db96d56Sopenharmony_cios_waitid_impl(PyObject *module, idtype_t idtype, id_t id, int options);
40427db96d56Sopenharmony_ci
40437db96d56Sopenharmony_cistatic PyObject *
40447db96d56Sopenharmony_cios_waitid(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
40457db96d56Sopenharmony_ci{
40467db96d56Sopenharmony_ci    PyObject *return_value = NULL;
40477db96d56Sopenharmony_ci    idtype_t idtype;
40487db96d56Sopenharmony_ci    id_t id;
40497db96d56Sopenharmony_ci    int options;
40507db96d56Sopenharmony_ci
40517db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "i" _Py_PARSE_PID "i:waitid",
40527db96d56Sopenharmony_ci        &idtype, &id, &options)) {
40537db96d56Sopenharmony_ci        goto exit;
40547db96d56Sopenharmony_ci    }
40557db96d56Sopenharmony_ci    return_value = os_waitid_impl(module, idtype, id, options);
40567db96d56Sopenharmony_ci
40577db96d56Sopenharmony_ciexit:
40587db96d56Sopenharmony_ci    return return_value;
40597db96d56Sopenharmony_ci}
40607db96d56Sopenharmony_ci
40617db96d56Sopenharmony_ci#endif /* (defined(HAVE_WAITID) && !defined(__APPLE__)) */
40627db96d56Sopenharmony_ci
40637db96d56Sopenharmony_ci#if defined(HAVE_WAITPID)
40647db96d56Sopenharmony_ci
40657db96d56Sopenharmony_ciPyDoc_STRVAR(os_waitpid__doc__,
40667db96d56Sopenharmony_ci"waitpid($module, pid, options, /)\n"
40677db96d56Sopenharmony_ci"--\n"
40687db96d56Sopenharmony_ci"\n"
40697db96d56Sopenharmony_ci"Wait for completion of a given child process.\n"
40707db96d56Sopenharmony_ci"\n"
40717db96d56Sopenharmony_ci"Returns a tuple of information regarding the child process:\n"
40727db96d56Sopenharmony_ci"    (pid, status)\n"
40737db96d56Sopenharmony_ci"\n"
40747db96d56Sopenharmony_ci"The options argument is ignored on Windows.");
40757db96d56Sopenharmony_ci
40767db96d56Sopenharmony_ci#define OS_WAITPID_METHODDEF    \
40777db96d56Sopenharmony_ci    {"waitpid", _PyCFunction_CAST(os_waitpid), METH_FASTCALL, os_waitpid__doc__},
40787db96d56Sopenharmony_ci
40797db96d56Sopenharmony_cistatic PyObject *
40807db96d56Sopenharmony_cios_waitpid_impl(PyObject *module, pid_t pid, int options);
40817db96d56Sopenharmony_ci
40827db96d56Sopenharmony_cistatic PyObject *
40837db96d56Sopenharmony_cios_waitpid(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
40847db96d56Sopenharmony_ci{
40857db96d56Sopenharmony_ci    PyObject *return_value = NULL;
40867db96d56Sopenharmony_ci    pid_t pid;
40877db96d56Sopenharmony_ci    int options;
40887db96d56Sopenharmony_ci
40897db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "i:waitpid",
40907db96d56Sopenharmony_ci        &pid, &options)) {
40917db96d56Sopenharmony_ci        goto exit;
40927db96d56Sopenharmony_ci    }
40937db96d56Sopenharmony_ci    return_value = os_waitpid_impl(module, pid, options);
40947db96d56Sopenharmony_ci
40957db96d56Sopenharmony_ciexit:
40967db96d56Sopenharmony_ci    return return_value;
40977db96d56Sopenharmony_ci}
40987db96d56Sopenharmony_ci
40997db96d56Sopenharmony_ci#endif /* defined(HAVE_WAITPID) */
41007db96d56Sopenharmony_ci
41017db96d56Sopenharmony_ci#if !defined(HAVE_WAITPID) && defined(HAVE_CWAIT)
41027db96d56Sopenharmony_ci
41037db96d56Sopenharmony_ciPyDoc_STRVAR(os_waitpid__doc__,
41047db96d56Sopenharmony_ci"waitpid($module, pid, options, /)\n"
41057db96d56Sopenharmony_ci"--\n"
41067db96d56Sopenharmony_ci"\n"
41077db96d56Sopenharmony_ci"Wait for completion of a given process.\n"
41087db96d56Sopenharmony_ci"\n"
41097db96d56Sopenharmony_ci"Returns a tuple of information regarding the process:\n"
41107db96d56Sopenharmony_ci"    (pid, status << 8)\n"
41117db96d56Sopenharmony_ci"\n"
41127db96d56Sopenharmony_ci"The options argument is ignored on Windows.");
41137db96d56Sopenharmony_ci
41147db96d56Sopenharmony_ci#define OS_WAITPID_METHODDEF    \
41157db96d56Sopenharmony_ci    {"waitpid", _PyCFunction_CAST(os_waitpid), METH_FASTCALL, os_waitpid__doc__},
41167db96d56Sopenharmony_ci
41177db96d56Sopenharmony_cistatic PyObject *
41187db96d56Sopenharmony_cios_waitpid_impl(PyObject *module, intptr_t pid, int options);
41197db96d56Sopenharmony_ci
41207db96d56Sopenharmony_cistatic PyObject *
41217db96d56Sopenharmony_cios_waitpid(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
41227db96d56Sopenharmony_ci{
41237db96d56Sopenharmony_ci    PyObject *return_value = NULL;
41247db96d56Sopenharmony_ci    intptr_t pid;
41257db96d56Sopenharmony_ci    int options;
41267db96d56Sopenharmony_ci
41277db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_INTPTR "i:waitpid",
41287db96d56Sopenharmony_ci        &pid, &options)) {
41297db96d56Sopenharmony_ci        goto exit;
41307db96d56Sopenharmony_ci    }
41317db96d56Sopenharmony_ci    return_value = os_waitpid_impl(module, pid, options);
41327db96d56Sopenharmony_ci
41337db96d56Sopenharmony_ciexit:
41347db96d56Sopenharmony_ci    return return_value;
41357db96d56Sopenharmony_ci}
41367db96d56Sopenharmony_ci
41377db96d56Sopenharmony_ci#endif /* !defined(HAVE_WAITPID) && defined(HAVE_CWAIT) */
41387db96d56Sopenharmony_ci
41397db96d56Sopenharmony_ci#if defined(HAVE_WAIT)
41407db96d56Sopenharmony_ci
41417db96d56Sopenharmony_ciPyDoc_STRVAR(os_wait__doc__,
41427db96d56Sopenharmony_ci"wait($module, /)\n"
41437db96d56Sopenharmony_ci"--\n"
41447db96d56Sopenharmony_ci"\n"
41457db96d56Sopenharmony_ci"Wait for completion of a child process.\n"
41467db96d56Sopenharmony_ci"\n"
41477db96d56Sopenharmony_ci"Returns a tuple of information about the child process:\n"
41487db96d56Sopenharmony_ci"    (pid, status)");
41497db96d56Sopenharmony_ci
41507db96d56Sopenharmony_ci#define OS_WAIT_METHODDEF    \
41517db96d56Sopenharmony_ci    {"wait", (PyCFunction)os_wait, METH_NOARGS, os_wait__doc__},
41527db96d56Sopenharmony_ci
41537db96d56Sopenharmony_cistatic PyObject *
41547db96d56Sopenharmony_cios_wait_impl(PyObject *module);
41557db96d56Sopenharmony_ci
41567db96d56Sopenharmony_cistatic PyObject *
41577db96d56Sopenharmony_cios_wait(PyObject *module, PyObject *Py_UNUSED(ignored))
41587db96d56Sopenharmony_ci{
41597db96d56Sopenharmony_ci    return os_wait_impl(module);
41607db96d56Sopenharmony_ci}
41617db96d56Sopenharmony_ci
41627db96d56Sopenharmony_ci#endif /* defined(HAVE_WAIT) */
41637db96d56Sopenharmony_ci
41647db96d56Sopenharmony_ci#if (defined(__linux__) && defined(__NR_pidfd_open))
41657db96d56Sopenharmony_ci
41667db96d56Sopenharmony_ciPyDoc_STRVAR(os_pidfd_open__doc__,
41677db96d56Sopenharmony_ci"pidfd_open($module, /, pid, flags=0)\n"
41687db96d56Sopenharmony_ci"--\n"
41697db96d56Sopenharmony_ci"\n"
41707db96d56Sopenharmony_ci"Return a file descriptor referring to the process *pid*.\n"
41717db96d56Sopenharmony_ci"\n"
41727db96d56Sopenharmony_ci"The descriptor can be used to perform process management without races and\n"
41737db96d56Sopenharmony_ci"signals.");
41747db96d56Sopenharmony_ci
41757db96d56Sopenharmony_ci#define OS_PIDFD_OPEN_METHODDEF    \
41767db96d56Sopenharmony_ci    {"pidfd_open", _PyCFunction_CAST(os_pidfd_open), METH_FASTCALL|METH_KEYWORDS, os_pidfd_open__doc__},
41777db96d56Sopenharmony_ci
41787db96d56Sopenharmony_cistatic PyObject *
41797db96d56Sopenharmony_cios_pidfd_open_impl(PyObject *module, pid_t pid, unsigned int flags);
41807db96d56Sopenharmony_ci
41817db96d56Sopenharmony_cistatic PyObject *
41827db96d56Sopenharmony_cios_pidfd_open(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
41837db96d56Sopenharmony_ci{
41847db96d56Sopenharmony_ci    PyObject *return_value = NULL;
41857db96d56Sopenharmony_ci    static const char * const _keywords[] = {"pid", "flags", NULL};
41867db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {"" _Py_PARSE_PID "|O&:pidfd_open", _keywords, 0};
41877db96d56Sopenharmony_ci    pid_t pid;
41887db96d56Sopenharmony_ci    unsigned int flags = 0;
41897db96d56Sopenharmony_ci
41907db96d56Sopenharmony_ci    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
41917db96d56Sopenharmony_ci        &pid, _PyLong_UnsignedInt_Converter, &flags)) {
41927db96d56Sopenharmony_ci        goto exit;
41937db96d56Sopenharmony_ci    }
41947db96d56Sopenharmony_ci    return_value = os_pidfd_open_impl(module, pid, flags);
41957db96d56Sopenharmony_ci
41967db96d56Sopenharmony_ciexit:
41977db96d56Sopenharmony_ci    return return_value;
41987db96d56Sopenharmony_ci}
41997db96d56Sopenharmony_ci
42007db96d56Sopenharmony_ci#endif /* (defined(__linux__) && defined(__NR_pidfd_open)) */
42017db96d56Sopenharmony_ci
42027db96d56Sopenharmony_ci#if (defined(HAVE_READLINK) || defined(MS_WINDOWS))
42037db96d56Sopenharmony_ci
42047db96d56Sopenharmony_ciPyDoc_STRVAR(os_readlink__doc__,
42057db96d56Sopenharmony_ci"readlink($module, /, path, *, dir_fd=None)\n"
42067db96d56Sopenharmony_ci"--\n"
42077db96d56Sopenharmony_ci"\n"
42087db96d56Sopenharmony_ci"Return a string representing the path to which the symbolic link points.\n"
42097db96d56Sopenharmony_ci"\n"
42107db96d56Sopenharmony_ci"If dir_fd is not None, it should be a file descriptor open to a directory,\n"
42117db96d56Sopenharmony_ci"and path should be relative; path will then be relative to that directory.\n"
42127db96d56Sopenharmony_ci"\n"
42137db96d56Sopenharmony_ci"dir_fd may not be implemented on your platform.  If it is unavailable,\n"
42147db96d56Sopenharmony_ci"using it will raise a NotImplementedError.");
42157db96d56Sopenharmony_ci
42167db96d56Sopenharmony_ci#define OS_READLINK_METHODDEF    \
42177db96d56Sopenharmony_ci    {"readlink", _PyCFunction_CAST(os_readlink), METH_FASTCALL|METH_KEYWORDS, os_readlink__doc__},
42187db96d56Sopenharmony_ci
42197db96d56Sopenharmony_cistatic PyObject *
42207db96d56Sopenharmony_cios_readlink_impl(PyObject *module, path_t *path, int dir_fd);
42217db96d56Sopenharmony_ci
42227db96d56Sopenharmony_cistatic PyObject *
42237db96d56Sopenharmony_cios_readlink(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
42247db96d56Sopenharmony_ci{
42257db96d56Sopenharmony_ci    PyObject *return_value = NULL;
42267db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "dir_fd", NULL};
42277db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "readlink", 0};
42287db96d56Sopenharmony_ci    PyObject *argsbuf[2];
42297db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
42307db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("readlink", "path", 0, 0);
42317db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
42327db96d56Sopenharmony_ci
42337db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
42347db96d56Sopenharmony_ci    if (!args) {
42357db96d56Sopenharmony_ci        goto exit;
42367db96d56Sopenharmony_ci    }
42377db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
42387db96d56Sopenharmony_ci        goto exit;
42397db96d56Sopenharmony_ci    }
42407db96d56Sopenharmony_ci    if (!noptargs) {
42417db96d56Sopenharmony_ci        goto skip_optional_kwonly;
42427db96d56Sopenharmony_ci    }
42437db96d56Sopenharmony_ci    if (!READLINKAT_DIR_FD_CONVERTER(args[1], &dir_fd)) {
42447db96d56Sopenharmony_ci        goto exit;
42457db96d56Sopenharmony_ci    }
42467db96d56Sopenharmony_ciskip_optional_kwonly:
42477db96d56Sopenharmony_ci    return_value = os_readlink_impl(module, &path, dir_fd);
42487db96d56Sopenharmony_ci
42497db96d56Sopenharmony_ciexit:
42507db96d56Sopenharmony_ci    /* Cleanup for path */
42517db96d56Sopenharmony_ci    path_cleanup(&path);
42527db96d56Sopenharmony_ci
42537db96d56Sopenharmony_ci    return return_value;
42547db96d56Sopenharmony_ci}
42557db96d56Sopenharmony_ci
42567db96d56Sopenharmony_ci#endif /* (defined(HAVE_READLINK) || defined(MS_WINDOWS)) */
42577db96d56Sopenharmony_ci
42587db96d56Sopenharmony_ci#if defined(HAVE_SYMLINK)
42597db96d56Sopenharmony_ci
42607db96d56Sopenharmony_ciPyDoc_STRVAR(os_symlink__doc__,
42617db96d56Sopenharmony_ci"symlink($module, /, src, dst, target_is_directory=False, *, dir_fd=None)\n"
42627db96d56Sopenharmony_ci"--\n"
42637db96d56Sopenharmony_ci"\n"
42647db96d56Sopenharmony_ci"Create a symbolic link pointing to src named dst.\n"
42657db96d56Sopenharmony_ci"\n"
42667db96d56Sopenharmony_ci"target_is_directory is required on Windows if the target is to be\n"
42677db96d56Sopenharmony_ci"  interpreted as a directory.  (On Windows, symlink requires\n"
42687db96d56Sopenharmony_ci"  Windows 6.0 or greater, and raises a NotImplementedError otherwise.)\n"
42697db96d56Sopenharmony_ci"  target_is_directory is ignored on non-Windows platforms.\n"
42707db96d56Sopenharmony_ci"\n"
42717db96d56Sopenharmony_ci"If dir_fd is not None, it should be a file descriptor open to a directory,\n"
42727db96d56Sopenharmony_ci"  and path should be relative; path will then be relative to that directory.\n"
42737db96d56Sopenharmony_ci"dir_fd may not be implemented on your platform.\n"
42747db96d56Sopenharmony_ci"  If it is unavailable, using it will raise a NotImplementedError.");
42757db96d56Sopenharmony_ci
42767db96d56Sopenharmony_ci#define OS_SYMLINK_METHODDEF    \
42777db96d56Sopenharmony_ci    {"symlink", _PyCFunction_CAST(os_symlink), METH_FASTCALL|METH_KEYWORDS, os_symlink__doc__},
42787db96d56Sopenharmony_ci
42797db96d56Sopenharmony_cistatic PyObject *
42807db96d56Sopenharmony_cios_symlink_impl(PyObject *module, path_t *src, path_t *dst,
42817db96d56Sopenharmony_ci                int target_is_directory, int dir_fd);
42827db96d56Sopenharmony_ci
42837db96d56Sopenharmony_cistatic PyObject *
42847db96d56Sopenharmony_cios_symlink(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
42857db96d56Sopenharmony_ci{
42867db96d56Sopenharmony_ci    PyObject *return_value = NULL;
42877db96d56Sopenharmony_ci    static const char * const _keywords[] = {"src", "dst", "target_is_directory", "dir_fd", NULL};
42887db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "symlink", 0};
42897db96d56Sopenharmony_ci    PyObject *argsbuf[4];
42907db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
42917db96d56Sopenharmony_ci    path_t src = PATH_T_INITIALIZE("symlink", "src", 0, 0);
42927db96d56Sopenharmony_ci    path_t dst = PATH_T_INITIALIZE("symlink", "dst", 0, 0);
42937db96d56Sopenharmony_ci    int target_is_directory = 0;
42947db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
42957db96d56Sopenharmony_ci
42967db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 3, 0, argsbuf);
42977db96d56Sopenharmony_ci    if (!args) {
42987db96d56Sopenharmony_ci        goto exit;
42997db96d56Sopenharmony_ci    }
43007db96d56Sopenharmony_ci    if (!path_converter(args[0], &src)) {
43017db96d56Sopenharmony_ci        goto exit;
43027db96d56Sopenharmony_ci    }
43037db96d56Sopenharmony_ci    if (!path_converter(args[1], &dst)) {
43047db96d56Sopenharmony_ci        goto exit;
43057db96d56Sopenharmony_ci    }
43067db96d56Sopenharmony_ci    if (!noptargs) {
43077db96d56Sopenharmony_ci        goto skip_optional_pos;
43087db96d56Sopenharmony_ci    }
43097db96d56Sopenharmony_ci    if (args[2]) {
43107db96d56Sopenharmony_ci        target_is_directory = PyObject_IsTrue(args[2]);
43117db96d56Sopenharmony_ci        if (target_is_directory < 0) {
43127db96d56Sopenharmony_ci            goto exit;
43137db96d56Sopenharmony_ci        }
43147db96d56Sopenharmony_ci        if (!--noptargs) {
43157db96d56Sopenharmony_ci            goto skip_optional_pos;
43167db96d56Sopenharmony_ci        }
43177db96d56Sopenharmony_ci    }
43187db96d56Sopenharmony_ciskip_optional_pos:
43197db96d56Sopenharmony_ci    if (!noptargs) {
43207db96d56Sopenharmony_ci        goto skip_optional_kwonly;
43217db96d56Sopenharmony_ci    }
43227db96d56Sopenharmony_ci    if (!SYMLINKAT_DIR_FD_CONVERTER(args[3], &dir_fd)) {
43237db96d56Sopenharmony_ci        goto exit;
43247db96d56Sopenharmony_ci    }
43257db96d56Sopenharmony_ciskip_optional_kwonly:
43267db96d56Sopenharmony_ci    return_value = os_symlink_impl(module, &src, &dst, target_is_directory, dir_fd);
43277db96d56Sopenharmony_ci
43287db96d56Sopenharmony_ciexit:
43297db96d56Sopenharmony_ci    /* Cleanup for src */
43307db96d56Sopenharmony_ci    path_cleanup(&src);
43317db96d56Sopenharmony_ci    /* Cleanup for dst */
43327db96d56Sopenharmony_ci    path_cleanup(&dst);
43337db96d56Sopenharmony_ci
43347db96d56Sopenharmony_ci    return return_value;
43357db96d56Sopenharmony_ci}
43367db96d56Sopenharmony_ci
43377db96d56Sopenharmony_ci#endif /* defined(HAVE_SYMLINK) */
43387db96d56Sopenharmony_ci
43397db96d56Sopenharmony_ci#if defined(HAVE_TIMES)
43407db96d56Sopenharmony_ci
43417db96d56Sopenharmony_ciPyDoc_STRVAR(os_times__doc__,
43427db96d56Sopenharmony_ci"times($module, /)\n"
43437db96d56Sopenharmony_ci"--\n"
43447db96d56Sopenharmony_ci"\n"
43457db96d56Sopenharmony_ci"Return a collection containing process timing information.\n"
43467db96d56Sopenharmony_ci"\n"
43477db96d56Sopenharmony_ci"The object returned behaves like a named tuple with these fields:\n"
43487db96d56Sopenharmony_ci"  (utime, stime, cutime, cstime, elapsed_time)\n"
43497db96d56Sopenharmony_ci"All fields are floating point numbers.");
43507db96d56Sopenharmony_ci
43517db96d56Sopenharmony_ci#define OS_TIMES_METHODDEF    \
43527db96d56Sopenharmony_ci    {"times", (PyCFunction)os_times, METH_NOARGS, os_times__doc__},
43537db96d56Sopenharmony_ci
43547db96d56Sopenharmony_cistatic PyObject *
43557db96d56Sopenharmony_cios_times_impl(PyObject *module);
43567db96d56Sopenharmony_ci
43577db96d56Sopenharmony_cistatic PyObject *
43587db96d56Sopenharmony_cios_times(PyObject *module, PyObject *Py_UNUSED(ignored))
43597db96d56Sopenharmony_ci{
43607db96d56Sopenharmony_ci    return os_times_impl(module);
43617db96d56Sopenharmony_ci}
43627db96d56Sopenharmony_ci
43637db96d56Sopenharmony_ci#endif /* defined(HAVE_TIMES) */
43647db96d56Sopenharmony_ci
43657db96d56Sopenharmony_ci#if defined(HAVE_GETSID)
43667db96d56Sopenharmony_ci
43677db96d56Sopenharmony_ciPyDoc_STRVAR(os_getsid__doc__,
43687db96d56Sopenharmony_ci"getsid($module, pid, /)\n"
43697db96d56Sopenharmony_ci"--\n"
43707db96d56Sopenharmony_ci"\n"
43717db96d56Sopenharmony_ci"Call the system call getsid(pid) and return the result.");
43727db96d56Sopenharmony_ci
43737db96d56Sopenharmony_ci#define OS_GETSID_METHODDEF    \
43747db96d56Sopenharmony_ci    {"getsid", (PyCFunction)os_getsid, METH_O, os_getsid__doc__},
43757db96d56Sopenharmony_ci
43767db96d56Sopenharmony_cistatic PyObject *
43777db96d56Sopenharmony_cios_getsid_impl(PyObject *module, pid_t pid);
43787db96d56Sopenharmony_ci
43797db96d56Sopenharmony_cistatic PyObject *
43807db96d56Sopenharmony_cios_getsid(PyObject *module, PyObject *arg)
43817db96d56Sopenharmony_ci{
43827db96d56Sopenharmony_ci    PyObject *return_value = NULL;
43837db96d56Sopenharmony_ci    pid_t pid;
43847db96d56Sopenharmony_ci
43857db96d56Sopenharmony_ci    if (!PyArg_Parse(arg, "" _Py_PARSE_PID ":getsid", &pid)) {
43867db96d56Sopenharmony_ci        goto exit;
43877db96d56Sopenharmony_ci    }
43887db96d56Sopenharmony_ci    return_value = os_getsid_impl(module, pid);
43897db96d56Sopenharmony_ci
43907db96d56Sopenharmony_ciexit:
43917db96d56Sopenharmony_ci    return return_value;
43927db96d56Sopenharmony_ci}
43937db96d56Sopenharmony_ci
43947db96d56Sopenharmony_ci#endif /* defined(HAVE_GETSID) */
43957db96d56Sopenharmony_ci
43967db96d56Sopenharmony_ci#if defined(HAVE_SETSID)
43977db96d56Sopenharmony_ci
43987db96d56Sopenharmony_ciPyDoc_STRVAR(os_setsid__doc__,
43997db96d56Sopenharmony_ci"setsid($module, /)\n"
44007db96d56Sopenharmony_ci"--\n"
44017db96d56Sopenharmony_ci"\n"
44027db96d56Sopenharmony_ci"Call the system call setsid().");
44037db96d56Sopenharmony_ci
44047db96d56Sopenharmony_ci#define OS_SETSID_METHODDEF    \
44057db96d56Sopenharmony_ci    {"setsid", (PyCFunction)os_setsid, METH_NOARGS, os_setsid__doc__},
44067db96d56Sopenharmony_ci
44077db96d56Sopenharmony_cistatic PyObject *
44087db96d56Sopenharmony_cios_setsid_impl(PyObject *module);
44097db96d56Sopenharmony_ci
44107db96d56Sopenharmony_cistatic PyObject *
44117db96d56Sopenharmony_cios_setsid(PyObject *module, PyObject *Py_UNUSED(ignored))
44127db96d56Sopenharmony_ci{
44137db96d56Sopenharmony_ci    return os_setsid_impl(module);
44147db96d56Sopenharmony_ci}
44157db96d56Sopenharmony_ci
44167db96d56Sopenharmony_ci#endif /* defined(HAVE_SETSID) */
44177db96d56Sopenharmony_ci
44187db96d56Sopenharmony_ci#if defined(HAVE_SETPGID)
44197db96d56Sopenharmony_ci
44207db96d56Sopenharmony_ciPyDoc_STRVAR(os_setpgid__doc__,
44217db96d56Sopenharmony_ci"setpgid($module, pid, pgrp, /)\n"
44227db96d56Sopenharmony_ci"--\n"
44237db96d56Sopenharmony_ci"\n"
44247db96d56Sopenharmony_ci"Call the system call setpgid(pid, pgrp).");
44257db96d56Sopenharmony_ci
44267db96d56Sopenharmony_ci#define OS_SETPGID_METHODDEF    \
44277db96d56Sopenharmony_ci    {"setpgid", _PyCFunction_CAST(os_setpgid), METH_FASTCALL, os_setpgid__doc__},
44287db96d56Sopenharmony_ci
44297db96d56Sopenharmony_cistatic PyObject *
44307db96d56Sopenharmony_cios_setpgid_impl(PyObject *module, pid_t pid, pid_t pgrp);
44317db96d56Sopenharmony_ci
44327db96d56Sopenharmony_cistatic PyObject *
44337db96d56Sopenharmony_cios_setpgid(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
44347db96d56Sopenharmony_ci{
44357db96d56Sopenharmony_ci    PyObject *return_value = NULL;
44367db96d56Sopenharmony_ci    pid_t pid;
44377db96d56Sopenharmony_ci    pid_t pgrp;
44387db96d56Sopenharmony_ci
44397db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "" _Py_PARSE_PID ":setpgid",
44407db96d56Sopenharmony_ci        &pid, &pgrp)) {
44417db96d56Sopenharmony_ci        goto exit;
44427db96d56Sopenharmony_ci    }
44437db96d56Sopenharmony_ci    return_value = os_setpgid_impl(module, pid, pgrp);
44447db96d56Sopenharmony_ci
44457db96d56Sopenharmony_ciexit:
44467db96d56Sopenharmony_ci    return return_value;
44477db96d56Sopenharmony_ci}
44487db96d56Sopenharmony_ci
44497db96d56Sopenharmony_ci#endif /* defined(HAVE_SETPGID) */
44507db96d56Sopenharmony_ci
44517db96d56Sopenharmony_ci#if defined(HAVE_TCGETPGRP)
44527db96d56Sopenharmony_ci
44537db96d56Sopenharmony_ciPyDoc_STRVAR(os_tcgetpgrp__doc__,
44547db96d56Sopenharmony_ci"tcgetpgrp($module, fd, /)\n"
44557db96d56Sopenharmony_ci"--\n"
44567db96d56Sopenharmony_ci"\n"
44577db96d56Sopenharmony_ci"Return the process group associated with the terminal specified by fd.");
44587db96d56Sopenharmony_ci
44597db96d56Sopenharmony_ci#define OS_TCGETPGRP_METHODDEF    \
44607db96d56Sopenharmony_ci    {"tcgetpgrp", (PyCFunction)os_tcgetpgrp, METH_O, os_tcgetpgrp__doc__},
44617db96d56Sopenharmony_ci
44627db96d56Sopenharmony_cistatic PyObject *
44637db96d56Sopenharmony_cios_tcgetpgrp_impl(PyObject *module, int fd);
44647db96d56Sopenharmony_ci
44657db96d56Sopenharmony_cistatic PyObject *
44667db96d56Sopenharmony_cios_tcgetpgrp(PyObject *module, PyObject *arg)
44677db96d56Sopenharmony_ci{
44687db96d56Sopenharmony_ci    PyObject *return_value = NULL;
44697db96d56Sopenharmony_ci    int fd;
44707db96d56Sopenharmony_ci
44717db96d56Sopenharmony_ci    fd = _PyLong_AsInt(arg);
44727db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
44737db96d56Sopenharmony_ci        goto exit;
44747db96d56Sopenharmony_ci    }
44757db96d56Sopenharmony_ci    return_value = os_tcgetpgrp_impl(module, fd);
44767db96d56Sopenharmony_ci
44777db96d56Sopenharmony_ciexit:
44787db96d56Sopenharmony_ci    return return_value;
44797db96d56Sopenharmony_ci}
44807db96d56Sopenharmony_ci
44817db96d56Sopenharmony_ci#endif /* defined(HAVE_TCGETPGRP) */
44827db96d56Sopenharmony_ci
44837db96d56Sopenharmony_ci#if defined(HAVE_TCSETPGRP)
44847db96d56Sopenharmony_ci
44857db96d56Sopenharmony_ciPyDoc_STRVAR(os_tcsetpgrp__doc__,
44867db96d56Sopenharmony_ci"tcsetpgrp($module, fd, pgid, /)\n"
44877db96d56Sopenharmony_ci"--\n"
44887db96d56Sopenharmony_ci"\n"
44897db96d56Sopenharmony_ci"Set the process group associated with the terminal specified by fd.");
44907db96d56Sopenharmony_ci
44917db96d56Sopenharmony_ci#define OS_TCSETPGRP_METHODDEF    \
44927db96d56Sopenharmony_ci    {"tcsetpgrp", _PyCFunction_CAST(os_tcsetpgrp), METH_FASTCALL, os_tcsetpgrp__doc__},
44937db96d56Sopenharmony_ci
44947db96d56Sopenharmony_cistatic PyObject *
44957db96d56Sopenharmony_cios_tcsetpgrp_impl(PyObject *module, int fd, pid_t pgid);
44967db96d56Sopenharmony_ci
44977db96d56Sopenharmony_cistatic PyObject *
44987db96d56Sopenharmony_cios_tcsetpgrp(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
44997db96d56Sopenharmony_ci{
45007db96d56Sopenharmony_ci    PyObject *return_value = NULL;
45017db96d56Sopenharmony_ci    int fd;
45027db96d56Sopenharmony_ci    pid_t pgid;
45037db96d56Sopenharmony_ci
45047db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "i" _Py_PARSE_PID ":tcsetpgrp",
45057db96d56Sopenharmony_ci        &fd, &pgid)) {
45067db96d56Sopenharmony_ci        goto exit;
45077db96d56Sopenharmony_ci    }
45087db96d56Sopenharmony_ci    return_value = os_tcsetpgrp_impl(module, fd, pgid);
45097db96d56Sopenharmony_ci
45107db96d56Sopenharmony_ciexit:
45117db96d56Sopenharmony_ci    return return_value;
45127db96d56Sopenharmony_ci}
45137db96d56Sopenharmony_ci
45147db96d56Sopenharmony_ci#endif /* defined(HAVE_TCSETPGRP) */
45157db96d56Sopenharmony_ci
45167db96d56Sopenharmony_ciPyDoc_STRVAR(os_open__doc__,
45177db96d56Sopenharmony_ci"open($module, /, path, flags, mode=511, *, dir_fd=None)\n"
45187db96d56Sopenharmony_ci"--\n"
45197db96d56Sopenharmony_ci"\n"
45207db96d56Sopenharmony_ci"Open a file for low level IO.  Returns a file descriptor (integer).\n"
45217db96d56Sopenharmony_ci"\n"
45227db96d56Sopenharmony_ci"If dir_fd is not None, it should be a file descriptor open to a directory,\n"
45237db96d56Sopenharmony_ci"  and path should be relative; path will then be relative to that directory.\n"
45247db96d56Sopenharmony_ci"dir_fd may not be implemented on your platform.\n"
45257db96d56Sopenharmony_ci"  If it is unavailable, using it will raise a NotImplementedError.");
45267db96d56Sopenharmony_ci
45277db96d56Sopenharmony_ci#define OS_OPEN_METHODDEF    \
45287db96d56Sopenharmony_ci    {"open", _PyCFunction_CAST(os_open), METH_FASTCALL|METH_KEYWORDS, os_open__doc__},
45297db96d56Sopenharmony_ci
45307db96d56Sopenharmony_cistatic int
45317db96d56Sopenharmony_cios_open_impl(PyObject *module, path_t *path, int flags, int mode, int dir_fd);
45327db96d56Sopenharmony_ci
45337db96d56Sopenharmony_cistatic PyObject *
45347db96d56Sopenharmony_cios_open(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
45357db96d56Sopenharmony_ci{
45367db96d56Sopenharmony_ci    PyObject *return_value = NULL;
45377db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "flags", "mode", "dir_fd", NULL};
45387db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "open", 0};
45397db96d56Sopenharmony_ci    PyObject *argsbuf[4];
45407db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
45417db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("open", "path", 0, 0);
45427db96d56Sopenharmony_ci    int flags;
45437db96d56Sopenharmony_ci    int mode = 511;
45447db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
45457db96d56Sopenharmony_ci    int _return_value;
45467db96d56Sopenharmony_ci
45477db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 3, 0, argsbuf);
45487db96d56Sopenharmony_ci    if (!args) {
45497db96d56Sopenharmony_ci        goto exit;
45507db96d56Sopenharmony_ci    }
45517db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
45527db96d56Sopenharmony_ci        goto exit;
45537db96d56Sopenharmony_ci    }
45547db96d56Sopenharmony_ci    flags = _PyLong_AsInt(args[1]);
45557db96d56Sopenharmony_ci    if (flags == -1 && PyErr_Occurred()) {
45567db96d56Sopenharmony_ci        goto exit;
45577db96d56Sopenharmony_ci    }
45587db96d56Sopenharmony_ci    if (!noptargs) {
45597db96d56Sopenharmony_ci        goto skip_optional_pos;
45607db96d56Sopenharmony_ci    }
45617db96d56Sopenharmony_ci    if (args[2]) {
45627db96d56Sopenharmony_ci        mode = _PyLong_AsInt(args[2]);
45637db96d56Sopenharmony_ci        if (mode == -1 && PyErr_Occurred()) {
45647db96d56Sopenharmony_ci            goto exit;
45657db96d56Sopenharmony_ci        }
45667db96d56Sopenharmony_ci        if (!--noptargs) {
45677db96d56Sopenharmony_ci            goto skip_optional_pos;
45687db96d56Sopenharmony_ci        }
45697db96d56Sopenharmony_ci    }
45707db96d56Sopenharmony_ciskip_optional_pos:
45717db96d56Sopenharmony_ci    if (!noptargs) {
45727db96d56Sopenharmony_ci        goto skip_optional_kwonly;
45737db96d56Sopenharmony_ci    }
45747db96d56Sopenharmony_ci    if (!OPENAT_DIR_FD_CONVERTER(args[3], &dir_fd)) {
45757db96d56Sopenharmony_ci        goto exit;
45767db96d56Sopenharmony_ci    }
45777db96d56Sopenharmony_ciskip_optional_kwonly:
45787db96d56Sopenharmony_ci    _return_value = os_open_impl(module, &path, flags, mode, dir_fd);
45797db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
45807db96d56Sopenharmony_ci        goto exit;
45817db96d56Sopenharmony_ci    }
45827db96d56Sopenharmony_ci    return_value = PyLong_FromLong((long)_return_value);
45837db96d56Sopenharmony_ci
45847db96d56Sopenharmony_ciexit:
45857db96d56Sopenharmony_ci    /* Cleanup for path */
45867db96d56Sopenharmony_ci    path_cleanup(&path);
45877db96d56Sopenharmony_ci
45887db96d56Sopenharmony_ci    return return_value;
45897db96d56Sopenharmony_ci}
45907db96d56Sopenharmony_ci
45917db96d56Sopenharmony_ciPyDoc_STRVAR(os_close__doc__,
45927db96d56Sopenharmony_ci"close($module, /, fd)\n"
45937db96d56Sopenharmony_ci"--\n"
45947db96d56Sopenharmony_ci"\n"
45957db96d56Sopenharmony_ci"Close a file descriptor.");
45967db96d56Sopenharmony_ci
45977db96d56Sopenharmony_ci#define OS_CLOSE_METHODDEF    \
45987db96d56Sopenharmony_ci    {"close", _PyCFunction_CAST(os_close), METH_FASTCALL|METH_KEYWORDS, os_close__doc__},
45997db96d56Sopenharmony_ci
46007db96d56Sopenharmony_cistatic PyObject *
46017db96d56Sopenharmony_cios_close_impl(PyObject *module, int fd);
46027db96d56Sopenharmony_ci
46037db96d56Sopenharmony_cistatic PyObject *
46047db96d56Sopenharmony_cios_close(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
46057db96d56Sopenharmony_ci{
46067db96d56Sopenharmony_ci    PyObject *return_value = NULL;
46077db96d56Sopenharmony_ci    static const char * const _keywords[] = {"fd", NULL};
46087db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "close", 0};
46097db96d56Sopenharmony_ci    PyObject *argsbuf[1];
46107db96d56Sopenharmony_ci    int fd;
46117db96d56Sopenharmony_ci
46127db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
46137db96d56Sopenharmony_ci    if (!args) {
46147db96d56Sopenharmony_ci        goto exit;
46157db96d56Sopenharmony_ci    }
46167db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
46177db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
46187db96d56Sopenharmony_ci        goto exit;
46197db96d56Sopenharmony_ci    }
46207db96d56Sopenharmony_ci    return_value = os_close_impl(module, fd);
46217db96d56Sopenharmony_ci
46227db96d56Sopenharmony_ciexit:
46237db96d56Sopenharmony_ci    return return_value;
46247db96d56Sopenharmony_ci}
46257db96d56Sopenharmony_ci
46267db96d56Sopenharmony_ciPyDoc_STRVAR(os_closerange__doc__,
46277db96d56Sopenharmony_ci"closerange($module, fd_low, fd_high, /)\n"
46287db96d56Sopenharmony_ci"--\n"
46297db96d56Sopenharmony_ci"\n"
46307db96d56Sopenharmony_ci"Closes all file descriptors in [fd_low, fd_high), ignoring errors.");
46317db96d56Sopenharmony_ci
46327db96d56Sopenharmony_ci#define OS_CLOSERANGE_METHODDEF    \
46337db96d56Sopenharmony_ci    {"closerange", _PyCFunction_CAST(os_closerange), METH_FASTCALL, os_closerange__doc__},
46347db96d56Sopenharmony_ci
46357db96d56Sopenharmony_cistatic PyObject *
46367db96d56Sopenharmony_cios_closerange_impl(PyObject *module, int fd_low, int fd_high);
46377db96d56Sopenharmony_ci
46387db96d56Sopenharmony_cistatic PyObject *
46397db96d56Sopenharmony_cios_closerange(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
46407db96d56Sopenharmony_ci{
46417db96d56Sopenharmony_ci    PyObject *return_value = NULL;
46427db96d56Sopenharmony_ci    int fd_low;
46437db96d56Sopenharmony_ci    int fd_high;
46447db96d56Sopenharmony_ci
46457db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("closerange", nargs, 2, 2)) {
46467db96d56Sopenharmony_ci        goto exit;
46477db96d56Sopenharmony_ci    }
46487db96d56Sopenharmony_ci    fd_low = _PyLong_AsInt(args[0]);
46497db96d56Sopenharmony_ci    if (fd_low == -1 && PyErr_Occurred()) {
46507db96d56Sopenharmony_ci        goto exit;
46517db96d56Sopenharmony_ci    }
46527db96d56Sopenharmony_ci    fd_high = _PyLong_AsInt(args[1]);
46537db96d56Sopenharmony_ci    if (fd_high == -1 && PyErr_Occurred()) {
46547db96d56Sopenharmony_ci        goto exit;
46557db96d56Sopenharmony_ci    }
46567db96d56Sopenharmony_ci    return_value = os_closerange_impl(module, fd_low, fd_high);
46577db96d56Sopenharmony_ci
46587db96d56Sopenharmony_ciexit:
46597db96d56Sopenharmony_ci    return return_value;
46607db96d56Sopenharmony_ci}
46617db96d56Sopenharmony_ci
46627db96d56Sopenharmony_ciPyDoc_STRVAR(os_dup__doc__,
46637db96d56Sopenharmony_ci"dup($module, fd, /)\n"
46647db96d56Sopenharmony_ci"--\n"
46657db96d56Sopenharmony_ci"\n"
46667db96d56Sopenharmony_ci"Return a duplicate of a file descriptor.");
46677db96d56Sopenharmony_ci
46687db96d56Sopenharmony_ci#define OS_DUP_METHODDEF    \
46697db96d56Sopenharmony_ci    {"dup", (PyCFunction)os_dup, METH_O, os_dup__doc__},
46707db96d56Sopenharmony_ci
46717db96d56Sopenharmony_cistatic int
46727db96d56Sopenharmony_cios_dup_impl(PyObject *module, int fd);
46737db96d56Sopenharmony_ci
46747db96d56Sopenharmony_cistatic PyObject *
46757db96d56Sopenharmony_cios_dup(PyObject *module, PyObject *arg)
46767db96d56Sopenharmony_ci{
46777db96d56Sopenharmony_ci    PyObject *return_value = NULL;
46787db96d56Sopenharmony_ci    int fd;
46797db96d56Sopenharmony_ci    int _return_value;
46807db96d56Sopenharmony_ci
46817db96d56Sopenharmony_ci    fd = _PyLong_AsInt(arg);
46827db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
46837db96d56Sopenharmony_ci        goto exit;
46847db96d56Sopenharmony_ci    }
46857db96d56Sopenharmony_ci    _return_value = os_dup_impl(module, fd);
46867db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
46877db96d56Sopenharmony_ci        goto exit;
46887db96d56Sopenharmony_ci    }
46897db96d56Sopenharmony_ci    return_value = PyLong_FromLong((long)_return_value);
46907db96d56Sopenharmony_ci
46917db96d56Sopenharmony_ciexit:
46927db96d56Sopenharmony_ci    return return_value;
46937db96d56Sopenharmony_ci}
46947db96d56Sopenharmony_ci
46957db96d56Sopenharmony_ci#if ((defined(HAVE_DUP3) || defined(F_DUPFD) || defined(MS_WINDOWS)))
46967db96d56Sopenharmony_ci
46977db96d56Sopenharmony_ciPyDoc_STRVAR(os_dup2__doc__,
46987db96d56Sopenharmony_ci"dup2($module, /, fd, fd2, inheritable=True)\n"
46997db96d56Sopenharmony_ci"--\n"
47007db96d56Sopenharmony_ci"\n"
47017db96d56Sopenharmony_ci"Duplicate file descriptor.");
47027db96d56Sopenharmony_ci
47037db96d56Sopenharmony_ci#define OS_DUP2_METHODDEF    \
47047db96d56Sopenharmony_ci    {"dup2", _PyCFunction_CAST(os_dup2), METH_FASTCALL|METH_KEYWORDS, os_dup2__doc__},
47057db96d56Sopenharmony_ci
47067db96d56Sopenharmony_cistatic int
47077db96d56Sopenharmony_cios_dup2_impl(PyObject *module, int fd, int fd2, int inheritable);
47087db96d56Sopenharmony_ci
47097db96d56Sopenharmony_cistatic PyObject *
47107db96d56Sopenharmony_cios_dup2(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
47117db96d56Sopenharmony_ci{
47127db96d56Sopenharmony_ci    PyObject *return_value = NULL;
47137db96d56Sopenharmony_ci    static const char * const _keywords[] = {"fd", "fd2", "inheritable", NULL};
47147db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "dup2", 0};
47157db96d56Sopenharmony_ci    PyObject *argsbuf[3];
47167db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
47177db96d56Sopenharmony_ci    int fd;
47187db96d56Sopenharmony_ci    int fd2;
47197db96d56Sopenharmony_ci    int inheritable = 1;
47207db96d56Sopenharmony_ci    int _return_value;
47217db96d56Sopenharmony_ci
47227db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 3, 0, argsbuf);
47237db96d56Sopenharmony_ci    if (!args) {
47247db96d56Sopenharmony_ci        goto exit;
47257db96d56Sopenharmony_ci    }
47267db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
47277db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
47287db96d56Sopenharmony_ci        goto exit;
47297db96d56Sopenharmony_ci    }
47307db96d56Sopenharmony_ci    fd2 = _PyLong_AsInt(args[1]);
47317db96d56Sopenharmony_ci    if (fd2 == -1 && PyErr_Occurred()) {
47327db96d56Sopenharmony_ci        goto exit;
47337db96d56Sopenharmony_ci    }
47347db96d56Sopenharmony_ci    if (!noptargs) {
47357db96d56Sopenharmony_ci        goto skip_optional_pos;
47367db96d56Sopenharmony_ci    }
47377db96d56Sopenharmony_ci    inheritable = PyObject_IsTrue(args[2]);
47387db96d56Sopenharmony_ci    if (inheritable < 0) {
47397db96d56Sopenharmony_ci        goto exit;
47407db96d56Sopenharmony_ci    }
47417db96d56Sopenharmony_ciskip_optional_pos:
47427db96d56Sopenharmony_ci    _return_value = os_dup2_impl(module, fd, fd2, inheritable);
47437db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
47447db96d56Sopenharmony_ci        goto exit;
47457db96d56Sopenharmony_ci    }
47467db96d56Sopenharmony_ci    return_value = PyLong_FromLong((long)_return_value);
47477db96d56Sopenharmony_ci
47487db96d56Sopenharmony_ciexit:
47497db96d56Sopenharmony_ci    return return_value;
47507db96d56Sopenharmony_ci}
47517db96d56Sopenharmony_ci
47527db96d56Sopenharmony_ci#endif /* ((defined(HAVE_DUP3) || defined(F_DUPFD) || defined(MS_WINDOWS))) */
47537db96d56Sopenharmony_ci
47547db96d56Sopenharmony_ci#if defined(HAVE_LOCKF)
47557db96d56Sopenharmony_ci
47567db96d56Sopenharmony_ciPyDoc_STRVAR(os_lockf__doc__,
47577db96d56Sopenharmony_ci"lockf($module, fd, command, length, /)\n"
47587db96d56Sopenharmony_ci"--\n"
47597db96d56Sopenharmony_ci"\n"
47607db96d56Sopenharmony_ci"Apply, test or remove a POSIX lock on an open file descriptor.\n"
47617db96d56Sopenharmony_ci"\n"
47627db96d56Sopenharmony_ci"  fd\n"
47637db96d56Sopenharmony_ci"    An open file descriptor.\n"
47647db96d56Sopenharmony_ci"  command\n"
47657db96d56Sopenharmony_ci"    One of F_LOCK, F_TLOCK, F_ULOCK or F_TEST.\n"
47667db96d56Sopenharmony_ci"  length\n"
47677db96d56Sopenharmony_ci"    The number of bytes to lock, starting at the current position.");
47687db96d56Sopenharmony_ci
47697db96d56Sopenharmony_ci#define OS_LOCKF_METHODDEF    \
47707db96d56Sopenharmony_ci    {"lockf", _PyCFunction_CAST(os_lockf), METH_FASTCALL, os_lockf__doc__},
47717db96d56Sopenharmony_ci
47727db96d56Sopenharmony_cistatic PyObject *
47737db96d56Sopenharmony_cios_lockf_impl(PyObject *module, int fd, int command, Py_off_t length);
47747db96d56Sopenharmony_ci
47757db96d56Sopenharmony_cistatic PyObject *
47767db96d56Sopenharmony_cios_lockf(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
47777db96d56Sopenharmony_ci{
47787db96d56Sopenharmony_ci    PyObject *return_value = NULL;
47797db96d56Sopenharmony_ci    int fd;
47807db96d56Sopenharmony_ci    int command;
47817db96d56Sopenharmony_ci    Py_off_t length;
47827db96d56Sopenharmony_ci
47837db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("lockf", nargs, 3, 3)) {
47847db96d56Sopenharmony_ci        goto exit;
47857db96d56Sopenharmony_ci    }
47867db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
47877db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
47887db96d56Sopenharmony_ci        goto exit;
47897db96d56Sopenharmony_ci    }
47907db96d56Sopenharmony_ci    command = _PyLong_AsInt(args[1]);
47917db96d56Sopenharmony_ci    if (command == -1 && PyErr_Occurred()) {
47927db96d56Sopenharmony_ci        goto exit;
47937db96d56Sopenharmony_ci    }
47947db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[2], &length)) {
47957db96d56Sopenharmony_ci        goto exit;
47967db96d56Sopenharmony_ci    }
47977db96d56Sopenharmony_ci    return_value = os_lockf_impl(module, fd, command, length);
47987db96d56Sopenharmony_ci
47997db96d56Sopenharmony_ciexit:
48007db96d56Sopenharmony_ci    return return_value;
48017db96d56Sopenharmony_ci}
48027db96d56Sopenharmony_ci
48037db96d56Sopenharmony_ci#endif /* defined(HAVE_LOCKF) */
48047db96d56Sopenharmony_ci
48057db96d56Sopenharmony_ciPyDoc_STRVAR(os_lseek__doc__,
48067db96d56Sopenharmony_ci"lseek($module, fd, position, how, /)\n"
48077db96d56Sopenharmony_ci"--\n"
48087db96d56Sopenharmony_ci"\n"
48097db96d56Sopenharmony_ci"Set the position of a file descriptor.  Return the new position.\n"
48107db96d56Sopenharmony_ci"\n"
48117db96d56Sopenharmony_ci"Return the new cursor position in number of bytes\n"
48127db96d56Sopenharmony_ci"relative to the beginning of the file.");
48137db96d56Sopenharmony_ci
48147db96d56Sopenharmony_ci#define OS_LSEEK_METHODDEF    \
48157db96d56Sopenharmony_ci    {"lseek", _PyCFunction_CAST(os_lseek), METH_FASTCALL, os_lseek__doc__},
48167db96d56Sopenharmony_ci
48177db96d56Sopenharmony_cistatic Py_off_t
48187db96d56Sopenharmony_cios_lseek_impl(PyObject *module, int fd, Py_off_t position, int how);
48197db96d56Sopenharmony_ci
48207db96d56Sopenharmony_cistatic PyObject *
48217db96d56Sopenharmony_cios_lseek(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
48227db96d56Sopenharmony_ci{
48237db96d56Sopenharmony_ci    PyObject *return_value = NULL;
48247db96d56Sopenharmony_ci    int fd;
48257db96d56Sopenharmony_ci    Py_off_t position;
48267db96d56Sopenharmony_ci    int how;
48277db96d56Sopenharmony_ci    Py_off_t _return_value;
48287db96d56Sopenharmony_ci
48297db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("lseek", nargs, 3, 3)) {
48307db96d56Sopenharmony_ci        goto exit;
48317db96d56Sopenharmony_ci    }
48327db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
48337db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
48347db96d56Sopenharmony_ci        goto exit;
48357db96d56Sopenharmony_ci    }
48367db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[1], &position)) {
48377db96d56Sopenharmony_ci        goto exit;
48387db96d56Sopenharmony_ci    }
48397db96d56Sopenharmony_ci    how = _PyLong_AsInt(args[2]);
48407db96d56Sopenharmony_ci    if (how == -1 && PyErr_Occurred()) {
48417db96d56Sopenharmony_ci        goto exit;
48427db96d56Sopenharmony_ci    }
48437db96d56Sopenharmony_ci    _return_value = os_lseek_impl(module, fd, position, how);
48447db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
48457db96d56Sopenharmony_ci        goto exit;
48467db96d56Sopenharmony_ci    }
48477db96d56Sopenharmony_ci    return_value = PyLong_FromPy_off_t(_return_value);
48487db96d56Sopenharmony_ci
48497db96d56Sopenharmony_ciexit:
48507db96d56Sopenharmony_ci    return return_value;
48517db96d56Sopenharmony_ci}
48527db96d56Sopenharmony_ci
48537db96d56Sopenharmony_ciPyDoc_STRVAR(os_read__doc__,
48547db96d56Sopenharmony_ci"read($module, fd, length, /)\n"
48557db96d56Sopenharmony_ci"--\n"
48567db96d56Sopenharmony_ci"\n"
48577db96d56Sopenharmony_ci"Read from a file descriptor.  Returns a bytes object.");
48587db96d56Sopenharmony_ci
48597db96d56Sopenharmony_ci#define OS_READ_METHODDEF    \
48607db96d56Sopenharmony_ci    {"read", _PyCFunction_CAST(os_read), METH_FASTCALL, os_read__doc__},
48617db96d56Sopenharmony_ci
48627db96d56Sopenharmony_cistatic PyObject *
48637db96d56Sopenharmony_cios_read_impl(PyObject *module, int fd, Py_ssize_t length);
48647db96d56Sopenharmony_ci
48657db96d56Sopenharmony_cistatic PyObject *
48667db96d56Sopenharmony_cios_read(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
48677db96d56Sopenharmony_ci{
48687db96d56Sopenharmony_ci    PyObject *return_value = NULL;
48697db96d56Sopenharmony_ci    int fd;
48707db96d56Sopenharmony_ci    Py_ssize_t length;
48717db96d56Sopenharmony_ci
48727db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("read", nargs, 2, 2)) {
48737db96d56Sopenharmony_ci        goto exit;
48747db96d56Sopenharmony_ci    }
48757db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
48767db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
48777db96d56Sopenharmony_ci        goto exit;
48787db96d56Sopenharmony_ci    }
48797db96d56Sopenharmony_ci    {
48807db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
48817db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(args[1]);
48827db96d56Sopenharmony_ci        if (iobj != NULL) {
48837db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
48847db96d56Sopenharmony_ci            Py_DECREF(iobj);
48857db96d56Sopenharmony_ci        }
48867db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
48877db96d56Sopenharmony_ci            goto exit;
48887db96d56Sopenharmony_ci        }
48897db96d56Sopenharmony_ci        length = ival;
48907db96d56Sopenharmony_ci    }
48917db96d56Sopenharmony_ci    return_value = os_read_impl(module, fd, length);
48927db96d56Sopenharmony_ci
48937db96d56Sopenharmony_ciexit:
48947db96d56Sopenharmony_ci    return return_value;
48957db96d56Sopenharmony_ci}
48967db96d56Sopenharmony_ci
48977db96d56Sopenharmony_ci#if defined(HAVE_READV)
48987db96d56Sopenharmony_ci
48997db96d56Sopenharmony_ciPyDoc_STRVAR(os_readv__doc__,
49007db96d56Sopenharmony_ci"readv($module, fd, buffers, /)\n"
49017db96d56Sopenharmony_ci"--\n"
49027db96d56Sopenharmony_ci"\n"
49037db96d56Sopenharmony_ci"Read from a file descriptor fd into an iterable of buffers.\n"
49047db96d56Sopenharmony_ci"\n"
49057db96d56Sopenharmony_ci"The buffers should be mutable buffers accepting bytes.\n"
49067db96d56Sopenharmony_ci"readv will transfer data into each buffer until it is full\n"
49077db96d56Sopenharmony_ci"and then move on to the next buffer in the sequence to hold\n"
49087db96d56Sopenharmony_ci"the rest of the data.\n"
49097db96d56Sopenharmony_ci"\n"
49107db96d56Sopenharmony_ci"readv returns the total number of bytes read,\n"
49117db96d56Sopenharmony_ci"which may be less than the total capacity of all the buffers.");
49127db96d56Sopenharmony_ci
49137db96d56Sopenharmony_ci#define OS_READV_METHODDEF    \
49147db96d56Sopenharmony_ci    {"readv", _PyCFunction_CAST(os_readv), METH_FASTCALL, os_readv__doc__},
49157db96d56Sopenharmony_ci
49167db96d56Sopenharmony_cistatic Py_ssize_t
49177db96d56Sopenharmony_cios_readv_impl(PyObject *module, int fd, PyObject *buffers);
49187db96d56Sopenharmony_ci
49197db96d56Sopenharmony_cistatic PyObject *
49207db96d56Sopenharmony_cios_readv(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
49217db96d56Sopenharmony_ci{
49227db96d56Sopenharmony_ci    PyObject *return_value = NULL;
49237db96d56Sopenharmony_ci    int fd;
49247db96d56Sopenharmony_ci    PyObject *buffers;
49257db96d56Sopenharmony_ci    Py_ssize_t _return_value;
49267db96d56Sopenharmony_ci
49277db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("readv", nargs, 2, 2)) {
49287db96d56Sopenharmony_ci        goto exit;
49297db96d56Sopenharmony_ci    }
49307db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
49317db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
49327db96d56Sopenharmony_ci        goto exit;
49337db96d56Sopenharmony_ci    }
49347db96d56Sopenharmony_ci    buffers = args[1];
49357db96d56Sopenharmony_ci    _return_value = os_readv_impl(module, fd, buffers);
49367db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
49377db96d56Sopenharmony_ci        goto exit;
49387db96d56Sopenharmony_ci    }
49397db96d56Sopenharmony_ci    return_value = PyLong_FromSsize_t(_return_value);
49407db96d56Sopenharmony_ci
49417db96d56Sopenharmony_ciexit:
49427db96d56Sopenharmony_ci    return return_value;
49437db96d56Sopenharmony_ci}
49447db96d56Sopenharmony_ci
49457db96d56Sopenharmony_ci#endif /* defined(HAVE_READV) */
49467db96d56Sopenharmony_ci
49477db96d56Sopenharmony_ci#if defined(HAVE_PREAD)
49487db96d56Sopenharmony_ci
49497db96d56Sopenharmony_ciPyDoc_STRVAR(os_pread__doc__,
49507db96d56Sopenharmony_ci"pread($module, fd, length, offset, /)\n"
49517db96d56Sopenharmony_ci"--\n"
49527db96d56Sopenharmony_ci"\n"
49537db96d56Sopenharmony_ci"Read a number of bytes from a file descriptor starting at a particular offset.\n"
49547db96d56Sopenharmony_ci"\n"
49557db96d56Sopenharmony_ci"Read length bytes from file descriptor fd, starting at offset bytes from\n"
49567db96d56Sopenharmony_ci"the beginning of the file.  The file offset remains unchanged.");
49577db96d56Sopenharmony_ci
49587db96d56Sopenharmony_ci#define OS_PREAD_METHODDEF    \
49597db96d56Sopenharmony_ci    {"pread", _PyCFunction_CAST(os_pread), METH_FASTCALL, os_pread__doc__},
49607db96d56Sopenharmony_ci
49617db96d56Sopenharmony_cistatic PyObject *
49627db96d56Sopenharmony_cios_pread_impl(PyObject *module, int fd, Py_ssize_t length, Py_off_t offset);
49637db96d56Sopenharmony_ci
49647db96d56Sopenharmony_cistatic PyObject *
49657db96d56Sopenharmony_cios_pread(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
49667db96d56Sopenharmony_ci{
49677db96d56Sopenharmony_ci    PyObject *return_value = NULL;
49687db96d56Sopenharmony_ci    int fd;
49697db96d56Sopenharmony_ci    Py_ssize_t length;
49707db96d56Sopenharmony_ci    Py_off_t offset;
49717db96d56Sopenharmony_ci
49727db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("pread", nargs, 3, 3)) {
49737db96d56Sopenharmony_ci        goto exit;
49747db96d56Sopenharmony_ci    }
49757db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
49767db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
49777db96d56Sopenharmony_ci        goto exit;
49787db96d56Sopenharmony_ci    }
49797db96d56Sopenharmony_ci    {
49807db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
49817db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(args[1]);
49827db96d56Sopenharmony_ci        if (iobj != NULL) {
49837db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
49847db96d56Sopenharmony_ci            Py_DECREF(iobj);
49857db96d56Sopenharmony_ci        }
49867db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
49877db96d56Sopenharmony_ci            goto exit;
49887db96d56Sopenharmony_ci        }
49897db96d56Sopenharmony_ci        length = ival;
49907db96d56Sopenharmony_ci    }
49917db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[2], &offset)) {
49927db96d56Sopenharmony_ci        goto exit;
49937db96d56Sopenharmony_ci    }
49947db96d56Sopenharmony_ci    return_value = os_pread_impl(module, fd, length, offset);
49957db96d56Sopenharmony_ci
49967db96d56Sopenharmony_ciexit:
49977db96d56Sopenharmony_ci    return return_value;
49987db96d56Sopenharmony_ci}
49997db96d56Sopenharmony_ci
50007db96d56Sopenharmony_ci#endif /* defined(HAVE_PREAD) */
50017db96d56Sopenharmony_ci
50027db96d56Sopenharmony_ci#if (defined(HAVE_PREADV) || defined (HAVE_PREADV2))
50037db96d56Sopenharmony_ci
50047db96d56Sopenharmony_ciPyDoc_STRVAR(os_preadv__doc__,
50057db96d56Sopenharmony_ci"preadv($module, fd, buffers, offset, flags=0, /)\n"
50067db96d56Sopenharmony_ci"--\n"
50077db96d56Sopenharmony_ci"\n"
50087db96d56Sopenharmony_ci"Reads from a file descriptor into a number of mutable bytes-like objects.\n"
50097db96d56Sopenharmony_ci"\n"
50107db96d56Sopenharmony_ci"Combines the functionality of readv() and pread(). As readv(), it will\n"
50117db96d56Sopenharmony_ci"transfer data into each buffer until it is full and then move on to the next\n"
50127db96d56Sopenharmony_ci"buffer in the sequence to hold the rest of the data. Its fourth argument,\n"
50137db96d56Sopenharmony_ci"specifies the file offset at which the input operation is to be performed. It\n"
50147db96d56Sopenharmony_ci"will return the total number of bytes read (which can be less than the total\n"
50157db96d56Sopenharmony_ci"capacity of all the objects).\n"
50167db96d56Sopenharmony_ci"\n"
50177db96d56Sopenharmony_ci"The flags argument contains a bitwise OR of zero or more of the following flags:\n"
50187db96d56Sopenharmony_ci"\n"
50197db96d56Sopenharmony_ci"- RWF_HIPRI\n"
50207db96d56Sopenharmony_ci"- RWF_NOWAIT\n"
50217db96d56Sopenharmony_ci"\n"
50227db96d56Sopenharmony_ci"Using non-zero flags requires Linux 4.6 or newer.");
50237db96d56Sopenharmony_ci
50247db96d56Sopenharmony_ci#define OS_PREADV_METHODDEF    \
50257db96d56Sopenharmony_ci    {"preadv", _PyCFunction_CAST(os_preadv), METH_FASTCALL, os_preadv__doc__},
50267db96d56Sopenharmony_ci
50277db96d56Sopenharmony_cistatic Py_ssize_t
50287db96d56Sopenharmony_cios_preadv_impl(PyObject *module, int fd, PyObject *buffers, Py_off_t offset,
50297db96d56Sopenharmony_ci               int flags);
50307db96d56Sopenharmony_ci
50317db96d56Sopenharmony_cistatic PyObject *
50327db96d56Sopenharmony_cios_preadv(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
50337db96d56Sopenharmony_ci{
50347db96d56Sopenharmony_ci    PyObject *return_value = NULL;
50357db96d56Sopenharmony_ci    int fd;
50367db96d56Sopenharmony_ci    PyObject *buffers;
50377db96d56Sopenharmony_ci    Py_off_t offset;
50387db96d56Sopenharmony_ci    int flags = 0;
50397db96d56Sopenharmony_ci    Py_ssize_t _return_value;
50407db96d56Sopenharmony_ci
50417db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("preadv", nargs, 3, 4)) {
50427db96d56Sopenharmony_ci        goto exit;
50437db96d56Sopenharmony_ci    }
50447db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
50457db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
50467db96d56Sopenharmony_ci        goto exit;
50477db96d56Sopenharmony_ci    }
50487db96d56Sopenharmony_ci    buffers = args[1];
50497db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[2], &offset)) {
50507db96d56Sopenharmony_ci        goto exit;
50517db96d56Sopenharmony_ci    }
50527db96d56Sopenharmony_ci    if (nargs < 4) {
50537db96d56Sopenharmony_ci        goto skip_optional;
50547db96d56Sopenharmony_ci    }
50557db96d56Sopenharmony_ci    flags = _PyLong_AsInt(args[3]);
50567db96d56Sopenharmony_ci    if (flags == -1 && PyErr_Occurred()) {
50577db96d56Sopenharmony_ci        goto exit;
50587db96d56Sopenharmony_ci    }
50597db96d56Sopenharmony_ciskip_optional:
50607db96d56Sopenharmony_ci    _return_value = os_preadv_impl(module, fd, buffers, offset, flags);
50617db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
50627db96d56Sopenharmony_ci        goto exit;
50637db96d56Sopenharmony_ci    }
50647db96d56Sopenharmony_ci    return_value = PyLong_FromSsize_t(_return_value);
50657db96d56Sopenharmony_ci
50667db96d56Sopenharmony_ciexit:
50677db96d56Sopenharmony_ci    return return_value;
50687db96d56Sopenharmony_ci}
50697db96d56Sopenharmony_ci
50707db96d56Sopenharmony_ci#endif /* (defined(HAVE_PREADV) || defined (HAVE_PREADV2)) */
50717db96d56Sopenharmony_ci
50727db96d56Sopenharmony_ciPyDoc_STRVAR(os_write__doc__,
50737db96d56Sopenharmony_ci"write($module, fd, data, /)\n"
50747db96d56Sopenharmony_ci"--\n"
50757db96d56Sopenharmony_ci"\n"
50767db96d56Sopenharmony_ci"Write a bytes object to a file descriptor.");
50777db96d56Sopenharmony_ci
50787db96d56Sopenharmony_ci#define OS_WRITE_METHODDEF    \
50797db96d56Sopenharmony_ci    {"write", _PyCFunction_CAST(os_write), METH_FASTCALL, os_write__doc__},
50807db96d56Sopenharmony_ci
50817db96d56Sopenharmony_cistatic Py_ssize_t
50827db96d56Sopenharmony_cios_write_impl(PyObject *module, int fd, Py_buffer *data);
50837db96d56Sopenharmony_ci
50847db96d56Sopenharmony_cistatic PyObject *
50857db96d56Sopenharmony_cios_write(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
50867db96d56Sopenharmony_ci{
50877db96d56Sopenharmony_ci    PyObject *return_value = NULL;
50887db96d56Sopenharmony_ci    int fd;
50897db96d56Sopenharmony_ci    Py_buffer data = {NULL, NULL};
50907db96d56Sopenharmony_ci    Py_ssize_t _return_value;
50917db96d56Sopenharmony_ci
50927db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("write", nargs, 2, 2)) {
50937db96d56Sopenharmony_ci        goto exit;
50947db96d56Sopenharmony_ci    }
50957db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
50967db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
50977db96d56Sopenharmony_ci        goto exit;
50987db96d56Sopenharmony_ci    }
50997db96d56Sopenharmony_ci    if (PyObject_GetBuffer(args[1], &data, PyBUF_SIMPLE) != 0) {
51007db96d56Sopenharmony_ci        goto exit;
51017db96d56Sopenharmony_ci    }
51027db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&data, 'C')) {
51037db96d56Sopenharmony_ci        _PyArg_BadArgument("write", "argument 2", "contiguous buffer", args[1]);
51047db96d56Sopenharmony_ci        goto exit;
51057db96d56Sopenharmony_ci    }
51067db96d56Sopenharmony_ci    _return_value = os_write_impl(module, fd, &data);
51077db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
51087db96d56Sopenharmony_ci        goto exit;
51097db96d56Sopenharmony_ci    }
51107db96d56Sopenharmony_ci    return_value = PyLong_FromSsize_t(_return_value);
51117db96d56Sopenharmony_ci
51127db96d56Sopenharmony_ciexit:
51137db96d56Sopenharmony_ci    /* Cleanup for data */
51147db96d56Sopenharmony_ci    if (data.obj) {
51157db96d56Sopenharmony_ci       PyBuffer_Release(&data);
51167db96d56Sopenharmony_ci    }
51177db96d56Sopenharmony_ci
51187db96d56Sopenharmony_ci    return return_value;
51197db96d56Sopenharmony_ci}
51207db96d56Sopenharmony_ci
51217db96d56Sopenharmony_ci#if defined(HAVE_SENDFILE) && defined(__APPLE__)
51227db96d56Sopenharmony_ci
51237db96d56Sopenharmony_ciPyDoc_STRVAR(os_sendfile__doc__,
51247db96d56Sopenharmony_ci"sendfile($module, /, out_fd, in_fd, offset, count, headers=(),\n"
51257db96d56Sopenharmony_ci"         trailers=(), flags=0)\n"
51267db96d56Sopenharmony_ci"--\n"
51277db96d56Sopenharmony_ci"\n"
51287db96d56Sopenharmony_ci"Copy count bytes from file descriptor in_fd to file descriptor out_fd.");
51297db96d56Sopenharmony_ci
51307db96d56Sopenharmony_ci#define OS_SENDFILE_METHODDEF    \
51317db96d56Sopenharmony_ci    {"sendfile", _PyCFunction_CAST(os_sendfile), METH_FASTCALL|METH_KEYWORDS, os_sendfile__doc__},
51327db96d56Sopenharmony_ci
51337db96d56Sopenharmony_cistatic PyObject *
51347db96d56Sopenharmony_cios_sendfile_impl(PyObject *module, int out_fd, int in_fd, Py_off_t offset,
51357db96d56Sopenharmony_ci                 Py_off_t sbytes, PyObject *headers, PyObject *trailers,
51367db96d56Sopenharmony_ci                 int flags);
51377db96d56Sopenharmony_ci
51387db96d56Sopenharmony_cistatic PyObject *
51397db96d56Sopenharmony_cios_sendfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
51407db96d56Sopenharmony_ci{
51417db96d56Sopenharmony_ci    PyObject *return_value = NULL;
51427db96d56Sopenharmony_ci    static const char * const _keywords[] = {"out_fd", "in_fd", "offset", "count", "headers", "trailers", "flags", NULL};
51437db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "sendfile", 0};
51447db96d56Sopenharmony_ci    PyObject *argsbuf[7];
51457db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 4;
51467db96d56Sopenharmony_ci    int out_fd;
51477db96d56Sopenharmony_ci    int in_fd;
51487db96d56Sopenharmony_ci    Py_off_t offset;
51497db96d56Sopenharmony_ci    Py_off_t sbytes;
51507db96d56Sopenharmony_ci    PyObject *headers = NULL;
51517db96d56Sopenharmony_ci    PyObject *trailers = NULL;
51527db96d56Sopenharmony_ci    int flags = 0;
51537db96d56Sopenharmony_ci
51547db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 4, 7, 0, argsbuf);
51557db96d56Sopenharmony_ci    if (!args) {
51567db96d56Sopenharmony_ci        goto exit;
51577db96d56Sopenharmony_ci    }
51587db96d56Sopenharmony_ci    out_fd = _PyLong_AsInt(args[0]);
51597db96d56Sopenharmony_ci    if (out_fd == -1 && PyErr_Occurred()) {
51607db96d56Sopenharmony_ci        goto exit;
51617db96d56Sopenharmony_ci    }
51627db96d56Sopenharmony_ci    in_fd = _PyLong_AsInt(args[1]);
51637db96d56Sopenharmony_ci    if (in_fd == -1 && PyErr_Occurred()) {
51647db96d56Sopenharmony_ci        goto exit;
51657db96d56Sopenharmony_ci    }
51667db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[2], &offset)) {
51677db96d56Sopenharmony_ci        goto exit;
51687db96d56Sopenharmony_ci    }
51697db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[3], &sbytes)) {
51707db96d56Sopenharmony_ci        goto exit;
51717db96d56Sopenharmony_ci    }
51727db96d56Sopenharmony_ci    if (!noptargs) {
51737db96d56Sopenharmony_ci        goto skip_optional_pos;
51747db96d56Sopenharmony_ci    }
51757db96d56Sopenharmony_ci    if (args[4]) {
51767db96d56Sopenharmony_ci        headers = args[4];
51777db96d56Sopenharmony_ci        if (!--noptargs) {
51787db96d56Sopenharmony_ci            goto skip_optional_pos;
51797db96d56Sopenharmony_ci        }
51807db96d56Sopenharmony_ci    }
51817db96d56Sopenharmony_ci    if (args[5]) {
51827db96d56Sopenharmony_ci        trailers = args[5];
51837db96d56Sopenharmony_ci        if (!--noptargs) {
51847db96d56Sopenharmony_ci            goto skip_optional_pos;
51857db96d56Sopenharmony_ci        }
51867db96d56Sopenharmony_ci    }
51877db96d56Sopenharmony_ci    flags = _PyLong_AsInt(args[6]);
51887db96d56Sopenharmony_ci    if (flags == -1 && PyErr_Occurred()) {
51897db96d56Sopenharmony_ci        goto exit;
51907db96d56Sopenharmony_ci    }
51917db96d56Sopenharmony_ciskip_optional_pos:
51927db96d56Sopenharmony_ci    return_value = os_sendfile_impl(module, out_fd, in_fd, offset, sbytes, headers, trailers, flags);
51937db96d56Sopenharmony_ci
51947db96d56Sopenharmony_ciexit:
51957db96d56Sopenharmony_ci    return return_value;
51967db96d56Sopenharmony_ci}
51977db96d56Sopenharmony_ci
51987db96d56Sopenharmony_ci#endif /* defined(HAVE_SENDFILE) && defined(__APPLE__) */
51997db96d56Sopenharmony_ci
52007db96d56Sopenharmony_ci#if defined(HAVE_SENDFILE) && !defined(__APPLE__) && (defined(__FreeBSD__) || defined(__DragonFly__))
52017db96d56Sopenharmony_ci
52027db96d56Sopenharmony_ciPyDoc_STRVAR(os_sendfile__doc__,
52037db96d56Sopenharmony_ci"sendfile($module, /, out_fd, in_fd, offset, count, headers=(),\n"
52047db96d56Sopenharmony_ci"         trailers=(), flags=0)\n"
52057db96d56Sopenharmony_ci"--\n"
52067db96d56Sopenharmony_ci"\n"
52077db96d56Sopenharmony_ci"Copy count bytes from file descriptor in_fd to file descriptor out_fd.");
52087db96d56Sopenharmony_ci
52097db96d56Sopenharmony_ci#define OS_SENDFILE_METHODDEF    \
52107db96d56Sopenharmony_ci    {"sendfile", _PyCFunction_CAST(os_sendfile), METH_FASTCALL|METH_KEYWORDS, os_sendfile__doc__},
52117db96d56Sopenharmony_ci
52127db96d56Sopenharmony_cistatic PyObject *
52137db96d56Sopenharmony_cios_sendfile_impl(PyObject *module, int out_fd, int in_fd, Py_off_t offset,
52147db96d56Sopenharmony_ci                 Py_ssize_t count, PyObject *headers, PyObject *trailers,
52157db96d56Sopenharmony_ci                 int flags);
52167db96d56Sopenharmony_ci
52177db96d56Sopenharmony_cistatic PyObject *
52187db96d56Sopenharmony_cios_sendfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
52197db96d56Sopenharmony_ci{
52207db96d56Sopenharmony_ci    PyObject *return_value = NULL;
52217db96d56Sopenharmony_ci    static const char * const _keywords[] = {"out_fd", "in_fd", "offset", "count", "headers", "trailers", "flags", NULL};
52227db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "sendfile", 0};
52237db96d56Sopenharmony_ci    PyObject *argsbuf[7];
52247db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 4;
52257db96d56Sopenharmony_ci    int out_fd;
52267db96d56Sopenharmony_ci    int in_fd;
52277db96d56Sopenharmony_ci    Py_off_t offset;
52287db96d56Sopenharmony_ci    Py_ssize_t count;
52297db96d56Sopenharmony_ci    PyObject *headers = NULL;
52307db96d56Sopenharmony_ci    PyObject *trailers = NULL;
52317db96d56Sopenharmony_ci    int flags = 0;
52327db96d56Sopenharmony_ci
52337db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 4, 7, 0, argsbuf);
52347db96d56Sopenharmony_ci    if (!args) {
52357db96d56Sopenharmony_ci        goto exit;
52367db96d56Sopenharmony_ci    }
52377db96d56Sopenharmony_ci    out_fd = _PyLong_AsInt(args[0]);
52387db96d56Sopenharmony_ci    if (out_fd == -1 && PyErr_Occurred()) {
52397db96d56Sopenharmony_ci        goto exit;
52407db96d56Sopenharmony_ci    }
52417db96d56Sopenharmony_ci    in_fd = _PyLong_AsInt(args[1]);
52427db96d56Sopenharmony_ci    if (in_fd == -1 && PyErr_Occurred()) {
52437db96d56Sopenharmony_ci        goto exit;
52447db96d56Sopenharmony_ci    }
52457db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[2], &offset)) {
52467db96d56Sopenharmony_ci        goto exit;
52477db96d56Sopenharmony_ci    }
52487db96d56Sopenharmony_ci    {
52497db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
52507db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(args[3]);
52517db96d56Sopenharmony_ci        if (iobj != NULL) {
52527db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
52537db96d56Sopenharmony_ci            Py_DECREF(iobj);
52547db96d56Sopenharmony_ci        }
52557db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
52567db96d56Sopenharmony_ci            goto exit;
52577db96d56Sopenharmony_ci        }
52587db96d56Sopenharmony_ci        count = ival;
52597db96d56Sopenharmony_ci    }
52607db96d56Sopenharmony_ci    if (!noptargs) {
52617db96d56Sopenharmony_ci        goto skip_optional_pos;
52627db96d56Sopenharmony_ci    }
52637db96d56Sopenharmony_ci    if (args[4]) {
52647db96d56Sopenharmony_ci        headers = args[4];
52657db96d56Sopenharmony_ci        if (!--noptargs) {
52667db96d56Sopenharmony_ci            goto skip_optional_pos;
52677db96d56Sopenharmony_ci        }
52687db96d56Sopenharmony_ci    }
52697db96d56Sopenharmony_ci    if (args[5]) {
52707db96d56Sopenharmony_ci        trailers = args[5];
52717db96d56Sopenharmony_ci        if (!--noptargs) {
52727db96d56Sopenharmony_ci            goto skip_optional_pos;
52737db96d56Sopenharmony_ci        }
52747db96d56Sopenharmony_ci    }
52757db96d56Sopenharmony_ci    flags = _PyLong_AsInt(args[6]);
52767db96d56Sopenharmony_ci    if (flags == -1 && PyErr_Occurred()) {
52777db96d56Sopenharmony_ci        goto exit;
52787db96d56Sopenharmony_ci    }
52797db96d56Sopenharmony_ciskip_optional_pos:
52807db96d56Sopenharmony_ci    return_value = os_sendfile_impl(module, out_fd, in_fd, offset, count, headers, trailers, flags);
52817db96d56Sopenharmony_ci
52827db96d56Sopenharmony_ciexit:
52837db96d56Sopenharmony_ci    return return_value;
52847db96d56Sopenharmony_ci}
52857db96d56Sopenharmony_ci
52867db96d56Sopenharmony_ci#endif /* defined(HAVE_SENDFILE) && !defined(__APPLE__) && (defined(__FreeBSD__) || defined(__DragonFly__)) */
52877db96d56Sopenharmony_ci
52887db96d56Sopenharmony_ci#if defined(HAVE_SENDFILE) && !defined(__APPLE__) && !(defined(__FreeBSD__) || defined(__DragonFly__))
52897db96d56Sopenharmony_ci
52907db96d56Sopenharmony_ciPyDoc_STRVAR(os_sendfile__doc__,
52917db96d56Sopenharmony_ci"sendfile($module, /, out_fd, in_fd, offset, count)\n"
52927db96d56Sopenharmony_ci"--\n"
52937db96d56Sopenharmony_ci"\n"
52947db96d56Sopenharmony_ci"Copy count bytes from file descriptor in_fd to file descriptor out_fd.");
52957db96d56Sopenharmony_ci
52967db96d56Sopenharmony_ci#define OS_SENDFILE_METHODDEF    \
52977db96d56Sopenharmony_ci    {"sendfile", _PyCFunction_CAST(os_sendfile), METH_FASTCALL|METH_KEYWORDS, os_sendfile__doc__},
52987db96d56Sopenharmony_ci
52997db96d56Sopenharmony_cistatic PyObject *
53007db96d56Sopenharmony_cios_sendfile_impl(PyObject *module, int out_fd, int in_fd, PyObject *offobj,
53017db96d56Sopenharmony_ci                 Py_ssize_t count);
53027db96d56Sopenharmony_ci
53037db96d56Sopenharmony_cistatic PyObject *
53047db96d56Sopenharmony_cios_sendfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
53057db96d56Sopenharmony_ci{
53067db96d56Sopenharmony_ci    PyObject *return_value = NULL;
53077db96d56Sopenharmony_ci    static const char * const _keywords[] = {"out_fd", "in_fd", "offset", "count", NULL};
53087db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "sendfile", 0};
53097db96d56Sopenharmony_ci    PyObject *argsbuf[4];
53107db96d56Sopenharmony_ci    int out_fd;
53117db96d56Sopenharmony_ci    int in_fd;
53127db96d56Sopenharmony_ci    PyObject *offobj;
53137db96d56Sopenharmony_ci    Py_ssize_t count;
53147db96d56Sopenharmony_ci
53157db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 4, 4, 0, argsbuf);
53167db96d56Sopenharmony_ci    if (!args) {
53177db96d56Sopenharmony_ci        goto exit;
53187db96d56Sopenharmony_ci    }
53197db96d56Sopenharmony_ci    out_fd = _PyLong_AsInt(args[0]);
53207db96d56Sopenharmony_ci    if (out_fd == -1 && PyErr_Occurred()) {
53217db96d56Sopenharmony_ci        goto exit;
53227db96d56Sopenharmony_ci    }
53237db96d56Sopenharmony_ci    in_fd = _PyLong_AsInt(args[1]);
53247db96d56Sopenharmony_ci    if (in_fd == -1 && PyErr_Occurred()) {
53257db96d56Sopenharmony_ci        goto exit;
53267db96d56Sopenharmony_ci    }
53277db96d56Sopenharmony_ci    offobj = args[2];
53287db96d56Sopenharmony_ci    {
53297db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
53307db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(args[3]);
53317db96d56Sopenharmony_ci        if (iobj != NULL) {
53327db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
53337db96d56Sopenharmony_ci            Py_DECREF(iobj);
53347db96d56Sopenharmony_ci        }
53357db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
53367db96d56Sopenharmony_ci            goto exit;
53377db96d56Sopenharmony_ci        }
53387db96d56Sopenharmony_ci        count = ival;
53397db96d56Sopenharmony_ci    }
53407db96d56Sopenharmony_ci    return_value = os_sendfile_impl(module, out_fd, in_fd, offobj, count);
53417db96d56Sopenharmony_ci
53427db96d56Sopenharmony_ciexit:
53437db96d56Sopenharmony_ci    return return_value;
53447db96d56Sopenharmony_ci}
53457db96d56Sopenharmony_ci
53467db96d56Sopenharmony_ci#endif /* defined(HAVE_SENDFILE) && !defined(__APPLE__) && !(defined(__FreeBSD__) || defined(__DragonFly__)) */
53477db96d56Sopenharmony_ci
53487db96d56Sopenharmony_ci#if defined(__APPLE__)
53497db96d56Sopenharmony_ci
53507db96d56Sopenharmony_ciPyDoc_STRVAR(os__fcopyfile__doc__,
53517db96d56Sopenharmony_ci"_fcopyfile($module, in_fd, out_fd, flags, /)\n"
53527db96d56Sopenharmony_ci"--\n"
53537db96d56Sopenharmony_ci"\n"
53547db96d56Sopenharmony_ci"Efficiently copy content or metadata of 2 regular file descriptors (macOS).");
53557db96d56Sopenharmony_ci
53567db96d56Sopenharmony_ci#define OS__FCOPYFILE_METHODDEF    \
53577db96d56Sopenharmony_ci    {"_fcopyfile", _PyCFunction_CAST(os__fcopyfile), METH_FASTCALL, os__fcopyfile__doc__},
53587db96d56Sopenharmony_ci
53597db96d56Sopenharmony_cistatic PyObject *
53607db96d56Sopenharmony_cios__fcopyfile_impl(PyObject *module, int in_fd, int out_fd, int flags);
53617db96d56Sopenharmony_ci
53627db96d56Sopenharmony_cistatic PyObject *
53637db96d56Sopenharmony_cios__fcopyfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
53647db96d56Sopenharmony_ci{
53657db96d56Sopenharmony_ci    PyObject *return_value = NULL;
53667db96d56Sopenharmony_ci    int in_fd;
53677db96d56Sopenharmony_ci    int out_fd;
53687db96d56Sopenharmony_ci    int flags;
53697db96d56Sopenharmony_ci
53707db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("_fcopyfile", nargs, 3, 3)) {
53717db96d56Sopenharmony_ci        goto exit;
53727db96d56Sopenharmony_ci    }
53737db96d56Sopenharmony_ci    in_fd = _PyLong_AsInt(args[0]);
53747db96d56Sopenharmony_ci    if (in_fd == -1 && PyErr_Occurred()) {
53757db96d56Sopenharmony_ci        goto exit;
53767db96d56Sopenharmony_ci    }
53777db96d56Sopenharmony_ci    out_fd = _PyLong_AsInt(args[1]);
53787db96d56Sopenharmony_ci    if (out_fd == -1 && PyErr_Occurred()) {
53797db96d56Sopenharmony_ci        goto exit;
53807db96d56Sopenharmony_ci    }
53817db96d56Sopenharmony_ci    flags = _PyLong_AsInt(args[2]);
53827db96d56Sopenharmony_ci    if (flags == -1 && PyErr_Occurred()) {
53837db96d56Sopenharmony_ci        goto exit;
53847db96d56Sopenharmony_ci    }
53857db96d56Sopenharmony_ci    return_value = os__fcopyfile_impl(module, in_fd, out_fd, flags);
53867db96d56Sopenharmony_ci
53877db96d56Sopenharmony_ciexit:
53887db96d56Sopenharmony_ci    return return_value;
53897db96d56Sopenharmony_ci}
53907db96d56Sopenharmony_ci
53917db96d56Sopenharmony_ci#endif /* defined(__APPLE__) */
53927db96d56Sopenharmony_ci
53937db96d56Sopenharmony_ciPyDoc_STRVAR(os_fstat__doc__,
53947db96d56Sopenharmony_ci"fstat($module, /, fd)\n"
53957db96d56Sopenharmony_ci"--\n"
53967db96d56Sopenharmony_ci"\n"
53977db96d56Sopenharmony_ci"Perform a stat system call on the given file descriptor.\n"
53987db96d56Sopenharmony_ci"\n"
53997db96d56Sopenharmony_ci"Like stat(), but for an open file descriptor.\n"
54007db96d56Sopenharmony_ci"Equivalent to os.stat(fd).");
54017db96d56Sopenharmony_ci
54027db96d56Sopenharmony_ci#define OS_FSTAT_METHODDEF    \
54037db96d56Sopenharmony_ci    {"fstat", _PyCFunction_CAST(os_fstat), METH_FASTCALL|METH_KEYWORDS, os_fstat__doc__},
54047db96d56Sopenharmony_ci
54057db96d56Sopenharmony_cistatic PyObject *
54067db96d56Sopenharmony_cios_fstat_impl(PyObject *module, int fd);
54077db96d56Sopenharmony_ci
54087db96d56Sopenharmony_cistatic PyObject *
54097db96d56Sopenharmony_cios_fstat(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
54107db96d56Sopenharmony_ci{
54117db96d56Sopenharmony_ci    PyObject *return_value = NULL;
54127db96d56Sopenharmony_ci    static const char * const _keywords[] = {"fd", NULL};
54137db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "fstat", 0};
54147db96d56Sopenharmony_ci    PyObject *argsbuf[1];
54157db96d56Sopenharmony_ci    int fd;
54167db96d56Sopenharmony_ci
54177db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
54187db96d56Sopenharmony_ci    if (!args) {
54197db96d56Sopenharmony_ci        goto exit;
54207db96d56Sopenharmony_ci    }
54217db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
54227db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
54237db96d56Sopenharmony_ci        goto exit;
54247db96d56Sopenharmony_ci    }
54257db96d56Sopenharmony_ci    return_value = os_fstat_impl(module, fd);
54267db96d56Sopenharmony_ci
54277db96d56Sopenharmony_ciexit:
54287db96d56Sopenharmony_ci    return return_value;
54297db96d56Sopenharmony_ci}
54307db96d56Sopenharmony_ci
54317db96d56Sopenharmony_ciPyDoc_STRVAR(os_isatty__doc__,
54327db96d56Sopenharmony_ci"isatty($module, fd, /)\n"
54337db96d56Sopenharmony_ci"--\n"
54347db96d56Sopenharmony_ci"\n"
54357db96d56Sopenharmony_ci"Return True if the fd is connected to a terminal.\n"
54367db96d56Sopenharmony_ci"\n"
54377db96d56Sopenharmony_ci"Return True if the file descriptor is an open file descriptor\n"
54387db96d56Sopenharmony_ci"connected to the slave end of a terminal.");
54397db96d56Sopenharmony_ci
54407db96d56Sopenharmony_ci#define OS_ISATTY_METHODDEF    \
54417db96d56Sopenharmony_ci    {"isatty", (PyCFunction)os_isatty, METH_O, os_isatty__doc__},
54427db96d56Sopenharmony_ci
54437db96d56Sopenharmony_cistatic int
54447db96d56Sopenharmony_cios_isatty_impl(PyObject *module, int fd);
54457db96d56Sopenharmony_ci
54467db96d56Sopenharmony_cistatic PyObject *
54477db96d56Sopenharmony_cios_isatty(PyObject *module, PyObject *arg)
54487db96d56Sopenharmony_ci{
54497db96d56Sopenharmony_ci    PyObject *return_value = NULL;
54507db96d56Sopenharmony_ci    int fd;
54517db96d56Sopenharmony_ci    int _return_value;
54527db96d56Sopenharmony_ci
54537db96d56Sopenharmony_ci    fd = _PyLong_AsInt(arg);
54547db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
54557db96d56Sopenharmony_ci        goto exit;
54567db96d56Sopenharmony_ci    }
54577db96d56Sopenharmony_ci    _return_value = os_isatty_impl(module, fd);
54587db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
54597db96d56Sopenharmony_ci        goto exit;
54607db96d56Sopenharmony_ci    }
54617db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
54627db96d56Sopenharmony_ci
54637db96d56Sopenharmony_ciexit:
54647db96d56Sopenharmony_ci    return return_value;
54657db96d56Sopenharmony_ci}
54667db96d56Sopenharmony_ci
54677db96d56Sopenharmony_ci#if defined(HAVE_PIPE)
54687db96d56Sopenharmony_ci
54697db96d56Sopenharmony_ciPyDoc_STRVAR(os_pipe__doc__,
54707db96d56Sopenharmony_ci"pipe($module, /)\n"
54717db96d56Sopenharmony_ci"--\n"
54727db96d56Sopenharmony_ci"\n"
54737db96d56Sopenharmony_ci"Create a pipe.\n"
54747db96d56Sopenharmony_ci"\n"
54757db96d56Sopenharmony_ci"Returns a tuple of two file descriptors:\n"
54767db96d56Sopenharmony_ci"  (read_fd, write_fd)");
54777db96d56Sopenharmony_ci
54787db96d56Sopenharmony_ci#define OS_PIPE_METHODDEF    \
54797db96d56Sopenharmony_ci    {"pipe", (PyCFunction)os_pipe, METH_NOARGS, os_pipe__doc__},
54807db96d56Sopenharmony_ci
54817db96d56Sopenharmony_cistatic PyObject *
54827db96d56Sopenharmony_cios_pipe_impl(PyObject *module);
54837db96d56Sopenharmony_ci
54847db96d56Sopenharmony_cistatic PyObject *
54857db96d56Sopenharmony_cios_pipe(PyObject *module, PyObject *Py_UNUSED(ignored))
54867db96d56Sopenharmony_ci{
54877db96d56Sopenharmony_ci    return os_pipe_impl(module);
54887db96d56Sopenharmony_ci}
54897db96d56Sopenharmony_ci
54907db96d56Sopenharmony_ci#endif /* defined(HAVE_PIPE) */
54917db96d56Sopenharmony_ci
54927db96d56Sopenharmony_ci#if defined(HAVE_PIPE2)
54937db96d56Sopenharmony_ci
54947db96d56Sopenharmony_ciPyDoc_STRVAR(os_pipe2__doc__,
54957db96d56Sopenharmony_ci"pipe2($module, flags, /)\n"
54967db96d56Sopenharmony_ci"--\n"
54977db96d56Sopenharmony_ci"\n"
54987db96d56Sopenharmony_ci"Create a pipe with flags set atomically.\n"
54997db96d56Sopenharmony_ci"\n"
55007db96d56Sopenharmony_ci"Returns a tuple of two file descriptors:\n"
55017db96d56Sopenharmony_ci"  (read_fd, write_fd)\n"
55027db96d56Sopenharmony_ci"\n"
55037db96d56Sopenharmony_ci"flags can be constructed by ORing together one or more of these values:\n"
55047db96d56Sopenharmony_ci"O_NONBLOCK, O_CLOEXEC.");
55057db96d56Sopenharmony_ci
55067db96d56Sopenharmony_ci#define OS_PIPE2_METHODDEF    \
55077db96d56Sopenharmony_ci    {"pipe2", (PyCFunction)os_pipe2, METH_O, os_pipe2__doc__},
55087db96d56Sopenharmony_ci
55097db96d56Sopenharmony_cistatic PyObject *
55107db96d56Sopenharmony_cios_pipe2_impl(PyObject *module, int flags);
55117db96d56Sopenharmony_ci
55127db96d56Sopenharmony_cistatic PyObject *
55137db96d56Sopenharmony_cios_pipe2(PyObject *module, PyObject *arg)
55147db96d56Sopenharmony_ci{
55157db96d56Sopenharmony_ci    PyObject *return_value = NULL;
55167db96d56Sopenharmony_ci    int flags;
55177db96d56Sopenharmony_ci
55187db96d56Sopenharmony_ci    flags = _PyLong_AsInt(arg);
55197db96d56Sopenharmony_ci    if (flags == -1 && PyErr_Occurred()) {
55207db96d56Sopenharmony_ci        goto exit;
55217db96d56Sopenharmony_ci    }
55227db96d56Sopenharmony_ci    return_value = os_pipe2_impl(module, flags);
55237db96d56Sopenharmony_ci
55247db96d56Sopenharmony_ciexit:
55257db96d56Sopenharmony_ci    return return_value;
55267db96d56Sopenharmony_ci}
55277db96d56Sopenharmony_ci
55287db96d56Sopenharmony_ci#endif /* defined(HAVE_PIPE2) */
55297db96d56Sopenharmony_ci
55307db96d56Sopenharmony_ci#if defined(HAVE_WRITEV)
55317db96d56Sopenharmony_ci
55327db96d56Sopenharmony_ciPyDoc_STRVAR(os_writev__doc__,
55337db96d56Sopenharmony_ci"writev($module, fd, buffers, /)\n"
55347db96d56Sopenharmony_ci"--\n"
55357db96d56Sopenharmony_ci"\n"
55367db96d56Sopenharmony_ci"Iterate over buffers, and write the contents of each to a file descriptor.\n"
55377db96d56Sopenharmony_ci"\n"
55387db96d56Sopenharmony_ci"Returns the total number of bytes written.\n"
55397db96d56Sopenharmony_ci"buffers must be a sequence of bytes-like objects.");
55407db96d56Sopenharmony_ci
55417db96d56Sopenharmony_ci#define OS_WRITEV_METHODDEF    \
55427db96d56Sopenharmony_ci    {"writev", _PyCFunction_CAST(os_writev), METH_FASTCALL, os_writev__doc__},
55437db96d56Sopenharmony_ci
55447db96d56Sopenharmony_cistatic Py_ssize_t
55457db96d56Sopenharmony_cios_writev_impl(PyObject *module, int fd, PyObject *buffers);
55467db96d56Sopenharmony_ci
55477db96d56Sopenharmony_cistatic PyObject *
55487db96d56Sopenharmony_cios_writev(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
55497db96d56Sopenharmony_ci{
55507db96d56Sopenharmony_ci    PyObject *return_value = NULL;
55517db96d56Sopenharmony_ci    int fd;
55527db96d56Sopenharmony_ci    PyObject *buffers;
55537db96d56Sopenharmony_ci    Py_ssize_t _return_value;
55547db96d56Sopenharmony_ci
55557db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("writev", nargs, 2, 2)) {
55567db96d56Sopenharmony_ci        goto exit;
55577db96d56Sopenharmony_ci    }
55587db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
55597db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
55607db96d56Sopenharmony_ci        goto exit;
55617db96d56Sopenharmony_ci    }
55627db96d56Sopenharmony_ci    buffers = args[1];
55637db96d56Sopenharmony_ci    _return_value = os_writev_impl(module, fd, buffers);
55647db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
55657db96d56Sopenharmony_ci        goto exit;
55667db96d56Sopenharmony_ci    }
55677db96d56Sopenharmony_ci    return_value = PyLong_FromSsize_t(_return_value);
55687db96d56Sopenharmony_ci
55697db96d56Sopenharmony_ciexit:
55707db96d56Sopenharmony_ci    return return_value;
55717db96d56Sopenharmony_ci}
55727db96d56Sopenharmony_ci
55737db96d56Sopenharmony_ci#endif /* defined(HAVE_WRITEV) */
55747db96d56Sopenharmony_ci
55757db96d56Sopenharmony_ci#if defined(HAVE_PWRITE)
55767db96d56Sopenharmony_ci
55777db96d56Sopenharmony_ciPyDoc_STRVAR(os_pwrite__doc__,
55787db96d56Sopenharmony_ci"pwrite($module, fd, buffer, offset, /)\n"
55797db96d56Sopenharmony_ci"--\n"
55807db96d56Sopenharmony_ci"\n"
55817db96d56Sopenharmony_ci"Write bytes to a file descriptor starting at a particular offset.\n"
55827db96d56Sopenharmony_ci"\n"
55837db96d56Sopenharmony_ci"Write buffer to fd, starting at offset bytes from the beginning of\n"
55847db96d56Sopenharmony_ci"the file.  Returns the number of bytes writte.  Does not change the\n"
55857db96d56Sopenharmony_ci"current file offset.");
55867db96d56Sopenharmony_ci
55877db96d56Sopenharmony_ci#define OS_PWRITE_METHODDEF    \
55887db96d56Sopenharmony_ci    {"pwrite", _PyCFunction_CAST(os_pwrite), METH_FASTCALL, os_pwrite__doc__},
55897db96d56Sopenharmony_ci
55907db96d56Sopenharmony_cistatic Py_ssize_t
55917db96d56Sopenharmony_cios_pwrite_impl(PyObject *module, int fd, Py_buffer *buffer, Py_off_t offset);
55927db96d56Sopenharmony_ci
55937db96d56Sopenharmony_cistatic PyObject *
55947db96d56Sopenharmony_cios_pwrite(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
55957db96d56Sopenharmony_ci{
55967db96d56Sopenharmony_ci    PyObject *return_value = NULL;
55977db96d56Sopenharmony_ci    int fd;
55987db96d56Sopenharmony_ci    Py_buffer buffer = {NULL, NULL};
55997db96d56Sopenharmony_ci    Py_off_t offset;
56007db96d56Sopenharmony_ci    Py_ssize_t _return_value;
56017db96d56Sopenharmony_ci
56027db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("pwrite", nargs, 3, 3)) {
56037db96d56Sopenharmony_ci        goto exit;
56047db96d56Sopenharmony_ci    }
56057db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
56067db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
56077db96d56Sopenharmony_ci        goto exit;
56087db96d56Sopenharmony_ci    }
56097db96d56Sopenharmony_ci    if (PyObject_GetBuffer(args[1], &buffer, PyBUF_SIMPLE) != 0) {
56107db96d56Sopenharmony_ci        goto exit;
56117db96d56Sopenharmony_ci    }
56127db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&buffer, 'C')) {
56137db96d56Sopenharmony_ci        _PyArg_BadArgument("pwrite", "argument 2", "contiguous buffer", args[1]);
56147db96d56Sopenharmony_ci        goto exit;
56157db96d56Sopenharmony_ci    }
56167db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[2], &offset)) {
56177db96d56Sopenharmony_ci        goto exit;
56187db96d56Sopenharmony_ci    }
56197db96d56Sopenharmony_ci    _return_value = os_pwrite_impl(module, fd, &buffer, offset);
56207db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
56217db96d56Sopenharmony_ci        goto exit;
56227db96d56Sopenharmony_ci    }
56237db96d56Sopenharmony_ci    return_value = PyLong_FromSsize_t(_return_value);
56247db96d56Sopenharmony_ci
56257db96d56Sopenharmony_ciexit:
56267db96d56Sopenharmony_ci    /* Cleanup for buffer */
56277db96d56Sopenharmony_ci    if (buffer.obj) {
56287db96d56Sopenharmony_ci       PyBuffer_Release(&buffer);
56297db96d56Sopenharmony_ci    }
56307db96d56Sopenharmony_ci
56317db96d56Sopenharmony_ci    return return_value;
56327db96d56Sopenharmony_ci}
56337db96d56Sopenharmony_ci
56347db96d56Sopenharmony_ci#endif /* defined(HAVE_PWRITE) */
56357db96d56Sopenharmony_ci
56367db96d56Sopenharmony_ci#if (defined(HAVE_PWRITEV) || defined (HAVE_PWRITEV2))
56377db96d56Sopenharmony_ci
56387db96d56Sopenharmony_ciPyDoc_STRVAR(os_pwritev__doc__,
56397db96d56Sopenharmony_ci"pwritev($module, fd, buffers, offset, flags=0, /)\n"
56407db96d56Sopenharmony_ci"--\n"
56417db96d56Sopenharmony_ci"\n"
56427db96d56Sopenharmony_ci"Writes the contents of bytes-like objects to a file descriptor at a given offset.\n"
56437db96d56Sopenharmony_ci"\n"
56447db96d56Sopenharmony_ci"Combines the functionality of writev() and pwrite(). All buffers must be a sequence\n"
56457db96d56Sopenharmony_ci"of bytes-like objects. Buffers are processed in array order. Entire contents of first\n"
56467db96d56Sopenharmony_ci"buffer is written before proceeding to second, and so on. The operating system may\n"
56477db96d56Sopenharmony_ci"set a limit (sysconf() value SC_IOV_MAX) on the number of buffers that can be used.\n"
56487db96d56Sopenharmony_ci"This function writes the contents of each object to the file descriptor and returns\n"
56497db96d56Sopenharmony_ci"the total number of bytes written.\n"
56507db96d56Sopenharmony_ci"\n"
56517db96d56Sopenharmony_ci"The flags argument contains a bitwise OR of zero or more of the following flags:\n"
56527db96d56Sopenharmony_ci"\n"
56537db96d56Sopenharmony_ci"- RWF_DSYNC\n"
56547db96d56Sopenharmony_ci"- RWF_SYNC\n"
56557db96d56Sopenharmony_ci"- RWF_APPEND\n"
56567db96d56Sopenharmony_ci"\n"
56577db96d56Sopenharmony_ci"Using non-zero flags requires Linux 4.7 or newer.");
56587db96d56Sopenharmony_ci
56597db96d56Sopenharmony_ci#define OS_PWRITEV_METHODDEF    \
56607db96d56Sopenharmony_ci    {"pwritev", _PyCFunction_CAST(os_pwritev), METH_FASTCALL, os_pwritev__doc__},
56617db96d56Sopenharmony_ci
56627db96d56Sopenharmony_cistatic Py_ssize_t
56637db96d56Sopenharmony_cios_pwritev_impl(PyObject *module, int fd, PyObject *buffers, Py_off_t offset,
56647db96d56Sopenharmony_ci                int flags);
56657db96d56Sopenharmony_ci
56667db96d56Sopenharmony_cistatic PyObject *
56677db96d56Sopenharmony_cios_pwritev(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
56687db96d56Sopenharmony_ci{
56697db96d56Sopenharmony_ci    PyObject *return_value = NULL;
56707db96d56Sopenharmony_ci    int fd;
56717db96d56Sopenharmony_ci    PyObject *buffers;
56727db96d56Sopenharmony_ci    Py_off_t offset;
56737db96d56Sopenharmony_ci    int flags = 0;
56747db96d56Sopenharmony_ci    Py_ssize_t _return_value;
56757db96d56Sopenharmony_ci
56767db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("pwritev", nargs, 3, 4)) {
56777db96d56Sopenharmony_ci        goto exit;
56787db96d56Sopenharmony_ci    }
56797db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
56807db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
56817db96d56Sopenharmony_ci        goto exit;
56827db96d56Sopenharmony_ci    }
56837db96d56Sopenharmony_ci    buffers = args[1];
56847db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[2], &offset)) {
56857db96d56Sopenharmony_ci        goto exit;
56867db96d56Sopenharmony_ci    }
56877db96d56Sopenharmony_ci    if (nargs < 4) {
56887db96d56Sopenharmony_ci        goto skip_optional;
56897db96d56Sopenharmony_ci    }
56907db96d56Sopenharmony_ci    flags = _PyLong_AsInt(args[3]);
56917db96d56Sopenharmony_ci    if (flags == -1 && PyErr_Occurred()) {
56927db96d56Sopenharmony_ci        goto exit;
56937db96d56Sopenharmony_ci    }
56947db96d56Sopenharmony_ciskip_optional:
56957db96d56Sopenharmony_ci    _return_value = os_pwritev_impl(module, fd, buffers, offset, flags);
56967db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
56977db96d56Sopenharmony_ci        goto exit;
56987db96d56Sopenharmony_ci    }
56997db96d56Sopenharmony_ci    return_value = PyLong_FromSsize_t(_return_value);
57007db96d56Sopenharmony_ci
57017db96d56Sopenharmony_ciexit:
57027db96d56Sopenharmony_ci    return return_value;
57037db96d56Sopenharmony_ci}
57047db96d56Sopenharmony_ci
57057db96d56Sopenharmony_ci#endif /* (defined(HAVE_PWRITEV) || defined (HAVE_PWRITEV2)) */
57067db96d56Sopenharmony_ci
57077db96d56Sopenharmony_ci#if defined(HAVE_COPY_FILE_RANGE)
57087db96d56Sopenharmony_ci
57097db96d56Sopenharmony_ciPyDoc_STRVAR(os_copy_file_range__doc__,
57107db96d56Sopenharmony_ci"copy_file_range($module, /, src, dst, count, offset_src=None,\n"
57117db96d56Sopenharmony_ci"                offset_dst=None)\n"
57127db96d56Sopenharmony_ci"--\n"
57137db96d56Sopenharmony_ci"\n"
57147db96d56Sopenharmony_ci"Copy count bytes from one file descriptor to another.\n"
57157db96d56Sopenharmony_ci"\n"
57167db96d56Sopenharmony_ci"  src\n"
57177db96d56Sopenharmony_ci"    Source file descriptor.\n"
57187db96d56Sopenharmony_ci"  dst\n"
57197db96d56Sopenharmony_ci"    Destination file descriptor.\n"
57207db96d56Sopenharmony_ci"  count\n"
57217db96d56Sopenharmony_ci"    Number of bytes to copy.\n"
57227db96d56Sopenharmony_ci"  offset_src\n"
57237db96d56Sopenharmony_ci"    Starting offset in src.\n"
57247db96d56Sopenharmony_ci"  offset_dst\n"
57257db96d56Sopenharmony_ci"    Starting offset in dst.\n"
57267db96d56Sopenharmony_ci"\n"
57277db96d56Sopenharmony_ci"If offset_src is None, then src is read from the current position;\n"
57287db96d56Sopenharmony_ci"respectively for offset_dst.");
57297db96d56Sopenharmony_ci
57307db96d56Sopenharmony_ci#define OS_COPY_FILE_RANGE_METHODDEF    \
57317db96d56Sopenharmony_ci    {"copy_file_range", _PyCFunction_CAST(os_copy_file_range), METH_FASTCALL|METH_KEYWORDS, os_copy_file_range__doc__},
57327db96d56Sopenharmony_ci
57337db96d56Sopenharmony_cistatic PyObject *
57347db96d56Sopenharmony_cios_copy_file_range_impl(PyObject *module, int src, int dst, Py_ssize_t count,
57357db96d56Sopenharmony_ci                        PyObject *offset_src, PyObject *offset_dst);
57367db96d56Sopenharmony_ci
57377db96d56Sopenharmony_cistatic PyObject *
57387db96d56Sopenharmony_cios_copy_file_range(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
57397db96d56Sopenharmony_ci{
57407db96d56Sopenharmony_ci    PyObject *return_value = NULL;
57417db96d56Sopenharmony_ci    static const char * const _keywords[] = {"src", "dst", "count", "offset_src", "offset_dst", NULL};
57427db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "copy_file_range", 0};
57437db96d56Sopenharmony_ci    PyObject *argsbuf[5];
57447db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3;
57457db96d56Sopenharmony_ci    int src;
57467db96d56Sopenharmony_ci    int dst;
57477db96d56Sopenharmony_ci    Py_ssize_t count;
57487db96d56Sopenharmony_ci    PyObject *offset_src = Py_None;
57497db96d56Sopenharmony_ci    PyObject *offset_dst = Py_None;
57507db96d56Sopenharmony_ci
57517db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 5, 0, argsbuf);
57527db96d56Sopenharmony_ci    if (!args) {
57537db96d56Sopenharmony_ci        goto exit;
57547db96d56Sopenharmony_ci    }
57557db96d56Sopenharmony_ci    src = _PyLong_AsInt(args[0]);
57567db96d56Sopenharmony_ci    if (src == -1 && PyErr_Occurred()) {
57577db96d56Sopenharmony_ci        goto exit;
57587db96d56Sopenharmony_ci    }
57597db96d56Sopenharmony_ci    dst = _PyLong_AsInt(args[1]);
57607db96d56Sopenharmony_ci    if (dst == -1 && PyErr_Occurred()) {
57617db96d56Sopenharmony_ci        goto exit;
57627db96d56Sopenharmony_ci    }
57637db96d56Sopenharmony_ci    {
57647db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
57657db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(args[2]);
57667db96d56Sopenharmony_ci        if (iobj != NULL) {
57677db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
57687db96d56Sopenharmony_ci            Py_DECREF(iobj);
57697db96d56Sopenharmony_ci        }
57707db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
57717db96d56Sopenharmony_ci            goto exit;
57727db96d56Sopenharmony_ci        }
57737db96d56Sopenharmony_ci        count = ival;
57747db96d56Sopenharmony_ci    }
57757db96d56Sopenharmony_ci    if (!noptargs) {
57767db96d56Sopenharmony_ci        goto skip_optional_pos;
57777db96d56Sopenharmony_ci    }
57787db96d56Sopenharmony_ci    if (args[3]) {
57797db96d56Sopenharmony_ci        offset_src = args[3];
57807db96d56Sopenharmony_ci        if (!--noptargs) {
57817db96d56Sopenharmony_ci            goto skip_optional_pos;
57827db96d56Sopenharmony_ci        }
57837db96d56Sopenharmony_ci    }
57847db96d56Sopenharmony_ci    offset_dst = args[4];
57857db96d56Sopenharmony_ciskip_optional_pos:
57867db96d56Sopenharmony_ci    return_value = os_copy_file_range_impl(module, src, dst, count, offset_src, offset_dst);
57877db96d56Sopenharmony_ci
57887db96d56Sopenharmony_ciexit:
57897db96d56Sopenharmony_ci    return return_value;
57907db96d56Sopenharmony_ci}
57917db96d56Sopenharmony_ci
57927db96d56Sopenharmony_ci#endif /* defined(HAVE_COPY_FILE_RANGE) */
57937db96d56Sopenharmony_ci
57947db96d56Sopenharmony_ci#if ((defined(HAVE_SPLICE) && !defined(_AIX)))
57957db96d56Sopenharmony_ci
57967db96d56Sopenharmony_ciPyDoc_STRVAR(os_splice__doc__,
57977db96d56Sopenharmony_ci"splice($module, /, src, dst, count, offset_src=None, offset_dst=None,\n"
57987db96d56Sopenharmony_ci"       flags=0)\n"
57997db96d56Sopenharmony_ci"--\n"
58007db96d56Sopenharmony_ci"\n"
58017db96d56Sopenharmony_ci"Transfer count bytes from one pipe to a descriptor or vice versa.\n"
58027db96d56Sopenharmony_ci"\n"
58037db96d56Sopenharmony_ci"  src\n"
58047db96d56Sopenharmony_ci"    Source file descriptor.\n"
58057db96d56Sopenharmony_ci"  dst\n"
58067db96d56Sopenharmony_ci"    Destination file descriptor.\n"
58077db96d56Sopenharmony_ci"  count\n"
58087db96d56Sopenharmony_ci"    Number of bytes to copy.\n"
58097db96d56Sopenharmony_ci"  offset_src\n"
58107db96d56Sopenharmony_ci"    Starting offset in src.\n"
58117db96d56Sopenharmony_ci"  offset_dst\n"
58127db96d56Sopenharmony_ci"    Starting offset in dst.\n"
58137db96d56Sopenharmony_ci"  flags\n"
58147db96d56Sopenharmony_ci"    Flags to modify the semantics of the call.\n"
58157db96d56Sopenharmony_ci"\n"
58167db96d56Sopenharmony_ci"If offset_src is None, then src is read from the current position;\n"
58177db96d56Sopenharmony_ci"respectively for offset_dst. The offset associated to the file\n"
58187db96d56Sopenharmony_ci"descriptor that refers to a pipe must be None.");
58197db96d56Sopenharmony_ci
58207db96d56Sopenharmony_ci#define OS_SPLICE_METHODDEF    \
58217db96d56Sopenharmony_ci    {"splice", _PyCFunction_CAST(os_splice), METH_FASTCALL|METH_KEYWORDS, os_splice__doc__},
58227db96d56Sopenharmony_ci
58237db96d56Sopenharmony_cistatic PyObject *
58247db96d56Sopenharmony_cios_splice_impl(PyObject *module, int src, int dst, Py_ssize_t count,
58257db96d56Sopenharmony_ci               PyObject *offset_src, PyObject *offset_dst,
58267db96d56Sopenharmony_ci               unsigned int flags);
58277db96d56Sopenharmony_ci
58287db96d56Sopenharmony_cistatic PyObject *
58297db96d56Sopenharmony_cios_splice(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
58307db96d56Sopenharmony_ci{
58317db96d56Sopenharmony_ci    PyObject *return_value = NULL;
58327db96d56Sopenharmony_ci    static const char * const _keywords[] = {"src", "dst", "count", "offset_src", "offset_dst", "flags", NULL};
58337db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "splice", 0};
58347db96d56Sopenharmony_ci    PyObject *argsbuf[6];
58357db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3;
58367db96d56Sopenharmony_ci    int src;
58377db96d56Sopenharmony_ci    int dst;
58387db96d56Sopenharmony_ci    Py_ssize_t count;
58397db96d56Sopenharmony_ci    PyObject *offset_src = Py_None;
58407db96d56Sopenharmony_ci    PyObject *offset_dst = Py_None;
58417db96d56Sopenharmony_ci    unsigned int flags = 0;
58427db96d56Sopenharmony_ci
58437db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 6, 0, argsbuf);
58447db96d56Sopenharmony_ci    if (!args) {
58457db96d56Sopenharmony_ci        goto exit;
58467db96d56Sopenharmony_ci    }
58477db96d56Sopenharmony_ci    src = _PyLong_AsInt(args[0]);
58487db96d56Sopenharmony_ci    if (src == -1 && PyErr_Occurred()) {
58497db96d56Sopenharmony_ci        goto exit;
58507db96d56Sopenharmony_ci    }
58517db96d56Sopenharmony_ci    dst = _PyLong_AsInt(args[1]);
58527db96d56Sopenharmony_ci    if (dst == -1 && PyErr_Occurred()) {
58537db96d56Sopenharmony_ci        goto exit;
58547db96d56Sopenharmony_ci    }
58557db96d56Sopenharmony_ci    {
58567db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
58577db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(args[2]);
58587db96d56Sopenharmony_ci        if (iobj != NULL) {
58597db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
58607db96d56Sopenharmony_ci            Py_DECREF(iobj);
58617db96d56Sopenharmony_ci        }
58627db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
58637db96d56Sopenharmony_ci            goto exit;
58647db96d56Sopenharmony_ci        }
58657db96d56Sopenharmony_ci        count = ival;
58667db96d56Sopenharmony_ci    }
58677db96d56Sopenharmony_ci    if (!noptargs) {
58687db96d56Sopenharmony_ci        goto skip_optional_pos;
58697db96d56Sopenharmony_ci    }
58707db96d56Sopenharmony_ci    if (args[3]) {
58717db96d56Sopenharmony_ci        offset_src = args[3];
58727db96d56Sopenharmony_ci        if (!--noptargs) {
58737db96d56Sopenharmony_ci            goto skip_optional_pos;
58747db96d56Sopenharmony_ci        }
58757db96d56Sopenharmony_ci    }
58767db96d56Sopenharmony_ci    if (args[4]) {
58777db96d56Sopenharmony_ci        offset_dst = args[4];
58787db96d56Sopenharmony_ci        if (!--noptargs) {
58797db96d56Sopenharmony_ci            goto skip_optional_pos;
58807db96d56Sopenharmony_ci        }
58817db96d56Sopenharmony_ci    }
58827db96d56Sopenharmony_ci    if (!_PyLong_UnsignedInt_Converter(args[5], &flags)) {
58837db96d56Sopenharmony_ci        goto exit;
58847db96d56Sopenharmony_ci    }
58857db96d56Sopenharmony_ciskip_optional_pos:
58867db96d56Sopenharmony_ci    return_value = os_splice_impl(module, src, dst, count, offset_src, offset_dst, flags);
58877db96d56Sopenharmony_ci
58887db96d56Sopenharmony_ciexit:
58897db96d56Sopenharmony_ci    return return_value;
58907db96d56Sopenharmony_ci}
58917db96d56Sopenharmony_ci
58927db96d56Sopenharmony_ci#endif /* ((defined(HAVE_SPLICE) && !defined(_AIX))) */
58937db96d56Sopenharmony_ci
58947db96d56Sopenharmony_ci#if defined(HAVE_MKFIFO)
58957db96d56Sopenharmony_ci
58967db96d56Sopenharmony_ciPyDoc_STRVAR(os_mkfifo__doc__,
58977db96d56Sopenharmony_ci"mkfifo($module, /, path, mode=438, *, dir_fd=None)\n"
58987db96d56Sopenharmony_ci"--\n"
58997db96d56Sopenharmony_ci"\n"
59007db96d56Sopenharmony_ci"Create a \"fifo\" (a POSIX named pipe).\n"
59017db96d56Sopenharmony_ci"\n"
59027db96d56Sopenharmony_ci"If dir_fd is not None, it should be a file descriptor open to a directory,\n"
59037db96d56Sopenharmony_ci"  and path should be relative; path will then be relative to that directory.\n"
59047db96d56Sopenharmony_ci"dir_fd may not be implemented on your platform.\n"
59057db96d56Sopenharmony_ci"  If it is unavailable, using it will raise a NotImplementedError.");
59067db96d56Sopenharmony_ci
59077db96d56Sopenharmony_ci#define OS_MKFIFO_METHODDEF    \
59087db96d56Sopenharmony_ci    {"mkfifo", _PyCFunction_CAST(os_mkfifo), METH_FASTCALL|METH_KEYWORDS, os_mkfifo__doc__},
59097db96d56Sopenharmony_ci
59107db96d56Sopenharmony_cistatic PyObject *
59117db96d56Sopenharmony_cios_mkfifo_impl(PyObject *module, path_t *path, int mode, int dir_fd);
59127db96d56Sopenharmony_ci
59137db96d56Sopenharmony_cistatic PyObject *
59147db96d56Sopenharmony_cios_mkfifo(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
59157db96d56Sopenharmony_ci{
59167db96d56Sopenharmony_ci    PyObject *return_value = NULL;
59177db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "mode", "dir_fd", NULL};
59187db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "mkfifo", 0};
59197db96d56Sopenharmony_ci    PyObject *argsbuf[3];
59207db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
59217db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("mkfifo", "path", 0, 0);
59227db96d56Sopenharmony_ci    int mode = 438;
59237db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
59247db96d56Sopenharmony_ci
59257db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
59267db96d56Sopenharmony_ci    if (!args) {
59277db96d56Sopenharmony_ci        goto exit;
59287db96d56Sopenharmony_ci    }
59297db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
59307db96d56Sopenharmony_ci        goto exit;
59317db96d56Sopenharmony_ci    }
59327db96d56Sopenharmony_ci    if (!noptargs) {
59337db96d56Sopenharmony_ci        goto skip_optional_pos;
59347db96d56Sopenharmony_ci    }
59357db96d56Sopenharmony_ci    if (args[1]) {
59367db96d56Sopenharmony_ci        mode = _PyLong_AsInt(args[1]);
59377db96d56Sopenharmony_ci        if (mode == -1 && PyErr_Occurred()) {
59387db96d56Sopenharmony_ci            goto exit;
59397db96d56Sopenharmony_ci        }
59407db96d56Sopenharmony_ci        if (!--noptargs) {
59417db96d56Sopenharmony_ci            goto skip_optional_pos;
59427db96d56Sopenharmony_ci        }
59437db96d56Sopenharmony_ci    }
59447db96d56Sopenharmony_ciskip_optional_pos:
59457db96d56Sopenharmony_ci    if (!noptargs) {
59467db96d56Sopenharmony_ci        goto skip_optional_kwonly;
59477db96d56Sopenharmony_ci    }
59487db96d56Sopenharmony_ci    if (!MKFIFOAT_DIR_FD_CONVERTER(args[2], &dir_fd)) {
59497db96d56Sopenharmony_ci        goto exit;
59507db96d56Sopenharmony_ci    }
59517db96d56Sopenharmony_ciskip_optional_kwonly:
59527db96d56Sopenharmony_ci    return_value = os_mkfifo_impl(module, &path, mode, dir_fd);
59537db96d56Sopenharmony_ci
59547db96d56Sopenharmony_ciexit:
59557db96d56Sopenharmony_ci    /* Cleanup for path */
59567db96d56Sopenharmony_ci    path_cleanup(&path);
59577db96d56Sopenharmony_ci
59587db96d56Sopenharmony_ci    return return_value;
59597db96d56Sopenharmony_ci}
59607db96d56Sopenharmony_ci
59617db96d56Sopenharmony_ci#endif /* defined(HAVE_MKFIFO) */
59627db96d56Sopenharmony_ci
59637db96d56Sopenharmony_ci#if (defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV))
59647db96d56Sopenharmony_ci
59657db96d56Sopenharmony_ciPyDoc_STRVAR(os_mknod__doc__,
59667db96d56Sopenharmony_ci"mknod($module, /, path, mode=384, device=0, *, dir_fd=None)\n"
59677db96d56Sopenharmony_ci"--\n"
59687db96d56Sopenharmony_ci"\n"
59697db96d56Sopenharmony_ci"Create a node in the file system.\n"
59707db96d56Sopenharmony_ci"\n"
59717db96d56Sopenharmony_ci"Create a node in the file system (file, device special file or named pipe)\n"
59727db96d56Sopenharmony_ci"at path.  mode specifies both the permissions to use and the\n"
59737db96d56Sopenharmony_ci"type of node to be created, being combined (bitwise OR) with one of\n"
59747db96d56Sopenharmony_ci"S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO.  If S_IFCHR or S_IFBLK is set on mode,\n"
59757db96d56Sopenharmony_ci"device defines the newly created device special file (probably using\n"
59767db96d56Sopenharmony_ci"os.makedev()).  Otherwise device is ignored.\n"
59777db96d56Sopenharmony_ci"\n"
59787db96d56Sopenharmony_ci"If dir_fd is not None, it should be a file descriptor open to a directory,\n"
59797db96d56Sopenharmony_ci"  and path should be relative; path will then be relative to that directory.\n"
59807db96d56Sopenharmony_ci"dir_fd may not be implemented on your platform.\n"
59817db96d56Sopenharmony_ci"  If it is unavailable, using it will raise a NotImplementedError.");
59827db96d56Sopenharmony_ci
59837db96d56Sopenharmony_ci#define OS_MKNOD_METHODDEF    \
59847db96d56Sopenharmony_ci    {"mknod", _PyCFunction_CAST(os_mknod), METH_FASTCALL|METH_KEYWORDS, os_mknod__doc__},
59857db96d56Sopenharmony_ci
59867db96d56Sopenharmony_cistatic PyObject *
59877db96d56Sopenharmony_cios_mknod_impl(PyObject *module, path_t *path, int mode, dev_t device,
59887db96d56Sopenharmony_ci              int dir_fd);
59897db96d56Sopenharmony_ci
59907db96d56Sopenharmony_cistatic PyObject *
59917db96d56Sopenharmony_cios_mknod(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
59927db96d56Sopenharmony_ci{
59937db96d56Sopenharmony_ci    PyObject *return_value = NULL;
59947db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "mode", "device", "dir_fd", NULL};
59957db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "mknod", 0};
59967db96d56Sopenharmony_ci    PyObject *argsbuf[4];
59977db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
59987db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("mknod", "path", 0, 0);
59997db96d56Sopenharmony_ci    int mode = 384;
60007db96d56Sopenharmony_ci    dev_t device = 0;
60017db96d56Sopenharmony_ci    int dir_fd = DEFAULT_DIR_FD;
60027db96d56Sopenharmony_ci
60037db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 3, 0, argsbuf);
60047db96d56Sopenharmony_ci    if (!args) {
60057db96d56Sopenharmony_ci        goto exit;
60067db96d56Sopenharmony_ci    }
60077db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
60087db96d56Sopenharmony_ci        goto exit;
60097db96d56Sopenharmony_ci    }
60107db96d56Sopenharmony_ci    if (!noptargs) {
60117db96d56Sopenharmony_ci        goto skip_optional_pos;
60127db96d56Sopenharmony_ci    }
60137db96d56Sopenharmony_ci    if (args[1]) {
60147db96d56Sopenharmony_ci        mode = _PyLong_AsInt(args[1]);
60157db96d56Sopenharmony_ci        if (mode == -1 && PyErr_Occurred()) {
60167db96d56Sopenharmony_ci            goto exit;
60177db96d56Sopenharmony_ci        }
60187db96d56Sopenharmony_ci        if (!--noptargs) {
60197db96d56Sopenharmony_ci            goto skip_optional_pos;
60207db96d56Sopenharmony_ci        }
60217db96d56Sopenharmony_ci    }
60227db96d56Sopenharmony_ci    if (args[2]) {
60237db96d56Sopenharmony_ci        if (!_Py_Dev_Converter(args[2], &device)) {
60247db96d56Sopenharmony_ci            goto exit;
60257db96d56Sopenharmony_ci        }
60267db96d56Sopenharmony_ci        if (!--noptargs) {
60277db96d56Sopenharmony_ci            goto skip_optional_pos;
60287db96d56Sopenharmony_ci        }
60297db96d56Sopenharmony_ci    }
60307db96d56Sopenharmony_ciskip_optional_pos:
60317db96d56Sopenharmony_ci    if (!noptargs) {
60327db96d56Sopenharmony_ci        goto skip_optional_kwonly;
60337db96d56Sopenharmony_ci    }
60347db96d56Sopenharmony_ci    if (!MKNODAT_DIR_FD_CONVERTER(args[3], &dir_fd)) {
60357db96d56Sopenharmony_ci        goto exit;
60367db96d56Sopenharmony_ci    }
60377db96d56Sopenharmony_ciskip_optional_kwonly:
60387db96d56Sopenharmony_ci    return_value = os_mknod_impl(module, &path, mode, device, dir_fd);
60397db96d56Sopenharmony_ci
60407db96d56Sopenharmony_ciexit:
60417db96d56Sopenharmony_ci    /* Cleanup for path */
60427db96d56Sopenharmony_ci    path_cleanup(&path);
60437db96d56Sopenharmony_ci
60447db96d56Sopenharmony_ci    return return_value;
60457db96d56Sopenharmony_ci}
60467db96d56Sopenharmony_ci
60477db96d56Sopenharmony_ci#endif /* (defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV)) */
60487db96d56Sopenharmony_ci
60497db96d56Sopenharmony_ci#if defined(HAVE_DEVICE_MACROS)
60507db96d56Sopenharmony_ci
60517db96d56Sopenharmony_ciPyDoc_STRVAR(os_major__doc__,
60527db96d56Sopenharmony_ci"major($module, device, /)\n"
60537db96d56Sopenharmony_ci"--\n"
60547db96d56Sopenharmony_ci"\n"
60557db96d56Sopenharmony_ci"Extracts a device major number from a raw device number.");
60567db96d56Sopenharmony_ci
60577db96d56Sopenharmony_ci#define OS_MAJOR_METHODDEF    \
60587db96d56Sopenharmony_ci    {"major", (PyCFunction)os_major, METH_O, os_major__doc__},
60597db96d56Sopenharmony_ci
60607db96d56Sopenharmony_cistatic unsigned int
60617db96d56Sopenharmony_cios_major_impl(PyObject *module, dev_t device);
60627db96d56Sopenharmony_ci
60637db96d56Sopenharmony_cistatic PyObject *
60647db96d56Sopenharmony_cios_major(PyObject *module, PyObject *arg)
60657db96d56Sopenharmony_ci{
60667db96d56Sopenharmony_ci    PyObject *return_value = NULL;
60677db96d56Sopenharmony_ci    dev_t device;
60687db96d56Sopenharmony_ci    unsigned int _return_value;
60697db96d56Sopenharmony_ci
60707db96d56Sopenharmony_ci    if (!_Py_Dev_Converter(arg, &device)) {
60717db96d56Sopenharmony_ci        goto exit;
60727db96d56Sopenharmony_ci    }
60737db96d56Sopenharmony_ci    _return_value = os_major_impl(module, device);
60747db96d56Sopenharmony_ci    if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) {
60757db96d56Sopenharmony_ci        goto exit;
60767db96d56Sopenharmony_ci    }
60777db96d56Sopenharmony_ci    return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
60787db96d56Sopenharmony_ci
60797db96d56Sopenharmony_ciexit:
60807db96d56Sopenharmony_ci    return return_value;
60817db96d56Sopenharmony_ci}
60827db96d56Sopenharmony_ci
60837db96d56Sopenharmony_ci#endif /* defined(HAVE_DEVICE_MACROS) */
60847db96d56Sopenharmony_ci
60857db96d56Sopenharmony_ci#if defined(HAVE_DEVICE_MACROS)
60867db96d56Sopenharmony_ci
60877db96d56Sopenharmony_ciPyDoc_STRVAR(os_minor__doc__,
60887db96d56Sopenharmony_ci"minor($module, device, /)\n"
60897db96d56Sopenharmony_ci"--\n"
60907db96d56Sopenharmony_ci"\n"
60917db96d56Sopenharmony_ci"Extracts a device minor number from a raw device number.");
60927db96d56Sopenharmony_ci
60937db96d56Sopenharmony_ci#define OS_MINOR_METHODDEF    \
60947db96d56Sopenharmony_ci    {"minor", (PyCFunction)os_minor, METH_O, os_minor__doc__},
60957db96d56Sopenharmony_ci
60967db96d56Sopenharmony_cistatic unsigned int
60977db96d56Sopenharmony_cios_minor_impl(PyObject *module, dev_t device);
60987db96d56Sopenharmony_ci
60997db96d56Sopenharmony_cistatic PyObject *
61007db96d56Sopenharmony_cios_minor(PyObject *module, PyObject *arg)
61017db96d56Sopenharmony_ci{
61027db96d56Sopenharmony_ci    PyObject *return_value = NULL;
61037db96d56Sopenharmony_ci    dev_t device;
61047db96d56Sopenharmony_ci    unsigned int _return_value;
61057db96d56Sopenharmony_ci
61067db96d56Sopenharmony_ci    if (!_Py_Dev_Converter(arg, &device)) {
61077db96d56Sopenharmony_ci        goto exit;
61087db96d56Sopenharmony_ci    }
61097db96d56Sopenharmony_ci    _return_value = os_minor_impl(module, device);
61107db96d56Sopenharmony_ci    if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) {
61117db96d56Sopenharmony_ci        goto exit;
61127db96d56Sopenharmony_ci    }
61137db96d56Sopenharmony_ci    return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
61147db96d56Sopenharmony_ci
61157db96d56Sopenharmony_ciexit:
61167db96d56Sopenharmony_ci    return return_value;
61177db96d56Sopenharmony_ci}
61187db96d56Sopenharmony_ci
61197db96d56Sopenharmony_ci#endif /* defined(HAVE_DEVICE_MACROS) */
61207db96d56Sopenharmony_ci
61217db96d56Sopenharmony_ci#if defined(HAVE_DEVICE_MACROS)
61227db96d56Sopenharmony_ci
61237db96d56Sopenharmony_ciPyDoc_STRVAR(os_makedev__doc__,
61247db96d56Sopenharmony_ci"makedev($module, major, minor, /)\n"
61257db96d56Sopenharmony_ci"--\n"
61267db96d56Sopenharmony_ci"\n"
61277db96d56Sopenharmony_ci"Composes a raw device number from the major and minor device numbers.");
61287db96d56Sopenharmony_ci
61297db96d56Sopenharmony_ci#define OS_MAKEDEV_METHODDEF    \
61307db96d56Sopenharmony_ci    {"makedev", _PyCFunction_CAST(os_makedev), METH_FASTCALL, os_makedev__doc__},
61317db96d56Sopenharmony_ci
61327db96d56Sopenharmony_cistatic dev_t
61337db96d56Sopenharmony_cios_makedev_impl(PyObject *module, int major, int minor);
61347db96d56Sopenharmony_ci
61357db96d56Sopenharmony_cistatic PyObject *
61367db96d56Sopenharmony_cios_makedev(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
61377db96d56Sopenharmony_ci{
61387db96d56Sopenharmony_ci    PyObject *return_value = NULL;
61397db96d56Sopenharmony_ci    int major;
61407db96d56Sopenharmony_ci    int minor;
61417db96d56Sopenharmony_ci    dev_t _return_value;
61427db96d56Sopenharmony_ci
61437db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("makedev", nargs, 2, 2)) {
61447db96d56Sopenharmony_ci        goto exit;
61457db96d56Sopenharmony_ci    }
61467db96d56Sopenharmony_ci    major = _PyLong_AsInt(args[0]);
61477db96d56Sopenharmony_ci    if (major == -1 && PyErr_Occurred()) {
61487db96d56Sopenharmony_ci        goto exit;
61497db96d56Sopenharmony_ci    }
61507db96d56Sopenharmony_ci    minor = _PyLong_AsInt(args[1]);
61517db96d56Sopenharmony_ci    if (minor == -1 && PyErr_Occurred()) {
61527db96d56Sopenharmony_ci        goto exit;
61537db96d56Sopenharmony_ci    }
61547db96d56Sopenharmony_ci    _return_value = os_makedev_impl(module, major, minor);
61557db96d56Sopenharmony_ci    if ((_return_value == (dev_t)-1) && PyErr_Occurred()) {
61567db96d56Sopenharmony_ci        goto exit;
61577db96d56Sopenharmony_ci    }
61587db96d56Sopenharmony_ci    return_value = _PyLong_FromDev(_return_value);
61597db96d56Sopenharmony_ci
61607db96d56Sopenharmony_ciexit:
61617db96d56Sopenharmony_ci    return return_value;
61627db96d56Sopenharmony_ci}
61637db96d56Sopenharmony_ci
61647db96d56Sopenharmony_ci#endif /* defined(HAVE_DEVICE_MACROS) */
61657db96d56Sopenharmony_ci
61667db96d56Sopenharmony_ci#if (defined HAVE_FTRUNCATE || defined MS_WINDOWS)
61677db96d56Sopenharmony_ci
61687db96d56Sopenharmony_ciPyDoc_STRVAR(os_ftruncate__doc__,
61697db96d56Sopenharmony_ci"ftruncate($module, fd, length, /)\n"
61707db96d56Sopenharmony_ci"--\n"
61717db96d56Sopenharmony_ci"\n"
61727db96d56Sopenharmony_ci"Truncate a file, specified by file descriptor, to a specific length.");
61737db96d56Sopenharmony_ci
61747db96d56Sopenharmony_ci#define OS_FTRUNCATE_METHODDEF    \
61757db96d56Sopenharmony_ci    {"ftruncate", _PyCFunction_CAST(os_ftruncate), METH_FASTCALL, os_ftruncate__doc__},
61767db96d56Sopenharmony_ci
61777db96d56Sopenharmony_cistatic PyObject *
61787db96d56Sopenharmony_cios_ftruncate_impl(PyObject *module, int fd, Py_off_t length);
61797db96d56Sopenharmony_ci
61807db96d56Sopenharmony_cistatic PyObject *
61817db96d56Sopenharmony_cios_ftruncate(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
61827db96d56Sopenharmony_ci{
61837db96d56Sopenharmony_ci    PyObject *return_value = NULL;
61847db96d56Sopenharmony_ci    int fd;
61857db96d56Sopenharmony_ci    Py_off_t length;
61867db96d56Sopenharmony_ci
61877db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("ftruncate", nargs, 2, 2)) {
61887db96d56Sopenharmony_ci        goto exit;
61897db96d56Sopenharmony_ci    }
61907db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
61917db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
61927db96d56Sopenharmony_ci        goto exit;
61937db96d56Sopenharmony_ci    }
61947db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[1], &length)) {
61957db96d56Sopenharmony_ci        goto exit;
61967db96d56Sopenharmony_ci    }
61977db96d56Sopenharmony_ci    return_value = os_ftruncate_impl(module, fd, length);
61987db96d56Sopenharmony_ci
61997db96d56Sopenharmony_ciexit:
62007db96d56Sopenharmony_ci    return return_value;
62017db96d56Sopenharmony_ci}
62027db96d56Sopenharmony_ci
62037db96d56Sopenharmony_ci#endif /* (defined HAVE_FTRUNCATE || defined MS_WINDOWS) */
62047db96d56Sopenharmony_ci
62057db96d56Sopenharmony_ci#if (defined HAVE_TRUNCATE || defined MS_WINDOWS)
62067db96d56Sopenharmony_ci
62077db96d56Sopenharmony_ciPyDoc_STRVAR(os_truncate__doc__,
62087db96d56Sopenharmony_ci"truncate($module, /, path, length)\n"
62097db96d56Sopenharmony_ci"--\n"
62107db96d56Sopenharmony_ci"\n"
62117db96d56Sopenharmony_ci"Truncate a file, specified by path, to a specific length.\n"
62127db96d56Sopenharmony_ci"\n"
62137db96d56Sopenharmony_ci"On some platforms, path may also be specified as an open file descriptor.\n"
62147db96d56Sopenharmony_ci"  If this functionality is unavailable, using it raises an exception.");
62157db96d56Sopenharmony_ci
62167db96d56Sopenharmony_ci#define OS_TRUNCATE_METHODDEF    \
62177db96d56Sopenharmony_ci    {"truncate", _PyCFunction_CAST(os_truncate), METH_FASTCALL|METH_KEYWORDS, os_truncate__doc__},
62187db96d56Sopenharmony_ci
62197db96d56Sopenharmony_cistatic PyObject *
62207db96d56Sopenharmony_cios_truncate_impl(PyObject *module, path_t *path, Py_off_t length);
62217db96d56Sopenharmony_ci
62227db96d56Sopenharmony_cistatic PyObject *
62237db96d56Sopenharmony_cios_truncate(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
62247db96d56Sopenharmony_ci{
62257db96d56Sopenharmony_ci    PyObject *return_value = NULL;
62267db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "length", NULL};
62277db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "truncate", 0};
62287db96d56Sopenharmony_ci    PyObject *argsbuf[2];
62297db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("truncate", "path", 0, PATH_HAVE_FTRUNCATE);
62307db96d56Sopenharmony_ci    Py_off_t length;
62317db96d56Sopenharmony_ci
62327db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
62337db96d56Sopenharmony_ci    if (!args) {
62347db96d56Sopenharmony_ci        goto exit;
62357db96d56Sopenharmony_ci    }
62367db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
62377db96d56Sopenharmony_ci        goto exit;
62387db96d56Sopenharmony_ci    }
62397db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[1], &length)) {
62407db96d56Sopenharmony_ci        goto exit;
62417db96d56Sopenharmony_ci    }
62427db96d56Sopenharmony_ci    return_value = os_truncate_impl(module, &path, length);
62437db96d56Sopenharmony_ci
62447db96d56Sopenharmony_ciexit:
62457db96d56Sopenharmony_ci    /* Cleanup for path */
62467db96d56Sopenharmony_ci    path_cleanup(&path);
62477db96d56Sopenharmony_ci
62487db96d56Sopenharmony_ci    return return_value;
62497db96d56Sopenharmony_ci}
62507db96d56Sopenharmony_ci
62517db96d56Sopenharmony_ci#endif /* (defined HAVE_TRUNCATE || defined MS_WINDOWS) */
62527db96d56Sopenharmony_ci
62537db96d56Sopenharmony_ci#if (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG))
62547db96d56Sopenharmony_ci
62557db96d56Sopenharmony_ciPyDoc_STRVAR(os_posix_fallocate__doc__,
62567db96d56Sopenharmony_ci"posix_fallocate($module, fd, offset, length, /)\n"
62577db96d56Sopenharmony_ci"--\n"
62587db96d56Sopenharmony_ci"\n"
62597db96d56Sopenharmony_ci"Ensure a file has allocated at least a particular number of bytes on disk.\n"
62607db96d56Sopenharmony_ci"\n"
62617db96d56Sopenharmony_ci"Ensure that the file specified by fd encompasses a range of bytes\n"
62627db96d56Sopenharmony_ci"starting at offset bytes from the beginning and continuing for length bytes.");
62637db96d56Sopenharmony_ci
62647db96d56Sopenharmony_ci#define OS_POSIX_FALLOCATE_METHODDEF    \
62657db96d56Sopenharmony_ci    {"posix_fallocate", _PyCFunction_CAST(os_posix_fallocate), METH_FASTCALL, os_posix_fallocate__doc__},
62667db96d56Sopenharmony_ci
62677db96d56Sopenharmony_cistatic PyObject *
62687db96d56Sopenharmony_cios_posix_fallocate_impl(PyObject *module, int fd, Py_off_t offset,
62697db96d56Sopenharmony_ci                        Py_off_t length);
62707db96d56Sopenharmony_ci
62717db96d56Sopenharmony_cistatic PyObject *
62727db96d56Sopenharmony_cios_posix_fallocate(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
62737db96d56Sopenharmony_ci{
62747db96d56Sopenharmony_ci    PyObject *return_value = NULL;
62757db96d56Sopenharmony_ci    int fd;
62767db96d56Sopenharmony_ci    Py_off_t offset;
62777db96d56Sopenharmony_ci    Py_off_t length;
62787db96d56Sopenharmony_ci
62797db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("posix_fallocate", nargs, 3, 3)) {
62807db96d56Sopenharmony_ci        goto exit;
62817db96d56Sopenharmony_ci    }
62827db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
62837db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
62847db96d56Sopenharmony_ci        goto exit;
62857db96d56Sopenharmony_ci    }
62867db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[1], &offset)) {
62877db96d56Sopenharmony_ci        goto exit;
62887db96d56Sopenharmony_ci    }
62897db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[2], &length)) {
62907db96d56Sopenharmony_ci        goto exit;
62917db96d56Sopenharmony_ci    }
62927db96d56Sopenharmony_ci    return_value = os_posix_fallocate_impl(module, fd, offset, length);
62937db96d56Sopenharmony_ci
62947db96d56Sopenharmony_ciexit:
62957db96d56Sopenharmony_ci    return return_value;
62967db96d56Sopenharmony_ci}
62977db96d56Sopenharmony_ci
62987db96d56Sopenharmony_ci#endif /* (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG)) */
62997db96d56Sopenharmony_ci
63007db96d56Sopenharmony_ci#if (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG))
63017db96d56Sopenharmony_ci
63027db96d56Sopenharmony_ciPyDoc_STRVAR(os_posix_fadvise__doc__,
63037db96d56Sopenharmony_ci"posix_fadvise($module, fd, offset, length, advice, /)\n"
63047db96d56Sopenharmony_ci"--\n"
63057db96d56Sopenharmony_ci"\n"
63067db96d56Sopenharmony_ci"Announce an intention to access data in a specific pattern.\n"
63077db96d56Sopenharmony_ci"\n"
63087db96d56Sopenharmony_ci"Announce an intention to access data in a specific pattern, thus allowing\n"
63097db96d56Sopenharmony_ci"the kernel to make optimizations.\n"
63107db96d56Sopenharmony_ci"The advice applies to the region of the file specified by fd starting at\n"
63117db96d56Sopenharmony_ci"offset and continuing for length bytes.\n"
63127db96d56Sopenharmony_ci"advice is one of POSIX_FADV_NORMAL, POSIX_FADV_SEQUENTIAL,\n"
63137db96d56Sopenharmony_ci"POSIX_FADV_RANDOM, POSIX_FADV_NOREUSE, POSIX_FADV_WILLNEED, or\n"
63147db96d56Sopenharmony_ci"POSIX_FADV_DONTNEED.");
63157db96d56Sopenharmony_ci
63167db96d56Sopenharmony_ci#define OS_POSIX_FADVISE_METHODDEF    \
63177db96d56Sopenharmony_ci    {"posix_fadvise", _PyCFunction_CAST(os_posix_fadvise), METH_FASTCALL, os_posix_fadvise__doc__},
63187db96d56Sopenharmony_ci
63197db96d56Sopenharmony_cistatic PyObject *
63207db96d56Sopenharmony_cios_posix_fadvise_impl(PyObject *module, int fd, Py_off_t offset,
63217db96d56Sopenharmony_ci                      Py_off_t length, int advice);
63227db96d56Sopenharmony_ci
63237db96d56Sopenharmony_cistatic PyObject *
63247db96d56Sopenharmony_cios_posix_fadvise(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
63257db96d56Sopenharmony_ci{
63267db96d56Sopenharmony_ci    PyObject *return_value = NULL;
63277db96d56Sopenharmony_ci    int fd;
63287db96d56Sopenharmony_ci    Py_off_t offset;
63297db96d56Sopenharmony_ci    Py_off_t length;
63307db96d56Sopenharmony_ci    int advice;
63317db96d56Sopenharmony_ci
63327db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("posix_fadvise", nargs, 4, 4)) {
63337db96d56Sopenharmony_ci        goto exit;
63347db96d56Sopenharmony_ci    }
63357db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
63367db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
63377db96d56Sopenharmony_ci        goto exit;
63387db96d56Sopenharmony_ci    }
63397db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[1], &offset)) {
63407db96d56Sopenharmony_ci        goto exit;
63417db96d56Sopenharmony_ci    }
63427db96d56Sopenharmony_ci    if (!Py_off_t_converter(args[2], &length)) {
63437db96d56Sopenharmony_ci        goto exit;
63447db96d56Sopenharmony_ci    }
63457db96d56Sopenharmony_ci    advice = _PyLong_AsInt(args[3]);
63467db96d56Sopenharmony_ci    if (advice == -1 && PyErr_Occurred()) {
63477db96d56Sopenharmony_ci        goto exit;
63487db96d56Sopenharmony_ci    }
63497db96d56Sopenharmony_ci    return_value = os_posix_fadvise_impl(module, fd, offset, length, advice);
63507db96d56Sopenharmony_ci
63517db96d56Sopenharmony_ciexit:
63527db96d56Sopenharmony_ci    return return_value;
63537db96d56Sopenharmony_ci}
63547db96d56Sopenharmony_ci
63557db96d56Sopenharmony_ci#endif /* (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) */
63567db96d56Sopenharmony_ci
63577db96d56Sopenharmony_ci#if defined(MS_WINDOWS)
63587db96d56Sopenharmony_ci
63597db96d56Sopenharmony_ciPyDoc_STRVAR(os_putenv__doc__,
63607db96d56Sopenharmony_ci"putenv($module, name, value, /)\n"
63617db96d56Sopenharmony_ci"--\n"
63627db96d56Sopenharmony_ci"\n"
63637db96d56Sopenharmony_ci"Change or add an environment variable.");
63647db96d56Sopenharmony_ci
63657db96d56Sopenharmony_ci#define OS_PUTENV_METHODDEF    \
63667db96d56Sopenharmony_ci    {"putenv", _PyCFunction_CAST(os_putenv), METH_FASTCALL, os_putenv__doc__},
63677db96d56Sopenharmony_ci
63687db96d56Sopenharmony_cistatic PyObject *
63697db96d56Sopenharmony_cios_putenv_impl(PyObject *module, PyObject *name, PyObject *value);
63707db96d56Sopenharmony_ci
63717db96d56Sopenharmony_cistatic PyObject *
63727db96d56Sopenharmony_cios_putenv(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
63737db96d56Sopenharmony_ci{
63747db96d56Sopenharmony_ci    PyObject *return_value = NULL;
63757db96d56Sopenharmony_ci    PyObject *name;
63767db96d56Sopenharmony_ci    PyObject *value;
63777db96d56Sopenharmony_ci
63787db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("putenv", nargs, 2, 2)) {
63797db96d56Sopenharmony_ci        goto exit;
63807db96d56Sopenharmony_ci    }
63817db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[0])) {
63827db96d56Sopenharmony_ci        _PyArg_BadArgument("putenv", "argument 1", "str", args[0]);
63837db96d56Sopenharmony_ci        goto exit;
63847db96d56Sopenharmony_ci    }
63857db96d56Sopenharmony_ci    if (PyUnicode_READY(args[0]) == -1) {
63867db96d56Sopenharmony_ci        goto exit;
63877db96d56Sopenharmony_ci    }
63887db96d56Sopenharmony_ci    name = args[0];
63897db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[1])) {
63907db96d56Sopenharmony_ci        _PyArg_BadArgument("putenv", "argument 2", "str", args[1]);
63917db96d56Sopenharmony_ci        goto exit;
63927db96d56Sopenharmony_ci    }
63937db96d56Sopenharmony_ci    if (PyUnicode_READY(args[1]) == -1) {
63947db96d56Sopenharmony_ci        goto exit;
63957db96d56Sopenharmony_ci    }
63967db96d56Sopenharmony_ci    value = args[1];
63977db96d56Sopenharmony_ci    return_value = os_putenv_impl(module, name, value);
63987db96d56Sopenharmony_ci
63997db96d56Sopenharmony_ciexit:
64007db96d56Sopenharmony_ci    return return_value;
64017db96d56Sopenharmony_ci}
64027db96d56Sopenharmony_ci
64037db96d56Sopenharmony_ci#endif /* defined(MS_WINDOWS) */
64047db96d56Sopenharmony_ci
64057db96d56Sopenharmony_ci#if !defined(MS_WINDOWS)
64067db96d56Sopenharmony_ci
64077db96d56Sopenharmony_ciPyDoc_STRVAR(os_putenv__doc__,
64087db96d56Sopenharmony_ci"putenv($module, name, value, /)\n"
64097db96d56Sopenharmony_ci"--\n"
64107db96d56Sopenharmony_ci"\n"
64117db96d56Sopenharmony_ci"Change or add an environment variable.");
64127db96d56Sopenharmony_ci
64137db96d56Sopenharmony_ci#define OS_PUTENV_METHODDEF    \
64147db96d56Sopenharmony_ci    {"putenv", _PyCFunction_CAST(os_putenv), METH_FASTCALL, os_putenv__doc__},
64157db96d56Sopenharmony_ci
64167db96d56Sopenharmony_cistatic PyObject *
64177db96d56Sopenharmony_cios_putenv_impl(PyObject *module, PyObject *name, PyObject *value);
64187db96d56Sopenharmony_ci
64197db96d56Sopenharmony_cistatic PyObject *
64207db96d56Sopenharmony_cios_putenv(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
64217db96d56Sopenharmony_ci{
64227db96d56Sopenharmony_ci    PyObject *return_value = NULL;
64237db96d56Sopenharmony_ci    PyObject *name = NULL;
64247db96d56Sopenharmony_ci    PyObject *value = NULL;
64257db96d56Sopenharmony_ci
64267db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("putenv", nargs, 2, 2)) {
64277db96d56Sopenharmony_ci        goto exit;
64287db96d56Sopenharmony_ci    }
64297db96d56Sopenharmony_ci    if (!PyUnicode_FSConverter(args[0], &name)) {
64307db96d56Sopenharmony_ci        goto exit;
64317db96d56Sopenharmony_ci    }
64327db96d56Sopenharmony_ci    if (!PyUnicode_FSConverter(args[1], &value)) {
64337db96d56Sopenharmony_ci        goto exit;
64347db96d56Sopenharmony_ci    }
64357db96d56Sopenharmony_ci    return_value = os_putenv_impl(module, name, value);
64367db96d56Sopenharmony_ci
64377db96d56Sopenharmony_ciexit:
64387db96d56Sopenharmony_ci    /* Cleanup for name */
64397db96d56Sopenharmony_ci    Py_XDECREF(name);
64407db96d56Sopenharmony_ci    /* Cleanup for value */
64417db96d56Sopenharmony_ci    Py_XDECREF(value);
64427db96d56Sopenharmony_ci
64437db96d56Sopenharmony_ci    return return_value;
64447db96d56Sopenharmony_ci}
64457db96d56Sopenharmony_ci
64467db96d56Sopenharmony_ci#endif /* !defined(MS_WINDOWS) */
64477db96d56Sopenharmony_ci
64487db96d56Sopenharmony_ci#if defined(MS_WINDOWS)
64497db96d56Sopenharmony_ci
64507db96d56Sopenharmony_ciPyDoc_STRVAR(os_unsetenv__doc__,
64517db96d56Sopenharmony_ci"unsetenv($module, name, /)\n"
64527db96d56Sopenharmony_ci"--\n"
64537db96d56Sopenharmony_ci"\n"
64547db96d56Sopenharmony_ci"Delete an environment variable.");
64557db96d56Sopenharmony_ci
64567db96d56Sopenharmony_ci#define OS_UNSETENV_METHODDEF    \
64577db96d56Sopenharmony_ci    {"unsetenv", (PyCFunction)os_unsetenv, METH_O, os_unsetenv__doc__},
64587db96d56Sopenharmony_ci
64597db96d56Sopenharmony_cistatic PyObject *
64607db96d56Sopenharmony_cios_unsetenv_impl(PyObject *module, PyObject *name);
64617db96d56Sopenharmony_ci
64627db96d56Sopenharmony_cistatic PyObject *
64637db96d56Sopenharmony_cios_unsetenv(PyObject *module, PyObject *arg)
64647db96d56Sopenharmony_ci{
64657db96d56Sopenharmony_ci    PyObject *return_value = NULL;
64667db96d56Sopenharmony_ci    PyObject *name;
64677db96d56Sopenharmony_ci
64687db96d56Sopenharmony_ci    if (!PyUnicode_Check(arg)) {
64697db96d56Sopenharmony_ci        _PyArg_BadArgument("unsetenv", "argument", "str", arg);
64707db96d56Sopenharmony_ci        goto exit;
64717db96d56Sopenharmony_ci    }
64727db96d56Sopenharmony_ci    if (PyUnicode_READY(arg) == -1) {
64737db96d56Sopenharmony_ci        goto exit;
64747db96d56Sopenharmony_ci    }
64757db96d56Sopenharmony_ci    name = arg;
64767db96d56Sopenharmony_ci    return_value = os_unsetenv_impl(module, name);
64777db96d56Sopenharmony_ci
64787db96d56Sopenharmony_ciexit:
64797db96d56Sopenharmony_ci    return return_value;
64807db96d56Sopenharmony_ci}
64817db96d56Sopenharmony_ci
64827db96d56Sopenharmony_ci#endif /* defined(MS_WINDOWS) */
64837db96d56Sopenharmony_ci
64847db96d56Sopenharmony_ci#if !defined(MS_WINDOWS)
64857db96d56Sopenharmony_ci
64867db96d56Sopenharmony_ciPyDoc_STRVAR(os_unsetenv__doc__,
64877db96d56Sopenharmony_ci"unsetenv($module, name, /)\n"
64887db96d56Sopenharmony_ci"--\n"
64897db96d56Sopenharmony_ci"\n"
64907db96d56Sopenharmony_ci"Delete an environment variable.");
64917db96d56Sopenharmony_ci
64927db96d56Sopenharmony_ci#define OS_UNSETENV_METHODDEF    \
64937db96d56Sopenharmony_ci    {"unsetenv", (PyCFunction)os_unsetenv, METH_O, os_unsetenv__doc__},
64947db96d56Sopenharmony_ci
64957db96d56Sopenharmony_cistatic PyObject *
64967db96d56Sopenharmony_cios_unsetenv_impl(PyObject *module, PyObject *name);
64977db96d56Sopenharmony_ci
64987db96d56Sopenharmony_cistatic PyObject *
64997db96d56Sopenharmony_cios_unsetenv(PyObject *module, PyObject *arg)
65007db96d56Sopenharmony_ci{
65017db96d56Sopenharmony_ci    PyObject *return_value = NULL;
65027db96d56Sopenharmony_ci    PyObject *name = NULL;
65037db96d56Sopenharmony_ci
65047db96d56Sopenharmony_ci    if (!PyUnicode_FSConverter(arg, &name)) {
65057db96d56Sopenharmony_ci        goto exit;
65067db96d56Sopenharmony_ci    }
65077db96d56Sopenharmony_ci    return_value = os_unsetenv_impl(module, name);
65087db96d56Sopenharmony_ci
65097db96d56Sopenharmony_ciexit:
65107db96d56Sopenharmony_ci    /* Cleanup for name */
65117db96d56Sopenharmony_ci    Py_XDECREF(name);
65127db96d56Sopenharmony_ci
65137db96d56Sopenharmony_ci    return return_value;
65147db96d56Sopenharmony_ci}
65157db96d56Sopenharmony_ci
65167db96d56Sopenharmony_ci#endif /* !defined(MS_WINDOWS) */
65177db96d56Sopenharmony_ci
65187db96d56Sopenharmony_ciPyDoc_STRVAR(os_strerror__doc__,
65197db96d56Sopenharmony_ci"strerror($module, code, /)\n"
65207db96d56Sopenharmony_ci"--\n"
65217db96d56Sopenharmony_ci"\n"
65227db96d56Sopenharmony_ci"Translate an error code to a message string.");
65237db96d56Sopenharmony_ci
65247db96d56Sopenharmony_ci#define OS_STRERROR_METHODDEF    \
65257db96d56Sopenharmony_ci    {"strerror", (PyCFunction)os_strerror, METH_O, os_strerror__doc__},
65267db96d56Sopenharmony_ci
65277db96d56Sopenharmony_cistatic PyObject *
65287db96d56Sopenharmony_cios_strerror_impl(PyObject *module, int code);
65297db96d56Sopenharmony_ci
65307db96d56Sopenharmony_cistatic PyObject *
65317db96d56Sopenharmony_cios_strerror(PyObject *module, PyObject *arg)
65327db96d56Sopenharmony_ci{
65337db96d56Sopenharmony_ci    PyObject *return_value = NULL;
65347db96d56Sopenharmony_ci    int code;
65357db96d56Sopenharmony_ci
65367db96d56Sopenharmony_ci    code = _PyLong_AsInt(arg);
65377db96d56Sopenharmony_ci    if (code == -1 && PyErr_Occurred()) {
65387db96d56Sopenharmony_ci        goto exit;
65397db96d56Sopenharmony_ci    }
65407db96d56Sopenharmony_ci    return_value = os_strerror_impl(module, code);
65417db96d56Sopenharmony_ci
65427db96d56Sopenharmony_ciexit:
65437db96d56Sopenharmony_ci    return return_value;
65447db96d56Sopenharmony_ci}
65457db96d56Sopenharmony_ci
65467db96d56Sopenharmony_ci#if defined(HAVE_SYS_WAIT_H) && defined(WCOREDUMP)
65477db96d56Sopenharmony_ci
65487db96d56Sopenharmony_ciPyDoc_STRVAR(os_WCOREDUMP__doc__,
65497db96d56Sopenharmony_ci"WCOREDUMP($module, status, /)\n"
65507db96d56Sopenharmony_ci"--\n"
65517db96d56Sopenharmony_ci"\n"
65527db96d56Sopenharmony_ci"Return True if the process returning status was dumped to a core file.");
65537db96d56Sopenharmony_ci
65547db96d56Sopenharmony_ci#define OS_WCOREDUMP_METHODDEF    \
65557db96d56Sopenharmony_ci    {"WCOREDUMP", (PyCFunction)os_WCOREDUMP, METH_O, os_WCOREDUMP__doc__},
65567db96d56Sopenharmony_ci
65577db96d56Sopenharmony_cistatic int
65587db96d56Sopenharmony_cios_WCOREDUMP_impl(PyObject *module, int status);
65597db96d56Sopenharmony_ci
65607db96d56Sopenharmony_cistatic PyObject *
65617db96d56Sopenharmony_cios_WCOREDUMP(PyObject *module, PyObject *arg)
65627db96d56Sopenharmony_ci{
65637db96d56Sopenharmony_ci    PyObject *return_value = NULL;
65647db96d56Sopenharmony_ci    int status;
65657db96d56Sopenharmony_ci    int _return_value;
65667db96d56Sopenharmony_ci
65677db96d56Sopenharmony_ci    status = _PyLong_AsInt(arg);
65687db96d56Sopenharmony_ci    if (status == -1 && PyErr_Occurred()) {
65697db96d56Sopenharmony_ci        goto exit;
65707db96d56Sopenharmony_ci    }
65717db96d56Sopenharmony_ci    _return_value = os_WCOREDUMP_impl(module, status);
65727db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
65737db96d56Sopenharmony_ci        goto exit;
65747db96d56Sopenharmony_ci    }
65757db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
65767db96d56Sopenharmony_ci
65777db96d56Sopenharmony_ciexit:
65787db96d56Sopenharmony_ci    return return_value;
65797db96d56Sopenharmony_ci}
65807db96d56Sopenharmony_ci
65817db96d56Sopenharmony_ci#endif /* defined(HAVE_SYS_WAIT_H) && defined(WCOREDUMP) */
65827db96d56Sopenharmony_ci
65837db96d56Sopenharmony_ci#if defined(HAVE_SYS_WAIT_H) && defined(WIFCONTINUED)
65847db96d56Sopenharmony_ci
65857db96d56Sopenharmony_ciPyDoc_STRVAR(os_WIFCONTINUED__doc__,
65867db96d56Sopenharmony_ci"WIFCONTINUED($module, /, status)\n"
65877db96d56Sopenharmony_ci"--\n"
65887db96d56Sopenharmony_ci"\n"
65897db96d56Sopenharmony_ci"Return True if a particular process was continued from a job control stop.\n"
65907db96d56Sopenharmony_ci"\n"
65917db96d56Sopenharmony_ci"Return True if the process returning status was continued from a\n"
65927db96d56Sopenharmony_ci"job control stop.");
65937db96d56Sopenharmony_ci
65947db96d56Sopenharmony_ci#define OS_WIFCONTINUED_METHODDEF    \
65957db96d56Sopenharmony_ci    {"WIFCONTINUED", _PyCFunction_CAST(os_WIFCONTINUED), METH_FASTCALL|METH_KEYWORDS, os_WIFCONTINUED__doc__},
65967db96d56Sopenharmony_ci
65977db96d56Sopenharmony_cistatic int
65987db96d56Sopenharmony_cios_WIFCONTINUED_impl(PyObject *module, int status);
65997db96d56Sopenharmony_ci
66007db96d56Sopenharmony_cistatic PyObject *
66017db96d56Sopenharmony_cios_WIFCONTINUED(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
66027db96d56Sopenharmony_ci{
66037db96d56Sopenharmony_ci    PyObject *return_value = NULL;
66047db96d56Sopenharmony_ci    static const char * const _keywords[] = {"status", NULL};
66057db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "WIFCONTINUED", 0};
66067db96d56Sopenharmony_ci    PyObject *argsbuf[1];
66077db96d56Sopenharmony_ci    int status;
66087db96d56Sopenharmony_ci    int _return_value;
66097db96d56Sopenharmony_ci
66107db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
66117db96d56Sopenharmony_ci    if (!args) {
66127db96d56Sopenharmony_ci        goto exit;
66137db96d56Sopenharmony_ci    }
66147db96d56Sopenharmony_ci    status = _PyLong_AsInt(args[0]);
66157db96d56Sopenharmony_ci    if (status == -1 && PyErr_Occurred()) {
66167db96d56Sopenharmony_ci        goto exit;
66177db96d56Sopenharmony_ci    }
66187db96d56Sopenharmony_ci    _return_value = os_WIFCONTINUED_impl(module, status);
66197db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
66207db96d56Sopenharmony_ci        goto exit;
66217db96d56Sopenharmony_ci    }
66227db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
66237db96d56Sopenharmony_ci
66247db96d56Sopenharmony_ciexit:
66257db96d56Sopenharmony_ci    return return_value;
66267db96d56Sopenharmony_ci}
66277db96d56Sopenharmony_ci
66287db96d56Sopenharmony_ci#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFCONTINUED) */
66297db96d56Sopenharmony_ci
66307db96d56Sopenharmony_ci#if defined(HAVE_SYS_WAIT_H) && defined(WIFSTOPPED)
66317db96d56Sopenharmony_ci
66327db96d56Sopenharmony_ciPyDoc_STRVAR(os_WIFSTOPPED__doc__,
66337db96d56Sopenharmony_ci"WIFSTOPPED($module, /, status)\n"
66347db96d56Sopenharmony_ci"--\n"
66357db96d56Sopenharmony_ci"\n"
66367db96d56Sopenharmony_ci"Return True if the process returning status was stopped.");
66377db96d56Sopenharmony_ci
66387db96d56Sopenharmony_ci#define OS_WIFSTOPPED_METHODDEF    \
66397db96d56Sopenharmony_ci    {"WIFSTOPPED", _PyCFunction_CAST(os_WIFSTOPPED), METH_FASTCALL|METH_KEYWORDS, os_WIFSTOPPED__doc__},
66407db96d56Sopenharmony_ci
66417db96d56Sopenharmony_cistatic int
66427db96d56Sopenharmony_cios_WIFSTOPPED_impl(PyObject *module, int status);
66437db96d56Sopenharmony_ci
66447db96d56Sopenharmony_cistatic PyObject *
66457db96d56Sopenharmony_cios_WIFSTOPPED(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
66467db96d56Sopenharmony_ci{
66477db96d56Sopenharmony_ci    PyObject *return_value = NULL;
66487db96d56Sopenharmony_ci    static const char * const _keywords[] = {"status", NULL};
66497db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "WIFSTOPPED", 0};
66507db96d56Sopenharmony_ci    PyObject *argsbuf[1];
66517db96d56Sopenharmony_ci    int status;
66527db96d56Sopenharmony_ci    int _return_value;
66537db96d56Sopenharmony_ci
66547db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
66557db96d56Sopenharmony_ci    if (!args) {
66567db96d56Sopenharmony_ci        goto exit;
66577db96d56Sopenharmony_ci    }
66587db96d56Sopenharmony_ci    status = _PyLong_AsInt(args[0]);
66597db96d56Sopenharmony_ci    if (status == -1 && PyErr_Occurred()) {
66607db96d56Sopenharmony_ci        goto exit;
66617db96d56Sopenharmony_ci    }
66627db96d56Sopenharmony_ci    _return_value = os_WIFSTOPPED_impl(module, status);
66637db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
66647db96d56Sopenharmony_ci        goto exit;
66657db96d56Sopenharmony_ci    }
66667db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
66677db96d56Sopenharmony_ci
66687db96d56Sopenharmony_ciexit:
66697db96d56Sopenharmony_ci    return return_value;
66707db96d56Sopenharmony_ci}
66717db96d56Sopenharmony_ci
66727db96d56Sopenharmony_ci#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFSTOPPED) */
66737db96d56Sopenharmony_ci
66747db96d56Sopenharmony_ci#if defined(HAVE_SYS_WAIT_H) && defined(WIFSIGNALED)
66757db96d56Sopenharmony_ci
66767db96d56Sopenharmony_ciPyDoc_STRVAR(os_WIFSIGNALED__doc__,
66777db96d56Sopenharmony_ci"WIFSIGNALED($module, /, status)\n"
66787db96d56Sopenharmony_ci"--\n"
66797db96d56Sopenharmony_ci"\n"
66807db96d56Sopenharmony_ci"Return True if the process returning status was terminated by a signal.");
66817db96d56Sopenharmony_ci
66827db96d56Sopenharmony_ci#define OS_WIFSIGNALED_METHODDEF    \
66837db96d56Sopenharmony_ci    {"WIFSIGNALED", _PyCFunction_CAST(os_WIFSIGNALED), METH_FASTCALL|METH_KEYWORDS, os_WIFSIGNALED__doc__},
66847db96d56Sopenharmony_ci
66857db96d56Sopenharmony_cistatic int
66867db96d56Sopenharmony_cios_WIFSIGNALED_impl(PyObject *module, int status);
66877db96d56Sopenharmony_ci
66887db96d56Sopenharmony_cistatic PyObject *
66897db96d56Sopenharmony_cios_WIFSIGNALED(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
66907db96d56Sopenharmony_ci{
66917db96d56Sopenharmony_ci    PyObject *return_value = NULL;
66927db96d56Sopenharmony_ci    static const char * const _keywords[] = {"status", NULL};
66937db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "WIFSIGNALED", 0};
66947db96d56Sopenharmony_ci    PyObject *argsbuf[1];
66957db96d56Sopenharmony_ci    int status;
66967db96d56Sopenharmony_ci    int _return_value;
66977db96d56Sopenharmony_ci
66987db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
66997db96d56Sopenharmony_ci    if (!args) {
67007db96d56Sopenharmony_ci        goto exit;
67017db96d56Sopenharmony_ci    }
67027db96d56Sopenharmony_ci    status = _PyLong_AsInt(args[0]);
67037db96d56Sopenharmony_ci    if (status == -1 && PyErr_Occurred()) {
67047db96d56Sopenharmony_ci        goto exit;
67057db96d56Sopenharmony_ci    }
67067db96d56Sopenharmony_ci    _return_value = os_WIFSIGNALED_impl(module, status);
67077db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
67087db96d56Sopenharmony_ci        goto exit;
67097db96d56Sopenharmony_ci    }
67107db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
67117db96d56Sopenharmony_ci
67127db96d56Sopenharmony_ciexit:
67137db96d56Sopenharmony_ci    return return_value;
67147db96d56Sopenharmony_ci}
67157db96d56Sopenharmony_ci
67167db96d56Sopenharmony_ci#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFSIGNALED) */
67177db96d56Sopenharmony_ci
67187db96d56Sopenharmony_ci#if defined(HAVE_SYS_WAIT_H) && defined(WIFEXITED)
67197db96d56Sopenharmony_ci
67207db96d56Sopenharmony_ciPyDoc_STRVAR(os_WIFEXITED__doc__,
67217db96d56Sopenharmony_ci"WIFEXITED($module, /, status)\n"
67227db96d56Sopenharmony_ci"--\n"
67237db96d56Sopenharmony_ci"\n"
67247db96d56Sopenharmony_ci"Return True if the process returning status exited via the exit() system call.");
67257db96d56Sopenharmony_ci
67267db96d56Sopenharmony_ci#define OS_WIFEXITED_METHODDEF    \
67277db96d56Sopenharmony_ci    {"WIFEXITED", _PyCFunction_CAST(os_WIFEXITED), METH_FASTCALL|METH_KEYWORDS, os_WIFEXITED__doc__},
67287db96d56Sopenharmony_ci
67297db96d56Sopenharmony_cistatic int
67307db96d56Sopenharmony_cios_WIFEXITED_impl(PyObject *module, int status);
67317db96d56Sopenharmony_ci
67327db96d56Sopenharmony_cistatic PyObject *
67337db96d56Sopenharmony_cios_WIFEXITED(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
67347db96d56Sopenharmony_ci{
67357db96d56Sopenharmony_ci    PyObject *return_value = NULL;
67367db96d56Sopenharmony_ci    static const char * const _keywords[] = {"status", NULL};
67377db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "WIFEXITED", 0};
67387db96d56Sopenharmony_ci    PyObject *argsbuf[1];
67397db96d56Sopenharmony_ci    int status;
67407db96d56Sopenharmony_ci    int _return_value;
67417db96d56Sopenharmony_ci
67427db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
67437db96d56Sopenharmony_ci    if (!args) {
67447db96d56Sopenharmony_ci        goto exit;
67457db96d56Sopenharmony_ci    }
67467db96d56Sopenharmony_ci    status = _PyLong_AsInt(args[0]);
67477db96d56Sopenharmony_ci    if (status == -1 && PyErr_Occurred()) {
67487db96d56Sopenharmony_ci        goto exit;
67497db96d56Sopenharmony_ci    }
67507db96d56Sopenharmony_ci    _return_value = os_WIFEXITED_impl(module, status);
67517db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
67527db96d56Sopenharmony_ci        goto exit;
67537db96d56Sopenharmony_ci    }
67547db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
67557db96d56Sopenharmony_ci
67567db96d56Sopenharmony_ciexit:
67577db96d56Sopenharmony_ci    return return_value;
67587db96d56Sopenharmony_ci}
67597db96d56Sopenharmony_ci
67607db96d56Sopenharmony_ci#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFEXITED) */
67617db96d56Sopenharmony_ci
67627db96d56Sopenharmony_ci#if defined(HAVE_SYS_WAIT_H) && defined(WEXITSTATUS)
67637db96d56Sopenharmony_ci
67647db96d56Sopenharmony_ciPyDoc_STRVAR(os_WEXITSTATUS__doc__,
67657db96d56Sopenharmony_ci"WEXITSTATUS($module, /, status)\n"
67667db96d56Sopenharmony_ci"--\n"
67677db96d56Sopenharmony_ci"\n"
67687db96d56Sopenharmony_ci"Return the process return code from status.");
67697db96d56Sopenharmony_ci
67707db96d56Sopenharmony_ci#define OS_WEXITSTATUS_METHODDEF    \
67717db96d56Sopenharmony_ci    {"WEXITSTATUS", _PyCFunction_CAST(os_WEXITSTATUS), METH_FASTCALL|METH_KEYWORDS, os_WEXITSTATUS__doc__},
67727db96d56Sopenharmony_ci
67737db96d56Sopenharmony_cistatic int
67747db96d56Sopenharmony_cios_WEXITSTATUS_impl(PyObject *module, int status);
67757db96d56Sopenharmony_ci
67767db96d56Sopenharmony_cistatic PyObject *
67777db96d56Sopenharmony_cios_WEXITSTATUS(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
67787db96d56Sopenharmony_ci{
67797db96d56Sopenharmony_ci    PyObject *return_value = NULL;
67807db96d56Sopenharmony_ci    static const char * const _keywords[] = {"status", NULL};
67817db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "WEXITSTATUS", 0};
67827db96d56Sopenharmony_ci    PyObject *argsbuf[1];
67837db96d56Sopenharmony_ci    int status;
67847db96d56Sopenharmony_ci    int _return_value;
67857db96d56Sopenharmony_ci
67867db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
67877db96d56Sopenharmony_ci    if (!args) {
67887db96d56Sopenharmony_ci        goto exit;
67897db96d56Sopenharmony_ci    }
67907db96d56Sopenharmony_ci    status = _PyLong_AsInt(args[0]);
67917db96d56Sopenharmony_ci    if (status == -1 && PyErr_Occurred()) {
67927db96d56Sopenharmony_ci        goto exit;
67937db96d56Sopenharmony_ci    }
67947db96d56Sopenharmony_ci    _return_value = os_WEXITSTATUS_impl(module, status);
67957db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
67967db96d56Sopenharmony_ci        goto exit;
67977db96d56Sopenharmony_ci    }
67987db96d56Sopenharmony_ci    return_value = PyLong_FromLong((long)_return_value);
67997db96d56Sopenharmony_ci
68007db96d56Sopenharmony_ciexit:
68017db96d56Sopenharmony_ci    return return_value;
68027db96d56Sopenharmony_ci}
68037db96d56Sopenharmony_ci
68047db96d56Sopenharmony_ci#endif /* defined(HAVE_SYS_WAIT_H) && defined(WEXITSTATUS) */
68057db96d56Sopenharmony_ci
68067db96d56Sopenharmony_ci#if defined(HAVE_SYS_WAIT_H) && defined(WTERMSIG)
68077db96d56Sopenharmony_ci
68087db96d56Sopenharmony_ciPyDoc_STRVAR(os_WTERMSIG__doc__,
68097db96d56Sopenharmony_ci"WTERMSIG($module, /, status)\n"
68107db96d56Sopenharmony_ci"--\n"
68117db96d56Sopenharmony_ci"\n"
68127db96d56Sopenharmony_ci"Return the signal that terminated the process that provided the status value.");
68137db96d56Sopenharmony_ci
68147db96d56Sopenharmony_ci#define OS_WTERMSIG_METHODDEF    \
68157db96d56Sopenharmony_ci    {"WTERMSIG", _PyCFunction_CAST(os_WTERMSIG), METH_FASTCALL|METH_KEYWORDS, os_WTERMSIG__doc__},
68167db96d56Sopenharmony_ci
68177db96d56Sopenharmony_cistatic int
68187db96d56Sopenharmony_cios_WTERMSIG_impl(PyObject *module, int status);
68197db96d56Sopenharmony_ci
68207db96d56Sopenharmony_cistatic PyObject *
68217db96d56Sopenharmony_cios_WTERMSIG(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
68227db96d56Sopenharmony_ci{
68237db96d56Sopenharmony_ci    PyObject *return_value = NULL;
68247db96d56Sopenharmony_ci    static const char * const _keywords[] = {"status", NULL};
68257db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "WTERMSIG", 0};
68267db96d56Sopenharmony_ci    PyObject *argsbuf[1];
68277db96d56Sopenharmony_ci    int status;
68287db96d56Sopenharmony_ci    int _return_value;
68297db96d56Sopenharmony_ci
68307db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
68317db96d56Sopenharmony_ci    if (!args) {
68327db96d56Sopenharmony_ci        goto exit;
68337db96d56Sopenharmony_ci    }
68347db96d56Sopenharmony_ci    status = _PyLong_AsInt(args[0]);
68357db96d56Sopenharmony_ci    if (status == -1 && PyErr_Occurred()) {
68367db96d56Sopenharmony_ci        goto exit;
68377db96d56Sopenharmony_ci    }
68387db96d56Sopenharmony_ci    _return_value = os_WTERMSIG_impl(module, status);
68397db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
68407db96d56Sopenharmony_ci        goto exit;
68417db96d56Sopenharmony_ci    }
68427db96d56Sopenharmony_ci    return_value = PyLong_FromLong((long)_return_value);
68437db96d56Sopenharmony_ci
68447db96d56Sopenharmony_ciexit:
68457db96d56Sopenharmony_ci    return return_value;
68467db96d56Sopenharmony_ci}
68477db96d56Sopenharmony_ci
68487db96d56Sopenharmony_ci#endif /* defined(HAVE_SYS_WAIT_H) && defined(WTERMSIG) */
68497db96d56Sopenharmony_ci
68507db96d56Sopenharmony_ci#if defined(HAVE_SYS_WAIT_H) && defined(WSTOPSIG)
68517db96d56Sopenharmony_ci
68527db96d56Sopenharmony_ciPyDoc_STRVAR(os_WSTOPSIG__doc__,
68537db96d56Sopenharmony_ci"WSTOPSIG($module, /, status)\n"
68547db96d56Sopenharmony_ci"--\n"
68557db96d56Sopenharmony_ci"\n"
68567db96d56Sopenharmony_ci"Return the signal that stopped the process that provided the status value.");
68577db96d56Sopenharmony_ci
68587db96d56Sopenharmony_ci#define OS_WSTOPSIG_METHODDEF    \
68597db96d56Sopenharmony_ci    {"WSTOPSIG", _PyCFunction_CAST(os_WSTOPSIG), METH_FASTCALL|METH_KEYWORDS, os_WSTOPSIG__doc__},
68607db96d56Sopenharmony_ci
68617db96d56Sopenharmony_cistatic int
68627db96d56Sopenharmony_cios_WSTOPSIG_impl(PyObject *module, int status);
68637db96d56Sopenharmony_ci
68647db96d56Sopenharmony_cistatic PyObject *
68657db96d56Sopenharmony_cios_WSTOPSIG(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
68667db96d56Sopenharmony_ci{
68677db96d56Sopenharmony_ci    PyObject *return_value = NULL;
68687db96d56Sopenharmony_ci    static const char * const _keywords[] = {"status", NULL};
68697db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "WSTOPSIG", 0};
68707db96d56Sopenharmony_ci    PyObject *argsbuf[1];
68717db96d56Sopenharmony_ci    int status;
68727db96d56Sopenharmony_ci    int _return_value;
68737db96d56Sopenharmony_ci
68747db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
68757db96d56Sopenharmony_ci    if (!args) {
68767db96d56Sopenharmony_ci        goto exit;
68777db96d56Sopenharmony_ci    }
68787db96d56Sopenharmony_ci    status = _PyLong_AsInt(args[0]);
68797db96d56Sopenharmony_ci    if (status == -1 && PyErr_Occurred()) {
68807db96d56Sopenharmony_ci        goto exit;
68817db96d56Sopenharmony_ci    }
68827db96d56Sopenharmony_ci    _return_value = os_WSTOPSIG_impl(module, status);
68837db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
68847db96d56Sopenharmony_ci        goto exit;
68857db96d56Sopenharmony_ci    }
68867db96d56Sopenharmony_ci    return_value = PyLong_FromLong((long)_return_value);
68877db96d56Sopenharmony_ci
68887db96d56Sopenharmony_ciexit:
68897db96d56Sopenharmony_ci    return return_value;
68907db96d56Sopenharmony_ci}
68917db96d56Sopenharmony_ci
68927db96d56Sopenharmony_ci#endif /* defined(HAVE_SYS_WAIT_H) && defined(WSTOPSIG) */
68937db96d56Sopenharmony_ci
68947db96d56Sopenharmony_ci#if (defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H))
68957db96d56Sopenharmony_ci
68967db96d56Sopenharmony_ciPyDoc_STRVAR(os_fstatvfs__doc__,
68977db96d56Sopenharmony_ci"fstatvfs($module, fd, /)\n"
68987db96d56Sopenharmony_ci"--\n"
68997db96d56Sopenharmony_ci"\n"
69007db96d56Sopenharmony_ci"Perform an fstatvfs system call on the given fd.\n"
69017db96d56Sopenharmony_ci"\n"
69027db96d56Sopenharmony_ci"Equivalent to statvfs(fd).");
69037db96d56Sopenharmony_ci
69047db96d56Sopenharmony_ci#define OS_FSTATVFS_METHODDEF    \
69057db96d56Sopenharmony_ci    {"fstatvfs", (PyCFunction)os_fstatvfs, METH_O, os_fstatvfs__doc__},
69067db96d56Sopenharmony_ci
69077db96d56Sopenharmony_cistatic PyObject *
69087db96d56Sopenharmony_cios_fstatvfs_impl(PyObject *module, int fd);
69097db96d56Sopenharmony_ci
69107db96d56Sopenharmony_cistatic PyObject *
69117db96d56Sopenharmony_cios_fstatvfs(PyObject *module, PyObject *arg)
69127db96d56Sopenharmony_ci{
69137db96d56Sopenharmony_ci    PyObject *return_value = NULL;
69147db96d56Sopenharmony_ci    int fd;
69157db96d56Sopenharmony_ci
69167db96d56Sopenharmony_ci    fd = _PyLong_AsInt(arg);
69177db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
69187db96d56Sopenharmony_ci        goto exit;
69197db96d56Sopenharmony_ci    }
69207db96d56Sopenharmony_ci    return_value = os_fstatvfs_impl(module, fd);
69217db96d56Sopenharmony_ci
69227db96d56Sopenharmony_ciexit:
69237db96d56Sopenharmony_ci    return return_value;
69247db96d56Sopenharmony_ci}
69257db96d56Sopenharmony_ci
69267db96d56Sopenharmony_ci#endif /* (defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H)) */
69277db96d56Sopenharmony_ci
69287db96d56Sopenharmony_ci#if (defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H))
69297db96d56Sopenharmony_ci
69307db96d56Sopenharmony_ciPyDoc_STRVAR(os_statvfs__doc__,
69317db96d56Sopenharmony_ci"statvfs($module, /, path)\n"
69327db96d56Sopenharmony_ci"--\n"
69337db96d56Sopenharmony_ci"\n"
69347db96d56Sopenharmony_ci"Perform a statvfs system call on the given path.\n"
69357db96d56Sopenharmony_ci"\n"
69367db96d56Sopenharmony_ci"path may always be specified as a string.\n"
69377db96d56Sopenharmony_ci"On some platforms, path may also be specified as an open file descriptor.\n"
69387db96d56Sopenharmony_ci"  If this functionality is unavailable, using it raises an exception.");
69397db96d56Sopenharmony_ci
69407db96d56Sopenharmony_ci#define OS_STATVFS_METHODDEF    \
69417db96d56Sopenharmony_ci    {"statvfs", _PyCFunction_CAST(os_statvfs), METH_FASTCALL|METH_KEYWORDS, os_statvfs__doc__},
69427db96d56Sopenharmony_ci
69437db96d56Sopenharmony_cistatic PyObject *
69447db96d56Sopenharmony_cios_statvfs_impl(PyObject *module, path_t *path);
69457db96d56Sopenharmony_ci
69467db96d56Sopenharmony_cistatic PyObject *
69477db96d56Sopenharmony_cios_statvfs(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
69487db96d56Sopenharmony_ci{
69497db96d56Sopenharmony_ci    PyObject *return_value = NULL;
69507db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", NULL};
69517db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "statvfs", 0};
69527db96d56Sopenharmony_ci    PyObject *argsbuf[1];
69537db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("statvfs", "path", 0, PATH_HAVE_FSTATVFS);
69547db96d56Sopenharmony_ci
69557db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
69567db96d56Sopenharmony_ci    if (!args) {
69577db96d56Sopenharmony_ci        goto exit;
69587db96d56Sopenharmony_ci    }
69597db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
69607db96d56Sopenharmony_ci        goto exit;
69617db96d56Sopenharmony_ci    }
69627db96d56Sopenharmony_ci    return_value = os_statvfs_impl(module, &path);
69637db96d56Sopenharmony_ci
69647db96d56Sopenharmony_ciexit:
69657db96d56Sopenharmony_ci    /* Cleanup for path */
69667db96d56Sopenharmony_ci    path_cleanup(&path);
69677db96d56Sopenharmony_ci
69687db96d56Sopenharmony_ci    return return_value;
69697db96d56Sopenharmony_ci}
69707db96d56Sopenharmony_ci
69717db96d56Sopenharmony_ci#endif /* (defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H)) */
69727db96d56Sopenharmony_ci
69737db96d56Sopenharmony_ci#if defined(MS_WINDOWS)
69747db96d56Sopenharmony_ci
69757db96d56Sopenharmony_ciPyDoc_STRVAR(os__getdiskusage__doc__,
69767db96d56Sopenharmony_ci"_getdiskusage($module, /, path)\n"
69777db96d56Sopenharmony_ci"--\n"
69787db96d56Sopenharmony_ci"\n"
69797db96d56Sopenharmony_ci"Return disk usage statistics about the given path as a (total, free) tuple.");
69807db96d56Sopenharmony_ci
69817db96d56Sopenharmony_ci#define OS__GETDISKUSAGE_METHODDEF    \
69827db96d56Sopenharmony_ci    {"_getdiskusage", _PyCFunction_CAST(os__getdiskusage), METH_FASTCALL|METH_KEYWORDS, os__getdiskusage__doc__},
69837db96d56Sopenharmony_ci
69847db96d56Sopenharmony_cistatic PyObject *
69857db96d56Sopenharmony_cios__getdiskusage_impl(PyObject *module, path_t *path);
69867db96d56Sopenharmony_ci
69877db96d56Sopenharmony_cistatic PyObject *
69887db96d56Sopenharmony_cios__getdiskusage(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
69897db96d56Sopenharmony_ci{
69907db96d56Sopenharmony_ci    PyObject *return_value = NULL;
69917db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", NULL};
69927db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "_getdiskusage", 0};
69937db96d56Sopenharmony_ci    PyObject *argsbuf[1];
69947db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("_getdiskusage", "path", 0, 0);
69957db96d56Sopenharmony_ci
69967db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
69977db96d56Sopenharmony_ci    if (!args) {
69987db96d56Sopenharmony_ci        goto exit;
69997db96d56Sopenharmony_ci    }
70007db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
70017db96d56Sopenharmony_ci        goto exit;
70027db96d56Sopenharmony_ci    }
70037db96d56Sopenharmony_ci    return_value = os__getdiskusage_impl(module, &path);
70047db96d56Sopenharmony_ci
70057db96d56Sopenharmony_ciexit:
70067db96d56Sopenharmony_ci    /* Cleanup for path */
70077db96d56Sopenharmony_ci    path_cleanup(&path);
70087db96d56Sopenharmony_ci
70097db96d56Sopenharmony_ci    return return_value;
70107db96d56Sopenharmony_ci}
70117db96d56Sopenharmony_ci
70127db96d56Sopenharmony_ci#endif /* defined(MS_WINDOWS) */
70137db96d56Sopenharmony_ci
70147db96d56Sopenharmony_ci#if defined(HAVE_FPATHCONF)
70157db96d56Sopenharmony_ci
70167db96d56Sopenharmony_ciPyDoc_STRVAR(os_fpathconf__doc__,
70177db96d56Sopenharmony_ci"fpathconf($module, fd, name, /)\n"
70187db96d56Sopenharmony_ci"--\n"
70197db96d56Sopenharmony_ci"\n"
70207db96d56Sopenharmony_ci"Return the configuration limit name for the file descriptor fd.\n"
70217db96d56Sopenharmony_ci"\n"
70227db96d56Sopenharmony_ci"If there is no limit, return -1.");
70237db96d56Sopenharmony_ci
70247db96d56Sopenharmony_ci#define OS_FPATHCONF_METHODDEF    \
70257db96d56Sopenharmony_ci    {"fpathconf", _PyCFunction_CAST(os_fpathconf), METH_FASTCALL, os_fpathconf__doc__},
70267db96d56Sopenharmony_ci
70277db96d56Sopenharmony_cistatic long
70287db96d56Sopenharmony_cios_fpathconf_impl(PyObject *module, int fd, int name);
70297db96d56Sopenharmony_ci
70307db96d56Sopenharmony_cistatic PyObject *
70317db96d56Sopenharmony_cios_fpathconf(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
70327db96d56Sopenharmony_ci{
70337db96d56Sopenharmony_ci    PyObject *return_value = NULL;
70347db96d56Sopenharmony_ci    int fd;
70357db96d56Sopenharmony_ci    int name;
70367db96d56Sopenharmony_ci    long _return_value;
70377db96d56Sopenharmony_ci
70387db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("fpathconf", nargs, 2, 2)) {
70397db96d56Sopenharmony_ci        goto exit;
70407db96d56Sopenharmony_ci    }
70417db96d56Sopenharmony_ci    if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
70427db96d56Sopenharmony_ci        goto exit;
70437db96d56Sopenharmony_ci    }
70447db96d56Sopenharmony_ci    if (!conv_path_confname(args[1], &name)) {
70457db96d56Sopenharmony_ci        goto exit;
70467db96d56Sopenharmony_ci    }
70477db96d56Sopenharmony_ci    _return_value = os_fpathconf_impl(module, fd, name);
70487db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
70497db96d56Sopenharmony_ci        goto exit;
70507db96d56Sopenharmony_ci    }
70517db96d56Sopenharmony_ci    return_value = PyLong_FromLong(_return_value);
70527db96d56Sopenharmony_ci
70537db96d56Sopenharmony_ciexit:
70547db96d56Sopenharmony_ci    return return_value;
70557db96d56Sopenharmony_ci}
70567db96d56Sopenharmony_ci
70577db96d56Sopenharmony_ci#endif /* defined(HAVE_FPATHCONF) */
70587db96d56Sopenharmony_ci
70597db96d56Sopenharmony_ci#if defined(HAVE_PATHCONF)
70607db96d56Sopenharmony_ci
70617db96d56Sopenharmony_ciPyDoc_STRVAR(os_pathconf__doc__,
70627db96d56Sopenharmony_ci"pathconf($module, /, path, name)\n"
70637db96d56Sopenharmony_ci"--\n"
70647db96d56Sopenharmony_ci"\n"
70657db96d56Sopenharmony_ci"Return the configuration limit name for the file or directory path.\n"
70667db96d56Sopenharmony_ci"\n"
70677db96d56Sopenharmony_ci"If there is no limit, return -1.\n"
70687db96d56Sopenharmony_ci"On some platforms, path may also be specified as an open file descriptor.\n"
70697db96d56Sopenharmony_ci"  If this functionality is unavailable, using it raises an exception.");
70707db96d56Sopenharmony_ci
70717db96d56Sopenharmony_ci#define OS_PATHCONF_METHODDEF    \
70727db96d56Sopenharmony_ci    {"pathconf", _PyCFunction_CAST(os_pathconf), METH_FASTCALL|METH_KEYWORDS, os_pathconf__doc__},
70737db96d56Sopenharmony_ci
70747db96d56Sopenharmony_cistatic long
70757db96d56Sopenharmony_cios_pathconf_impl(PyObject *module, path_t *path, int name);
70767db96d56Sopenharmony_ci
70777db96d56Sopenharmony_cistatic PyObject *
70787db96d56Sopenharmony_cios_pathconf(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
70797db96d56Sopenharmony_ci{
70807db96d56Sopenharmony_ci    PyObject *return_value = NULL;
70817db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "name", NULL};
70827db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "pathconf", 0};
70837db96d56Sopenharmony_ci    PyObject *argsbuf[2];
70847db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("pathconf", "path", 0, PATH_HAVE_FPATHCONF);
70857db96d56Sopenharmony_ci    int name;
70867db96d56Sopenharmony_ci    long _return_value;
70877db96d56Sopenharmony_ci
70887db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
70897db96d56Sopenharmony_ci    if (!args) {
70907db96d56Sopenharmony_ci        goto exit;
70917db96d56Sopenharmony_ci    }
70927db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
70937db96d56Sopenharmony_ci        goto exit;
70947db96d56Sopenharmony_ci    }
70957db96d56Sopenharmony_ci    if (!conv_path_confname(args[1], &name)) {
70967db96d56Sopenharmony_ci        goto exit;
70977db96d56Sopenharmony_ci    }
70987db96d56Sopenharmony_ci    _return_value = os_pathconf_impl(module, &path, name);
70997db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
71007db96d56Sopenharmony_ci        goto exit;
71017db96d56Sopenharmony_ci    }
71027db96d56Sopenharmony_ci    return_value = PyLong_FromLong(_return_value);
71037db96d56Sopenharmony_ci
71047db96d56Sopenharmony_ciexit:
71057db96d56Sopenharmony_ci    /* Cleanup for path */
71067db96d56Sopenharmony_ci    path_cleanup(&path);
71077db96d56Sopenharmony_ci
71087db96d56Sopenharmony_ci    return return_value;
71097db96d56Sopenharmony_ci}
71107db96d56Sopenharmony_ci
71117db96d56Sopenharmony_ci#endif /* defined(HAVE_PATHCONF) */
71127db96d56Sopenharmony_ci
71137db96d56Sopenharmony_ci#if defined(HAVE_CONFSTR)
71147db96d56Sopenharmony_ci
71157db96d56Sopenharmony_ciPyDoc_STRVAR(os_confstr__doc__,
71167db96d56Sopenharmony_ci"confstr($module, name, /)\n"
71177db96d56Sopenharmony_ci"--\n"
71187db96d56Sopenharmony_ci"\n"
71197db96d56Sopenharmony_ci"Return a string-valued system configuration variable.");
71207db96d56Sopenharmony_ci
71217db96d56Sopenharmony_ci#define OS_CONFSTR_METHODDEF    \
71227db96d56Sopenharmony_ci    {"confstr", (PyCFunction)os_confstr, METH_O, os_confstr__doc__},
71237db96d56Sopenharmony_ci
71247db96d56Sopenharmony_cistatic PyObject *
71257db96d56Sopenharmony_cios_confstr_impl(PyObject *module, int name);
71267db96d56Sopenharmony_ci
71277db96d56Sopenharmony_cistatic PyObject *
71287db96d56Sopenharmony_cios_confstr(PyObject *module, PyObject *arg)
71297db96d56Sopenharmony_ci{
71307db96d56Sopenharmony_ci    PyObject *return_value = NULL;
71317db96d56Sopenharmony_ci    int name;
71327db96d56Sopenharmony_ci
71337db96d56Sopenharmony_ci    if (!conv_confstr_confname(arg, &name)) {
71347db96d56Sopenharmony_ci        goto exit;
71357db96d56Sopenharmony_ci    }
71367db96d56Sopenharmony_ci    return_value = os_confstr_impl(module, name);
71377db96d56Sopenharmony_ci
71387db96d56Sopenharmony_ciexit:
71397db96d56Sopenharmony_ci    return return_value;
71407db96d56Sopenharmony_ci}
71417db96d56Sopenharmony_ci
71427db96d56Sopenharmony_ci#endif /* defined(HAVE_CONFSTR) */
71437db96d56Sopenharmony_ci
71447db96d56Sopenharmony_ci#if defined(HAVE_SYSCONF)
71457db96d56Sopenharmony_ci
71467db96d56Sopenharmony_ciPyDoc_STRVAR(os_sysconf__doc__,
71477db96d56Sopenharmony_ci"sysconf($module, name, /)\n"
71487db96d56Sopenharmony_ci"--\n"
71497db96d56Sopenharmony_ci"\n"
71507db96d56Sopenharmony_ci"Return an integer-valued system configuration variable.");
71517db96d56Sopenharmony_ci
71527db96d56Sopenharmony_ci#define OS_SYSCONF_METHODDEF    \
71537db96d56Sopenharmony_ci    {"sysconf", (PyCFunction)os_sysconf, METH_O, os_sysconf__doc__},
71547db96d56Sopenharmony_ci
71557db96d56Sopenharmony_cistatic long
71567db96d56Sopenharmony_cios_sysconf_impl(PyObject *module, int name);
71577db96d56Sopenharmony_ci
71587db96d56Sopenharmony_cistatic PyObject *
71597db96d56Sopenharmony_cios_sysconf(PyObject *module, PyObject *arg)
71607db96d56Sopenharmony_ci{
71617db96d56Sopenharmony_ci    PyObject *return_value = NULL;
71627db96d56Sopenharmony_ci    int name;
71637db96d56Sopenharmony_ci    long _return_value;
71647db96d56Sopenharmony_ci
71657db96d56Sopenharmony_ci    if (!conv_sysconf_confname(arg, &name)) {
71667db96d56Sopenharmony_ci        goto exit;
71677db96d56Sopenharmony_ci    }
71687db96d56Sopenharmony_ci    _return_value = os_sysconf_impl(module, name);
71697db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
71707db96d56Sopenharmony_ci        goto exit;
71717db96d56Sopenharmony_ci    }
71727db96d56Sopenharmony_ci    return_value = PyLong_FromLong(_return_value);
71737db96d56Sopenharmony_ci
71747db96d56Sopenharmony_ciexit:
71757db96d56Sopenharmony_ci    return return_value;
71767db96d56Sopenharmony_ci}
71777db96d56Sopenharmony_ci
71787db96d56Sopenharmony_ci#endif /* defined(HAVE_SYSCONF) */
71797db96d56Sopenharmony_ci
71807db96d56Sopenharmony_ciPyDoc_STRVAR(os_abort__doc__,
71817db96d56Sopenharmony_ci"abort($module, /)\n"
71827db96d56Sopenharmony_ci"--\n"
71837db96d56Sopenharmony_ci"\n"
71847db96d56Sopenharmony_ci"Abort the interpreter immediately.\n"
71857db96d56Sopenharmony_ci"\n"
71867db96d56Sopenharmony_ci"This function \'dumps core\' or otherwise fails in the hardest way possible\n"
71877db96d56Sopenharmony_ci"on the hosting operating system.  This function never returns.");
71887db96d56Sopenharmony_ci
71897db96d56Sopenharmony_ci#define OS_ABORT_METHODDEF    \
71907db96d56Sopenharmony_ci    {"abort", (PyCFunction)os_abort, METH_NOARGS, os_abort__doc__},
71917db96d56Sopenharmony_ci
71927db96d56Sopenharmony_cistatic PyObject *
71937db96d56Sopenharmony_cios_abort_impl(PyObject *module);
71947db96d56Sopenharmony_ci
71957db96d56Sopenharmony_cistatic PyObject *
71967db96d56Sopenharmony_cios_abort(PyObject *module, PyObject *Py_UNUSED(ignored))
71977db96d56Sopenharmony_ci{
71987db96d56Sopenharmony_ci    return os_abort_impl(module);
71997db96d56Sopenharmony_ci}
72007db96d56Sopenharmony_ci
72017db96d56Sopenharmony_ci#if defined(MS_WINDOWS)
72027db96d56Sopenharmony_ci
72037db96d56Sopenharmony_ciPyDoc_STRVAR(os_startfile__doc__,
72047db96d56Sopenharmony_ci"startfile($module, /, filepath, operation=<unrepresentable>,\n"
72057db96d56Sopenharmony_ci"          arguments=<unrepresentable>, cwd=None, show_cmd=1)\n"
72067db96d56Sopenharmony_ci"--\n"
72077db96d56Sopenharmony_ci"\n"
72087db96d56Sopenharmony_ci"Start a file with its associated application.\n"
72097db96d56Sopenharmony_ci"\n"
72107db96d56Sopenharmony_ci"When \"operation\" is not specified or \"open\", this acts like\n"
72117db96d56Sopenharmony_ci"double-clicking the file in Explorer, or giving the file name as an\n"
72127db96d56Sopenharmony_ci"argument to the DOS \"start\" command: the file is opened with whatever\n"
72137db96d56Sopenharmony_ci"application (if any) its extension is associated.\n"
72147db96d56Sopenharmony_ci"When another \"operation\" is given, it specifies what should be done with\n"
72157db96d56Sopenharmony_ci"the file.  A typical operation is \"print\".\n"
72167db96d56Sopenharmony_ci"\n"
72177db96d56Sopenharmony_ci"\"arguments\" is passed to the application, but should be omitted if the\n"
72187db96d56Sopenharmony_ci"file is a document.\n"
72197db96d56Sopenharmony_ci"\n"
72207db96d56Sopenharmony_ci"\"cwd\" is the working directory for the operation. If \"filepath\" is\n"
72217db96d56Sopenharmony_ci"relative, it will be resolved against this directory. This argument\n"
72227db96d56Sopenharmony_ci"should usually be an absolute path.\n"
72237db96d56Sopenharmony_ci"\n"
72247db96d56Sopenharmony_ci"\"show_cmd\" can be used to override the recommended visibility option.\n"
72257db96d56Sopenharmony_ci"See the Windows ShellExecute documentation for values.\n"
72267db96d56Sopenharmony_ci"\n"
72277db96d56Sopenharmony_ci"startfile returns as soon as the associated application is launched.\n"
72287db96d56Sopenharmony_ci"There is no option to wait for the application to close, and no way\n"
72297db96d56Sopenharmony_ci"to retrieve the application\'s exit status.\n"
72307db96d56Sopenharmony_ci"\n"
72317db96d56Sopenharmony_ci"The filepath is relative to the current directory.  If you want to use\n"
72327db96d56Sopenharmony_ci"an absolute path, make sure the first character is not a slash (\"/\");\n"
72337db96d56Sopenharmony_ci"the underlying Win32 ShellExecute function doesn\'t work if it is.");
72347db96d56Sopenharmony_ci
72357db96d56Sopenharmony_ci#define OS_STARTFILE_METHODDEF    \
72367db96d56Sopenharmony_ci    {"startfile", _PyCFunction_CAST(os_startfile), METH_FASTCALL|METH_KEYWORDS, os_startfile__doc__},
72377db96d56Sopenharmony_ci
72387db96d56Sopenharmony_cistatic PyObject *
72397db96d56Sopenharmony_cios_startfile_impl(PyObject *module, path_t *filepath,
72407db96d56Sopenharmony_ci                  const Py_UNICODE *operation, const Py_UNICODE *arguments,
72417db96d56Sopenharmony_ci                  path_t *cwd, int show_cmd);
72427db96d56Sopenharmony_ci
72437db96d56Sopenharmony_cistatic PyObject *
72447db96d56Sopenharmony_cios_startfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
72457db96d56Sopenharmony_ci{
72467db96d56Sopenharmony_ci    PyObject *return_value = NULL;
72477db96d56Sopenharmony_ci    static const char * const _keywords[] = {"filepath", "operation", "arguments", "cwd", "show_cmd", NULL};
72487db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "startfile", 0};
72497db96d56Sopenharmony_ci    PyObject *argsbuf[5];
72507db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
72517db96d56Sopenharmony_ci    path_t filepath = PATH_T_INITIALIZE("startfile", "filepath", 0, 0);
72527db96d56Sopenharmony_ci    const Py_UNICODE *operation = NULL;
72537db96d56Sopenharmony_ci    const Py_UNICODE *arguments = NULL;
72547db96d56Sopenharmony_ci    path_t cwd = PATH_T_INITIALIZE("startfile", "cwd", 1, 0);
72557db96d56Sopenharmony_ci    int show_cmd = 1;
72567db96d56Sopenharmony_ci
72577db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 5, 0, argsbuf);
72587db96d56Sopenharmony_ci    if (!args) {
72597db96d56Sopenharmony_ci        goto exit;
72607db96d56Sopenharmony_ci    }
72617db96d56Sopenharmony_ci    if (!path_converter(args[0], &filepath)) {
72627db96d56Sopenharmony_ci        goto exit;
72637db96d56Sopenharmony_ci    }
72647db96d56Sopenharmony_ci    if (!noptargs) {
72657db96d56Sopenharmony_ci        goto skip_optional_pos;
72667db96d56Sopenharmony_ci    }
72677db96d56Sopenharmony_ci    if (args[1]) {
72687db96d56Sopenharmony_ci        if (!PyUnicode_Check(args[1])) {
72697db96d56Sopenharmony_ci            _PyArg_BadArgument("startfile", "argument 'operation'", "str", args[1]);
72707db96d56Sopenharmony_ci            goto exit;
72717db96d56Sopenharmony_ci        }
72727db96d56Sopenharmony_ci        #if USE_UNICODE_WCHAR_CACHE
72737db96d56Sopenharmony_ci        operation = _PyUnicode_AsUnicode(args[1]);
72747db96d56Sopenharmony_ci        #else /* USE_UNICODE_WCHAR_CACHE */
72757db96d56Sopenharmony_ci        operation = PyUnicode_AsWideCharString(args[1], NULL);
72767db96d56Sopenharmony_ci        #endif /* USE_UNICODE_WCHAR_CACHE */
72777db96d56Sopenharmony_ci        if (operation == NULL) {
72787db96d56Sopenharmony_ci            goto exit;
72797db96d56Sopenharmony_ci        }
72807db96d56Sopenharmony_ci        if (!--noptargs) {
72817db96d56Sopenharmony_ci            goto skip_optional_pos;
72827db96d56Sopenharmony_ci        }
72837db96d56Sopenharmony_ci    }
72847db96d56Sopenharmony_ci    if (args[2]) {
72857db96d56Sopenharmony_ci        if (!PyUnicode_Check(args[2])) {
72867db96d56Sopenharmony_ci            _PyArg_BadArgument("startfile", "argument 'arguments'", "str", args[2]);
72877db96d56Sopenharmony_ci            goto exit;
72887db96d56Sopenharmony_ci        }
72897db96d56Sopenharmony_ci        #if USE_UNICODE_WCHAR_CACHE
72907db96d56Sopenharmony_ci        arguments = _PyUnicode_AsUnicode(args[2]);
72917db96d56Sopenharmony_ci        #else /* USE_UNICODE_WCHAR_CACHE */
72927db96d56Sopenharmony_ci        arguments = PyUnicode_AsWideCharString(args[2], NULL);
72937db96d56Sopenharmony_ci        #endif /* USE_UNICODE_WCHAR_CACHE */
72947db96d56Sopenharmony_ci        if (arguments == NULL) {
72957db96d56Sopenharmony_ci            goto exit;
72967db96d56Sopenharmony_ci        }
72977db96d56Sopenharmony_ci        if (!--noptargs) {
72987db96d56Sopenharmony_ci            goto skip_optional_pos;
72997db96d56Sopenharmony_ci        }
73007db96d56Sopenharmony_ci    }
73017db96d56Sopenharmony_ci    if (args[3]) {
73027db96d56Sopenharmony_ci        if (!path_converter(args[3], &cwd)) {
73037db96d56Sopenharmony_ci            goto exit;
73047db96d56Sopenharmony_ci        }
73057db96d56Sopenharmony_ci        if (!--noptargs) {
73067db96d56Sopenharmony_ci            goto skip_optional_pos;
73077db96d56Sopenharmony_ci        }
73087db96d56Sopenharmony_ci    }
73097db96d56Sopenharmony_ci    show_cmd = _PyLong_AsInt(args[4]);
73107db96d56Sopenharmony_ci    if (show_cmd == -1 && PyErr_Occurred()) {
73117db96d56Sopenharmony_ci        goto exit;
73127db96d56Sopenharmony_ci    }
73137db96d56Sopenharmony_ciskip_optional_pos:
73147db96d56Sopenharmony_ci    return_value = os_startfile_impl(module, &filepath, operation, arguments, &cwd, show_cmd);
73157db96d56Sopenharmony_ci
73167db96d56Sopenharmony_ciexit:
73177db96d56Sopenharmony_ci    /* Cleanup for filepath */
73187db96d56Sopenharmony_ci    path_cleanup(&filepath);
73197db96d56Sopenharmony_ci    /* Cleanup for operation */
73207db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
73217db96d56Sopenharmony_ci    PyMem_Free((void *)operation);
73227db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
73237db96d56Sopenharmony_ci    /* Cleanup for arguments */
73247db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
73257db96d56Sopenharmony_ci    PyMem_Free((void *)arguments);
73267db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
73277db96d56Sopenharmony_ci    /* Cleanup for cwd */
73287db96d56Sopenharmony_ci    path_cleanup(&cwd);
73297db96d56Sopenharmony_ci
73307db96d56Sopenharmony_ci    return return_value;
73317db96d56Sopenharmony_ci}
73327db96d56Sopenharmony_ci
73337db96d56Sopenharmony_ci#endif /* defined(MS_WINDOWS) */
73347db96d56Sopenharmony_ci
73357db96d56Sopenharmony_ci#if defined(HAVE_GETLOADAVG)
73367db96d56Sopenharmony_ci
73377db96d56Sopenharmony_ciPyDoc_STRVAR(os_getloadavg__doc__,
73387db96d56Sopenharmony_ci"getloadavg($module, /)\n"
73397db96d56Sopenharmony_ci"--\n"
73407db96d56Sopenharmony_ci"\n"
73417db96d56Sopenharmony_ci"Return average recent system load information.\n"
73427db96d56Sopenharmony_ci"\n"
73437db96d56Sopenharmony_ci"Return the number of processes in the system run queue averaged over\n"
73447db96d56Sopenharmony_ci"the last 1, 5, and 15 minutes as a tuple of three floats.\n"
73457db96d56Sopenharmony_ci"Raises OSError if the load average was unobtainable.");
73467db96d56Sopenharmony_ci
73477db96d56Sopenharmony_ci#define OS_GETLOADAVG_METHODDEF    \
73487db96d56Sopenharmony_ci    {"getloadavg", (PyCFunction)os_getloadavg, METH_NOARGS, os_getloadavg__doc__},
73497db96d56Sopenharmony_ci
73507db96d56Sopenharmony_cistatic PyObject *
73517db96d56Sopenharmony_cios_getloadavg_impl(PyObject *module);
73527db96d56Sopenharmony_ci
73537db96d56Sopenharmony_cistatic PyObject *
73547db96d56Sopenharmony_cios_getloadavg(PyObject *module, PyObject *Py_UNUSED(ignored))
73557db96d56Sopenharmony_ci{
73567db96d56Sopenharmony_ci    return os_getloadavg_impl(module);
73577db96d56Sopenharmony_ci}
73587db96d56Sopenharmony_ci
73597db96d56Sopenharmony_ci#endif /* defined(HAVE_GETLOADAVG) */
73607db96d56Sopenharmony_ci
73617db96d56Sopenharmony_ciPyDoc_STRVAR(os_device_encoding__doc__,
73627db96d56Sopenharmony_ci"device_encoding($module, /, fd)\n"
73637db96d56Sopenharmony_ci"--\n"
73647db96d56Sopenharmony_ci"\n"
73657db96d56Sopenharmony_ci"Return a string describing the encoding of a terminal\'s file descriptor.\n"
73667db96d56Sopenharmony_ci"\n"
73677db96d56Sopenharmony_ci"The file descriptor must be attached to a terminal.\n"
73687db96d56Sopenharmony_ci"If the device is not a terminal, return None.");
73697db96d56Sopenharmony_ci
73707db96d56Sopenharmony_ci#define OS_DEVICE_ENCODING_METHODDEF    \
73717db96d56Sopenharmony_ci    {"device_encoding", _PyCFunction_CAST(os_device_encoding), METH_FASTCALL|METH_KEYWORDS, os_device_encoding__doc__},
73727db96d56Sopenharmony_ci
73737db96d56Sopenharmony_cistatic PyObject *
73747db96d56Sopenharmony_cios_device_encoding_impl(PyObject *module, int fd);
73757db96d56Sopenharmony_ci
73767db96d56Sopenharmony_cistatic PyObject *
73777db96d56Sopenharmony_cios_device_encoding(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
73787db96d56Sopenharmony_ci{
73797db96d56Sopenharmony_ci    PyObject *return_value = NULL;
73807db96d56Sopenharmony_ci    static const char * const _keywords[] = {"fd", NULL};
73817db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "device_encoding", 0};
73827db96d56Sopenharmony_ci    PyObject *argsbuf[1];
73837db96d56Sopenharmony_ci    int fd;
73847db96d56Sopenharmony_ci
73857db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
73867db96d56Sopenharmony_ci    if (!args) {
73877db96d56Sopenharmony_ci        goto exit;
73887db96d56Sopenharmony_ci    }
73897db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
73907db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
73917db96d56Sopenharmony_ci        goto exit;
73927db96d56Sopenharmony_ci    }
73937db96d56Sopenharmony_ci    return_value = os_device_encoding_impl(module, fd);
73947db96d56Sopenharmony_ci
73957db96d56Sopenharmony_ciexit:
73967db96d56Sopenharmony_ci    return return_value;
73977db96d56Sopenharmony_ci}
73987db96d56Sopenharmony_ci
73997db96d56Sopenharmony_ci#if defined(HAVE_SETRESUID)
74007db96d56Sopenharmony_ci
74017db96d56Sopenharmony_ciPyDoc_STRVAR(os_setresuid__doc__,
74027db96d56Sopenharmony_ci"setresuid($module, ruid, euid, suid, /)\n"
74037db96d56Sopenharmony_ci"--\n"
74047db96d56Sopenharmony_ci"\n"
74057db96d56Sopenharmony_ci"Set the current process\'s real, effective, and saved user ids.");
74067db96d56Sopenharmony_ci
74077db96d56Sopenharmony_ci#define OS_SETRESUID_METHODDEF    \
74087db96d56Sopenharmony_ci    {"setresuid", _PyCFunction_CAST(os_setresuid), METH_FASTCALL, os_setresuid__doc__},
74097db96d56Sopenharmony_ci
74107db96d56Sopenharmony_cistatic PyObject *
74117db96d56Sopenharmony_cios_setresuid_impl(PyObject *module, uid_t ruid, uid_t euid, uid_t suid);
74127db96d56Sopenharmony_ci
74137db96d56Sopenharmony_cistatic PyObject *
74147db96d56Sopenharmony_cios_setresuid(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
74157db96d56Sopenharmony_ci{
74167db96d56Sopenharmony_ci    PyObject *return_value = NULL;
74177db96d56Sopenharmony_ci    uid_t ruid;
74187db96d56Sopenharmony_ci    uid_t euid;
74197db96d56Sopenharmony_ci    uid_t suid;
74207db96d56Sopenharmony_ci
74217db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("setresuid", nargs, 3, 3)) {
74227db96d56Sopenharmony_ci        goto exit;
74237db96d56Sopenharmony_ci    }
74247db96d56Sopenharmony_ci    if (!_Py_Uid_Converter(args[0], &ruid)) {
74257db96d56Sopenharmony_ci        goto exit;
74267db96d56Sopenharmony_ci    }
74277db96d56Sopenharmony_ci    if (!_Py_Uid_Converter(args[1], &euid)) {
74287db96d56Sopenharmony_ci        goto exit;
74297db96d56Sopenharmony_ci    }
74307db96d56Sopenharmony_ci    if (!_Py_Uid_Converter(args[2], &suid)) {
74317db96d56Sopenharmony_ci        goto exit;
74327db96d56Sopenharmony_ci    }
74337db96d56Sopenharmony_ci    return_value = os_setresuid_impl(module, ruid, euid, suid);
74347db96d56Sopenharmony_ci
74357db96d56Sopenharmony_ciexit:
74367db96d56Sopenharmony_ci    return return_value;
74377db96d56Sopenharmony_ci}
74387db96d56Sopenharmony_ci
74397db96d56Sopenharmony_ci#endif /* defined(HAVE_SETRESUID) */
74407db96d56Sopenharmony_ci
74417db96d56Sopenharmony_ci#if defined(HAVE_SETRESGID)
74427db96d56Sopenharmony_ci
74437db96d56Sopenharmony_ciPyDoc_STRVAR(os_setresgid__doc__,
74447db96d56Sopenharmony_ci"setresgid($module, rgid, egid, sgid, /)\n"
74457db96d56Sopenharmony_ci"--\n"
74467db96d56Sopenharmony_ci"\n"
74477db96d56Sopenharmony_ci"Set the current process\'s real, effective, and saved group ids.");
74487db96d56Sopenharmony_ci
74497db96d56Sopenharmony_ci#define OS_SETRESGID_METHODDEF    \
74507db96d56Sopenharmony_ci    {"setresgid", _PyCFunction_CAST(os_setresgid), METH_FASTCALL, os_setresgid__doc__},
74517db96d56Sopenharmony_ci
74527db96d56Sopenharmony_cistatic PyObject *
74537db96d56Sopenharmony_cios_setresgid_impl(PyObject *module, gid_t rgid, gid_t egid, gid_t sgid);
74547db96d56Sopenharmony_ci
74557db96d56Sopenharmony_cistatic PyObject *
74567db96d56Sopenharmony_cios_setresgid(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
74577db96d56Sopenharmony_ci{
74587db96d56Sopenharmony_ci    PyObject *return_value = NULL;
74597db96d56Sopenharmony_ci    gid_t rgid;
74607db96d56Sopenharmony_ci    gid_t egid;
74617db96d56Sopenharmony_ci    gid_t sgid;
74627db96d56Sopenharmony_ci
74637db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("setresgid", nargs, 3, 3)) {
74647db96d56Sopenharmony_ci        goto exit;
74657db96d56Sopenharmony_ci    }
74667db96d56Sopenharmony_ci    if (!_Py_Gid_Converter(args[0], &rgid)) {
74677db96d56Sopenharmony_ci        goto exit;
74687db96d56Sopenharmony_ci    }
74697db96d56Sopenharmony_ci    if (!_Py_Gid_Converter(args[1], &egid)) {
74707db96d56Sopenharmony_ci        goto exit;
74717db96d56Sopenharmony_ci    }
74727db96d56Sopenharmony_ci    if (!_Py_Gid_Converter(args[2], &sgid)) {
74737db96d56Sopenharmony_ci        goto exit;
74747db96d56Sopenharmony_ci    }
74757db96d56Sopenharmony_ci    return_value = os_setresgid_impl(module, rgid, egid, sgid);
74767db96d56Sopenharmony_ci
74777db96d56Sopenharmony_ciexit:
74787db96d56Sopenharmony_ci    return return_value;
74797db96d56Sopenharmony_ci}
74807db96d56Sopenharmony_ci
74817db96d56Sopenharmony_ci#endif /* defined(HAVE_SETRESGID) */
74827db96d56Sopenharmony_ci
74837db96d56Sopenharmony_ci#if defined(HAVE_GETRESUID)
74847db96d56Sopenharmony_ci
74857db96d56Sopenharmony_ciPyDoc_STRVAR(os_getresuid__doc__,
74867db96d56Sopenharmony_ci"getresuid($module, /)\n"
74877db96d56Sopenharmony_ci"--\n"
74887db96d56Sopenharmony_ci"\n"
74897db96d56Sopenharmony_ci"Return a tuple of the current process\'s real, effective, and saved user ids.");
74907db96d56Sopenharmony_ci
74917db96d56Sopenharmony_ci#define OS_GETRESUID_METHODDEF    \
74927db96d56Sopenharmony_ci    {"getresuid", (PyCFunction)os_getresuid, METH_NOARGS, os_getresuid__doc__},
74937db96d56Sopenharmony_ci
74947db96d56Sopenharmony_cistatic PyObject *
74957db96d56Sopenharmony_cios_getresuid_impl(PyObject *module);
74967db96d56Sopenharmony_ci
74977db96d56Sopenharmony_cistatic PyObject *
74987db96d56Sopenharmony_cios_getresuid(PyObject *module, PyObject *Py_UNUSED(ignored))
74997db96d56Sopenharmony_ci{
75007db96d56Sopenharmony_ci    return os_getresuid_impl(module);
75017db96d56Sopenharmony_ci}
75027db96d56Sopenharmony_ci
75037db96d56Sopenharmony_ci#endif /* defined(HAVE_GETRESUID) */
75047db96d56Sopenharmony_ci
75057db96d56Sopenharmony_ci#if defined(HAVE_GETRESGID)
75067db96d56Sopenharmony_ci
75077db96d56Sopenharmony_ciPyDoc_STRVAR(os_getresgid__doc__,
75087db96d56Sopenharmony_ci"getresgid($module, /)\n"
75097db96d56Sopenharmony_ci"--\n"
75107db96d56Sopenharmony_ci"\n"
75117db96d56Sopenharmony_ci"Return a tuple of the current process\'s real, effective, and saved group ids.");
75127db96d56Sopenharmony_ci
75137db96d56Sopenharmony_ci#define OS_GETRESGID_METHODDEF    \
75147db96d56Sopenharmony_ci    {"getresgid", (PyCFunction)os_getresgid, METH_NOARGS, os_getresgid__doc__},
75157db96d56Sopenharmony_ci
75167db96d56Sopenharmony_cistatic PyObject *
75177db96d56Sopenharmony_cios_getresgid_impl(PyObject *module);
75187db96d56Sopenharmony_ci
75197db96d56Sopenharmony_cistatic PyObject *
75207db96d56Sopenharmony_cios_getresgid(PyObject *module, PyObject *Py_UNUSED(ignored))
75217db96d56Sopenharmony_ci{
75227db96d56Sopenharmony_ci    return os_getresgid_impl(module);
75237db96d56Sopenharmony_ci}
75247db96d56Sopenharmony_ci
75257db96d56Sopenharmony_ci#endif /* defined(HAVE_GETRESGID) */
75267db96d56Sopenharmony_ci
75277db96d56Sopenharmony_ci#if defined(USE_XATTRS)
75287db96d56Sopenharmony_ci
75297db96d56Sopenharmony_ciPyDoc_STRVAR(os_getxattr__doc__,
75307db96d56Sopenharmony_ci"getxattr($module, /, path, attribute, *, follow_symlinks=True)\n"
75317db96d56Sopenharmony_ci"--\n"
75327db96d56Sopenharmony_ci"\n"
75337db96d56Sopenharmony_ci"Return the value of extended attribute attribute on path.\n"
75347db96d56Sopenharmony_ci"\n"
75357db96d56Sopenharmony_ci"path may be either a string, a path-like object, or an open file descriptor.\n"
75367db96d56Sopenharmony_ci"If follow_symlinks is False, and the last element of the path is a symbolic\n"
75377db96d56Sopenharmony_ci"  link, getxattr will examine the symbolic link itself instead of the file\n"
75387db96d56Sopenharmony_ci"  the link points to.");
75397db96d56Sopenharmony_ci
75407db96d56Sopenharmony_ci#define OS_GETXATTR_METHODDEF    \
75417db96d56Sopenharmony_ci    {"getxattr", _PyCFunction_CAST(os_getxattr), METH_FASTCALL|METH_KEYWORDS, os_getxattr__doc__},
75427db96d56Sopenharmony_ci
75437db96d56Sopenharmony_cistatic PyObject *
75447db96d56Sopenharmony_cios_getxattr_impl(PyObject *module, path_t *path, path_t *attribute,
75457db96d56Sopenharmony_ci                 int follow_symlinks);
75467db96d56Sopenharmony_ci
75477db96d56Sopenharmony_cistatic PyObject *
75487db96d56Sopenharmony_cios_getxattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
75497db96d56Sopenharmony_ci{
75507db96d56Sopenharmony_ci    PyObject *return_value = NULL;
75517db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "attribute", "follow_symlinks", NULL};
75527db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "getxattr", 0};
75537db96d56Sopenharmony_ci    PyObject *argsbuf[3];
75547db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
75557db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("getxattr", "path", 0, 1);
75567db96d56Sopenharmony_ci    path_t attribute = PATH_T_INITIALIZE("getxattr", "attribute", 0, 0);
75577db96d56Sopenharmony_ci    int follow_symlinks = 1;
75587db96d56Sopenharmony_ci
75597db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
75607db96d56Sopenharmony_ci    if (!args) {
75617db96d56Sopenharmony_ci        goto exit;
75627db96d56Sopenharmony_ci    }
75637db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
75647db96d56Sopenharmony_ci        goto exit;
75657db96d56Sopenharmony_ci    }
75667db96d56Sopenharmony_ci    if (!path_converter(args[1], &attribute)) {
75677db96d56Sopenharmony_ci        goto exit;
75687db96d56Sopenharmony_ci    }
75697db96d56Sopenharmony_ci    if (!noptargs) {
75707db96d56Sopenharmony_ci        goto skip_optional_kwonly;
75717db96d56Sopenharmony_ci    }
75727db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[2]);
75737db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
75747db96d56Sopenharmony_ci        goto exit;
75757db96d56Sopenharmony_ci    }
75767db96d56Sopenharmony_ciskip_optional_kwonly:
75777db96d56Sopenharmony_ci    return_value = os_getxattr_impl(module, &path, &attribute, follow_symlinks);
75787db96d56Sopenharmony_ci
75797db96d56Sopenharmony_ciexit:
75807db96d56Sopenharmony_ci    /* Cleanup for path */
75817db96d56Sopenharmony_ci    path_cleanup(&path);
75827db96d56Sopenharmony_ci    /* Cleanup for attribute */
75837db96d56Sopenharmony_ci    path_cleanup(&attribute);
75847db96d56Sopenharmony_ci
75857db96d56Sopenharmony_ci    return return_value;
75867db96d56Sopenharmony_ci}
75877db96d56Sopenharmony_ci
75887db96d56Sopenharmony_ci#endif /* defined(USE_XATTRS) */
75897db96d56Sopenharmony_ci
75907db96d56Sopenharmony_ci#if defined(USE_XATTRS)
75917db96d56Sopenharmony_ci
75927db96d56Sopenharmony_ciPyDoc_STRVAR(os_setxattr__doc__,
75937db96d56Sopenharmony_ci"setxattr($module, /, path, attribute, value, flags=0, *,\n"
75947db96d56Sopenharmony_ci"         follow_symlinks=True)\n"
75957db96d56Sopenharmony_ci"--\n"
75967db96d56Sopenharmony_ci"\n"
75977db96d56Sopenharmony_ci"Set extended attribute attribute on path to value.\n"
75987db96d56Sopenharmony_ci"\n"
75997db96d56Sopenharmony_ci"path may be either a string, a path-like object,  or an open file descriptor.\n"
76007db96d56Sopenharmony_ci"If follow_symlinks is False, and the last element of the path is a symbolic\n"
76017db96d56Sopenharmony_ci"  link, setxattr will modify the symbolic link itself instead of the file\n"
76027db96d56Sopenharmony_ci"  the link points to.");
76037db96d56Sopenharmony_ci
76047db96d56Sopenharmony_ci#define OS_SETXATTR_METHODDEF    \
76057db96d56Sopenharmony_ci    {"setxattr", _PyCFunction_CAST(os_setxattr), METH_FASTCALL|METH_KEYWORDS, os_setxattr__doc__},
76067db96d56Sopenharmony_ci
76077db96d56Sopenharmony_cistatic PyObject *
76087db96d56Sopenharmony_cios_setxattr_impl(PyObject *module, path_t *path, path_t *attribute,
76097db96d56Sopenharmony_ci                 Py_buffer *value, int flags, int follow_symlinks);
76107db96d56Sopenharmony_ci
76117db96d56Sopenharmony_cistatic PyObject *
76127db96d56Sopenharmony_cios_setxattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
76137db96d56Sopenharmony_ci{
76147db96d56Sopenharmony_ci    PyObject *return_value = NULL;
76157db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "attribute", "value", "flags", "follow_symlinks", NULL};
76167db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "setxattr", 0};
76177db96d56Sopenharmony_ci    PyObject *argsbuf[5];
76187db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3;
76197db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("setxattr", "path", 0, 1);
76207db96d56Sopenharmony_ci    path_t attribute = PATH_T_INITIALIZE("setxattr", "attribute", 0, 0);
76217db96d56Sopenharmony_ci    Py_buffer value = {NULL, NULL};
76227db96d56Sopenharmony_ci    int flags = 0;
76237db96d56Sopenharmony_ci    int follow_symlinks = 1;
76247db96d56Sopenharmony_ci
76257db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 4, 0, argsbuf);
76267db96d56Sopenharmony_ci    if (!args) {
76277db96d56Sopenharmony_ci        goto exit;
76287db96d56Sopenharmony_ci    }
76297db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
76307db96d56Sopenharmony_ci        goto exit;
76317db96d56Sopenharmony_ci    }
76327db96d56Sopenharmony_ci    if (!path_converter(args[1], &attribute)) {
76337db96d56Sopenharmony_ci        goto exit;
76347db96d56Sopenharmony_ci    }
76357db96d56Sopenharmony_ci    if (PyObject_GetBuffer(args[2], &value, PyBUF_SIMPLE) != 0) {
76367db96d56Sopenharmony_ci        goto exit;
76377db96d56Sopenharmony_ci    }
76387db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&value, 'C')) {
76397db96d56Sopenharmony_ci        _PyArg_BadArgument("setxattr", "argument 'value'", "contiguous buffer", args[2]);
76407db96d56Sopenharmony_ci        goto exit;
76417db96d56Sopenharmony_ci    }
76427db96d56Sopenharmony_ci    if (!noptargs) {
76437db96d56Sopenharmony_ci        goto skip_optional_pos;
76447db96d56Sopenharmony_ci    }
76457db96d56Sopenharmony_ci    if (args[3]) {
76467db96d56Sopenharmony_ci        flags = _PyLong_AsInt(args[3]);
76477db96d56Sopenharmony_ci        if (flags == -1 && PyErr_Occurred()) {
76487db96d56Sopenharmony_ci            goto exit;
76497db96d56Sopenharmony_ci        }
76507db96d56Sopenharmony_ci        if (!--noptargs) {
76517db96d56Sopenharmony_ci            goto skip_optional_pos;
76527db96d56Sopenharmony_ci        }
76537db96d56Sopenharmony_ci    }
76547db96d56Sopenharmony_ciskip_optional_pos:
76557db96d56Sopenharmony_ci    if (!noptargs) {
76567db96d56Sopenharmony_ci        goto skip_optional_kwonly;
76577db96d56Sopenharmony_ci    }
76587db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[4]);
76597db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
76607db96d56Sopenharmony_ci        goto exit;
76617db96d56Sopenharmony_ci    }
76627db96d56Sopenharmony_ciskip_optional_kwonly:
76637db96d56Sopenharmony_ci    return_value = os_setxattr_impl(module, &path, &attribute, &value, flags, follow_symlinks);
76647db96d56Sopenharmony_ci
76657db96d56Sopenharmony_ciexit:
76667db96d56Sopenharmony_ci    /* Cleanup for path */
76677db96d56Sopenharmony_ci    path_cleanup(&path);
76687db96d56Sopenharmony_ci    /* Cleanup for attribute */
76697db96d56Sopenharmony_ci    path_cleanup(&attribute);
76707db96d56Sopenharmony_ci    /* Cleanup for value */
76717db96d56Sopenharmony_ci    if (value.obj) {
76727db96d56Sopenharmony_ci       PyBuffer_Release(&value);
76737db96d56Sopenharmony_ci    }
76747db96d56Sopenharmony_ci
76757db96d56Sopenharmony_ci    return return_value;
76767db96d56Sopenharmony_ci}
76777db96d56Sopenharmony_ci
76787db96d56Sopenharmony_ci#endif /* defined(USE_XATTRS) */
76797db96d56Sopenharmony_ci
76807db96d56Sopenharmony_ci#if defined(USE_XATTRS)
76817db96d56Sopenharmony_ci
76827db96d56Sopenharmony_ciPyDoc_STRVAR(os_removexattr__doc__,
76837db96d56Sopenharmony_ci"removexattr($module, /, path, attribute, *, follow_symlinks=True)\n"
76847db96d56Sopenharmony_ci"--\n"
76857db96d56Sopenharmony_ci"\n"
76867db96d56Sopenharmony_ci"Remove extended attribute attribute on path.\n"
76877db96d56Sopenharmony_ci"\n"
76887db96d56Sopenharmony_ci"path may be either a string, a path-like object, or an open file descriptor.\n"
76897db96d56Sopenharmony_ci"If follow_symlinks is False, and the last element of the path is a symbolic\n"
76907db96d56Sopenharmony_ci"  link, removexattr will modify the symbolic link itself instead of the file\n"
76917db96d56Sopenharmony_ci"  the link points to.");
76927db96d56Sopenharmony_ci
76937db96d56Sopenharmony_ci#define OS_REMOVEXATTR_METHODDEF    \
76947db96d56Sopenharmony_ci    {"removexattr", _PyCFunction_CAST(os_removexattr), METH_FASTCALL|METH_KEYWORDS, os_removexattr__doc__},
76957db96d56Sopenharmony_ci
76967db96d56Sopenharmony_cistatic PyObject *
76977db96d56Sopenharmony_cios_removexattr_impl(PyObject *module, path_t *path, path_t *attribute,
76987db96d56Sopenharmony_ci                    int follow_symlinks);
76997db96d56Sopenharmony_ci
77007db96d56Sopenharmony_cistatic PyObject *
77017db96d56Sopenharmony_cios_removexattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
77027db96d56Sopenharmony_ci{
77037db96d56Sopenharmony_ci    PyObject *return_value = NULL;
77047db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "attribute", "follow_symlinks", NULL};
77057db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "removexattr", 0};
77067db96d56Sopenharmony_ci    PyObject *argsbuf[3];
77077db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
77087db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("removexattr", "path", 0, 1);
77097db96d56Sopenharmony_ci    path_t attribute = PATH_T_INITIALIZE("removexattr", "attribute", 0, 0);
77107db96d56Sopenharmony_ci    int follow_symlinks = 1;
77117db96d56Sopenharmony_ci
77127db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
77137db96d56Sopenharmony_ci    if (!args) {
77147db96d56Sopenharmony_ci        goto exit;
77157db96d56Sopenharmony_ci    }
77167db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
77177db96d56Sopenharmony_ci        goto exit;
77187db96d56Sopenharmony_ci    }
77197db96d56Sopenharmony_ci    if (!path_converter(args[1], &attribute)) {
77207db96d56Sopenharmony_ci        goto exit;
77217db96d56Sopenharmony_ci    }
77227db96d56Sopenharmony_ci    if (!noptargs) {
77237db96d56Sopenharmony_ci        goto skip_optional_kwonly;
77247db96d56Sopenharmony_ci    }
77257db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[2]);
77267db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
77277db96d56Sopenharmony_ci        goto exit;
77287db96d56Sopenharmony_ci    }
77297db96d56Sopenharmony_ciskip_optional_kwonly:
77307db96d56Sopenharmony_ci    return_value = os_removexattr_impl(module, &path, &attribute, follow_symlinks);
77317db96d56Sopenharmony_ci
77327db96d56Sopenharmony_ciexit:
77337db96d56Sopenharmony_ci    /* Cleanup for path */
77347db96d56Sopenharmony_ci    path_cleanup(&path);
77357db96d56Sopenharmony_ci    /* Cleanup for attribute */
77367db96d56Sopenharmony_ci    path_cleanup(&attribute);
77377db96d56Sopenharmony_ci
77387db96d56Sopenharmony_ci    return return_value;
77397db96d56Sopenharmony_ci}
77407db96d56Sopenharmony_ci
77417db96d56Sopenharmony_ci#endif /* defined(USE_XATTRS) */
77427db96d56Sopenharmony_ci
77437db96d56Sopenharmony_ci#if defined(USE_XATTRS)
77447db96d56Sopenharmony_ci
77457db96d56Sopenharmony_ciPyDoc_STRVAR(os_listxattr__doc__,
77467db96d56Sopenharmony_ci"listxattr($module, /, path=None, *, follow_symlinks=True)\n"
77477db96d56Sopenharmony_ci"--\n"
77487db96d56Sopenharmony_ci"\n"
77497db96d56Sopenharmony_ci"Return a list of extended attributes on path.\n"
77507db96d56Sopenharmony_ci"\n"
77517db96d56Sopenharmony_ci"path may be either None, a string, a path-like object, or an open file descriptor.\n"
77527db96d56Sopenharmony_ci"if path is None, listxattr will examine the current directory.\n"
77537db96d56Sopenharmony_ci"If follow_symlinks is False, and the last element of the path is a symbolic\n"
77547db96d56Sopenharmony_ci"  link, listxattr will examine the symbolic link itself instead of the file\n"
77557db96d56Sopenharmony_ci"  the link points to.");
77567db96d56Sopenharmony_ci
77577db96d56Sopenharmony_ci#define OS_LISTXATTR_METHODDEF    \
77587db96d56Sopenharmony_ci    {"listxattr", _PyCFunction_CAST(os_listxattr), METH_FASTCALL|METH_KEYWORDS, os_listxattr__doc__},
77597db96d56Sopenharmony_ci
77607db96d56Sopenharmony_cistatic PyObject *
77617db96d56Sopenharmony_cios_listxattr_impl(PyObject *module, path_t *path, int follow_symlinks);
77627db96d56Sopenharmony_ci
77637db96d56Sopenharmony_cistatic PyObject *
77647db96d56Sopenharmony_cios_listxattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
77657db96d56Sopenharmony_ci{
77667db96d56Sopenharmony_ci    PyObject *return_value = NULL;
77677db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", "follow_symlinks", NULL};
77687db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "listxattr", 0};
77697db96d56Sopenharmony_ci    PyObject *argsbuf[2];
77707db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
77717db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("listxattr", "path", 1, 1);
77727db96d56Sopenharmony_ci    int follow_symlinks = 1;
77737db96d56Sopenharmony_ci
77747db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
77757db96d56Sopenharmony_ci    if (!args) {
77767db96d56Sopenharmony_ci        goto exit;
77777db96d56Sopenharmony_ci    }
77787db96d56Sopenharmony_ci    if (!noptargs) {
77797db96d56Sopenharmony_ci        goto skip_optional_pos;
77807db96d56Sopenharmony_ci    }
77817db96d56Sopenharmony_ci    if (args[0]) {
77827db96d56Sopenharmony_ci        if (!path_converter(args[0], &path)) {
77837db96d56Sopenharmony_ci            goto exit;
77847db96d56Sopenharmony_ci        }
77857db96d56Sopenharmony_ci        if (!--noptargs) {
77867db96d56Sopenharmony_ci            goto skip_optional_pos;
77877db96d56Sopenharmony_ci        }
77887db96d56Sopenharmony_ci    }
77897db96d56Sopenharmony_ciskip_optional_pos:
77907db96d56Sopenharmony_ci    if (!noptargs) {
77917db96d56Sopenharmony_ci        goto skip_optional_kwonly;
77927db96d56Sopenharmony_ci    }
77937db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[1]);
77947db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
77957db96d56Sopenharmony_ci        goto exit;
77967db96d56Sopenharmony_ci    }
77977db96d56Sopenharmony_ciskip_optional_kwonly:
77987db96d56Sopenharmony_ci    return_value = os_listxattr_impl(module, &path, follow_symlinks);
77997db96d56Sopenharmony_ci
78007db96d56Sopenharmony_ciexit:
78017db96d56Sopenharmony_ci    /* Cleanup for path */
78027db96d56Sopenharmony_ci    path_cleanup(&path);
78037db96d56Sopenharmony_ci
78047db96d56Sopenharmony_ci    return return_value;
78057db96d56Sopenharmony_ci}
78067db96d56Sopenharmony_ci
78077db96d56Sopenharmony_ci#endif /* defined(USE_XATTRS) */
78087db96d56Sopenharmony_ci
78097db96d56Sopenharmony_ciPyDoc_STRVAR(os_urandom__doc__,
78107db96d56Sopenharmony_ci"urandom($module, size, /)\n"
78117db96d56Sopenharmony_ci"--\n"
78127db96d56Sopenharmony_ci"\n"
78137db96d56Sopenharmony_ci"Return a bytes object containing random bytes suitable for cryptographic use.");
78147db96d56Sopenharmony_ci
78157db96d56Sopenharmony_ci#define OS_URANDOM_METHODDEF    \
78167db96d56Sopenharmony_ci    {"urandom", (PyCFunction)os_urandom, METH_O, os_urandom__doc__},
78177db96d56Sopenharmony_ci
78187db96d56Sopenharmony_cistatic PyObject *
78197db96d56Sopenharmony_cios_urandom_impl(PyObject *module, Py_ssize_t size);
78207db96d56Sopenharmony_ci
78217db96d56Sopenharmony_cistatic PyObject *
78227db96d56Sopenharmony_cios_urandom(PyObject *module, PyObject *arg)
78237db96d56Sopenharmony_ci{
78247db96d56Sopenharmony_ci    PyObject *return_value = NULL;
78257db96d56Sopenharmony_ci    Py_ssize_t size;
78267db96d56Sopenharmony_ci
78277db96d56Sopenharmony_ci    {
78287db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
78297db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(arg);
78307db96d56Sopenharmony_ci        if (iobj != NULL) {
78317db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
78327db96d56Sopenharmony_ci            Py_DECREF(iobj);
78337db96d56Sopenharmony_ci        }
78347db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
78357db96d56Sopenharmony_ci            goto exit;
78367db96d56Sopenharmony_ci        }
78377db96d56Sopenharmony_ci        size = ival;
78387db96d56Sopenharmony_ci    }
78397db96d56Sopenharmony_ci    return_value = os_urandom_impl(module, size);
78407db96d56Sopenharmony_ci
78417db96d56Sopenharmony_ciexit:
78427db96d56Sopenharmony_ci    return return_value;
78437db96d56Sopenharmony_ci}
78447db96d56Sopenharmony_ci
78457db96d56Sopenharmony_ci#if defined(HAVE_MEMFD_CREATE)
78467db96d56Sopenharmony_ci
78477db96d56Sopenharmony_ciPyDoc_STRVAR(os_memfd_create__doc__,
78487db96d56Sopenharmony_ci"memfd_create($module, /, name, flags=MFD_CLOEXEC)\n"
78497db96d56Sopenharmony_ci"--\n"
78507db96d56Sopenharmony_ci"\n");
78517db96d56Sopenharmony_ci
78527db96d56Sopenharmony_ci#define OS_MEMFD_CREATE_METHODDEF    \
78537db96d56Sopenharmony_ci    {"memfd_create", _PyCFunction_CAST(os_memfd_create), METH_FASTCALL|METH_KEYWORDS, os_memfd_create__doc__},
78547db96d56Sopenharmony_ci
78557db96d56Sopenharmony_cistatic PyObject *
78567db96d56Sopenharmony_cios_memfd_create_impl(PyObject *module, PyObject *name, unsigned int flags);
78577db96d56Sopenharmony_ci
78587db96d56Sopenharmony_cistatic PyObject *
78597db96d56Sopenharmony_cios_memfd_create(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
78607db96d56Sopenharmony_ci{
78617db96d56Sopenharmony_ci    PyObject *return_value = NULL;
78627db96d56Sopenharmony_ci    static const char * const _keywords[] = {"name", "flags", NULL};
78637db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "memfd_create", 0};
78647db96d56Sopenharmony_ci    PyObject *argsbuf[2];
78657db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
78667db96d56Sopenharmony_ci    PyObject *name = NULL;
78677db96d56Sopenharmony_ci    unsigned int flags = MFD_CLOEXEC;
78687db96d56Sopenharmony_ci
78697db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
78707db96d56Sopenharmony_ci    if (!args) {
78717db96d56Sopenharmony_ci        goto exit;
78727db96d56Sopenharmony_ci    }
78737db96d56Sopenharmony_ci    if (!PyUnicode_FSConverter(args[0], &name)) {
78747db96d56Sopenharmony_ci        goto exit;
78757db96d56Sopenharmony_ci    }
78767db96d56Sopenharmony_ci    if (!noptargs) {
78777db96d56Sopenharmony_ci        goto skip_optional_pos;
78787db96d56Sopenharmony_ci    }
78797db96d56Sopenharmony_ci    flags = (unsigned int)PyLong_AsUnsignedLongMask(args[1]);
78807db96d56Sopenharmony_ci    if (flags == (unsigned int)-1 && PyErr_Occurred()) {
78817db96d56Sopenharmony_ci        goto exit;
78827db96d56Sopenharmony_ci    }
78837db96d56Sopenharmony_ciskip_optional_pos:
78847db96d56Sopenharmony_ci    return_value = os_memfd_create_impl(module, name, flags);
78857db96d56Sopenharmony_ci
78867db96d56Sopenharmony_ciexit:
78877db96d56Sopenharmony_ci    /* Cleanup for name */
78887db96d56Sopenharmony_ci    Py_XDECREF(name);
78897db96d56Sopenharmony_ci
78907db96d56Sopenharmony_ci    return return_value;
78917db96d56Sopenharmony_ci}
78927db96d56Sopenharmony_ci
78937db96d56Sopenharmony_ci#endif /* defined(HAVE_MEMFD_CREATE) */
78947db96d56Sopenharmony_ci
78957db96d56Sopenharmony_ci#if (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC))
78967db96d56Sopenharmony_ci
78977db96d56Sopenharmony_ciPyDoc_STRVAR(os_eventfd__doc__,
78987db96d56Sopenharmony_ci"eventfd($module, /, initval, flags=EFD_CLOEXEC)\n"
78997db96d56Sopenharmony_ci"--\n"
79007db96d56Sopenharmony_ci"\n"
79017db96d56Sopenharmony_ci"Creates and returns an event notification file descriptor.");
79027db96d56Sopenharmony_ci
79037db96d56Sopenharmony_ci#define OS_EVENTFD_METHODDEF    \
79047db96d56Sopenharmony_ci    {"eventfd", _PyCFunction_CAST(os_eventfd), METH_FASTCALL|METH_KEYWORDS, os_eventfd__doc__},
79057db96d56Sopenharmony_ci
79067db96d56Sopenharmony_cistatic PyObject *
79077db96d56Sopenharmony_cios_eventfd_impl(PyObject *module, unsigned int initval, int flags);
79087db96d56Sopenharmony_ci
79097db96d56Sopenharmony_cistatic PyObject *
79107db96d56Sopenharmony_cios_eventfd(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
79117db96d56Sopenharmony_ci{
79127db96d56Sopenharmony_ci    PyObject *return_value = NULL;
79137db96d56Sopenharmony_ci    static const char * const _keywords[] = {"initval", "flags", NULL};
79147db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "eventfd", 0};
79157db96d56Sopenharmony_ci    PyObject *argsbuf[2];
79167db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
79177db96d56Sopenharmony_ci    unsigned int initval;
79187db96d56Sopenharmony_ci    int flags = EFD_CLOEXEC;
79197db96d56Sopenharmony_ci
79207db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
79217db96d56Sopenharmony_ci    if (!args) {
79227db96d56Sopenharmony_ci        goto exit;
79237db96d56Sopenharmony_ci    }
79247db96d56Sopenharmony_ci    if (!_PyLong_UnsignedInt_Converter(args[0], &initval)) {
79257db96d56Sopenharmony_ci        goto exit;
79267db96d56Sopenharmony_ci    }
79277db96d56Sopenharmony_ci    if (!noptargs) {
79287db96d56Sopenharmony_ci        goto skip_optional_pos;
79297db96d56Sopenharmony_ci    }
79307db96d56Sopenharmony_ci    flags = _PyLong_AsInt(args[1]);
79317db96d56Sopenharmony_ci    if (flags == -1 && PyErr_Occurred()) {
79327db96d56Sopenharmony_ci        goto exit;
79337db96d56Sopenharmony_ci    }
79347db96d56Sopenharmony_ciskip_optional_pos:
79357db96d56Sopenharmony_ci    return_value = os_eventfd_impl(module, initval, flags);
79367db96d56Sopenharmony_ci
79377db96d56Sopenharmony_ciexit:
79387db96d56Sopenharmony_ci    return return_value;
79397db96d56Sopenharmony_ci}
79407db96d56Sopenharmony_ci
79417db96d56Sopenharmony_ci#endif /* (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */
79427db96d56Sopenharmony_ci
79437db96d56Sopenharmony_ci#if (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC))
79447db96d56Sopenharmony_ci
79457db96d56Sopenharmony_ciPyDoc_STRVAR(os_eventfd_read__doc__,
79467db96d56Sopenharmony_ci"eventfd_read($module, /, fd)\n"
79477db96d56Sopenharmony_ci"--\n"
79487db96d56Sopenharmony_ci"\n"
79497db96d56Sopenharmony_ci"Read eventfd value");
79507db96d56Sopenharmony_ci
79517db96d56Sopenharmony_ci#define OS_EVENTFD_READ_METHODDEF    \
79527db96d56Sopenharmony_ci    {"eventfd_read", _PyCFunction_CAST(os_eventfd_read), METH_FASTCALL|METH_KEYWORDS, os_eventfd_read__doc__},
79537db96d56Sopenharmony_ci
79547db96d56Sopenharmony_cistatic PyObject *
79557db96d56Sopenharmony_cios_eventfd_read_impl(PyObject *module, int fd);
79567db96d56Sopenharmony_ci
79577db96d56Sopenharmony_cistatic PyObject *
79587db96d56Sopenharmony_cios_eventfd_read(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
79597db96d56Sopenharmony_ci{
79607db96d56Sopenharmony_ci    PyObject *return_value = NULL;
79617db96d56Sopenharmony_ci    static const char * const _keywords[] = {"fd", NULL};
79627db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "eventfd_read", 0};
79637db96d56Sopenharmony_ci    PyObject *argsbuf[1];
79647db96d56Sopenharmony_ci    int fd;
79657db96d56Sopenharmony_ci
79667db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
79677db96d56Sopenharmony_ci    if (!args) {
79687db96d56Sopenharmony_ci        goto exit;
79697db96d56Sopenharmony_ci    }
79707db96d56Sopenharmony_ci    if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
79717db96d56Sopenharmony_ci        goto exit;
79727db96d56Sopenharmony_ci    }
79737db96d56Sopenharmony_ci    return_value = os_eventfd_read_impl(module, fd);
79747db96d56Sopenharmony_ci
79757db96d56Sopenharmony_ciexit:
79767db96d56Sopenharmony_ci    return return_value;
79777db96d56Sopenharmony_ci}
79787db96d56Sopenharmony_ci
79797db96d56Sopenharmony_ci#endif /* (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */
79807db96d56Sopenharmony_ci
79817db96d56Sopenharmony_ci#if (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC))
79827db96d56Sopenharmony_ci
79837db96d56Sopenharmony_ciPyDoc_STRVAR(os_eventfd_write__doc__,
79847db96d56Sopenharmony_ci"eventfd_write($module, /, fd, value)\n"
79857db96d56Sopenharmony_ci"--\n"
79867db96d56Sopenharmony_ci"\n"
79877db96d56Sopenharmony_ci"Write eventfd value.");
79887db96d56Sopenharmony_ci
79897db96d56Sopenharmony_ci#define OS_EVENTFD_WRITE_METHODDEF    \
79907db96d56Sopenharmony_ci    {"eventfd_write", _PyCFunction_CAST(os_eventfd_write), METH_FASTCALL|METH_KEYWORDS, os_eventfd_write__doc__},
79917db96d56Sopenharmony_ci
79927db96d56Sopenharmony_cistatic PyObject *
79937db96d56Sopenharmony_cios_eventfd_write_impl(PyObject *module, int fd, unsigned long long value);
79947db96d56Sopenharmony_ci
79957db96d56Sopenharmony_cistatic PyObject *
79967db96d56Sopenharmony_cios_eventfd_write(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
79977db96d56Sopenharmony_ci{
79987db96d56Sopenharmony_ci    PyObject *return_value = NULL;
79997db96d56Sopenharmony_ci    static const char * const _keywords[] = {"fd", "value", NULL};
80007db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "eventfd_write", 0};
80017db96d56Sopenharmony_ci    PyObject *argsbuf[2];
80027db96d56Sopenharmony_ci    int fd;
80037db96d56Sopenharmony_ci    unsigned long long value;
80047db96d56Sopenharmony_ci
80057db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
80067db96d56Sopenharmony_ci    if (!args) {
80077db96d56Sopenharmony_ci        goto exit;
80087db96d56Sopenharmony_ci    }
80097db96d56Sopenharmony_ci    if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
80107db96d56Sopenharmony_ci        goto exit;
80117db96d56Sopenharmony_ci    }
80127db96d56Sopenharmony_ci    if (!_PyLong_UnsignedLongLong_Converter(args[1], &value)) {
80137db96d56Sopenharmony_ci        goto exit;
80147db96d56Sopenharmony_ci    }
80157db96d56Sopenharmony_ci    return_value = os_eventfd_write_impl(module, fd, value);
80167db96d56Sopenharmony_ci
80177db96d56Sopenharmony_ciexit:
80187db96d56Sopenharmony_ci    return return_value;
80197db96d56Sopenharmony_ci}
80207db96d56Sopenharmony_ci
80217db96d56Sopenharmony_ci#endif /* (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */
80227db96d56Sopenharmony_ci
80237db96d56Sopenharmony_ci#if (defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL))
80247db96d56Sopenharmony_ci
80257db96d56Sopenharmony_ciPyDoc_STRVAR(os_get_terminal_size__doc__,
80267db96d56Sopenharmony_ci"get_terminal_size($module, fd=<unrepresentable>, /)\n"
80277db96d56Sopenharmony_ci"--\n"
80287db96d56Sopenharmony_ci"\n"
80297db96d56Sopenharmony_ci"Return the size of the terminal window as (columns, lines).\n"
80307db96d56Sopenharmony_ci"\n"
80317db96d56Sopenharmony_ci"The optional argument fd (default standard output) specifies\n"
80327db96d56Sopenharmony_ci"which file descriptor should be queried.\n"
80337db96d56Sopenharmony_ci"\n"
80347db96d56Sopenharmony_ci"If the file descriptor is not connected to a terminal, an OSError\n"
80357db96d56Sopenharmony_ci"is thrown.\n"
80367db96d56Sopenharmony_ci"\n"
80377db96d56Sopenharmony_ci"This function will only be defined if an implementation is\n"
80387db96d56Sopenharmony_ci"available for this system.\n"
80397db96d56Sopenharmony_ci"\n"
80407db96d56Sopenharmony_ci"shutil.get_terminal_size is the high-level function which should\n"
80417db96d56Sopenharmony_ci"normally be used, os.get_terminal_size is the low-level implementation.");
80427db96d56Sopenharmony_ci
80437db96d56Sopenharmony_ci#define OS_GET_TERMINAL_SIZE_METHODDEF    \
80447db96d56Sopenharmony_ci    {"get_terminal_size", _PyCFunction_CAST(os_get_terminal_size), METH_FASTCALL, os_get_terminal_size__doc__},
80457db96d56Sopenharmony_ci
80467db96d56Sopenharmony_cistatic PyObject *
80477db96d56Sopenharmony_cios_get_terminal_size_impl(PyObject *module, int fd);
80487db96d56Sopenharmony_ci
80497db96d56Sopenharmony_cistatic PyObject *
80507db96d56Sopenharmony_cios_get_terminal_size(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
80517db96d56Sopenharmony_ci{
80527db96d56Sopenharmony_ci    PyObject *return_value = NULL;
80537db96d56Sopenharmony_ci    int fd = fileno(stdout);
80547db96d56Sopenharmony_ci
80557db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("get_terminal_size", nargs, 0, 1)) {
80567db96d56Sopenharmony_ci        goto exit;
80577db96d56Sopenharmony_ci    }
80587db96d56Sopenharmony_ci    if (nargs < 1) {
80597db96d56Sopenharmony_ci        goto skip_optional;
80607db96d56Sopenharmony_ci    }
80617db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
80627db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
80637db96d56Sopenharmony_ci        goto exit;
80647db96d56Sopenharmony_ci    }
80657db96d56Sopenharmony_ciskip_optional:
80667db96d56Sopenharmony_ci    return_value = os_get_terminal_size_impl(module, fd);
80677db96d56Sopenharmony_ci
80687db96d56Sopenharmony_ciexit:
80697db96d56Sopenharmony_ci    return return_value;
80707db96d56Sopenharmony_ci}
80717db96d56Sopenharmony_ci
80727db96d56Sopenharmony_ci#endif /* (defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)) */
80737db96d56Sopenharmony_ci
80747db96d56Sopenharmony_ciPyDoc_STRVAR(os_cpu_count__doc__,
80757db96d56Sopenharmony_ci"cpu_count($module, /)\n"
80767db96d56Sopenharmony_ci"--\n"
80777db96d56Sopenharmony_ci"\n"
80787db96d56Sopenharmony_ci"Return the number of CPUs in the system; return None if indeterminable.\n"
80797db96d56Sopenharmony_ci"\n"
80807db96d56Sopenharmony_ci"This number is not equivalent to the number of CPUs the current process can\n"
80817db96d56Sopenharmony_ci"use.  The number of usable CPUs can be obtained with\n"
80827db96d56Sopenharmony_ci"``len(os.sched_getaffinity(0))``");
80837db96d56Sopenharmony_ci
80847db96d56Sopenharmony_ci#define OS_CPU_COUNT_METHODDEF    \
80857db96d56Sopenharmony_ci    {"cpu_count", (PyCFunction)os_cpu_count, METH_NOARGS, os_cpu_count__doc__},
80867db96d56Sopenharmony_ci
80877db96d56Sopenharmony_cistatic PyObject *
80887db96d56Sopenharmony_cios_cpu_count_impl(PyObject *module);
80897db96d56Sopenharmony_ci
80907db96d56Sopenharmony_cistatic PyObject *
80917db96d56Sopenharmony_cios_cpu_count(PyObject *module, PyObject *Py_UNUSED(ignored))
80927db96d56Sopenharmony_ci{
80937db96d56Sopenharmony_ci    return os_cpu_count_impl(module);
80947db96d56Sopenharmony_ci}
80957db96d56Sopenharmony_ci
80967db96d56Sopenharmony_ciPyDoc_STRVAR(os_get_inheritable__doc__,
80977db96d56Sopenharmony_ci"get_inheritable($module, fd, /)\n"
80987db96d56Sopenharmony_ci"--\n"
80997db96d56Sopenharmony_ci"\n"
81007db96d56Sopenharmony_ci"Get the close-on-exe flag of the specified file descriptor.");
81017db96d56Sopenharmony_ci
81027db96d56Sopenharmony_ci#define OS_GET_INHERITABLE_METHODDEF    \
81037db96d56Sopenharmony_ci    {"get_inheritable", (PyCFunction)os_get_inheritable, METH_O, os_get_inheritable__doc__},
81047db96d56Sopenharmony_ci
81057db96d56Sopenharmony_cistatic int
81067db96d56Sopenharmony_cios_get_inheritable_impl(PyObject *module, int fd);
81077db96d56Sopenharmony_ci
81087db96d56Sopenharmony_cistatic PyObject *
81097db96d56Sopenharmony_cios_get_inheritable(PyObject *module, PyObject *arg)
81107db96d56Sopenharmony_ci{
81117db96d56Sopenharmony_ci    PyObject *return_value = NULL;
81127db96d56Sopenharmony_ci    int fd;
81137db96d56Sopenharmony_ci    int _return_value;
81147db96d56Sopenharmony_ci
81157db96d56Sopenharmony_ci    fd = _PyLong_AsInt(arg);
81167db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
81177db96d56Sopenharmony_ci        goto exit;
81187db96d56Sopenharmony_ci    }
81197db96d56Sopenharmony_ci    _return_value = os_get_inheritable_impl(module, fd);
81207db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
81217db96d56Sopenharmony_ci        goto exit;
81227db96d56Sopenharmony_ci    }
81237db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
81247db96d56Sopenharmony_ci
81257db96d56Sopenharmony_ciexit:
81267db96d56Sopenharmony_ci    return return_value;
81277db96d56Sopenharmony_ci}
81287db96d56Sopenharmony_ci
81297db96d56Sopenharmony_ciPyDoc_STRVAR(os_set_inheritable__doc__,
81307db96d56Sopenharmony_ci"set_inheritable($module, fd, inheritable, /)\n"
81317db96d56Sopenharmony_ci"--\n"
81327db96d56Sopenharmony_ci"\n"
81337db96d56Sopenharmony_ci"Set the inheritable flag of the specified file descriptor.");
81347db96d56Sopenharmony_ci
81357db96d56Sopenharmony_ci#define OS_SET_INHERITABLE_METHODDEF    \
81367db96d56Sopenharmony_ci    {"set_inheritable", _PyCFunction_CAST(os_set_inheritable), METH_FASTCALL, os_set_inheritable__doc__},
81377db96d56Sopenharmony_ci
81387db96d56Sopenharmony_cistatic PyObject *
81397db96d56Sopenharmony_cios_set_inheritable_impl(PyObject *module, int fd, int inheritable);
81407db96d56Sopenharmony_ci
81417db96d56Sopenharmony_cistatic PyObject *
81427db96d56Sopenharmony_cios_set_inheritable(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
81437db96d56Sopenharmony_ci{
81447db96d56Sopenharmony_ci    PyObject *return_value = NULL;
81457db96d56Sopenharmony_ci    int fd;
81467db96d56Sopenharmony_ci    int inheritable;
81477db96d56Sopenharmony_ci
81487db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("set_inheritable", nargs, 2, 2)) {
81497db96d56Sopenharmony_ci        goto exit;
81507db96d56Sopenharmony_ci    }
81517db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
81527db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
81537db96d56Sopenharmony_ci        goto exit;
81547db96d56Sopenharmony_ci    }
81557db96d56Sopenharmony_ci    inheritable = _PyLong_AsInt(args[1]);
81567db96d56Sopenharmony_ci    if (inheritable == -1 && PyErr_Occurred()) {
81577db96d56Sopenharmony_ci        goto exit;
81587db96d56Sopenharmony_ci    }
81597db96d56Sopenharmony_ci    return_value = os_set_inheritable_impl(module, fd, inheritable);
81607db96d56Sopenharmony_ci
81617db96d56Sopenharmony_ciexit:
81627db96d56Sopenharmony_ci    return return_value;
81637db96d56Sopenharmony_ci}
81647db96d56Sopenharmony_ci
81657db96d56Sopenharmony_ci#if defined(MS_WINDOWS)
81667db96d56Sopenharmony_ci
81677db96d56Sopenharmony_ciPyDoc_STRVAR(os_get_handle_inheritable__doc__,
81687db96d56Sopenharmony_ci"get_handle_inheritable($module, handle, /)\n"
81697db96d56Sopenharmony_ci"--\n"
81707db96d56Sopenharmony_ci"\n"
81717db96d56Sopenharmony_ci"Get the close-on-exe flag of the specified file descriptor.");
81727db96d56Sopenharmony_ci
81737db96d56Sopenharmony_ci#define OS_GET_HANDLE_INHERITABLE_METHODDEF    \
81747db96d56Sopenharmony_ci    {"get_handle_inheritable", (PyCFunction)os_get_handle_inheritable, METH_O, os_get_handle_inheritable__doc__},
81757db96d56Sopenharmony_ci
81767db96d56Sopenharmony_cistatic int
81777db96d56Sopenharmony_cios_get_handle_inheritable_impl(PyObject *module, intptr_t handle);
81787db96d56Sopenharmony_ci
81797db96d56Sopenharmony_cistatic PyObject *
81807db96d56Sopenharmony_cios_get_handle_inheritable(PyObject *module, PyObject *arg)
81817db96d56Sopenharmony_ci{
81827db96d56Sopenharmony_ci    PyObject *return_value = NULL;
81837db96d56Sopenharmony_ci    intptr_t handle;
81847db96d56Sopenharmony_ci    int _return_value;
81857db96d56Sopenharmony_ci
81867db96d56Sopenharmony_ci    if (!PyArg_Parse(arg, "" _Py_PARSE_INTPTR ":get_handle_inheritable", &handle)) {
81877db96d56Sopenharmony_ci        goto exit;
81887db96d56Sopenharmony_ci    }
81897db96d56Sopenharmony_ci    _return_value = os_get_handle_inheritable_impl(module, handle);
81907db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
81917db96d56Sopenharmony_ci        goto exit;
81927db96d56Sopenharmony_ci    }
81937db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
81947db96d56Sopenharmony_ci
81957db96d56Sopenharmony_ciexit:
81967db96d56Sopenharmony_ci    return return_value;
81977db96d56Sopenharmony_ci}
81987db96d56Sopenharmony_ci
81997db96d56Sopenharmony_ci#endif /* defined(MS_WINDOWS) */
82007db96d56Sopenharmony_ci
82017db96d56Sopenharmony_ci#if defined(MS_WINDOWS)
82027db96d56Sopenharmony_ci
82037db96d56Sopenharmony_ciPyDoc_STRVAR(os_set_handle_inheritable__doc__,
82047db96d56Sopenharmony_ci"set_handle_inheritable($module, handle, inheritable, /)\n"
82057db96d56Sopenharmony_ci"--\n"
82067db96d56Sopenharmony_ci"\n"
82077db96d56Sopenharmony_ci"Set the inheritable flag of the specified handle.");
82087db96d56Sopenharmony_ci
82097db96d56Sopenharmony_ci#define OS_SET_HANDLE_INHERITABLE_METHODDEF    \
82107db96d56Sopenharmony_ci    {"set_handle_inheritable", _PyCFunction_CAST(os_set_handle_inheritable), METH_FASTCALL, os_set_handle_inheritable__doc__},
82117db96d56Sopenharmony_ci
82127db96d56Sopenharmony_cistatic PyObject *
82137db96d56Sopenharmony_cios_set_handle_inheritable_impl(PyObject *module, intptr_t handle,
82147db96d56Sopenharmony_ci                               int inheritable);
82157db96d56Sopenharmony_ci
82167db96d56Sopenharmony_cistatic PyObject *
82177db96d56Sopenharmony_cios_set_handle_inheritable(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
82187db96d56Sopenharmony_ci{
82197db96d56Sopenharmony_ci    PyObject *return_value = NULL;
82207db96d56Sopenharmony_ci    intptr_t handle;
82217db96d56Sopenharmony_ci    int inheritable;
82227db96d56Sopenharmony_ci
82237db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_INTPTR "p:set_handle_inheritable",
82247db96d56Sopenharmony_ci        &handle, &inheritable)) {
82257db96d56Sopenharmony_ci        goto exit;
82267db96d56Sopenharmony_ci    }
82277db96d56Sopenharmony_ci    return_value = os_set_handle_inheritable_impl(module, handle, inheritable);
82287db96d56Sopenharmony_ci
82297db96d56Sopenharmony_ciexit:
82307db96d56Sopenharmony_ci    return return_value;
82317db96d56Sopenharmony_ci}
82327db96d56Sopenharmony_ci
82337db96d56Sopenharmony_ci#endif /* defined(MS_WINDOWS) */
82347db96d56Sopenharmony_ci
82357db96d56Sopenharmony_ci#if !defined(MS_WINDOWS)
82367db96d56Sopenharmony_ci
82377db96d56Sopenharmony_ciPyDoc_STRVAR(os_get_blocking__doc__,
82387db96d56Sopenharmony_ci"get_blocking($module, fd, /)\n"
82397db96d56Sopenharmony_ci"--\n"
82407db96d56Sopenharmony_ci"\n"
82417db96d56Sopenharmony_ci"Get the blocking mode of the file descriptor.\n"
82427db96d56Sopenharmony_ci"\n"
82437db96d56Sopenharmony_ci"Return False if the O_NONBLOCK flag is set, True if the flag is cleared.");
82447db96d56Sopenharmony_ci
82457db96d56Sopenharmony_ci#define OS_GET_BLOCKING_METHODDEF    \
82467db96d56Sopenharmony_ci    {"get_blocking", (PyCFunction)os_get_blocking, METH_O, os_get_blocking__doc__},
82477db96d56Sopenharmony_ci
82487db96d56Sopenharmony_cistatic int
82497db96d56Sopenharmony_cios_get_blocking_impl(PyObject *module, int fd);
82507db96d56Sopenharmony_ci
82517db96d56Sopenharmony_cistatic PyObject *
82527db96d56Sopenharmony_cios_get_blocking(PyObject *module, PyObject *arg)
82537db96d56Sopenharmony_ci{
82547db96d56Sopenharmony_ci    PyObject *return_value = NULL;
82557db96d56Sopenharmony_ci    int fd;
82567db96d56Sopenharmony_ci    int _return_value;
82577db96d56Sopenharmony_ci
82587db96d56Sopenharmony_ci    fd = _PyLong_AsInt(arg);
82597db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
82607db96d56Sopenharmony_ci        goto exit;
82617db96d56Sopenharmony_ci    }
82627db96d56Sopenharmony_ci    _return_value = os_get_blocking_impl(module, fd);
82637db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
82647db96d56Sopenharmony_ci        goto exit;
82657db96d56Sopenharmony_ci    }
82667db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
82677db96d56Sopenharmony_ci
82687db96d56Sopenharmony_ciexit:
82697db96d56Sopenharmony_ci    return return_value;
82707db96d56Sopenharmony_ci}
82717db96d56Sopenharmony_ci
82727db96d56Sopenharmony_ci#endif /* !defined(MS_WINDOWS) */
82737db96d56Sopenharmony_ci
82747db96d56Sopenharmony_ci#if !defined(MS_WINDOWS)
82757db96d56Sopenharmony_ci
82767db96d56Sopenharmony_ciPyDoc_STRVAR(os_set_blocking__doc__,
82777db96d56Sopenharmony_ci"set_blocking($module, fd, blocking, /)\n"
82787db96d56Sopenharmony_ci"--\n"
82797db96d56Sopenharmony_ci"\n"
82807db96d56Sopenharmony_ci"Set the blocking mode of the specified file descriptor.\n"
82817db96d56Sopenharmony_ci"\n"
82827db96d56Sopenharmony_ci"Set the O_NONBLOCK flag if blocking is False,\n"
82837db96d56Sopenharmony_ci"clear the O_NONBLOCK flag otherwise.");
82847db96d56Sopenharmony_ci
82857db96d56Sopenharmony_ci#define OS_SET_BLOCKING_METHODDEF    \
82867db96d56Sopenharmony_ci    {"set_blocking", _PyCFunction_CAST(os_set_blocking), METH_FASTCALL, os_set_blocking__doc__},
82877db96d56Sopenharmony_ci
82887db96d56Sopenharmony_cistatic PyObject *
82897db96d56Sopenharmony_cios_set_blocking_impl(PyObject *module, int fd, int blocking);
82907db96d56Sopenharmony_ci
82917db96d56Sopenharmony_cistatic PyObject *
82927db96d56Sopenharmony_cios_set_blocking(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
82937db96d56Sopenharmony_ci{
82947db96d56Sopenharmony_ci    PyObject *return_value = NULL;
82957db96d56Sopenharmony_ci    int fd;
82967db96d56Sopenharmony_ci    int blocking;
82977db96d56Sopenharmony_ci
82987db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("set_blocking", nargs, 2, 2)) {
82997db96d56Sopenharmony_ci        goto exit;
83007db96d56Sopenharmony_ci    }
83017db96d56Sopenharmony_ci    fd = _PyLong_AsInt(args[0]);
83027db96d56Sopenharmony_ci    if (fd == -1 && PyErr_Occurred()) {
83037db96d56Sopenharmony_ci        goto exit;
83047db96d56Sopenharmony_ci    }
83057db96d56Sopenharmony_ci    blocking = _PyLong_AsInt(args[1]);
83067db96d56Sopenharmony_ci    if (blocking == -1 && PyErr_Occurred()) {
83077db96d56Sopenharmony_ci        goto exit;
83087db96d56Sopenharmony_ci    }
83097db96d56Sopenharmony_ci    return_value = os_set_blocking_impl(module, fd, blocking);
83107db96d56Sopenharmony_ci
83117db96d56Sopenharmony_ciexit:
83127db96d56Sopenharmony_ci    return return_value;
83137db96d56Sopenharmony_ci}
83147db96d56Sopenharmony_ci
83157db96d56Sopenharmony_ci#endif /* !defined(MS_WINDOWS) */
83167db96d56Sopenharmony_ci
83177db96d56Sopenharmony_ciPyDoc_STRVAR(os_DirEntry_is_symlink__doc__,
83187db96d56Sopenharmony_ci"is_symlink($self, /)\n"
83197db96d56Sopenharmony_ci"--\n"
83207db96d56Sopenharmony_ci"\n"
83217db96d56Sopenharmony_ci"Return True if the entry is a symbolic link; cached per entry.");
83227db96d56Sopenharmony_ci
83237db96d56Sopenharmony_ci#define OS_DIRENTRY_IS_SYMLINK_METHODDEF    \
83247db96d56Sopenharmony_ci    {"is_symlink", _PyCFunction_CAST(os_DirEntry_is_symlink), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, os_DirEntry_is_symlink__doc__},
83257db96d56Sopenharmony_ci
83267db96d56Sopenharmony_cistatic int
83277db96d56Sopenharmony_cios_DirEntry_is_symlink_impl(DirEntry *self, PyTypeObject *defining_class);
83287db96d56Sopenharmony_ci
83297db96d56Sopenharmony_cistatic PyObject *
83307db96d56Sopenharmony_cios_DirEntry_is_symlink(DirEntry *self, PyTypeObject *defining_class, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
83317db96d56Sopenharmony_ci{
83327db96d56Sopenharmony_ci    PyObject *return_value = NULL;
83337db96d56Sopenharmony_ci    int _return_value;
83347db96d56Sopenharmony_ci
83357db96d56Sopenharmony_ci    if (nargs) {
83367db96d56Sopenharmony_ci        PyErr_SetString(PyExc_TypeError, "is_symlink() takes no arguments");
83377db96d56Sopenharmony_ci        goto exit;
83387db96d56Sopenharmony_ci    }
83397db96d56Sopenharmony_ci    _return_value = os_DirEntry_is_symlink_impl(self, defining_class);
83407db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
83417db96d56Sopenharmony_ci        goto exit;
83427db96d56Sopenharmony_ci    }
83437db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
83447db96d56Sopenharmony_ci
83457db96d56Sopenharmony_ciexit:
83467db96d56Sopenharmony_ci    return return_value;
83477db96d56Sopenharmony_ci}
83487db96d56Sopenharmony_ci
83497db96d56Sopenharmony_ciPyDoc_STRVAR(os_DirEntry_stat__doc__,
83507db96d56Sopenharmony_ci"stat($self, /, *, follow_symlinks=True)\n"
83517db96d56Sopenharmony_ci"--\n"
83527db96d56Sopenharmony_ci"\n"
83537db96d56Sopenharmony_ci"Return stat_result object for the entry; cached per entry.");
83547db96d56Sopenharmony_ci
83557db96d56Sopenharmony_ci#define OS_DIRENTRY_STAT_METHODDEF    \
83567db96d56Sopenharmony_ci    {"stat", _PyCFunction_CAST(os_DirEntry_stat), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, os_DirEntry_stat__doc__},
83577db96d56Sopenharmony_ci
83587db96d56Sopenharmony_cistatic PyObject *
83597db96d56Sopenharmony_cios_DirEntry_stat_impl(DirEntry *self, PyTypeObject *defining_class,
83607db96d56Sopenharmony_ci                      int follow_symlinks);
83617db96d56Sopenharmony_ci
83627db96d56Sopenharmony_cistatic PyObject *
83637db96d56Sopenharmony_cios_DirEntry_stat(DirEntry *self, PyTypeObject *defining_class, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
83647db96d56Sopenharmony_ci{
83657db96d56Sopenharmony_ci    PyObject *return_value = NULL;
83667db96d56Sopenharmony_ci    static const char * const _keywords[] = {"follow_symlinks", NULL};
83677db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "stat", 0};
83687db96d56Sopenharmony_ci    PyObject *argsbuf[1];
83697db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
83707db96d56Sopenharmony_ci    int follow_symlinks = 1;
83717db96d56Sopenharmony_ci
83727db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf);
83737db96d56Sopenharmony_ci    if (!args) {
83747db96d56Sopenharmony_ci        goto exit;
83757db96d56Sopenharmony_ci    }
83767db96d56Sopenharmony_ci    if (!noptargs) {
83777db96d56Sopenharmony_ci        goto skip_optional_kwonly;
83787db96d56Sopenharmony_ci    }
83797db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[0]);
83807db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
83817db96d56Sopenharmony_ci        goto exit;
83827db96d56Sopenharmony_ci    }
83837db96d56Sopenharmony_ciskip_optional_kwonly:
83847db96d56Sopenharmony_ci    return_value = os_DirEntry_stat_impl(self, defining_class, follow_symlinks);
83857db96d56Sopenharmony_ci
83867db96d56Sopenharmony_ciexit:
83877db96d56Sopenharmony_ci    return return_value;
83887db96d56Sopenharmony_ci}
83897db96d56Sopenharmony_ci
83907db96d56Sopenharmony_ciPyDoc_STRVAR(os_DirEntry_is_dir__doc__,
83917db96d56Sopenharmony_ci"is_dir($self, /, *, follow_symlinks=True)\n"
83927db96d56Sopenharmony_ci"--\n"
83937db96d56Sopenharmony_ci"\n"
83947db96d56Sopenharmony_ci"Return True if the entry is a directory; cached per entry.");
83957db96d56Sopenharmony_ci
83967db96d56Sopenharmony_ci#define OS_DIRENTRY_IS_DIR_METHODDEF    \
83977db96d56Sopenharmony_ci    {"is_dir", _PyCFunction_CAST(os_DirEntry_is_dir), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, os_DirEntry_is_dir__doc__},
83987db96d56Sopenharmony_ci
83997db96d56Sopenharmony_cistatic int
84007db96d56Sopenharmony_cios_DirEntry_is_dir_impl(DirEntry *self, PyTypeObject *defining_class,
84017db96d56Sopenharmony_ci                        int follow_symlinks);
84027db96d56Sopenharmony_ci
84037db96d56Sopenharmony_cistatic PyObject *
84047db96d56Sopenharmony_cios_DirEntry_is_dir(DirEntry *self, PyTypeObject *defining_class, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
84057db96d56Sopenharmony_ci{
84067db96d56Sopenharmony_ci    PyObject *return_value = NULL;
84077db96d56Sopenharmony_ci    static const char * const _keywords[] = {"follow_symlinks", NULL};
84087db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "is_dir", 0};
84097db96d56Sopenharmony_ci    PyObject *argsbuf[1];
84107db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
84117db96d56Sopenharmony_ci    int follow_symlinks = 1;
84127db96d56Sopenharmony_ci    int _return_value;
84137db96d56Sopenharmony_ci
84147db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf);
84157db96d56Sopenharmony_ci    if (!args) {
84167db96d56Sopenharmony_ci        goto exit;
84177db96d56Sopenharmony_ci    }
84187db96d56Sopenharmony_ci    if (!noptargs) {
84197db96d56Sopenharmony_ci        goto skip_optional_kwonly;
84207db96d56Sopenharmony_ci    }
84217db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[0]);
84227db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
84237db96d56Sopenharmony_ci        goto exit;
84247db96d56Sopenharmony_ci    }
84257db96d56Sopenharmony_ciskip_optional_kwonly:
84267db96d56Sopenharmony_ci    _return_value = os_DirEntry_is_dir_impl(self, defining_class, follow_symlinks);
84277db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
84287db96d56Sopenharmony_ci        goto exit;
84297db96d56Sopenharmony_ci    }
84307db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
84317db96d56Sopenharmony_ci
84327db96d56Sopenharmony_ciexit:
84337db96d56Sopenharmony_ci    return return_value;
84347db96d56Sopenharmony_ci}
84357db96d56Sopenharmony_ci
84367db96d56Sopenharmony_ciPyDoc_STRVAR(os_DirEntry_is_file__doc__,
84377db96d56Sopenharmony_ci"is_file($self, /, *, follow_symlinks=True)\n"
84387db96d56Sopenharmony_ci"--\n"
84397db96d56Sopenharmony_ci"\n"
84407db96d56Sopenharmony_ci"Return True if the entry is a file; cached per entry.");
84417db96d56Sopenharmony_ci
84427db96d56Sopenharmony_ci#define OS_DIRENTRY_IS_FILE_METHODDEF    \
84437db96d56Sopenharmony_ci    {"is_file", _PyCFunction_CAST(os_DirEntry_is_file), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, os_DirEntry_is_file__doc__},
84447db96d56Sopenharmony_ci
84457db96d56Sopenharmony_cistatic int
84467db96d56Sopenharmony_cios_DirEntry_is_file_impl(DirEntry *self, PyTypeObject *defining_class,
84477db96d56Sopenharmony_ci                         int follow_symlinks);
84487db96d56Sopenharmony_ci
84497db96d56Sopenharmony_cistatic PyObject *
84507db96d56Sopenharmony_cios_DirEntry_is_file(DirEntry *self, PyTypeObject *defining_class, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
84517db96d56Sopenharmony_ci{
84527db96d56Sopenharmony_ci    PyObject *return_value = NULL;
84537db96d56Sopenharmony_ci    static const char * const _keywords[] = {"follow_symlinks", NULL};
84547db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "is_file", 0};
84557db96d56Sopenharmony_ci    PyObject *argsbuf[1];
84567db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
84577db96d56Sopenharmony_ci    int follow_symlinks = 1;
84587db96d56Sopenharmony_ci    int _return_value;
84597db96d56Sopenharmony_ci
84607db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf);
84617db96d56Sopenharmony_ci    if (!args) {
84627db96d56Sopenharmony_ci        goto exit;
84637db96d56Sopenharmony_ci    }
84647db96d56Sopenharmony_ci    if (!noptargs) {
84657db96d56Sopenharmony_ci        goto skip_optional_kwonly;
84667db96d56Sopenharmony_ci    }
84677db96d56Sopenharmony_ci    follow_symlinks = PyObject_IsTrue(args[0]);
84687db96d56Sopenharmony_ci    if (follow_symlinks < 0) {
84697db96d56Sopenharmony_ci        goto exit;
84707db96d56Sopenharmony_ci    }
84717db96d56Sopenharmony_ciskip_optional_kwonly:
84727db96d56Sopenharmony_ci    _return_value = os_DirEntry_is_file_impl(self, defining_class, follow_symlinks);
84737db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
84747db96d56Sopenharmony_ci        goto exit;
84757db96d56Sopenharmony_ci    }
84767db96d56Sopenharmony_ci    return_value = PyBool_FromLong((long)_return_value);
84777db96d56Sopenharmony_ci
84787db96d56Sopenharmony_ciexit:
84797db96d56Sopenharmony_ci    return return_value;
84807db96d56Sopenharmony_ci}
84817db96d56Sopenharmony_ci
84827db96d56Sopenharmony_ciPyDoc_STRVAR(os_DirEntry_inode__doc__,
84837db96d56Sopenharmony_ci"inode($self, /)\n"
84847db96d56Sopenharmony_ci"--\n"
84857db96d56Sopenharmony_ci"\n"
84867db96d56Sopenharmony_ci"Return inode of the entry; cached per entry.");
84877db96d56Sopenharmony_ci
84887db96d56Sopenharmony_ci#define OS_DIRENTRY_INODE_METHODDEF    \
84897db96d56Sopenharmony_ci    {"inode", (PyCFunction)os_DirEntry_inode, METH_NOARGS, os_DirEntry_inode__doc__},
84907db96d56Sopenharmony_ci
84917db96d56Sopenharmony_cistatic PyObject *
84927db96d56Sopenharmony_cios_DirEntry_inode_impl(DirEntry *self);
84937db96d56Sopenharmony_ci
84947db96d56Sopenharmony_cistatic PyObject *
84957db96d56Sopenharmony_cios_DirEntry_inode(DirEntry *self, PyObject *Py_UNUSED(ignored))
84967db96d56Sopenharmony_ci{
84977db96d56Sopenharmony_ci    return os_DirEntry_inode_impl(self);
84987db96d56Sopenharmony_ci}
84997db96d56Sopenharmony_ci
85007db96d56Sopenharmony_ciPyDoc_STRVAR(os_DirEntry___fspath____doc__,
85017db96d56Sopenharmony_ci"__fspath__($self, /)\n"
85027db96d56Sopenharmony_ci"--\n"
85037db96d56Sopenharmony_ci"\n"
85047db96d56Sopenharmony_ci"Returns the path for the entry.");
85057db96d56Sopenharmony_ci
85067db96d56Sopenharmony_ci#define OS_DIRENTRY___FSPATH___METHODDEF    \
85077db96d56Sopenharmony_ci    {"__fspath__", (PyCFunction)os_DirEntry___fspath__, METH_NOARGS, os_DirEntry___fspath____doc__},
85087db96d56Sopenharmony_ci
85097db96d56Sopenharmony_cistatic PyObject *
85107db96d56Sopenharmony_cios_DirEntry___fspath___impl(DirEntry *self);
85117db96d56Sopenharmony_ci
85127db96d56Sopenharmony_cistatic PyObject *
85137db96d56Sopenharmony_cios_DirEntry___fspath__(DirEntry *self, PyObject *Py_UNUSED(ignored))
85147db96d56Sopenharmony_ci{
85157db96d56Sopenharmony_ci    return os_DirEntry___fspath___impl(self);
85167db96d56Sopenharmony_ci}
85177db96d56Sopenharmony_ci
85187db96d56Sopenharmony_ciPyDoc_STRVAR(os_scandir__doc__,
85197db96d56Sopenharmony_ci"scandir($module, /, path=None)\n"
85207db96d56Sopenharmony_ci"--\n"
85217db96d56Sopenharmony_ci"\n"
85227db96d56Sopenharmony_ci"Return an iterator of DirEntry objects for given path.\n"
85237db96d56Sopenharmony_ci"\n"
85247db96d56Sopenharmony_ci"path can be specified as either str, bytes, or a path-like object.  If path\n"
85257db96d56Sopenharmony_ci"is bytes, the names of yielded DirEntry objects will also be bytes; in\n"
85267db96d56Sopenharmony_ci"all other circumstances they will be str.\n"
85277db96d56Sopenharmony_ci"\n"
85287db96d56Sopenharmony_ci"If path is None, uses the path=\'.\'.");
85297db96d56Sopenharmony_ci
85307db96d56Sopenharmony_ci#define OS_SCANDIR_METHODDEF    \
85317db96d56Sopenharmony_ci    {"scandir", _PyCFunction_CAST(os_scandir), METH_FASTCALL|METH_KEYWORDS, os_scandir__doc__},
85327db96d56Sopenharmony_ci
85337db96d56Sopenharmony_cistatic PyObject *
85347db96d56Sopenharmony_cios_scandir_impl(PyObject *module, path_t *path);
85357db96d56Sopenharmony_ci
85367db96d56Sopenharmony_cistatic PyObject *
85377db96d56Sopenharmony_cios_scandir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
85387db96d56Sopenharmony_ci{
85397db96d56Sopenharmony_ci    PyObject *return_value = NULL;
85407db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", NULL};
85417db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "scandir", 0};
85427db96d56Sopenharmony_ci    PyObject *argsbuf[1];
85437db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
85447db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("scandir", "path", 1, PATH_HAVE_FDOPENDIR);
85457db96d56Sopenharmony_ci
85467db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
85477db96d56Sopenharmony_ci    if (!args) {
85487db96d56Sopenharmony_ci        goto exit;
85497db96d56Sopenharmony_ci    }
85507db96d56Sopenharmony_ci    if (!noptargs) {
85517db96d56Sopenharmony_ci        goto skip_optional_pos;
85527db96d56Sopenharmony_ci    }
85537db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
85547db96d56Sopenharmony_ci        goto exit;
85557db96d56Sopenharmony_ci    }
85567db96d56Sopenharmony_ciskip_optional_pos:
85577db96d56Sopenharmony_ci    return_value = os_scandir_impl(module, &path);
85587db96d56Sopenharmony_ci
85597db96d56Sopenharmony_ciexit:
85607db96d56Sopenharmony_ci    /* Cleanup for path */
85617db96d56Sopenharmony_ci    path_cleanup(&path);
85627db96d56Sopenharmony_ci
85637db96d56Sopenharmony_ci    return return_value;
85647db96d56Sopenharmony_ci}
85657db96d56Sopenharmony_ci
85667db96d56Sopenharmony_ciPyDoc_STRVAR(os_fspath__doc__,
85677db96d56Sopenharmony_ci"fspath($module, /, path)\n"
85687db96d56Sopenharmony_ci"--\n"
85697db96d56Sopenharmony_ci"\n"
85707db96d56Sopenharmony_ci"Return the file system path representation of the object.\n"
85717db96d56Sopenharmony_ci"\n"
85727db96d56Sopenharmony_ci"If the object is str or bytes, then allow it to pass through as-is. If the\n"
85737db96d56Sopenharmony_ci"object defines __fspath__(), then return the result of that method. All other\n"
85747db96d56Sopenharmony_ci"types raise a TypeError.");
85757db96d56Sopenharmony_ci
85767db96d56Sopenharmony_ci#define OS_FSPATH_METHODDEF    \
85777db96d56Sopenharmony_ci    {"fspath", _PyCFunction_CAST(os_fspath), METH_FASTCALL|METH_KEYWORDS, os_fspath__doc__},
85787db96d56Sopenharmony_ci
85797db96d56Sopenharmony_cistatic PyObject *
85807db96d56Sopenharmony_cios_fspath_impl(PyObject *module, PyObject *path);
85817db96d56Sopenharmony_ci
85827db96d56Sopenharmony_cistatic PyObject *
85837db96d56Sopenharmony_cios_fspath(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
85847db96d56Sopenharmony_ci{
85857db96d56Sopenharmony_ci    PyObject *return_value = NULL;
85867db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", NULL};
85877db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "fspath", 0};
85887db96d56Sopenharmony_ci    PyObject *argsbuf[1];
85897db96d56Sopenharmony_ci    PyObject *path;
85907db96d56Sopenharmony_ci
85917db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
85927db96d56Sopenharmony_ci    if (!args) {
85937db96d56Sopenharmony_ci        goto exit;
85947db96d56Sopenharmony_ci    }
85957db96d56Sopenharmony_ci    path = args[0];
85967db96d56Sopenharmony_ci    return_value = os_fspath_impl(module, path);
85977db96d56Sopenharmony_ci
85987db96d56Sopenharmony_ciexit:
85997db96d56Sopenharmony_ci    return return_value;
86007db96d56Sopenharmony_ci}
86017db96d56Sopenharmony_ci
86027db96d56Sopenharmony_ci#if defined(HAVE_GETRANDOM_SYSCALL)
86037db96d56Sopenharmony_ci
86047db96d56Sopenharmony_ciPyDoc_STRVAR(os_getrandom__doc__,
86057db96d56Sopenharmony_ci"getrandom($module, /, size, flags=0)\n"
86067db96d56Sopenharmony_ci"--\n"
86077db96d56Sopenharmony_ci"\n"
86087db96d56Sopenharmony_ci"Obtain a series of random bytes.");
86097db96d56Sopenharmony_ci
86107db96d56Sopenharmony_ci#define OS_GETRANDOM_METHODDEF    \
86117db96d56Sopenharmony_ci    {"getrandom", _PyCFunction_CAST(os_getrandom), METH_FASTCALL|METH_KEYWORDS, os_getrandom__doc__},
86127db96d56Sopenharmony_ci
86137db96d56Sopenharmony_cistatic PyObject *
86147db96d56Sopenharmony_cios_getrandom_impl(PyObject *module, Py_ssize_t size, int flags);
86157db96d56Sopenharmony_ci
86167db96d56Sopenharmony_cistatic PyObject *
86177db96d56Sopenharmony_cios_getrandom(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
86187db96d56Sopenharmony_ci{
86197db96d56Sopenharmony_ci    PyObject *return_value = NULL;
86207db96d56Sopenharmony_ci    static const char * const _keywords[] = {"size", "flags", NULL};
86217db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "getrandom", 0};
86227db96d56Sopenharmony_ci    PyObject *argsbuf[2];
86237db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
86247db96d56Sopenharmony_ci    Py_ssize_t size;
86257db96d56Sopenharmony_ci    int flags = 0;
86267db96d56Sopenharmony_ci
86277db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
86287db96d56Sopenharmony_ci    if (!args) {
86297db96d56Sopenharmony_ci        goto exit;
86307db96d56Sopenharmony_ci    }
86317db96d56Sopenharmony_ci    {
86327db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
86337db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(args[0]);
86347db96d56Sopenharmony_ci        if (iobj != NULL) {
86357db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
86367db96d56Sopenharmony_ci            Py_DECREF(iobj);
86377db96d56Sopenharmony_ci        }
86387db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
86397db96d56Sopenharmony_ci            goto exit;
86407db96d56Sopenharmony_ci        }
86417db96d56Sopenharmony_ci        size = ival;
86427db96d56Sopenharmony_ci    }
86437db96d56Sopenharmony_ci    if (!noptargs) {
86447db96d56Sopenharmony_ci        goto skip_optional_pos;
86457db96d56Sopenharmony_ci    }
86467db96d56Sopenharmony_ci    flags = _PyLong_AsInt(args[1]);
86477db96d56Sopenharmony_ci    if (flags == -1 && PyErr_Occurred()) {
86487db96d56Sopenharmony_ci        goto exit;
86497db96d56Sopenharmony_ci    }
86507db96d56Sopenharmony_ciskip_optional_pos:
86517db96d56Sopenharmony_ci    return_value = os_getrandom_impl(module, size, flags);
86527db96d56Sopenharmony_ci
86537db96d56Sopenharmony_ciexit:
86547db96d56Sopenharmony_ci    return return_value;
86557db96d56Sopenharmony_ci}
86567db96d56Sopenharmony_ci
86577db96d56Sopenharmony_ci#endif /* defined(HAVE_GETRANDOM_SYSCALL) */
86587db96d56Sopenharmony_ci
86597db96d56Sopenharmony_ci#if defined(MS_WINDOWS)
86607db96d56Sopenharmony_ci
86617db96d56Sopenharmony_ciPyDoc_STRVAR(os__add_dll_directory__doc__,
86627db96d56Sopenharmony_ci"_add_dll_directory($module, /, path)\n"
86637db96d56Sopenharmony_ci"--\n"
86647db96d56Sopenharmony_ci"\n"
86657db96d56Sopenharmony_ci"Add a path to the DLL search path.\n"
86667db96d56Sopenharmony_ci"\n"
86677db96d56Sopenharmony_ci"This search path is used when resolving dependencies for imported\n"
86687db96d56Sopenharmony_ci"extension modules (the module itself is resolved through sys.path),\n"
86697db96d56Sopenharmony_ci"and also by ctypes.\n"
86707db96d56Sopenharmony_ci"\n"
86717db96d56Sopenharmony_ci"Returns an opaque value that may be passed to os.remove_dll_directory\n"
86727db96d56Sopenharmony_ci"to remove this directory from the search path.");
86737db96d56Sopenharmony_ci
86747db96d56Sopenharmony_ci#define OS__ADD_DLL_DIRECTORY_METHODDEF    \
86757db96d56Sopenharmony_ci    {"_add_dll_directory", _PyCFunction_CAST(os__add_dll_directory), METH_FASTCALL|METH_KEYWORDS, os__add_dll_directory__doc__},
86767db96d56Sopenharmony_ci
86777db96d56Sopenharmony_cistatic PyObject *
86787db96d56Sopenharmony_cios__add_dll_directory_impl(PyObject *module, path_t *path);
86797db96d56Sopenharmony_ci
86807db96d56Sopenharmony_cistatic PyObject *
86817db96d56Sopenharmony_cios__add_dll_directory(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
86827db96d56Sopenharmony_ci{
86837db96d56Sopenharmony_ci    PyObject *return_value = NULL;
86847db96d56Sopenharmony_ci    static const char * const _keywords[] = {"path", NULL};
86857db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "_add_dll_directory", 0};
86867db96d56Sopenharmony_ci    PyObject *argsbuf[1];
86877db96d56Sopenharmony_ci    path_t path = PATH_T_INITIALIZE("_add_dll_directory", "path", 0, 0);
86887db96d56Sopenharmony_ci
86897db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
86907db96d56Sopenharmony_ci    if (!args) {
86917db96d56Sopenharmony_ci        goto exit;
86927db96d56Sopenharmony_ci    }
86937db96d56Sopenharmony_ci    if (!path_converter(args[0], &path)) {
86947db96d56Sopenharmony_ci        goto exit;
86957db96d56Sopenharmony_ci    }
86967db96d56Sopenharmony_ci    return_value = os__add_dll_directory_impl(module, &path);
86977db96d56Sopenharmony_ci
86987db96d56Sopenharmony_ciexit:
86997db96d56Sopenharmony_ci    /* Cleanup for path */
87007db96d56Sopenharmony_ci    path_cleanup(&path);
87017db96d56Sopenharmony_ci
87027db96d56Sopenharmony_ci    return return_value;
87037db96d56Sopenharmony_ci}
87047db96d56Sopenharmony_ci
87057db96d56Sopenharmony_ci#endif /* defined(MS_WINDOWS) */
87067db96d56Sopenharmony_ci
87077db96d56Sopenharmony_ci#if defined(MS_WINDOWS)
87087db96d56Sopenharmony_ci
87097db96d56Sopenharmony_ciPyDoc_STRVAR(os__remove_dll_directory__doc__,
87107db96d56Sopenharmony_ci"_remove_dll_directory($module, /, cookie)\n"
87117db96d56Sopenharmony_ci"--\n"
87127db96d56Sopenharmony_ci"\n"
87137db96d56Sopenharmony_ci"Removes a path from the DLL search path.\n"
87147db96d56Sopenharmony_ci"\n"
87157db96d56Sopenharmony_ci"The parameter is an opaque value that was returned from\n"
87167db96d56Sopenharmony_ci"os.add_dll_directory. You can only remove directories that you added\n"
87177db96d56Sopenharmony_ci"yourself.");
87187db96d56Sopenharmony_ci
87197db96d56Sopenharmony_ci#define OS__REMOVE_DLL_DIRECTORY_METHODDEF    \
87207db96d56Sopenharmony_ci    {"_remove_dll_directory", _PyCFunction_CAST(os__remove_dll_directory), METH_FASTCALL|METH_KEYWORDS, os__remove_dll_directory__doc__},
87217db96d56Sopenharmony_ci
87227db96d56Sopenharmony_cistatic PyObject *
87237db96d56Sopenharmony_cios__remove_dll_directory_impl(PyObject *module, PyObject *cookie);
87247db96d56Sopenharmony_ci
87257db96d56Sopenharmony_cistatic PyObject *
87267db96d56Sopenharmony_cios__remove_dll_directory(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
87277db96d56Sopenharmony_ci{
87287db96d56Sopenharmony_ci    PyObject *return_value = NULL;
87297db96d56Sopenharmony_ci    static const char * const _keywords[] = {"cookie", NULL};
87307db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "_remove_dll_directory", 0};
87317db96d56Sopenharmony_ci    PyObject *argsbuf[1];
87327db96d56Sopenharmony_ci    PyObject *cookie;
87337db96d56Sopenharmony_ci
87347db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
87357db96d56Sopenharmony_ci    if (!args) {
87367db96d56Sopenharmony_ci        goto exit;
87377db96d56Sopenharmony_ci    }
87387db96d56Sopenharmony_ci    cookie = args[0];
87397db96d56Sopenharmony_ci    return_value = os__remove_dll_directory_impl(module, cookie);
87407db96d56Sopenharmony_ci
87417db96d56Sopenharmony_ciexit:
87427db96d56Sopenharmony_ci    return return_value;
87437db96d56Sopenharmony_ci}
87447db96d56Sopenharmony_ci
87457db96d56Sopenharmony_ci#endif /* defined(MS_WINDOWS) */
87467db96d56Sopenharmony_ci
87477db96d56Sopenharmony_ci#if (defined(WIFEXITED) || defined(MS_WINDOWS))
87487db96d56Sopenharmony_ci
87497db96d56Sopenharmony_ciPyDoc_STRVAR(os_waitstatus_to_exitcode__doc__,
87507db96d56Sopenharmony_ci"waitstatus_to_exitcode($module, /, status)\n"
87517db96d56Sopenharmony_ci"--\n"
87527db96d56Sopenharmony_ci"\n"
87537db96d56Sopenharmony_ci"Convert a wait status to an exit code.\n"
87547db96d56Sopenharmony_ci"\n"
87557db96d56Sopenharmony_ci"On Unix:\n"
87567db96d56Sopenharmony_ci"\n"
87577db96d56Sopenharmony_ci"* If WIFEXITED(status) is true, return WEXITSTATUS(status).\n"
87587db96d56Sopenharmony_ci"* If WIFSIGNALED(status) is true, return -WTERMSIG(status).\n"
87597db96d56Sopenharmony_ci"* Otherwise, raise a ValueError.\n"
87607db96d56Sopenharmony_ci"\n"
87617db96d56Sopenharmony_ci"On Windows, return status shifted right by 8 bits.\n"
87627db96d56Sopenharmony_ci"\n"
87637db96d56Sopenharmony_ci"On Unix, if the process is being traced or if waitpid() was called with\n"
87647db96d56Sopenharmony_ci"WUNTRACED option, the caller must first check if WIFSTOPPED(status) is true.\n"
87657db96d56Sopenharmony_ci"This function must not be called if WIFSTOPPED(status) is true.");
87667db96d56Sopenharmony_ci
87677db96d56Sopenharmony_ci#define OS_WAITSTATUS_TO_EXITCODE_METHODDEF    \
87687db96d56Sopenharmony_ci    {"waitstatus_to_exitcode", _PyCFunction_CAST(os_waitstatus_to_exitcode), METH_FASTCALL|METH_KEYWORDS, os_waitstatus_to_exitcode__doc__},
87697db96d56Sopenharmony_ci
87707db96d56Sopenharmony_cistatic PyObject *
87717db96d56Sopenharmony_cios_waitstatus_to_exitcode_impl(PyObject *module, PyObject *status_obj);
87727db96d56Sopenharmony_ci
87737db96d56Sopenharmony_cistatic PyObject *
87747db96d56Sopenharmony_cios_waitstatus_to_exitcode(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
87757db96d56Sopenharmony_ci{
87767db96d56Sopenharmony_ci    PyObject *return_value = NULL;
87777db96d56Sopenharmony_ci    static const char * const _keywords[] = {"status", NULL};
87787db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "waitstatus_to_exitcode", 0};
87797db96d56Sopenharmony_ci    PyObject *argsbuf[1];
87807db96d56Sopenharmony_ci    PyObject *status_obj;
87817db96d56Sopenharmony_ci
87827db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
87837db96d56Sopenharmony_ci    if (!args) {
87847db96d56Sopenharmony_ci        goto exit;
87857db96d56Sopenharmony_ci    }
87867db96d56Sopenharmony_ci    status_obj = args[0];
87877db96d56Sopenharmony_ci    return_value = os_waitstatus_to_exitcode_impl(module, status_obj);
87887db96d56Sopenharmony_ci
87897db96d56Sopenharmony_ciexit:
87907db96d56Sopenharmony_ci    return return_value;
87917db96d56Sopenharmony_ci}
87927db96d56Sopenharmony_ci
87937db96d56Sopenharmony_ci#endif /* (defined(WIFEXITED) || defined(MS_WINDOWS)) */
87947db96d56Sopenharmony_ci
87957db96d56Sopenharmony_ci#ifndef OS_TTYNAME_METHODDEF
87967db96d56Sopenharmony_ci    #define OS_TTYNAME_METHODDEF
87977db96d56Sopenharmony_ci#endif /* !defined(OS_TTYNAME_METHODDEF) */
87987db96d56Sopenharmony_ci
87997db96d56Sopenharmony_ci#ifndef OS_CTERMID_METHODDEF
88007db96d56Sopenharmony_ci    #define OS_CTERMID_METHODDEF
88017db96d56Sopenharmony_ci#endif /* !defined(OS_CTERMID_METHODDEF) */
88027db96d56Sopenharmony_ci
88037db96d56Sopenharmony_ci#ifndef OS_FCHDIR_METHODDEF
88047db96d56Sopenharmony_ci    #define OS_FCHDIR_METHODDEF
88057db96d56Sopenharmony_ci#endif /* !defined(OS_FCHDIR_METHODDEF) */
88067db96d56Sopenharmony_ci
88077db96d56Sopenharmony_ci#ifndef OS_FCHMOD_METHODDEF
88087db96d56Sopenharmony_ci    #define OS_FCHMOD_METHODDEF
88097db96d56Sopenharmony_ci#endif /* !defined(OS_FCHMOD_METHODDEF) */
88107db96d56Sopenharmony_ci
88117db96d56Sopenharmony_ci#ifndef OS_LCHMOD_METHODDEF
88127db96d56Sopenharmony_ci    #define OS_LCHMOD_METHODDEF
88137db96d56Sopenharmony_ci#endif /* !defined(OS_LCHMOD_METHODDEF) */
88147db96d56Sopenharmony_ci
88157db96d56Sopenharmony_ci#ifndef OS_CHFLAGS_METHODDEF
88167db96d56Sopenharmony_ci    #define OS_CHFLAGS_METHODDEF
88177db96d56Sopenharmony_ci#endif /* !defined(OS_CHFLAGS_METHODDEF) */
88187db96d56Sopenharmony_ci
88197db96d56Sopenharmony_ci#ifndef OS_LCHFLAGS_METHODDEF
88207db96d56Sopenharmony_ci    #define OS_LCHFLAGS_METHODDEF
88217db96d56Sopenharmony_ci#endif /* !defined(OS_LCHFLAGS_METHODDEF) */
88227db96d56Sopenharmony_ci
88237db96d56Sopenharmony_ci#ifndef OS_CHROOT_METHODDEF
88247db96d56Sopenharmony_ci    #define OS_CHROOT_METHODDEF
88257db96d56Sopenharmony_ci#endif /* !defined(OS_CHROOT_METHODDEF) */
88267db96d56Sopenharmony_ci
88277db96d56Sopenharmony_ci#ifndef OS_FSYNC_METHODDEF
88287db96d56Sopenharmony_ci    #define OS_FSYNC_METHODDEF
88297db96d56Sopenharmony_ci#endif /* !defined(OS_FSYNC_METHODDEF) */
88307db96d56Sopenharmony_ci
88317db96d56Sopenharmony_ci#ifndef OS_SYNC_METHODDEF
88327db96d56Sopenharmony_ci    #define OS_SYNC_METHODDEF
88337db96d56Sopenharmony_ci#endif /* !defined(OS_SYNC_METHODDEF) */
88347db96d56Sopenharmony_ci
88357db96d56Sopenharmony_ci#ifndef OS_FDATASYNC_METHODDEF
88367db96d56Sopenharmony_ci    #define OS_FDATASYNC_METHODDEF
88377db96d56Sopenharmony_ci#endif /* !defined(OS_FDATASYNC_METHODDEF) */
88387db96d56Sopenharmony_ci
88397db96d56Sopenharmony_ci#ifndef OS_CHOWN_METHODDEF
88407db96d56Sopenharmony_ci    #define OS_CHOWN_METHODDEF
88417db96d56Sopenharmony_ci#endif /* !defined(OS_CHOWN_METHODDEF) */
88427db96d56Sopenharmony_ci
88437db96d56Sopenharmony_ci#ifndef OS_FCHOWN_METHODDEF
88447db96d56Sopenharmony_ci    #define OS_FCHOWN_METHODDEF
88457db96d56Sopenharmony_ci#endif /* !defined(OS_FCHOWN_METHODDEF) */
88467db96d56Sopenharmony_ci
88477db96d56Sopenharmony_ci#ifndef OS_LCHOWN_METHODDEF
88487db96d56Sopenharmony_ci    #define OS_LCHOWN_METHODDEF
88497db96d56Sopenharmony_ci#endif /* !defined(OS_LCHOWN_METHODDEF) */
88507db96d56Sopenharmony_ci
88517db96d56Sopenharmony_ci#ifndef OS_LINK_METHODDEF
88527db96d56Sopenharmony_ci    #define OS_LINK_METHODDEF
88537db96d56Sopenharmony_ci#endif /* !defined(OS_LINK_METHODDEF) */
88547db96d56Sopenharmony_ci
88557db96d56Sopenharmony_ci#ifndef OS__GETFULLPATHNAME_METHODDEF
88567db96d56Sopenharmony_ci    #define OS__GETFULLPATHNAME_METHODDEF
88577db96d56Sopenharmony_ci#endif /* !defined(OS__GETFULLPATHNAME_METHODDEF) */
88587db96d56Sopenharmony_ci
88597db96d56Sopenharmony_ci#ifndef OS__GETFINALPATHNAME_METHODDEF
88607db96d56Sopenharmony_ci    #define OS__GETFINALPATHNAME_METHODDEF
88617db96d56Sopenharmony_ci#endif /* !defined(OS__GETFINALPATHNAME_METHODDEF) */
88627db96d56Sopenharmony_ci
88637db96d56Sopenharmony_ci#ifndef OS__GETVOLUMEPATHNAME_METHODDEF
88647db96d56Sopenharmony_ci    #define OS__GETVOLUMEPATHNAME_METHODDEF
88657db96d56Sopenharmony_ci#endif /* !defined(OS__GETVOLUMEPATHNAME_METHODDEF) */
88667db96d56Sopenharmony_ci
88677db96d56Sopenharmony_ci#ifndef OS__PATH_SPLITROOT_METHODDEF
88687db96d56Sopenharmony_ci    #define OS__PATH_SPLITROOT_METHODDEF
88697db96d56Sopenharmony_ci#endif /* !defined(OS__PATH_SPLITROOT_METHODDEF) */
88707db96d56Sopenharmony_ci
88717db96d56Sopenharmony_ci#ifndef OS_NICE_METHODDEF
88727db96d56Sopenharmony_ci    #define OS_NICE_METHODDEF
88737db96d56Sopenharmony_ci#endif /* !defined(OS_NICE_METHODDEF) */
88747db96d56Sopenharmony_ci
88757db96d56Sopenharmony_ci#ifndef OS_GETPRIORITY_METHODDEF
88767db96d56Sopenharmony_ci    #define OS_GETPRIORITY_METHODDEF
88777db96d56Sopenharmony_ci#endif /* !defined(OS_GETPRIORITY_METHODDEF) */
88787db96d56Sopenharmony_ci
88797db96d56Sopenharmony_ci#ifndef OS_SETPRIORITY_METHODDEF
88807db96d56Sopenharmony_ci    #define OS_SETPRIORITY_METHODDEF
88817db96d56Sopenharmony_ci#endif /* !defined(OS_SETPRIORITY_METHODDEF) */
88827db96d56Sopenharmony_ci
88837db96d56Sopenharmony_ci#ifndef OS_SYSTEM_METHODDEF
88847db96d56Sopenharmony_ci    #define OS_SYSTEM_METHODDEF
88857db96d56Sopenharmony_ci#endif /* !defined(OS_SYSTEM_METHODDEF) */
88867db96d56Sopenharmony_ci
88877db96d56Sopenharmony_ci#ifndef OS_UMASK_METHODDEF
88887db96d56Sopenharmony_ci    #define OS_UMASK_METHODDEF
88897db96d56Sopenharmony_ci#endif /* !defined(OS_UMASK_METHODDEF) */
88907db96d56Sopenharmony_ci
88917db96d56Sopenharmony_ci#ifndef OS_UNAME_METHODDEF
88927db96d56Sopenharmony_ci    #define OS_UNAME_METHODDEF
88937db96d56Sopenharmony_ci#endif /* !defined(OS_UNAME_METHODDEF) */
88947db96d56Sopenharmony_ci
88957db96d56Sopenharmony_ci#ifndef OS_EXECV_METHODDEF
88967db96d56Sopenharmony_ci    #define OS_EXECV_METHODDEF
88977db96d56Sopenharmony_ci#endif /* !defined(OS_EXECV_METHODDEF) */
88987db96d56Sopenharmony_ci
88997db96d56Sopenharmony_ci#ifndef OS_EXECVE_METHODDEF
89007db96d56Sopenharmony_ci    #define OS_EXECVE_METHODDEF
89017db96d56Sopenharmony_ci#endif /* !defined(OS_EXECVE_METHODDEF) */
89027db96d56Sopenharmony_ci
89037db96d56Sopenharmony_ci#ifndef OS_POSIX_SPAWN_METHODDEF
89047db96d56Sopenharmony_ci    #define OS_POSIX_SPAWN_METHODDEF
89057db96d56Sopenharmony_ci#endif /* !defined(OS_POSIX_SPAWN_METHODDEF) */
89067db96d56Sopenharmony_ci
89077db96d56Sopenharmony_ci#ifndef OS_POSIX_SPAWNP_METHODDEF
89087db96d56Sopenharmony_ci    #define OS_POSIX_SPAWNP_METHODDEF
89097db96d56Sopenharmony_ci#endif /* !defined(OS_POSIX_SPAWNP_METHODDEF) */
89107db96d56Sopenharmony_ci
89117db96d56Sopenharmony_ci#ifndef OS_SPAWNV_METHODDEF
89127db96d56Sopenharmony_ci    #define OS_SPAWNV_METHODDEF
89137db96d56Sopenharmony_ci#endif /* !defined(OS_SPAWNV_METHODDEF) */
89147db96d56Sopenharmony_ci
89157db96d56Sopenharmony_ci#ifndef OS_SPAWNVE_METHODDEF
89167db96d56Sopenharmony_ci    #define OS_SPAWNVE_METHODDEF
89177db96d56Sopenharmony_ci#endif /* !defined(OS_SPAWNVE_METHODDEF) */
89187db96d56Sopenharmony_ci
89197db96d56Sopenharmony_ci#ifndef OS_REGISTER_AT_FORK_METHODDEF
89207db96d56Sopenharmony_ci    #define OS_REGISTER_AT_FORK_METHODDEF
89217db96d56Sopenharmony_ci#endif /* !defined(OS_REGISTER_AT_FORK_METHODDEF) */
89227db96d56Sopenharmony_ci
89237db96d56Sopenharmony_ci#ifndef OS_FORK1_METHODDEF
89247db96d56Sopenharmony_ci    #define OS_FORK1_METHODDEF
89257db96d56Sopenharmony_ci#endif /* !defined(OS_FORK1_METHODDEF) */
89267db96d56Sopenharmony_ci
89277db96d56Sopenharmony_ci#ifndef OS_FORK_METHODDEF
89287db96d56Sopenharmony_ci    #define OS_FORK_METHODDEF
89297db96d56Sopenharmony_ci#endif /* !defined(OS_FORK_METHODDEF) */
89307db96d56Sopenharmony_ci
89317db96d56Sopenharmony_ci#ifndef OS_SCHED_GET_PRIORITY_MAX_METHODDEF
89327db96d56Sopenharmony_ci    #define OS_SCHED_GET_PRIORITY_MAX_METHODDEF
89337db96d56Sopenharmony_ci#endif /* !defined(OS_SCHED_GET_PRIORITY_MAX_METHODDEF) */
89347db96d56Sopenharmony_ci
89357db96d56Sopenharmony_ci#ifndef OS_SCHED_GET_PRIORITY_MIN_METHODDEF
89367db96d56Sopenharmony_ci    #define OS_SCHED_GET_PRIORITY_MIN_METHODDEF
89377db96d56Sopenharmony_ci#endif /* !defined(OS_SCHED_GET_PRIORITY_MIN_METHODDEF) */
89387db96d56Sopenharmony_ci
89397db96d56Sopenharmony_ci#ifndef OS_SCHED_GETSCHEDULER_METHODDEF
89407db96d56Sopenharmony_ci    #define OS_SCHED_GETSCHEDULER_METHODDEF
89417db96d56Sopenharmony_ci#endif /* !defined(OS_SCHED_GETSCHEDULER_METHODDEF) */
89427db96d56Sopenharmony_ci
89437db96d56Sopenharmony_ci#ifndef OS_SCHED_SETSCHEDULER_METHODDEF
89447db96d56Sopenharmony_ci    #define OS_SCHED_SETSCHEDULER_METHODDEF
89457db96d56Sopenharmony_ci#endif /* !defined(OS_SCHED_SETSCHEDULER_METHODDEF) */
89467db96d56Sopenharmony_ci
89477db96d56Sopenharmony_ci#ifndef OS_SCHED_GETPARAM_METHODDEF
89487db96d56Sopenharmony_ci    #define OS_SCHED_GETPARAM_METHODDEF
89497db96d56Sopenharmony_ci#endif /* !defined(OS_SCHED_GETPARAM_METHODDEF) */
89507db96d56Sopenharmony_ci
89517db96d56Sopenharmony_ci#ifndef OS_SCHED_SETPARAM_METHODDEF
89527db96d56Sopenharmony_ci    #define OS_SCHED_SETPARAM_METHODDEF
89537db96d56Sopenharmony_ci#endif /* !defined(OS_SCHED_SETPARAM_METHODDEF) */
89547db96d56Sopenharmony_ci
89557db96d56Sopenharmony_ci#ifndef OS_SCHED_RR_GET_INTERVAL_METHODDEF
89567db96d56Sopenharmony_ci    #define OS_SCHED_RR_GET_INTERVAL_METHODDEF
89577db96d56Sopenharmony_ci#endif /* !defined(OS_SCHED_RR_GET_INTERVAL_METHODDEF) */
89587db96d56Sopenharmony_ci
89597db96d56Sopenharmony_ci#ifndef OS_SCHED_YIELD_METHODDEF
89607db96d56Sopenharmony_ci    #define OS_SCHED_YIELD_METHODDEF
89617db96d56Sopenharmony_ci#endif /* !defined(OS_SCHED_YIELD_METHODDEF) */
89627db96d56Sopenharmony_ci
89637db96d56Sopenharmony_ci#ifndef OS_SCHED_SETAFFINITY_METHODDEF
89647db96d56Sopenharmony_ci    #define OS_SCHED_SETAFFINITY_METHODDEF
89657db96d56Sopenharmony_ci#endif /* !defined(OS_SCHED_SETAFFINITY_METHODDEF) */
89667db96d56Sopenharmony_ci
89677db96d56Sopenharmony_ci#ifndef OS_SCHED_GETAFFINITY_METHODDEF
89687db96d56Sopenharmony_ci    #define OS_SCHED_GETAFFINITY_METHODDEF
89697db96d56Sopenharmony_ci#endif /* !defined(OS_SCHED_GETAFFINITY_METHODDEF) */
89707db96d56Sopenharmony_ci
89717db96d56Sopenharmony_ci#ifndef OS_OPENPTY_METHODDEF
89727db96d56Sopenharmony_ci    #define OS_OPENPTY_METHODDEF
89737db96d56Sopenharmony_ci#endif /* !defined(OS_OPENPTY_METHODDEF) */
89747db96d56Sopenharmony_ci
89757db96d56Sopenharmony_ci#ifndef OS_LOGIN_TTY_METHODDEF
89767db96d56Sopenharmony_ci    #define OS_LOGIN_TTY_METHODDEF
89777db96d56Sopenharmony_ci#endif /* !defined(OS_LOGIN_TTY_METHODDEF) */
89787db96d56Sopenharmony_ci
89797db96d56Sopenharmony_ci#ifndef OS_FORKPTY_METHODDEF
89807db96d56Sopenharmony_ci    #define OS_FORKPTY_METHODDEF
89817db96d56Sopenharmony_ci#endif /* !defined(OS_FORKPTY_METHODDEF) */
89827db96d56Sopenharmony_ci
89837db96d56Sopenharmony_ci#ifndef OS_GETEGID_METHODDEF
89847db96d56Sopenharmony_ci    #define OS_GETEGID_METHODDEF
89857db96d56Sopenharmony_ci#endif /* !defined(OS_GETEGID_METHODDEF) */
89867db96d56Sopenharmony_ci
89877db96d56Sopenharmony_ci#ifndef OS_GETEUID_METHODDEF
89887db96d56Sopenharmony_ci    #define OS_GETEUID_METHODDEF
89897db96d56Sopenharmony_ci#endif /* !defined(OS_GETEUID_METHODDEF) */
89907db96d56Sopenharmony_ci
89917db96d56Sopenharmony_ci#ifndef OS_GETGID_METHODDEF
89927db96d56Sopenharmony_ci    #define OS_GETGID_METHODDEF
89937db96d56Sopenharmony_ci#endif /* !defined(OS_GETGID_METHODDEF) */
89947db96d56Sopenharmony_ci
89957db96d56Sopenharmony_ci#ifndef OS_GETPID_METHODDEF
89967db96d56Sopenharmony_ci    #define OS_GETPID_METHODDEF
89977db96d56Sopenharmony_ci#endif /* !defined(OS_GETPID_METHODDEF) */
89987db96d56Sopenharmony_ci
89997db96d56Sopenharmony_ci#ifndef OS_GETGROUPLIST_METHODDEF
90007db96d56Sopenharmony_ci    #define OS_GETGROUPLIST_METHODDEF
90017db96d56Sopenharmony_ci#endif /* !defined(OS_GETGROUPLIST_METHODDEF) */
90027db96d56Sopenharmony_ci
90037db96d56Sopenharmony_ci#ifndef OS_GETGROUPS_METHODDEF
90047db96d56Sopenharmony_ci    #define OS_GETGROUPS_METHODDEF
90057db96d56Sopenharmony_ci#endif /* !defined(OS_GETGROUPS_METHODDEF) */
90067db96d56Sopenharmony_ci
90077db96d56Sopenharmony_ci#ifndef OS_INITGROUPS_METHODDEF
90087db96d56Sopenharmony_ci    #define OS_INITGROUPS_METHODDEF
90097db96d56Sopenharmony_ci#endif /* !defined(OS_INITGROUPS_METHODDEF) */
90107db96d56Sopenharmony_ci
90117db96d56Sopenharmony_ci#ifndef OS_GETPGID_METHODDEF
90127db96d56Sopenharmony_ci    #define OS_GETPGID_METHODDEF
90137db96d56Sopenharmony_ci#endif /* !defined(OS_GETPGID_METHODDEF) */
90147db96d56Sopenharmony_ci
90157db96d56Sopenharmony_ci#ifndef OS_GETPGRP_METHODDEF
90167db96d56Sopenharmony_ci    #define OS_GETPGRP_METHODDEF
90177db96d56Sopenharmony_ci#endif /* !defined(OS_GETPGRP_METHODDEF) */
90187db96d56Sopenharmony_ci
90197db96d56Sopenharmony_ci#ifndef OS_SETPGRP_METHODDEF
90207db96d56Sopenharmony_ci    #define OS_SETPGRP_METHODDEF
90217db96d56Sopenharmony_ci#endif /* !defined(OS_SETPGRP_METHODDEF) */
90227db96d56Sopenharmony_ci
90237db96d56Sopenharmony_ci#ifndef OS_GETPPID_METHODDEF
90247db96d56Sopenharmony_ci    #define OS_GETPPID_METHODDEF
90257db96d56Sopenharmony_ci#endif /* !defined(OS_GETPPID_METHODDEF) */
90267db96d56Sopenharmony_ci
90277db96d56Sopenharmony_ci#ifndef OS_GETLOGIN_METHODDEF
90287db96d56Sopenharmony_ci    #define OS_GETLOGIN_METHODDEF
90297db96d56Sopenharmony_ci#endif /* !defined(OS_GETLOGIN_METHODDEF) */
90307db96d56Sopenharmony_ci
90317db96d56Sopenharmony_ci#ifndef OS_GETUID_METHODDEF
90327db96d56Sopenharmony_ci    #define OS_GETUID_METHODDEF
90337db96d56Sopenharmony_ci#endif /* !defined(OS_GETUID_METHODDEF) */
90347db96d56Sopenharmony_ci
90357db96d56Sopenharmony_ci#ifndef OS_KILL_METHODDEF
90367db96d56Sopenharmony_ci    #define OS_KILL_METHODDEF
90377db96d56Sopenharmony_ci#endif /* !defined(OS_KILL_METHODDEF) */
90387db96d56Sopenharmony_ci
90397db96d56Sopenharmony_ci#ifndef OS_KILLPG_METHODDEF
90407db96d56Sopenharmony_ci    #define OS_KILLPG_METHODDEF
90417db96d56Sopenharmony_ci#endif /* !defined(OS_KILLPG_METHODDEF) */
90427db96d56Sopenharmony_ci
90437db96d56Sopenharmony_ci#ifndef OS_PLOCK_METHODDEF
90447db96d56Sopenharmony_ci    #define OS_PLOCK_METHODDEF
90457db96d56Sopenharmony_ci#endif /* !defined(OS_PLOCK_METHODDEF) */
90467db96d56Sopenharmony_ci
90477db96d56Sopenharmony_ci#ifndef OS_SETUID_METHODDEF
90487db96d56Sopenharmony_ci    #define OS_SETUID_METHODDEF
90497db96d56Sopenharmony_ci#endif /* !defined(OS_SETUID_METHODDEF) */
90507db96d56Sopenharmony_ci
90517db96d56Sopenharmony_ci#ifndef OS_SETEUID_METHODDEF
90527db96d56Sopenharmony_ci    #define OS_SETEUID_METHODDEF
90537db96d56Sopenharmony_ci#endif /* !defined(OS_SETEUID_METHODDEF) */
90547db96d56Sopenharmony_ci
90557db96d56Sopenharmony_ci#ifndef OS_SETEGID_METHODDEF
90567db96d56Sopenharmony_ci    #define OS_SETEGID_METHODDEF
90577db96d56Sopenharmony_ci#endif /* !defined(OS_SETEGID_METHODDEF) */
90587db96d56Sopenharmony_ci
90597db96d56Sopenharmony_ci#ifndef OS_SETREUID_METHODDEF
90607db96d56Sopenharmony_ci    #define OS_SETREUID_METHODDEF
90617db96d56Sopenharmony_ci#endif /* !defined(OS_SETREUID_METHODDEF) */
90627db96d56Sopenharmony_ci
90637db96d56Sopenharmony_ci#ifndef OS_SETREGID_METHODDEF
90647db96d56Sopenharmony_ci    #define OS_SETREGID_METHODDEF
90657db96d56Sopenharmony_ci#endif /* !defined(OS_SETREGID_METHODDEF) */
90667db96d56Sopenharmony_ci
90677db96d56Sopenharmony_ci#ifndef OS_SETGID_METHODDEF
90687db96d56Sopenharmony_ci    #define OS_SETGID_METHODDEF
90697db96d56Sopenharmony_ci#endif /* !defined(OS_SETGID_METHODDEF) */
90707db96d56Sopenharmony_ci
90717db96d56Sopenharmony_ci#ifndef OS_SETGROUPS_METHODDEF
90727db96d56Sopenharmony_ci    #define OS_SETGROUPS_METHODDEF
90737db96d56Sopenharmony_ci#endif /* !defined(OS_SETGROUPS_METHODDEF) */
90747db96d56Sopenharmony_ci
90757db96d56Sopenharmony_ci#ifndef OS_WAIT3_METHODDEF
90767db96d56Sopenharmony_ci    #define OS_WAIT3_METHODDEF
90777db96d56Sopenharmony_ci#endif /* !defined(OS_WAIT3_METHODDEF) */
90787db96d56Sopenharmony_ci
90797db96d56Sopenharmony_ci#ifndef OS_WAIT4_METHODDEF
90807db96d56Sopenharmony_ci    #define OS_WAIT4_METHODDEF
90817db96d56Sopenharmony_ci#endif /* !defined(OS_WAIT4_METHODDEF) */
90827db96d56Sopenharmony_ci
90837db96d56Sopenharmony_ci#ifndef OS_WAITID_METHODDEF
90847db96d56Sopenharmony_ci    #define OS_WAITID_METHODDEF
90857db96d56Sopenharmony_ci#endif /* !defined(OS_WAITID_METHODDEF) */
90867db96d56Sopenharmony_ci
90877db96d56Sopenharmony_ci#ifndef OS_WAITPID_METHODDEF
90887db96d56Sopenharmony_ci    #define OS_WAITPID_METHODDEF
90897db96d56Sopenharmony_ci#endif /* !defined(OS_WAITPID_METHODDEF) */
90907db96d56Sopenharmony_ci
90917db96d56Sopenharmony_ci#ifndef OS_WAIT_METHODDEF
90927db96d56Sopenharmony_ci    #define OS_WAIT_METHODDEF
90937db96d56Sopenharmony_ci#endif /* !defined(OS_WAIT_METHODDEF) */
90947db96d56Sopenharmony_ci
90957db96d56Sopenharmony_ci#ifndef OS_PIDFD_OPEN_METHODDEF
90967db96d56Sopenharmony_ci    #define OS_PIDFD_OPEN_METHODDEF
90977db96d56Sopenharmony_ci#endif /* !defined(OS_PIDFD_OPEN_METHODDEF) */
90987db96d56Sopenharmony_ci
90997db96d56Sopenharmony_ci#ifndef OS_READLINK_METHODDEF
91007db96d56Sopenharmony_ci    #define OS_READLINK_METHODDEF
91017db96d56Sopenharmony_ci#endif /* !defined(OS_READLINK_METHODDEF) */
91027db96d56Sopenharmony_ci
91037db96d56Sopenharmony_ci#ifndef OS_SYMLINK_METHODDEF
91047db96d56Sopenharmony_ci    #define OS_SYMLINK_METHODDEF
91057db96d56Sopenharmony_ci#endif /* !defined(OS_SYMLINK_METHODDEF) */
91067db96d56Sopenharmony_ci
91077db96d56Sopenharmony_ci#ifndef OS_TIMES_METHODDEF
91087db96d56Sopenharmony_ci    #define OS_TIMES_METHODDEF
91097db96d56Sopenharmony_ci#endif /* !defined(OS_TIMES_METHODDEF) */
91107db96d56Sopenharmony_ci
91117db96d56Sopenharmony_ci#ifndef OS_GETSID_METHODDEF
91127db96d56Sopenharmony_ci    #define OS_GETSID_METHODDEF
91137db96d56Sopenharmony_ci#endif /* !defined(OS_GETSID_METHODDEF) */
91147db96d56Sopenharmony_ci
91157db96d56Sopenharmony_ci#ifndef OS_SETSID_METHODDEF
91167db96d56Sopenharmony_ci    #define OS_SETSID_METHODDEF
91177db96d56Sopenharmony_ci#endif /* !defined(OS_SETSID_METHODDEF) */
91187db96d56Sopenharmony_ci
91197db96d56Sopenharmony_ci#ifndef OS_SETPGID_METHODDEF
91207db96d56Sopenharmony_ci    #define OS_SETPGID_METHODDEF
91217db96d56Sopenharmony_ci#endif /* !defined(OS_SETPGID_METHODDEF) */
91227db96d56Sopenharmony_ci
91237db96d56Sopenharmony_ci#ifndef OS_TCGETPGRP_METHODDEF
91247db96d56Sopenharmony_ci    #define OS_TCGETPGRP_METHODDEF
91257db96d56Sopenharmony_ci#endif /* !defined(OS_TCGETPGRP_METHODDEF) */
91267db96d56Sopenharmony_ci
91277db96d56Sopenharmony_ci#ifndef OS_TCSETPGRP_METHODDEF
91287db96d56Sopenharmony_ci    #define OS_TCSETPGRP_METHODDEF
91297db96d56Sopenharmony_ci#endif /* !defined(OS_TCSETPGRP_METHODDEF) */
91307db96d56Sopenharmony_ci
91317db96d56Sopenharmony_ci#ifndef OS_DUP2_METHODDEF
91327db96d56Sopenharmony_ci    #define OS_DUP2_METHODDEF
91337db96d56Sopenharmony_ci#endif /* !defined(OS_DUP2_METHODDEF) */
91347db96d56Sopenharmony_ci
91357db96d56Sopenharmony_ci#ifndef OS_LOCKF_METHODDEF
91367db96d56Sopenharmony_ci    #define OS_LOCKF_METHODDEF
91377db96d56Sopenharmony_ci#endif /* !defined(OS_LOCKF_METHODDEF) */
91387db96d56Sopenharmony_ci
91397db96d56Sopenharmony_ci#ifndef OS_READV_METHODDEF
91407db96d56Sopenharmony_ci    #define OS_READV_METHODDEF
91417db96d56Sopenharmony_ci#endif /* !defined(OS_READV_METHODDEF) */
91427db96d56Sopenharmony_ci
91437db96d56Sopenharmony_ci#ifndef OS_PREAD_METHODDEF
91447db96d56Sopenharmony_ci    #define OS_PREAD_METHODDEF
91457db96d56Sopenharmony_ci#endif /* !defined(OS_PREAD_METHODDEF) */
91467db96d56Sopenharmony_ci
91477db96d56Sopenharmony_ci#ifndef OS_PREADV_METHODDEF
91487db96d56Sopenharmony_ci    #define OS_PREADV_METHODDEF
91497db96d56Sopenharmony_ci#endif /* !defined(OS_PREADV_METHODDEF) */
91507db96d56Sopenharmony_ci
91517db96d56Sopenharmony_ci#ifndef OS_SENDFILE_METHODDEF
91527db96d56Sopenharmony_ci    #define OS_SENDFILE_METHODDEF
91537db96d56Sopenharmony_ci#endif /* !defined(OS_SENDFILE_METHODDEF) */
91547db96d56Sopenharmony_ci
91557db96d56Sopenharmony_ci#ifndef OS__FCOPYFILE_METHODDEF
91567db96d56Sopenharmony_ci    #define OS__FCOPYFILE_METHODDEF
91577db96d56Sopenharmony_ci#endif /* !defined(OS__FCOPYFILE_METHODDEF) */
91587db96d56Sopenharmony_ci
91597db96d56Sopenharmony_ci#ifndef OS_PIPE_METHODDEF
91607db96d56Sopenharmony_ci    #define OS_PIPE_METHODDEF
91617db96d56Sopenharmony_ci#endif /* !defined(OS_PIPE_METHODDEF) */
91627db96d56Sopenharmony_ci
91637db96d56Sopenharmony_ci#ifndef OS_PIPE2_METHODDEF
91647db96d56Sopenharmony_ci    #define OS_PIPE2_METHODDEF
91657db96d56Sopenharmony_ci#endif /* !defined(OS_PIPE2_METHODDEF) */
91667db96d56Sopenharmony_ci
91677db96d56Sopenharmony_ci#ifndef OS_WRITEV_METHODDEF
91687db96d56Sopenharmony_ci    #define OS_WRITEV_METHODDEF
91697db96d56Sopenharmony_ci#endif /* !defined(OS_WRITEV_METHODDEF) */
91707db96d56Sopenharmony_ci
91717db96d56Sopenharmony_ci#ifndef OS_PWRITE_METHODDEF
91727db96d56Sopenharmony_ci    #define OS_PWRITE_METHODDEF
91737db96d56Sopenharmony_ci#endif /* !defined(OS_PWRITE_METHODDEF) */
91747db96d56Sopenharmony_ci
91757db96d56Sopenharmony_ci#ifndef OS_PWRITEV_METHODDEF
91767db96d56Sopenharmony_ci    #define OS_PWRITEV_METHODDEF
91777db96d56Sopenharmony_ci#endif /* !defined(OS_PWRITEV_METHODDEF) */
91787db96d56Sopenharmony_ci
91797db96d56Sopenharmony_ci#ifndef OS_COPY_FILE_RANGE_METHODDEF
91807db96d56Sopenharmony_ci    #define OS_COPY_FILE_RANGE_METHODDEF
91817db96d56Sopenharmony_ci#endif /* !defined(OS_COPY_FILE_RANGE_METHODDEF) */
91827db96d56Sopenharmony_ci
91837db96d56Sopenharmony_ci#ifndef OS_SPLICE_METHODDEF
91847db96d56Sopenharmony_ci    #define OS_SPLICE_METHODDEF
91857db96d56Sopenharmony_ci#endif /* !defined(OS_SPLICE_METHODDEF) */
91867db96d56Sopenharmony_ci
91877db96d56Sopenharmony_ci#ifndef OS_MKFIFO_METHODDEF
91887db96d56Sopenharmony_ci    #define OS_MKFIFO_METHODDEF
91897db96d56Sopenharmony_ci#endif /* !defined(OS_MKFIFO_METHODDEF) */
91907db96d56Sopenharmony_ci
91917db96d56Sopenharmony_ci#ifndef OS_MKNOD_METHODDEF
91927db96d56Sopenharmony_ci    #define OS_MKNOD_METHODDEF
91937db96d56Sopenharmony_ci#endif /* !defined(OS_MKNOD_METHODDEF) */
91947db96d56Sopenharmony_ci
91957db96d56Sopenharmony_ci#ifndef OS_MAJOR_METHODDEF
91967db96d56Sopenharmony_ci    #define OS_MAJOR_METHODDEF
91977db96d56Sopenharmony_ci#endif /* !defined(OS_MAJOR_METHODDEF) */
91987db96d56Sopenharmony_ci
91997db96d56Sopenharmony_ci#ifndef OS_MINOR_METHODDEF
92007db96d56Sopenharmony_ci    #define OS_MINOR_METHODDEF
92017db96d56Sopenharmony_ci#endif /* !defined(OS_MINOR_METHODDEF) */
92027db96d56Sopenharmony_ci
92037db96d56Sopenharmony_ci#ifndef OS_MAKEDEV_METHODDEF
92047db96d56Sopenharmony_ci    #define OS_MAKEDEV_METHODDEF
92057db96d56Sopenharmony_ci#endif /* !defined(OS_MAKEDEV_METHODDEF) */
92067db96d56Sopenharmony_ci
92077db96d56Sopenharmony_ci#ifndef OS_FTRUNCATE_METHODDEF
92087db96d56Sopenharmony_ci    #define OS_FTRUNCATE_METHODDEF
92097db96d56Sopenharmony_ci#endif /* !defined(OS_FTRUNCATE_METHODDEF) */
92107db96d56Sopenharmony_ci
92117db96d56Sopenharmony_ci#ifndef OS_TRUNCATE_METHODDEF
92127db96d56Sopenharmony_ci    #define OS_TRUNCATE_METHODDEF
92137db96d56Sopenharmony_ci#endif /* !defined(OS_TRUNCATE_METHODDEF) */
92147db96d56Sopenharmony_ci
92157db96d56Sopenharmony_ci#ifndef OS_POSIX_FALLOCATE_METHODDEF
92167db96d56Sopenharmony_ci    #define OS_POSIX_FALLOCATE_METHODDEF
92177db96d56Sopenharmony_ci#endif /* !defined(OS_POSIX_FALLOCATE_METHODDEF) */
92187db96d56Sopenharmony_ci
92197db96d56Sopenharmony_ci#ifndef OS_POSIX_FADVISE_METHODDEF
92207db96d56Sopenharmony_ci    #define OS_POSIX_FADVISE_METHODDEF
92217db96d56Sopenharmony_ci#endif /* !defined(OS_POSIX_FADVISE_METHODDEF) */
92227db96d56Sopenharmony_ci
92237db96d56Sopenharmony_ci#ifndef OS_PUTENV_METHODDEF
92247db96d56Sopenharmony_ci    #define OS_PUTENV_METHODDEF
92257db96d56Sopenharmony_ci#endif /* !defined(OS_PUTENV_METHODDEF) */
92267db96d56Sopenharmony_ci
92277db96d56Sopenharmony_ci#ifndef OS_UNSETENV_METHODDEF
92287db96d56Sopenharmony_ci    #define OS_UNSETENV_METHODDEF
92297db96d56Sopenharmony_ci#endif /* !defined(OS_UNSETENV_METHODDEF) */
92307db96d56Sopenharmony_ci
92317db96d56Sopenharmony_ci#ifndef OS_WCOREDUMP_METHODDEF
92327db96d56Sopenharmony_ci    #define OS_WCOREDUMP_METHODDEF
92337db96d56Sopenharmony_ci#endif /* !defined(OS_WCOREDUMP_METHODDEF) */
92347db96d56Sopenharmony_ci
92357db96d56Sopenharmony_ci#ifndef OS_WIFCONTINUED_METHODDEF
92367db96d56Sopenharmony_ci    #define OS_WIFCONTINUED_METHODDEF
92377db96d56Sopenharmony_ci#endif /* !defined(OS_WIFCONTINUED_METHODDEF) */
92387db96d56Sopenharmony_ci
92397db96d56Sopenharmony_ci#ifndef OS_WIFSTOPPED_METHODDEF
92407db96d56Sopenharmony_ci    #define OS_WIFSTOPPED_METHODDEF
92417db96d56Sopenharmony_ci#endif /* !defined(OS_WIFSTOPPED_METHODDEF) */
92427db96d56Sopenharmony_ci
92437db96d56Sopenharmony_ci#ifndef OS_WIFSIGNALED_METHODDEF
92447db96d56Sopenharmony_ci    #define OS_WIFSIGNALED_METHODDEF
92457db96d56Sopenharmony_ci#endif /* !defined(OS_WIFSIGNALED_METHODDEF) */
92467db96d56Sopenharmony_ci
92477db96d56Sopenharmony_ci#ifndef OS_WIFEXITED_METHODDEF
92487db96d56Sopenharmony_ci    #define OS_WIFEXITED_METHODDEF
92497db96d56Sopenharmony_ci#endif /* !defined(OS_WIFEXITED_METHODDEF) */
92507db96d56Sopenharmony_ci
92517db96d56Sopenharmony_ci#ifndef OS_WEXITSTATUS_METHODDEF
92527db96d56Sopenharmony_ci    #define OS_WEXITSTATUS_METHODDEF
92537db96d56Sopenharmony_ci#endif /* !defined(OS_WEXITSTATUS_METHODDEF) */
92547db96d56Sopenharmony_ci
92557db96d56Sopenharmony_ci#ifndef OS_WTERMSIG_METHODDEF
92567db96d56Sopenharmony_ci    #define OS_WTERMSIG_METHODDEF
92577db96d56Sopenharmony_ci#endif /* !defined(OS_WTERMSIG_METHODDEF) */
92587db96d56Sopenharmony_ci
92597db96d56Sopenharmony_ci#ifndef OS_WSTOPSIG_METHODDEF
92607db96d56Sopenharmony_ci    #define OS_WSTOPSIG_METHODDEF
92617db96d56Sopenharmony_ci#endif /* !defined(OS_WSTOPSIG_METHODDEF) */
92627db96d56Sopenharmony_ci
92637db96d56Sopenharmony_ci#ifndef OS_FSTATVFS_METHODDEF
92647db96d56Sopenharmony_ci    #define OS_FSTATVFS_METHODDEF
92657db96d56Sopenharmony_ci#endif /* !defined(OS_FSTATVFS_METHODDEF) */
92667db96d56Sopenharmony_ci
92677db96d56Sopenharmony_ci#ifndef OS_STATVFS_METHODDEF
92687db96d56Sopenharmony_ci    #define OS_STATVFS_METHODDEF
92697db96d56Sopenharmony_ci#endif /* !defined(OS_STATVFS_METHODDEF) */
92707db96d56Sopenharmony_ci
92717db96d56Sopenharmony_ci#ifndef OS__GETDISKUSAGE_METHODDEF
92727db96d56Sopenharmony_ci    #define OS__GETDISKUSAGE_METHODDEF
92737db96d56Sopenharmony_ci#endif /* !defined(OS__GETDISKUSAGE_METHODDEF) */
92747db96d56Sopenharmony_ci
92757db96d56Sopenharmony_ci#ifndef OS_FPATHCONF_METHODDEF
92767db96d56Sopenharmony_ci    #define OS_FPATHCONF_METHODDEF
92777db96d56Sopenharmony_ci#endif /* !defined(OS_FPATHCONF_METHODDEF) */
92787db96d56Sopenharmony_ci
92797db96d56Sopenharmony_ci#ifndef OS_PATHCONF_METHODDEF
92807db96d56Sopenharmony_ci    #define OS_PATHCONF_METHODDEF
92817db96d56Sopenharmony_ci#endif /* !defined(OS_PATHCONF_METHODDEF) */
92827db96d56Sopenharmony_ci
92837db96d56Sopenharmony_ci#ifndef OS_CONFSTR_METHODDEF
92847db96d56Sopenharmony_ci    #define OS_CONFSTR_METHODDEF
92857db96d56Sopenharmony_ci#endif /* !defined(OS_CONFSTR_METHODDEF) */
92867db96d56Sopenharmony_ci
92877db96d56Sopenharmony_ci#ifndef OS_SYSCONF_METHODDEF
92887db96d56Sopenharmony_ci    #define OS_SYSCONF_METHODDEF
92897db96d56Sopenharmony_ci#endif /* !defined(OS_SYSCONF_METHODDEF) */
92907db96d56Sopenharmony_ci
92917db96d56Sopenharmony_ci#ifndef OS_STARTFILE_METHODDEF
92927db96d56Sopenharmony_ci    #define OS_STARTFILE_METHODDEF
92937db96d56Sopenharmony_ci#endif /* !defined(OS_STARTFILE_METHODDEF) */
92947db96d56Sopenharmony_ci
92957db96d56Sopenharmony_ci#ifndef OS_GETLOADAVG_METHODDEF
92967db96d56Sopenharmony_ci    #define OS_GETLOADAVG_METHODDEF
92977db96d56Sopenharmony_ci#endif /* !defined(OS_GETLOADAVG_METHODDEF) */
92987db96d56Sopenharmony_ci
92997db96d56Sopenharmony_ci#ifndef OS_SETRESUID_METHODDEF
93007db96d56Sopenharmony_ci    #define OS_SETRESUID_METHODDEF
93017db96d56Sopenharmony_ci#endif /* !defined(OS_SETRESUID_METHODDEF) */
93027db96d56Sopenharmony_ci
93037db96d56Sopenharmony_ci#ifndef OS_SETRESGID_METHODDEF
93047db96d56Sopenharmony_ci    #define OS_SETRESGID_METHODDEF
93057db96d56Sopenharmony_ci#endif /* !defined(OS_SETRESGID_METHODDEF) */
93067db96d56Sopenharmony_ci
93077db96d56Sopenharmony_ci#ifndef OS_GETRESUID_METHODDEF
93087db96d56Sopenharmony_ci    #define OS_GETRESUID_METHODDEF
93097db96d56Sopenharmony_ci#endif /* !defined(OS_GETRESUID_METHODDEF) */
93107db96d56Sopenharmony_ci
93117db96d56Sopenharmony_ci#ifndef OS_GETRESGID_METHODDEF
93127db96d56Sopenharmony_ci    #define OS_GETRESGID_METHODDEF
93137db96d56Sopenharmony_ci#endif /* !defined(OS_GETRESGID_METHODDEF) */
93147db96d56Sopenharmony_ci
93157db96d56Sopenharmony_ci#ifndef OS_GETXATTR_METHODDEF
93167db96d56Sopenharmony_ci    #define OS_GETXATTR_METHODDEF
93177db96d56Sopenharmony_ci#endif /* !defined(OS_GETXATTR_METHODDEF) */
93187db96d56Sopenharmony_ci
93197db96d56Sopenharmony_ci#ifndef OS_SETXATTR_METHODDEF
93207db96d56Sopenharmony_ci    #define OS_SETXATTR_METHODDEF
93217db96d56Sopenharmony_ci#endif /* !defined(OS_SETXATTR_METHODDEF) */
93227db96d56Sopenharmony_ci
93237db96d56Sopenharmony_ci#ifndef OS_REMOVEXATTR_METHODDEF
93247db96d56Sopenharmony_ci    #define OS_REMOVEXATTR_METHODDEF
93257db96d56Sopenharmony_ci#endif /* !defined(OS_REMOVEXATTR_METHODDEF) */
93267db96d56Sopenharmony_ci
93277db96d56Sopenharmony_ci#ifndef OS_LISTXATTR_METHODDEF
93287db96d56Sopenharmony_ci    #define OS_LISTXATTR_METHODDEF
93297db96d56Sopenharmony_ci#endif /* !defined(OS_LISTXATTR_METHODDEF) */
93307db96d56Sopenharmony_ci
93317db96d56Sopenharmony_ci#ifndef OS_MEMFD_CREATE_METHODDEF
93327db96d56Sopenharmony_ci    #define OS_MEMFD_CREATE_METHODDEF
93337db96d56Sopenharmony_ci#endif /* !defined(OS_MEMFD_CREATE_METHODDEF) */
93347db96d56Sopenharmony_ci
93357db96d56Sopenharmony_ci#ifndef OS_EVENTFD_METHODDEF
93367db96d56Sopenharmony_ci    #define OS_EVENTFD_METHODDEF
93377db96d56Sopenharmony_ci#endif /* !defined(OS_EVENTFD_METHODDEF) */
93387db96d56Sopenharmony_ci
93397db96d56Sopenharmony_ci#ifndef OS_EVENTFD_READ_METHODDEF
93407db96d56Sopenharmony_ci    #define OS_EVENTFD_READ_METHODDEF
93417db96d56Sopenharmony_ci#endif /* !defined(OS_EVENTFD_READ_METHODDEF) */
93427db96d56Sopenharmony_ci
93437db96d56Sopenharmony_ci#ifndef OS_EVENTFD_WRITE_METHODDEF
93447db96d56Sopenharmony_ci    #define OS_EVENTFD_WRITE_METHODDEF
93457db96d56Sopenharmony_ci#endif /* !defined(OS_EVENTFD_WRITE_METHODDEF) */
93467db96d56Sopenharmony_ci
93477db96d56Sopenharmony_ci#ifndef OS_GET_TERMINAL_SIZE_METHODDEF
93487db96d56Sopenharmony_ci    #define OS_GET_TERMINAL_SIZE_METHODDEF
93497db96d56Sopenharmony_ci#endif /* !defined(OS_GET_TERMINAL_SIZE_METHODDEF) */
93507db96d56Sopenharmony_ci
93517db96d56Sopenharmony_ci#ifndef OS_GET_HANDLE_INHERITABLE_METHODDEF
93527db96d56Sopenharmony_ci    #define OS_GET_HANDLE_INHERITABLE_METHODDEF
93537db96d56Sopenharmony_ci#endif /* !defined(OS_GET_HANDLE_INHERITABLE_METHODDEF) */
93547db96d56Sopenharmony_ci
93557db96d56Sopenharmony_ci#ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF
93567db96d56Sopenharmony_ci    #define OS_SET_HANDLE_INHERITABLE_METHODDEF
93577db96d56Sopenharmony_ci#endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */
93587db96d56Sopenharmony_ci
93597db96d56Sopenharmony_ci#ifndef OS_GET_BLOCKING_METHODDEF
93607db96d56Sopenharmony_ci    #define OS_GET_BLOCKING_METHODDEF
93617db96d56Sopenharmony_ci#endif /* !defined(OS_GET_BLOCKING_METHODDEF) */
93627db96d56Sopenharmony_ci
93637db96d56Sopenharmony_ci#ifndef OS_SET_BLOCKING_METHODDEF
93647db96d56Sopenharmony_ci    #define OS_SET_BLOCKING_METHODDEF
93657db96d56Sopenharmony_ci#endif /* !defined(OS_SET_BLOCKING_METHODDEF) */
93667db96d56Sopenharmony_ci
93677db96d56Sopenharmony_ci#ifndef OS_GETRANDOM_METHODDEF
93687db96d56Sopenharmony_ci    #define OS_GETRANDOM_METHODDEF
93697db96d56Sopenharmony_ci#endif /* !defined(OS_GETRANDOM_METHODDEF) */
93707db96d56Sopenharmony_ci
93717db96d56Sopenharmony_ci#ifndef OS__ADD_DLL_DIRECTORY_METHODDEF
93727db96d56Sopenharmony_ci    #define OS__ADD_DLL_DIRECTORY_METHODDEF
93737db96d56Sopenharmony_ci#endif /* !defined(OS__ADD_DLL_DIRECTORY_METHODDEF) */
93747db96d56Sopenharmony_ci
93757db96d56Sopenharmony_ci#ifndef OS__REMOVE_DLL_DIRECTORY_METHODDEF
93767db96d56Sopenharmony_ci    #define OS__REMOVE_DLL_DIRECTORY_METHODDEF
93777db96d56Sopenharmony_ci#endif /* !defined(OS__REMOVE_DLL_DIRECTORY_METHODDEF) */
93787db96d56Sopenharmony_ci
93797db96d56Sopenharmony_ci#ifndef OS_WAITSTATUS_TO_EXITCODE_METHODDEF
93807db96d56Sopenharmony_ci    #define OS_WAITSTATUS_TO_EXITCODE_METHODDEF
93817db96d56Sopenharmony_ci#endif /* !defined(OS_WAITSTATUS_TO_EXITCODE_METHODDEF) */
93827db96d56Sopenharmony_ci/*[clinic end generated code: output=8dd784bf1e41b881 input=a9049054013a1b77]*/
9383