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, ¶m_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, ¶m_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