| /*[clinic input] |
| preserve |
| [clinic start generated code]*/ |
| |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| # include "pycore_gc.h" // PyGC_Head |
| # include "pycore_runtime.h" // _Py_ID() |
| #endif |
| |
| |
| PyDoc_STRVAR(os_stat__doc__, |
| "stat($module, /, path, *, dir_fd=None, follow_symlinks=True)\n" |
| "--\n" |
| "\n" |
| "Perform a stat system call on the given path.\n" |
| "\n" |
| " path\n" |
| " Path to be examined; can be string, bytes, a path-like object or\n" |
| " open-file-descriptor int.\n" |
| " dir_fd\n" |
| " If not None, it should be a file descriptor open to a directory,\n" |
| " and path should be a relative string; path will then be relative to\n" |
| " that directory.\n" |
| " follow_symlinks\n" |
| " If False, and the last element of the path is a symbolic link,\n" |
| " stat will examine the symbolic link itself instead of the file\n" |
| " the link points to.\n" |
| "\n" |
| "dir_fd and follow_symlinks may not be implemented\n" |
| " on your platform. If they are unavailable, using them will raise a\n" |
| " NotImplementedError.\n" |
| "\n" |
| "It\'s an error to use dir_fd or follow_symlinks when specifying path as\n" |
| " an open file descriptor."); |
| |
| #define OS_STAT_METHODDEF \ |
| {"stat", _PyCFunction_CAST(os_stat), METH_FASTCALL|METH_KEYWORDS, os_stat__doc__}, |
| |
| static PyObject * |
| os_stat_impl(PyObject *module, path_t *path, int dir_fd, int follow_symlinks); |
| |
| static PyObject * |
| os_stat(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 3 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), &_Py_ID(dir_fd), &_Py_ID(follow_symlinks), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", "dir_fd", "follow_symlinks", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "stat", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[3]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1; |
| path_t path = PATH_T_INITIALIZE("stat", "path", 0, 1); |
| int dir_fd = DEFAULT_DIR_FD; |
| int follow_symlinks = 1; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_kwonly; |
| } |
| if (args[1]) { |
| if (!FSTATAT_DIR_FD_CONVERTER(args[1], &dir_fd)) { |
| goto exit; |
| } |
| if (!--noptargs) { |
| goto skip_optional_kwonly; |
| } |
| } |
| follow_symlinks = PyObject_IsTrue(args[2]); |
| if (follow_symlinks < 0) { |
| goto exit; |
| } |
| skip_optional_kwonly: |
| return_value = os_stat_impl(module, &path, dir_fd, follow_symlinks); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(os_lstat__doc__, |
| "lstat($module, /, path, *, dir_fd=None)\n" |
| "--\n" |
| "\n" |
| "Perform a stat system call on the given path, without following symbolic links.\n" |
| "\n" |
| "Like stat(), but do not follow symbolic links.\n" |
| "Equivalent to stat(path, follow_symlinks=False)."); |
| |
| #define OS_LSTAT_METHODDEF \ |
| {"lstat", _PyCFunction_CAST(os_lstat), METH_FASTCALL|METH_KEYWORDS, os_lstat__doc__}, |
| |
| static PyObject * |
| os_lstat_impl(PyObject *module, path_t *path, int dir_fd); |
| |
| static PyObject * |
| os_lstat(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 2 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), &_Py_ID(dir_fd), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", "dir_fd", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "lstat", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[2]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1; |
| path_t path = PATH_T_INITIALIZE("lstat", "path", 0, 0); |
| int dir_fd = DEFAULT_DIR_FD; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_kwonly; |
| } |
| if (!FSTATAT_DIR_FD_CONVERTER(args[1], &dir_fd)) { |
| goto exit; |
| } |
| skip_optional_kwonly: |
| return_value = os_lstat_impl(module, &path, dir_fd); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(os_access__doc__, |
| "access($module, /, path, mode, *, dir_fd=None, effective_ids=False,\n" |
| " follow_symlinks=True)\n" |
| "--\n" |
| "\n" |
| "Use the real uid/gid to test for access to a path.\n" |
| "\n" |
| " path\n" |
| " Path to be tested; can be string, bytes, or a path-like object.\n" |
| " mode\n" |
| " Operating-system mode bitfield. Can be F_OK to test existence,\n" |
| " or the inclusive-OR of R_OK, W_OK, and X_OK.\n" |
| " dir_fd\n" |
| " If not None, it should be a file descriptor open to a directory,\n" |
| " and path should be relative; path will then be relative to that\n" |
| " directory.\n" |
| " effective_ids\n" |
| " If True, access will use the effective uid/gid instead of\n" |
| " the real uid/gid.\n" |
| " follow_symlinks\n" |
| " If False, and the last element of the path is a symbolic link,\n" |
| " access will examine the symbolic link itself instead of the file\n" |
| " the link points to.\n" |
| "\n" |
| "dir_fd, effective_ids, and follow_symlinks may not be implemented\n" |
| " on your platform. If they are unavailable, using them will raise a\n" |
| " NotImplementedError.\n" |
| "\n" |
| "Note that most operations will use the effective uid/gid, therefore this\n" |
| " routine can be used in a suid/sgid environment to test if the invoking user\n" |
| " has the specified access to the path."); |
| |
| #define OS_ACCESS_METHODDEF \ |
| {"access", _PyCFunction_CAST(os_access), METH_FASTCALL|METH_KEYWORDS, os_access__doc__}, |
| |
| static int |
| os_access_impl(PyObject *module, path_t *path, int mode, int dir_fd, |
| int effective_ids, int follow_symlinks); |
| |
| static PyObject * |
| os_access(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 5 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), &_Py_ID(mode), &_Py_ID(dir_fd), &_Py_ID(effective_ids), &_Py_ID(follow_symlinks), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", "mode", "dir_fd", "effective_ids", "follow_symlinks", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "access", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[5]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2; |
| path_t path = PATH_T_INITIALIZE("access", "path", 0, 0); |
| int mode; |
| int dir_fd = DEFAULT_DIR_FD; |
| int effective_ids = 0; |
| int follow_symlinks = 1; |
| int _return_value; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| mode = _PyLong_AsInt(args[1]); |
| if (mode == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_kwonly; |
| } |
| if (args[2]) { |
| if (!FACCESSAT_DIR_FD_CONVERTER(args[2], &dir_fd)) { |
| goto exit; |
| } |
| if (!--noptargs) { |
| goto skip_optional_kwonly; |
| } |
| } |
| if (args[3]) { |
| effective_ids = PyObject_IsTrue(args[3]); |
| if (effective_ids < 0) { |
| goto exit; |
| } |
| if (!--noptargs) { |
| goto skip_optional_kwonly; |
| } |
| } |
| follow_symlinks = PyObject_IsTrue(args[4]); |
| if (follow_symlinks < 0) { |
| goto exit; |
| } |
| skip_optional_kwonly: |
| _return_value = os_access_impl(module, &path, mode, dir_fd, effective_ids, follow_symlinks); |
| if ((_return_value == -1) && PyErr_Occurred()) { |
| goto exit; |
| } |
| return_value = PyBool_FromLong((long)_return_value); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #if defined(HAVE_TTYNAME) |
| |
| PyDoc_STRVAR(os_ttyname__doc__, |
| "ttyname($module, fd, /)\n" |
| "--\n" |
| "\n" |
| "Return the name of the terminal device connected to \'fd\'.\n" |
| "\n" |
| " fd\n" |
| " Integer file descriptor handle."); |
| |
| #define OS_TTYNAME_METHODDEF \ |
| {"ttyname", (PyCFunction)os_ttyname, METH_O, os_ttyname__doc__}, |
| |
| static PyObject * |
| os_ttyname_impl(PyObject *module, int fd); |
| |
| static PyObject * |
| os_ttyname(PyObject *module, PyObject *arg) |
| { |
| PyObject *return_value = NULL; |
| int fd; |
| |
| fd = _PyLong_AsInt(arg); |
| if (fd == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| return_value = os_ttyname_impl(module, fd); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_TTYNAME) */ |
| |
| #if defined(HAVE_CTERMID) |
| |
| PyDoc_STRVAR(os_ctermid__doc__, |
| "ctermid($module, /)\n" |
| "--\n" |
| "\n" |
| "Return the name of the controlling terminal for this process."); |
| |
| #define OS_CTERMID_METHODDEF \ |
| {"ctermid", (PyCFunction)os_ctermid, METH_NOARGS, os_ctermid__doc__}, |
| |
| static PyObject * |
| os_ctermid_impl(PyObject *module); |
| |
| static PyObject * |
| os_ctermid(PyObject *module, PyObject *Py_UNUSED(ignored)) |
| { |
| return os_ctermid_impl(module); |
| } |
| |
| #endif /* defined(HAVE_CTERMID) */ |
| |
| PyDoc_STRVAR(os_chdir__doc__, |
| "chdir($module, /, path)\n" |
| "--\n" |
| "\n" |
| "Change the current working directory to the specified path.\n" |
| "\n" |
| "path may always be specified as a string.\n" |
| "On some platforms, path may also be specified as an open file descriptor.\n" |
| " If this functionality is unavailable, using it raises an exception."); |
| |
| #define OS_CHDIR_METHODDEF \ |
| {"chdir", _PyCFunction_CAST(os_chdir), METH_FASTCALL|METH_KEYWORDS, os_chdir__doc__}, |
| |
| static PyObject * |
| os_chdir_impl(PyObject *module, path_t *path); |
| |
| static PyObject * |
| os_chdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "chdir", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| path_t path = PATH_T_INITIALIZE("chdir", "path", 0, PATH_HAVE_FCHDIR); |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| return_value = os_chdir_impl(module, &path); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #if defined(HAVE_FCHDIR) |
| |
| PyDoc_STRVAR(os_fchdir__doc__, |
| "fchdir($module, /, fd)\n" |
| "--\n" |
| "\n" |
| "Change to the directory of the given file descriptor.\n" |
| "\n" |
| "fd must be opened on a directory, not a file.\n" |
| "Equivalent to os.chdir(fd)."); |
| |
| #define OS_FCHDIR_METHODDEF \ |
| {"fchdir", _PyCFunction_CAST(os_fchdir), METH_FASTCALL|METH_KEYWORDS, os_fchdir__doc__}, |
| |
| static PyObject * |
| os_fchdir_impl(PyObject *module, int fd); |
| |
| static PyObject * |
| os_fchdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(fd), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"fd", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "fchdir", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| int fd; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) { |
| goto exit; |
| } |
| return_value = os_fchdir_impl(module, fd); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_FCHDIR) */ |
| |
| PyDoc_STRVAR(os_chmod__doc__, |
| "chmod($module, /, path, mode, *, dir_fd=None, follow_symlinks=True)\n" |
| "--\n" |
| "\n" |
| "Change the access permissions of a file.\n" |
| "\n" |
| " path\n" |
| " Path to be modified. May always be specified as a str, bytes, or a path-like object.\n" |
| " On some platforms, path may also be specified as an open file descriptor.\n" |
| " If this functionality is unavailable, using it raises an exception.\n" |
| " mode\n" |
| " Operating-system mode bitfield.\n" |
| " Be careful when using number literals for *mode*. The conventional UNIX notation for\n" |
| " numeric modes uses an octal base, which needs to be indicated with a ``0o`` prefix in\n" |
| " Python.\n" |
| " dir_fd\n" |
| " If not None, it should be a file descriptor open to a directory,\n" |
| " and path should be relative; path will then be relative to that\n" |
| " directory.\n" |
| " follow_symlinks\n" |
| " If False, and the last element of the path is a symbolic link,\n" |
| " chmod will modify the symbolic link itself instead of the file\n" |
| " the link points to.\n" |
| "\n" |
| "It is an error to use dir_fd or follow_symlinks when specifying path as\n" |
| " an open file descriptor.\n" |
| "dir_fd and follow_symlinks may not be implemented on your platform.\n" |
| " If they are unavailable, using them will raise a NotImplementedError."); |
| |
| #define OS_CHMOD_METHODDEF \ |
| {"chmod", _PyCFunction_CAST(os_chmod), METH_FASTCALL|METH_KEYWORDS, os_chmod__doc__}, |
| |
| static PyObject * |
| os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd, |
| int follow_symlinks); |
| |
| static PyObject * |
| os_chmod(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 4 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), &_Py_ID(mode), &_Py_ID(dir_fd), &_Py_ID(follow_symlinks), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", "mode", "dir_fd", "follow_symlinks", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "chmod", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[4]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2; |
| path_t path = PATH_T_INITIALIZE("chmod", "path", 0, PATH_HAVE_FCHMOD); |
| int mode; |
| int dir_fd = DEFAULT_DIR_FD; |
| int follow_symlinks = 1; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| mode = _PyLong_AsInt(args[1]); |
| if (mode == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_kwonly; |
| } |
| if (args[2]) { |
| if (!FCHMODAT_DIR_FD_CONVERTER(args[2], &dir_fd)) { |
| goto exit; |
| } |
| if (!--noptargs) { |
| goto skip_optional_kwonly; |
| } |
| } |
| follow_symlinks = PyObject_IsTrue(args[3]); |
| if (follow_symlinks < 0) { |
| goto exit; |
| } |
| skip_optional_kwonly: |
| return_value = os_chmod_impl(module, &path, mode, dir_fd, follow_symlinks); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #if defined(HAVE_FCHMOD) |
| |
| PyDoc_STRVAR(os_fchmod__doc__, |
| "fchmod($module, /, fd, mode)\n" |
| "--\n" |
| "\n" |
| "Change the access permissions of the file given by file descriptor fd.\n" |
| "\n" |
| " fd\n" |
| " The file descriptor of the file to be modified.\n" |
| " mode\n" |
| " Operating-system mode bitfield.\n" |
| " Be careful when using number literals for *mode*. The conventional UNIX notation for\n" |
| " numeric modes uses an octal base, which needs to be indicated with a ``0o`` prefix in\n" |
| " Python.\n" |
| "\n" |
| "Equivalent to os.chmod(fd, mode)."); |
| |
| #define OS_FCHMOD_METHODDEF \ |
| {"fchmod", _PyCFunction_CAST(os_fchmod), METH_FASTCALL|METH_KEYWORDS, os_fchmod__doc__}, |
| |
| static PyObject * |
| os_fchmod_impl(PyObject *module, int fd, int mode); |
| |
| static PyObject * |
| os_fchmod(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 2 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(fd), &_Py_ID(mode), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"fd", "mode", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "fchmod", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[2]; |
| int fd; |
| int mode; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| fd = _PyLong_AsInt(args[0]); |
| if (fd == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| mode = _PyLong_AsInt(args[1]); |
| if (mode == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| return_value = os_fchmod_impl(module, fd, mode); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_FCHMOD) */ |
| |
| #if defined(HAVE_LCHMOD) |
| |
| PyDoc_STRVAR(os_lchmod__doc__, |
| "lchmod($module, /, path, mode)\n" |
| "--\n" |
| "\n" |
| "Change the access permissions of a file, without following symbolic links.\n" |
| "\n" |
| "If path is a symlink, this affects the link itself rather than the target.\n" |
| "Equivalent to chmod(path, mode, follow_symlinks=False).\""); |
| |
| #define OS_LCHMOD_METHODDEF \ |
| {"lchmod", _PyCFunction_CAST(os_lchmod), METH_FASTCALL|METH_KEYWORDS, os_lchmod__doc__}, |
| |
| static PyObject * |
| os_lchmod_impl(PyObject *module, path_t *path, int mode); |
| |
| static PyObject * |
| os_lchmod(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 2 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), &_Py_ID(mode), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", "mode", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "lchmod", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[2]; |
| path_t path = PATH_T_INITIALIZE("lchmod", "path", 0, 0); |
| int mode; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| mode = _PyLong_AsInt(args[1]); |
| if (mode == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| return_value = os_lchmod_impl(module, &path, mode); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_LCHMOD) */ |
| |
| #if defined(HAVE_CHFLAGS) |
| |
| PyDoc_STRVAR(os_chflags__doc__, |
| "chflags($module, /, path, flags, follow_symlinks=True)\n" |
| "--\n" |
| "\n" |
| "Set file flags.\n" |
| "\n" |
| "If follow_symlinks is False, and the last element of the path is a symbolic\n" |
| " link, chflags will change flags on the symbolic link itself instead of the\n" |
| " file the link points to.\n" |
| "follow_symlinks may not be implemented on your platform. If it is\n" |
| "unavailable, using it will raise a NotImplementedError."); |
| |
| #define OS_CHFLAGS_METHODDEF \ |
| {"chflags", _PyCFunction_CAST(os_chflags), METH_FASTCALL|METH_KEYWORDS, os_chflags__doc__}, |
| |
| static PyObject * |
| os_chflags_impl(PyObject *module, path_t *path, unsigned long flags, |
| int follow_symlinks); |
| |
| static PyObject * |
| os_chflags(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 3 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), &_Py_ID(flags), &_Py_ID(follow_symlinks), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", "flags", "follow_symlinks", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "chflags", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[3]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2; |
| path_t path = PATH_T_INITIALIZE("chflags", "path", 0, 0); |
| unsigned long flags; |
| int follow_symlinks = 1; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 3, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| if (!PyLong_Check(args[1])) { |
| _PyArg_BadArgument("chflags", "argument 'flags'", "int", args[1]); |
| goto exit; |
| } |
| flags = PyLong_AsUnsignedLongMask(args[1]); |
| if (!noptargs) { |
| goto skip_optional_pos; |
| } |
| follow_symlinks = PyObject_IsTrue(args[2]); |
| if (follow_symlinks < 0) { |
| goto exit; |
| } |
| skip_optional_pos: |
| return_value = os_chflags_impl(module, &path, flags, follow_symlinks); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_CHFLAGS) */ |
| |
| #if defined(HAVE_LCHFLAGS) |
| |
| PyDoc_STRVAR(os_lchflags__doc__, |
| "lchflags($module, /, path, flags)\n" |
| "--\n" |
| "\n" |
| "Set file flags.\n" |
| "\n" |
| "This function will not follow symbolic links.\n" |
| "Equivalent to chflags(path, flags, follow_symlinks=False)."); |
| |
| #define OS_LCHFLAGS_METHODDEF \ |
| {"lchflags", _PyCFunction_CAST(os_lchflags), METH_FASTCALL|METH_KEYWORDS, os_lchflags__doc__}, |
| |
| static PyObject * |
| os_lchflags_impl(PyObject *module, path_t *path, unsigned long flags); |
| |
| static PyObject * |
| os_lchflags(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 2 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), &_Py_ID(flags), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", "flags", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "lchflags", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[2]; |
| path_t path = PATH_T_INITIALIZE("lchflags", "path", 0, 0); |
| unsigned long flags; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| if (!PyLong_Check(args[1])) { |
| _PyArg_BadArgument("lchflags", "argument 'flags'", "int", args[1]); |
| goto exit; |
| } |
| flags = PyLong_AsUnsignedLongMask(args[1]); |
| return_value = os_lchflags_impl(module, &path, flags); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_LCHFLAGS) */ |
| |
| #if defined(HAVE_CHROOT) |
| |
| PyDoc_STRVAR(os_chroot__doc__, |
| "chroot($module, /, path)\n" |
| "--\n" |
| "\n" |
| "Change root directory to path."); |
| |
| #define OS_CHROOT_METHODDEF \ |
| {"chroot", _PyCFunction_CAST(os_chroot), METH_FASTCALL|METH_KEYWORDS, os_chroot__doc__}, |
| |
| static PyObject * |
| os_chroot_impl(PyObject *module, path_t *path); |
| |
| static PyObject * |
| os_chroot(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "chroot", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| path_t path = PATH_T_INITIALIZE("chroot", "path", 0, 0); |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| return_value = os_chroot_impl(module, &path); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_CHROOT) */ |
| |
| #if defined(HAVE_FSYNC) |
| |
| PyDoc_STRVAR(os_fsync__doc__, |
| "fsync($module, /, fd)\n" |
| "--\n" |
| "\n" |
| "Force write of fd to disk."); |
| |
| #define OS_FSYNC_METHODDEF \ |
| {"fsync", _PyCFunction_CAST(os_fsync), METH_FASTCALL|METH_KEYWORDS, os_fsync__doc__}, |
| |
| static PyObject * |
| os_fsync_impl(PyObject *module, int fd); |
| |
| static PyObject * |
| os_fsync(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(fd), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"fd", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "fsync", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| int fd; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) { |
| goto exit; |
| } |
| return_value = os_fsync_impl(module, fd); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_FSYNC) */ |
| |
| #if defined(HAVE_SYNC) |
| |
| PyDoc_STRVAR(os_sync__doc__, |
| "sync($module, /)\n" |
| "--\n" |
| "\n" |
| "Force write of everything to disk."); |
| |
| #define OS_SYNC_METHODDEF \ |
| {"sync", (PyCFunction)os_sync, METH_NOARGS, os_sync__doc__}, |
| |
| static PyObject * |
| os_sync_impl(PyObject *module); |
| |
| static PyObject * |
| os_sync(PyObject *module, PyObject *Py_UNUSED(ignored)) |
| { |
| return os_sync_impl(module); |
| } |
| |
| #endif /* defined(HAVE_SYNC) */ |
| |
| #if defined(HAVE_FDATASYNC) |
| |
| PyDoc_STRVAR(os_fdatasync__doc__, |
| "fdatasync($module, /, fd)\n" |
| "--\n" |
| "\n" |
| "Force write of fd to disk without forcing update of metadata."); |
| |
| #define OS_FDATASYNC_METHODDEF \ |
| {"fdatasync", _PyCFunction_CAST(os_fdatasync), METH_FASTCALL|METH_KEYWORDS, os_fdatasync__doc__}, |
| |
| static PyObject * |
| os_fdatasync_impl(PyObject *module, int fd); |
| |
| static PyObject * |
| os_fdatasync(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(fd), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"fd", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "fdatasync", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| int fd; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) { |
| goto exit; |
| } |
| return_value = os_fdatasync_impl(module, fd); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_FDATASYNC) */ |
| |
| #if defined(HAVE_CHOWN) |
| |
| PyDoc_STRVAR(os_chown__doc__, |
| "chown($module, /, path, uid, gid, *, dir_fd=None, follow_symlinks=True)\n" |
| "--\n" |
| "\n" |
| "Change the owner and group id of path to the numeric uid and gid.\\\n" |
| "\n" |
| " path\n" |
| " Path to be examined; can be string, bytes, a path-like object, or open-file-descriptor int.\n" |
| " dir_fd\n" |
| " If not None, it should be a file descriptor open to a directory,\n" |
| " and path should be relative; path will then be relative to that\n" |
| " directory.\n" |
| " follow_symlinks\n" |
| " If False, and the last element of the path is a symbolic link,\n" |
| " stat will examine the symbolic link itself instead of the file\n" |
| " the link points to.\n" |
| "\n" |
| "path may always be specified as a string.\n" |
| "On some platforms, path may also be specified as an open file descriptor.\n" |
| " If this functionality is unavailable, using it raises an exception.\n" |
| "If dir_fd is not None, it should be a file descriptor open to a directory,\n" |
| " and path should be relative; path will then be relative to that directory.\n" |
| "If follow_symlinks is False, and the last element of the path is a symbolic\n" |
| " link, chown will modify the symbolic link itself instead of the file the\n" |
| " link points to.\n" |
| "It is an error to use dir_fd or follow_symlinks when specifying path as\n" |
| " an open file descriptor.\n" |
| "dir_fd and follow_symlinks may not be implemented on your platform.\n" |
| " If they are unavailable, using them will raise a NotImplementedError."); |
| |
| #define OS_CHOWN_METHODDEF \ |
| {"chown", _PyCFunction_CAST(os_chown), METH_FASTCALL|METH_KEYWORDS, os_chown__doc__}, |
| |
| static PyObject * |
| os_chown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid, |
| int dir_fd, int follow_symlinks); |
| |
| static PyObject * |
| os_chown(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 5 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), &_Py_ID(uid), &_Py_ID(gid), &_Py_ID(dir_fd), &_Py_ID(follow_symlinks), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", "uid", "gid", "dir_fd", "follow_symlinks", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "chown", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[5]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3; |
| path_t path = PATH_T_INITIALIZE("chown", "path", 0, PATH_HAVE_FCHOWN); |
| uid_t uid; |
| gid_t gid; |
| int dir_fd = DEFAULT_DIR_FD; |
| int follow_symlinks = 1; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| if (!_Py_Uid_Converter(args[1], &uid)) { |
| goto exit; |
| } |
| if (!_Py_Gid_Converter(args[2], &gid)) { |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_kwonly; |
| } |
| if (args[3]) { |
| if (!FCHOWNAT_DIR_FD_CONVERTER(args[3], &dir_fd)) { |
| goto exit; |
| } |
| if (!--noptargs) { |
| goto skip_optional_kwonly; |
| } |
| } |
| follow_symlinks = PyObject_IsTrue(args[4]); |
| if (follow_symlinks < 0) { |
| goto exit; |
| } |
| skip_optional_kwonly: |
| return_value = os_chown_impl(module, &path, uid, gid, dir_fd, follow_symlinks); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_CHOWN) */ |
| |
| #if defined(HAVE_FCHOWN) |
| |
| PyDoc_STRVAR(os_fchown__doc__, |
| "fchown($module, /, fd, uid, gid)\n" |
| "--\n" |
| "\n" |
| "Change the owner and group id of the file specified by file descriptor.\n" |
| "\n" |
| "Equivalent to os.chown(fd, uid, gid)."); |
| |
| #define OS_FCHOWN_METHODDEF \ |
| {"fchown", _PyCFunction_CAST(os_fchown), METH_FASTCALL|METH_KEYWORDS, os_fchown__doc__}, |
| |
| static PyObject * |
| os_fchown_impl(PyObject *module, int fd, uid_t uid, gid_t gid); |
| |
| static PyObject * |
| os_fchown(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 3 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(fd), &_Py_ID(uid), &_Py_ID(gid), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"fd", "uid", "gid", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "fchown", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[3]; |
| int fd; |
| uid_t uid; |
| gid_t gid; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| fd = _PyLong_AsInt(args[0]); |
| if (fd == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| if (!_Py_Uid_Converter(args[1], &uid)) { |
| goto exit; |
| } |
| if (!_Py_Gid_Converter(args[2], &gid)) { |
| goto exit; |
| } |
| return_value = os_fchown_impl(module, fd, uid, gid); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_FCHOWN) */ |
| |
| #if defined(HAVE_LCHOWN) |
| |
| PyDoc_STRVAR(os_lchown__doc__, |
| "lchown($module, /, path, uid, gid)\n" |
| "--\n" |
| "\n" |
| "Change the owner and group id of path to the numeric uid and gid.\n" |
| "\n" |
| "This function will not follow symbolic links.\n" |
| "Equivalent to os.chown(path, uid, gid, follow_symlinks=False)."); |
| |
| #define OS_LCHOWN_METHODDEF \ |
| {"lchown", _PyCFunction_CAST(os_lchown), METH_FASTCALL|METH_KEYWORDS, os_lchown__doc__}, |
| |
| static PyObject * |
| os_lchown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid); |
| |
| static PyObject * |
| os_lchown(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 3 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), &_Py_ID(uid), &_Py_ID(gid), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", "uid", "gid", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "lchown", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[3]; |
| path_t path = PATH_T_INITIALIZE("lchown", "path", 0, 0); |
| uid_t uid; |
| gid_t gid; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| if (!_Py_Uid_Converter(args[1], &uid)) { |
| goto exit; |
| } |
| if (!_Py_Gid_Converter(args[2], &gid)) { |
| goto exit; |
| } |
| return_value = os_lchown_impl(module, &path, uid, gid); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_LCHOWN) */ |
| |
| PyDoc_STRVAR(os_getcwd__doc__, |
| "getcwd($module, /)\n" |
| "--\n" |
| "\n" |
| "Return a unicode string representing the current working directory."); |
| |
| #define OS_GETCWD_METHODDEF \ |
| {"getcwd", (PyCFunction)os_getcwd, METH_NOARGS, os_getcwd__doc__}, |
| |
| static PyObject * |
| os_getcwd_impl(PyObject *module); |
| |
| static PyObject * |
| os_getcwd(PyObject *module, PyObject *Py_UNUSED(ignored)) |
| { |
| return os_getcwd_impl(module); |
| } |
| |
| PyDoc_STRVAR(os_getcwdb__doc__, |
| "getcwdb($module, /)\n" |
| "--\n" |
| "\n" |
| "Return a bytes string representing the current working directory."); |
| |
| #define OS_GETCWDB_METHODDEF \ |
| {"getcwdb", (PyCFunction)os_getcwdb, METH_NOARGS, os_getcwdb__doc__}, |
| |
| static PyObject * |
| os_getcwdb_impl(PyObject *module); |
| |
| static PyObject * |
| os_getcwdb(PyObject *module, PyObject *Py_UNUSED(ignored)) |
| { |
| return os_getcwdb_impl(module); |
| } |
| |
| #if defined(HAVE_LINK) |
| |
| PyDoc_STRVAR(os_link__doc__, |
| "link($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None,\n" |
| " follow_symlinks=True)\n" |
| "--\n" |
| "\n" |
| "Create a hard link to a file.\n" |
| "\n" |
| "If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" |
| " descriptor open to a directory, and the respective path string (src or dst)\n" |
| " should be relative; the path will then be relative to that directory.\n" |
| "If follow_symlinks is False, and the last element of src is a symbolic\n" |
| " link, link will create a link to the symbolic link itself instead of the\n" |
| " file the link points to.\n" |
| "src_dir_fd, dst_dir_fd, and follow_symlinks may not be implemented on your\n" |
| " platform. If they are unavailable, using them will raise a\n" |
| " NotImplementedError."); |
| |
| #define OS_LINK_METHODDEF \ |
| {"link", _PyCFunction_CAST(os_link), METH_FASTCALL|METH_KEYWORDS, os_link__doc__}, |
| |
| static PyObject * |
| os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, |
| int dst_dir_fd, int follow_symlinks); |
| |
| static PyObject * |
| os_link(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 5 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(src), &_Py_ID(dst), &_Py_ID(src_dir_fd), &_Py_ID(dst_dir_fd), &_Py_ID(follow_symlinks), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", "follow_symlinks", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "link", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[5]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2; |
| path_t src = PATH_T_INITIALIZE("link", "src", 0, 0); |
| path_t dst = PATH_T_INITIALIZE("link", "dst", 0, 0); |
| int src_dir_fd = DEFAULT_DIR_FD; |
| int dst_dir_fd = DEFAULT_DIR_FD; |
| int follow_symlinks = 1; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &src)) { |
| goto exit; |
| } |
| if (!path_converter(args[1], &dst)) { |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_kwonly; |
| } |
| if (args[2]) { |
| if (!dir_fd_converter(args[2], &src_dir_fd)) { |
| goto exit; |
| } |
| if (!--noptargs) { |
| goto skip_optional_kwonly; |
| } |
| } |
| if (args[3]) { |
| if (!dir_fd_converter(args[3], &dst_dir_fd)) { |
| goto exit; |
| } |
| if (!--noptargs) { |
| goto skip_optional_kwonly; |
| } |
| } |
| follow_symlinks = PyObject_IsTrue(args[4]); |
| if (follow_symlinks < 0) { |
| goto exit; |
| } |
| skip_optional_kwonly: |
| return_value = os_link_impl(module, &src, &dst, src_dir_fd, dst_dir_fd, follow_symlinks); |
| |
| exit: |
| /* Cleanup for src */ |
| path_cleanup(&src); |
| /* Cleanup for dst */ |
| path_cleanup(&dst); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_LINK) */ |
| |
| PyDoc_STRVAR(os_listdir__doc__, |
| "listdir($module, /, path=None)\n" |
| "--\n" |
| "\n" |
| "Return a list containing the names of the files in the directory.\n" |
| "\n" |
| "path can be specified as either str, bytes, or a path-like object. If path is bytes,\n" |
| " the filenames returned will also be bytes; in all other circumstances\n" |
| " the filenames returned will be str.\n" |
| "If path is None, uses the path=\'.\'.\n" |
| "On some platforms, path may also be specified as an open file descriptor;\\\n" |
| " the file descriptor must refer to a directory.\n" |
| " If this functionality is unavailable, using it raises NotImplementedError.\n" |
| "\n" |
| "The list is in arbitrary order. It does not include the special\n" |
| "entries \'.\' and \'..\' even if they are present in the directory."); |
| |
| #define OS_LISTDIR_METHODDEF \ |
| {"listdir", _PyCFunction_CAST(os_listdir), METH_FASTCALL|METH_KEYWORDS, os_listdir__doc__}, |
| |
| static PyObject * |
| os_listdir_impl(PyObject *module, path_t *path); |
| |
| static PyObject * |
| os_listdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "listdir", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0; |
| path_t path = PATH_T_INITIALIZE("listdir", "path", 1, PATH_HAVE_FDOPENDIR); |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_pos; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| skip_optional_pos: |
| return_value = os_listdir_impl(module, &path); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #if defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os_listdrives__doc__, |
| "listdrives($module, /)\n" |
| "--\n" |
| "\n" |
| "Return a list containing the names of drives in the system.\n" |
| "\n" |
| "A drive name typically looks like \'C:\\\\\'."); |
| |
| #define OS_LISTDRIVES_METHODDEF \ |
| {"listdrives", (PyCFunction)os_listdrives, METH_NOARGS, os_listdrives__doc__}, |
| |
| static PyObject * |
| os_listdrives_impl(PyObject *module); |
| |
| static PyObject * |
| os_listdrives(PyObject *module, PyObject *Py_UNUSED(ignored)) |
| { |
| return os_listdrives_impl(module); |
| } |
| |
| #endif /* defined(MS_WINDOWS) */ |
| |
| #if defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os_listvolumes__doc__, |
| "listvolumes($module, /)\n" |
| "--\n" |
| "\n" |
| "Return a list containing the volumes in the system.\n" |
| "\n" |
| "Volumes are typically represented as a GUID path."); |
| |
| #define OS_LISTVOLUMES_METHODDEF \ |
| {"listvolumes", (PyCFunction)os_listvolumes, METH_NOARGS, os_listvolumes__doc__}, |
| |
| static PyObject * |
| os_listvolumes_impl(PyObject *module); |
| |
| static PyObject * |
| os_listvolumes(PyObject *module, PyObject *Py_UNUSED(ignored)) |
| { |
| return os_listvolumes_impl(module); |
| } |
| |
| #endif /* defined(MS_WINDOWS) */ |
| |
| #if defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os_listmounts__doc__, |
| "listmounts($module, /, volume)\n" |
| "--\n" |
| "\n" |
| "Return a list containing mount points for a particular volume.\n" |
| "\n" |
| "\'volume\' should be a GUID path as returned from os.listvolumes."); |
| |
| #define OS_LISTMOUNTS_METHODDEF \ |
| {"listmounts", _PyCFunction_CAST(os_listmounts), METH_FASTCALL|METH_KEYWORDS, os_listmounts__doc__}, |
| |
| static PyObject * |
| os_listmounts_impl(PyObject *module, path_t *volume); |
| |
| static PyObject * |
| os_listmounts(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(volume), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"volume", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "listmounts", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| path_t volume = PATH_T_INITIALIZE("listmounts", "volume", 0, 0); |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &volume)) { |
| goto exit; |
| } |
| return_value = os_listmounts_impl(module, &volume); |
| |
| exit: |
| /* Cleanup for volume */ |
| path_cleanup(&volume); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(MS_WINDOWS) */ |
| |
| #if defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os__path_isdevdrive__doc__, |
| "_path_isdevdrive($module, /, path)\n" |
| "--\n" |
| "\n" |
| "Determines whether the specified path is on a Windows Dev Drive."); |
| |
| #define OS__PATH_ISDEVDRIVE_METHODDEF \ |
| {"_path_isdevdrive", _PyCFunction_CAST(os__path_isdevdrive), METH_FASTCALL|METH_KEYWORDS, os__path_isdevdrive__doc__}, |
| |
| static PyObject * |
| os__path_isdevdrive_impl(PyObject *module, path_t *path); |
| |
| static PyObject * |
| os__path_isdevdrive(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "_path_isdevdrive", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| path_t path = PATH_T_INITIALIZE("_path_isdevdrive", "path", 0, 0); |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| return_value = os__path_isdevdrive_impl(module, &path); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(MS_WINDOWS) */ |
| |
| #if defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os__getfullpathname__doc__, |
| "_getfullpathname($module, path, /)\n" |
| "--\n" |
| "\n"); |
| |
| #define OS__GETFULLPATHNAME_METHODDEF \ |
| {"_getfullpathname", (PyCFunction)os__getfullpathname, METH_O, os__getfullpathname__doc__}, |
| |
| static PyObject * |
| os__getfullpathname_impl(PyObject *module, path_t *path); |
| |
| static PyObject * |
| os__getfullpathname(PyObject *module, PyObject *arg) |
| { |
| PyObject *return_value = NULL; |
| path_t path = PATH_T_INITIALIZE("_getfullpathname", "path", 0, 0); |
| |
| if (!path_converter(arg, &path)) { |
| goto exit; |
| } |
| return_value = os__getfullpathname_impl(module, &path); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(MS_WINDOWS) */ |
| |
| #if defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os__getfinalpathname__doc__, |
| "_getfinalpathname($module, path, /)\n" |
| "--\n" |
| "\n" |
| "A helper function for samepath on windows."); |
| |
| #define OS__GETFINALPATHNAME_METHODDEF \ |
| {"_getfinalpathname", (PyCFunction)os__getfinalpathname, METH_O, os__getfinalpathname__doc__}, |
| |
| static PyObject * |
| os__getfinalpathname_impl(PyObject *module, path_t *path); |
| |
| static PyObject * |
| os__getfinalpathname(PyObject *module, PyObject *arg) |
| { |
| PyObject *return_value = NULL; |
| path_t path = PATH_T_INITIALIZE("_getfinalpathname", "path", 0, 0); |
| |
| if (!path_converter(arg, &path)) { |
| goto exit; |
| } |
| return_value = os__getfinalpathname_impl(module, &path); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(MS_WINDOWS) */ |
| |
| #if defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os__getvolumepathname__doc__, |
| "_getvolumepathname($module, /, path)\n" |
| "--\n" |
| "\n" |
| "A helper function for ismount on Win32."); |
| |
| #define OS__GETVOLUMEPATHNAME_METHODDEF \ |
| {"_getvolumepathname", _PyCFunction_CAST(os__getvolumepathname), METH_FASTCALL|METH_KEYWORDS, os__getvolumepathname__doc__}, |
| |
| static PyObject * |
| os__getvolumepathname_impl(PyObject *module, path_t *path); |
| |
| static PyObject * |
| os__getvolumepathname(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "_getvolumepathname", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| path_t path = PATH_T_INITIALIZE("_getvolumepathname", "path", 0, 0); |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| return_value = os__getvolumepathname_impl(module, &path); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(MS_WINDOWS) */ |
| |
| #if defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os__path_splitroot__doc__, |
| "_path_splitroot($module, /, path)\n" |
| "--\n" |
| "\n" |
| "Removes everything after the root on Win32."); |
| |
| #define OS__PATH_SPLITROOT_METHODDEF \ |
| {"_path_splitroot", _PyCFunction_CAST(os__path_splitroot), METH_FASTCALL|METH_KEYWORDS, os__path_splitroot__doc__}, |
| |
| static PyObject * |
| os__path_splitroot_impl(PyObject *module, path_t *path); |
| |
| static PyObject * |
| os__path_splitroot(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "_path_splitroot", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| path_t path = PATH_T_INITIALIZE("_path_splitroot", "path", 0, 0); |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| return_value = os__path_splitroot_impl(module, &path); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(MS_WINDOWS) */ |
| |
| #if defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os__path_isdir__doc__, |
| "_path_isdir($module, /, path)\n" |
| "--\n" |
| "\n" |
| "Return true if the pathname refers to an existing directory."); |
| |
| #define OS__PATH_ISDIR_METHODDEF \ |
| {"_path_isdir", _PyCFunction_CAST(os__path_isdir), METH_FASTCALL|METH_KEYWORDS, os__path_isdir__doc__}, |
| |
| static PyObject * |
| os__path_isdir_impl(PyObject *module, PyObject *path); |
| |
| static PyObject * |
| os__path_isdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "_path_isdir", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| PyObject *path; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| path = args[0]; |
| return_value = os__path_isdir_impl(module, path); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(MS_WINDOWS) */ |
| |
| #if defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os__path_isfile__doc__, |
| "_path_isfile($module, /, path)\n" |
| "--\n" |
| "\n" |
| "Test whether a path is a regular file"); |
| |
| #define OS__PATH_ISFILE_METHODDEF \ |
| {"_path_isfile", _PyCFunction_CAST(os__path_isfile), METH_FASTCALL|METH_KEYWORDS, os__path_isfile__doc__}, |
| |
| static PyObject * |
| os__path_isfile_impl(PyObject *module, PyObject *path); |
| |
| static PyObject * |
| os__path_isfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "_path_isfile", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| PyObject *path; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| path = args[0]; |
| return_value = os__path_isfile_impl(module, path); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(MS_WINDOWS) */ |
| |
| #if defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os__path_exists__doc__, |
| "_path_exists($module, /, path)\n" |
| "--\n" |
| "\n" |
| "Test whether a path exists. Returns False for broken symbolic links"); |
| |
| #define OS__PATH_EXISTS_METHODDEF \ |
| {"_path_exists", _PyCFunction_CAST(os__path_exists), METH_FASTCALL|METH_KEYWORDS, os__path_exists__doc__}, |
| |
| static PyObject * |
| os__path_exists_impl(PyObject *module, PyObject *path); |
| |
| static PyObject * |
| os__path_exists(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "_path_exists", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| PyObject *path; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| path = args[0]; |
| return_value = os__path_exists_impl(module, path); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(MS_WINDOWS) */ |
| |
| #if defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os__path_islink__doc__, |
| "_path_islink($module, /, path)\n" |
| "--\n" |
| "\n" |
| "Test whether a path is a symbolic link"); |
| |
| #define OS__PATH_ISLINK_METHODDEF \ |
| {"_path_islink", _PyCFunction_CAST(os__path_islink), METH_FASTCALL|METH_KEYWORDS, os__path_islink__doc__}, |
| |
| static PyObject * |
| os__path_islink_impl(PyObject *module, PyObject *path); |
| |
| static PyObject * |
| os__path_islink(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "_path_islink", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| PyObject *path; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| path = args[0]; |
| return_value = os__path_islink_impl(module, path); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(MS_WINDOWS) */ |
| |
| PyDoc_STRVAR(os__path_normpath__doc__, |
| "_path_normpath($module, /, path)\n" |
| "--\n" |
| "\n" |
| "Basic path normalization."); |
| |
| #define OS__PATH_NORMPATH_METHODDEF \ |
| {"_path_normpath", _PyCFunction_CAST(os__path_normpath), METH_FASTCALL|METH_KEYWORDS, os__path_normpath__doc__}, |
| |
| static PyObject * |
| os__path_normpath_impl(PyObject *module, PyObject *path); |
| |
| static PyObject * |
| os__path_normpath(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "_path_normpath", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| PyObject *path; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| path = args[0]; |
| return_value = os__path_normpath_impl(module, path); |
| |
| exit: |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(os_mkdir__doc__, |
| "mkdir($module, /, path, mode=511, *, dir_fd=None)\n" |
| "--\n" |
| "\n" |
| "Create a directory.\n" |
| "\n" |
| "If dir_fd is not None, it should be a file descriptor open to a directory,\n" |
| " and path should be relative; path will then be relative to that directory.\n" |
| "dir_fd may not be implemented on your platform.\n" |
| " If it is unavailable, using it will raise a NotImplementedError.\n" |
| "\n" |
| "The mode argument is ignored on Windows. Where it is used, the current umask\n" |
| "value is first masked out."); |
| |
| #define OS_MKDIR_METHODDEF \ |
| {"mkdir", _PyCFunction_CAST(os_mkdir), METH_FASTCALL|METH_KEYWORDS, os_mkdir__doc__}, |
| |
| static PyObject * |
| os_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd); |
| |
| static PyObject * |
| os_mkdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 3 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), &_Py_ID(mode), &_Py_ID(dir_fd), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", "mode", "dir_fd", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "mkdir", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[3]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1; |
| path_t path = PATH_T_INITIALIZE("mkdir", "path", 0, 0); |
| int mode = 511; |
| int dir_fd = DEFAULT_DIR_FD; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_pos; |
| } |
| if (args[1]) { |
| mode = _PyLong_AsInt(args[1]); |
| if (mode == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| if (!--noptargs) { |
| goto skip_optional_pos; |
| } |
| } |
| skip_optional_pos: |
| if (!noptargs) { |
| goto skip_optional_kwonly; |
| } |
| if (!MKDIRAT_DIR_FD_CONVERTER(args[2], &dir_fd)) { |
| goto exit; |
| } |
| skip_optional_kwonly: |
| return_value = os_mkdir_impl(module, &path, mode, dir_fd); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #if defined(HAVE_NICE) |
| |
| PyDoc_STRVAR(os_nice__doc__, |
| "nice($module, increment, /)\n" |
| "--\n" |
| "\n" |
| "Add increment to the priority of process and return the new priority."); |
| |
| #define OS_NICE_METHODDEF \ |
| {"nice", (PyCFunction)os_nice, METH_O, os_nice__doc__}, |
| |
| static PyObject * |
| os_nice_impl(PyObject *module, int increment); |
| |
| static PyObject * |
| os_nice(PyObject *module, PyObject *arg) |
| { |
| PyObject *return_value = NULL; |
| int increment; |
| |
| increment = _PyLong_AsInt(arg); |
| if (increment == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| return_value = os_nice_impl(module, increment); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_NICE) */ |
| |
| #if defined(HAVE_GETPRIORITY) |
| |
| PyDoc_STRVAR(os_getpriority__doc__, |
| "getpriority($module, /, which, who)\n" |
| "--\n" |
| "\n" |
| "Return program scheduling priority."); |
| |
| #define OS_GETPRIORITY_METHODDEF \ |
| {"getpriority", _PyCFunction_CAST(os_getpriority), METH_FASTCALL|METH_KEYWORDS, os_getpriority__doc__}, |
| |
| static PyObject * |
| os_getpriority_impl(PyObject *module, int which, int who); |
| |
| static PyObject * |
| os_getpriority(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 2 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(which), &_Py_ID(who), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"which", "who", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "getpriority", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[2]; |
| int which; |
| int who; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| which = _PyLong_AsInt(args[0]); |
| if (which == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| who = _PyLong_AsInt(args[1]); |
| if (who == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| return_value = os_getpriority_impl(module, which, who); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_GETPRIORITY) */ |
| |
| #if defined(HAVE_SETPRIORITY) |
| |
| PyDoc_STRVAR(os_setpriority__doc__, |
| "setpriority($module, /, which, who, priority)\n" |
| "--\n" |
| "\n" |
| "Set program scheduling priority."); |
| |
| #define OS_SETPRIORITY_METHODDEF \ |
| {"setpriority", _PyCFunction_CAST(os_setpriority), METH_FASTCALL|METH_KEYWORDS, os_setpriority__doc__}, |
| |
| static PyObject * |
| os_setpriority_impl(PyObject *module, int which, int who, int priority); |
| |
| static PyObject * |
| os_setpriority(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 3 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(which), &_Py_ID(who), &_Py_ID(priority), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"which", "who", "priority", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "setpriority", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[3]; |
| int which; |
| int who; |
| int priority; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| which = _PyLong_AsInt(args[0]); |
| if (which == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| who = _PyLong_AsInt(args[1]); |
| if (who == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| priority = _PyLong_AsInt(args[2]); |
| if (priority == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| return_value = os_setpriority_impl(module, which, who, priority); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_SETPRIORITY) */ |
| |
| PyDoc_STRVAR(os_rename__doc__, |
| "rename($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n" |
| "--\n" |
| "\n" |
| "Rename a file or directory.\n" |
| "\n" |
| "If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" |
| " descriptor open to a directory, and the respective path string (src or dst)\n" |
| " should be relative; the path will then be relative to that directory.\n" |
| "src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n" |
| " If they are unavailable, using them will raise a NotImplementedError."); |
| |
| #define OS_RENAME_METHODDEF \ |
| {"rename", _PyCFunction_CAST(os_rename), METH_FASTCALL|METH_KEYWORDS, os_rename__doc__}, |
| |
| static PyObject * |
| os_rename_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, |
| int dst_dir_fd); |
| |
| static PyObject * |
| os_rename(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 4 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(src), &_Py_ID(dst), &_Py_ID(src_dir_fd), &_Py_ID(dst_dir_fd), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "rename", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[4]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2; |
| path_t src = PATH_T_INITIALIZE("rename", "src", 0, 0); |
| path_t dst = PATH_T_INITIALIZE("rename", "dst", 0, 0); |
| int src_dir_fd = DEFAULT_DIR_FD; |
| int dst_dir_fd = DEFAULT_DIR_FD; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &src)) { |
| goto exit; |
| } |
| if (!path_converter(args[1], &dst)) { |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_kwonly; |
| } |
| if (args[2]) { |
| if (!dir_fd_converter(args[2], &src_dir_fd)) { |
| goto exit; |
| } |
| if (!--noptargs) { |
| goto skip_optional_kwonly; |
| } |
| } |
| if (!dir_fd_converter(args[3], &dst_dir_fd)) { |
| goto exit; |
| } |
| skip_optional_kwonly: |
| return_value = os_rename_impl(module, &src, &dst, src_dir_fd, dst_dir_fd); |
| |
| exit: |
| /* Cleanup for src */ |
| path_cleanup(&src); |
| /* Cleanup for dst */ |
| path_cleanup(&dst); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(os_replace__doc__, |
| "replace($module, /, src, dst, *, src_dir_fd=None, dst_dir_fd=None)\n" |
| "--\n" |
| "\n" |
| "Rename a file or directory, overwriting the destination.\n" |
| "\n" |
| "If either src_dir_fd or dst_dir_fd is not None, it should be a file\n" |
| " descriptor open to a directory, and the respective path string (src or dst)\n" |
| " should be relative; the path will then be relative to that directory.\n" |
| "src_dir_fd and dst_dir_fd, may not be implemented on your platform.\n" |
| " If they are unavailable, using them will raise a NotImplementedError."); |
| |
| #define OS_REPLACE_METHODDEF \ |
| {"replace", _PyCFunction_CAST(os_replace), METH_FASTCALL|METH_KEYWORDS, os_replace__doc__}, |
| |
| static PyObject * |
| os_replace_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, |
| int dst_dir_fd); |
| |
| static PyObject * |
| os_replace(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 4 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(src), &_Py_ID(dst), &_Py_ID(src_dir_fd), &_Py_ID(dst_dir_fd), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "replace", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[4]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2; |
| path_t src = PATH_T_INITIALIZE("replace", "src", 0, 0); |
| path_t dst = PATH_T_INITIALIZE("replace", "dst", 0, 0); |
| int src_dir_fd = DEFAULT_DIR_FD; |
| int dst_dir_fd = DEFAULT_DIR_FD; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &src)) { |
| goto exit; |
| } |
| if (!path_converter(args[1], &dst)) { |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_kwonly; |
| } |
| if (args[2]) { |
| if (!dir_fd_converter(args[2], &src_dir_fd)) { |
| goto exit; |
| } |
| if (!--noptargs) { |
| goto skip_optional_kwonly; |
| } |
| } |
| if (!dir_fd_converter(args[3], &dst_dir_fd)) { |
| goto exit; |
| } |
| skip_optional_kwonly: |
| return_value = os_replace_impl(module, &src, &dst, src_dir_fd, dst_dir_fd); |
| |
| exit: |
| /* Cleanup for src */ |
| path_cleanup(&src); |
| /* Cleanup for dst */ |
| path_cleanup(&dst); |
| |
| return return_value; |
| } |
| |
| PyDoc_STRVAR(os_rmdir__doc__, |
| "rmdir($module, /, path, *, dir_fd=None)\n" |
| "--\n" |
| "\n" |
| "Remove a directory.\n" |
| "\n" |
| "If dir_fd is not None, it should be a file descriptor open to a directory,\n" |
| " and path should be relative; path will then be relative to that directory.\n" |
| "dir_fd may not be implemented on your platform.\n" |
| " If it is unavailable, using it will raise a NotImplementedError."); |
| |
| #define OS_RMDIR_METHODDEF \ |
| {"rmdir", _PyCFunction_CAST(os_rmdir), METH_FASTCALL|METH_KEYWORDS, os_rmdir__doc__}, |
| |
| static PyObject * |
| os_rmdir_impl(PyObject *module, path_t *path, int dir_fd); |
| |
| static PyObject * |
| os_rmdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 2 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), &_Py_ID(dir_fd), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", "dir_fd", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "rmdir", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[2]; |
| Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1; |
| path_t path = PATH_T_INITIALIZE("rmdir", "path", 0, 0); |
| int dir_fd = DEFAULT_DIR_FD; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!path_converter(args[0], &path)) { |
| goto exit; |
| } |
| if (!noptargs) { |
| goto skip_optional_kwonly; |
| } |
| if (!UNLINKAT_DIR_FD_CONVERTER(args[1], &dir_fd)) { |
| goto exit; |
| } |
| skip_optional_kwonly: |
| return_value = os_rmdir_impl(module, &path, dir_fd); |
| |
| exit: |
| /* Cleanup for path */ |
| path_cleanup(&path); |
| |
| return return_value; |
| } |
| |
| #if defined(HAVE_SYSTEM) && defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os_system__doc__, |
| "system($module, /, command)\n" |
| "--\n" |
| "\n" |
| "Execute the command in a subshell."); |
| |
| #define OS_SYSTEM_METHODDEF \ |
| {"system", _PyCFunction_CAST(os_system), METH_FASTCALL|METH_KEYWORDS, os_system__doc__}, |
| |
| static long |
| os_system_impl(PyObject *module, const Py_UNICODE *command); |
| |
| static PyObject * |
| os_system(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(command), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"command", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "system", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| const Py_UNICODE *command = NULL; |
| long _return_value; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!PyUnicode_Check(args[0])) { |
| _PyArg_BadArgument("system", "argument 'command'", "str", args[0]); |
| goto exit; |
| } |
| command = PyUnicode_AsWideCharString(args[0], NULL); |
| if (command == NULL) { |
| goto exit; |
| } |
| _return_value = os_system_impl(module, command); |
| if ((_return_value == -1) && PyErr_Occurred()) { |
| goto exit; |
| } |
| return_value = PyLong_FromLong(_return_value); |
| |
| exit: |
| /* Cleanup for command */ |
| PyMem_Free((void *)command); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_SYSTEM) && defined(MS_WINDOWS) */ |
| |
| #if defined(HAVE_SYSTEM) && !defined(MS_WINDOWS) |
| |
| PyDoc_STRVAR(os_system__doc__, |
| "system($module, /, command)\n" |
| "--\n" |
| "\n" |
| "Execute the command in a subshell."); |
| |
| #define OS_SYSTEM_METHODDEF \ |
| {"system", _PyCFunction_CAST(os_system), METH_FASTCALL|METH_KEYWORDS, os_system__doc__}, |
| |
| static long |
| os_system_impl(PyObject *module, PyObject *command); |
| |
| static PyObject * |
| os_system(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 1 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(command), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"command", NULL}; |
| static _PyArg_Parser _parser = { |
| .keywords = _keywords, |
| .fname = "system", |
| .kwtuple = KWTUPLE, |
| }; |
| #undef KWTUPLE |
| PyObject *argsbuf[1]; |
| PyObject *command = NULL; |
| long _return_value; |
| |
| args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
| if (!args) { |
| goto exit; |
| } |
| if (!PyUnicode_FSConverter(args[0], &command)) { |
| goto exit; |
| } |
| _return_value = os_system_impl(module, command); |
| if ((_return_value == -1) && PyErr_Occurred()) { |
| goto exit; |
| } |
| return_value = PyLong_FromLong(_return_value); |
| |
| exit: |
| /* Cleanup for command */ |
| Py_XDECREF(command); |
| |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_SYSTEM) && !defined(MS_WINDOWS) */ |
| |
| #if defined(HAVE_UMASK) |
| |
| PyDoc_STRVAR(os_umask__doc__, |
| "umask($module, mask, /)\n" |
| "--\n" |
| "\n" |
| "Set the current numeric umask and return the previous umask."); |
| |
| #define OS_UMASK_METHODDEF \ |
| {"umask", (PyCFunction)os_umask, METH_O, os_umask__doc__}, |
| |
| static PyObject * |
| os_umask_impl(PyObject *module, int mask); |
| |
| static PyObject * |
| os_umask(PyObject *module, PyObject *arg) |
| { |
| PyObject *return_value = NULL; |
| int mask; |
| |
| mask = _PyLong_AsInt(arg); |
| if (mask == -1 && PyErr_Occurred()) { |
| goto exit; |
| } |
| return_value = os_umask_impl(module, mask); |
| |
| exit: |
| return return_value; |
| } |
| |
| #endif /* defined(HAVE_UMASK) */ |
| |
| PyDoc_STRVAR(os_unlink__doc__, |
| "unlink($module, /, path, *, dir_fd=None)\n" |
| "--\n" |
| "\n" |
| "Remove a file (same as remove()).\n" |
| "\n" |
| "If dir_fd is not None, it should be a file descriptor open to a directory,\n" |
| " and path should be relative; path will then be relative to that directory.\n" |
| "dir_fd may not be implemented on your platform.\n" |
| " If it is unavailable, using it will raise a NotImplementedError."); |
| |
| #define OS_UNLINK_METHODDEF \ |
| {"unlink", _PyCFunction_CAST(os_unlink), METH_FASTCALL|METH_KEYWORDS, os_unlink__doc__}, |
| |
| static PyObject * |
| os_unlink_impl(PyObject *module, path_t *path, int dir_fd); |
| |
| static PyObject * |
| os_unlink(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
| { |
| PyObject *return_value = NULL; |
| #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
| |
| #define NUM_KEYWORDS 2 |
| static struct { |
| PyGC_Head _this_is_not_used; |
| PyObject_VAR_HEAD |
| PyObject *ob_item[NUM_KEYWORDS]; |
| } _kwtuple = { |
| .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
| .ob_item = { &_Py_ID(path), &_Py_ID(dir_fd), }, |
| }; |
| #undef NUM_KEYWORDS |
| #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
| |
| #else // !Py_BUILD_CORE |
| # define KWTUPLE NULL |
| #endif // !Py_BUILD_CORE |
| |
| static const char * const _keywords[] = {"path", "dir_fd", NULL}; |
| static _PyArg_Parser _parser = { |
|
|