aboutsummaryrefslogtreecommitdiff
path: root/Include
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-01-11 11:56:16 +0100
committerGitHub <noreply@github.com>2022-01-11 11:56:16 +0100
commitea1a54506b4ac38b712ba63ec884292025f16111 (patch)
tree752bad07fb725dd178e2d79e4dedf23b74dcdd34 /Include
parentfc75bfb8be8494e22123f2c14d1ab497c77cc22d (diff)
downloadcpython3-ea1a54506b4ac38b712ba63ec884292025f16111.tar.gz
bpo-46303: Move fileutils.h private functions to internal C API (GH-30484)
Move almost all private functions of Include/cpython/fileutils.h to the internal C API Include/internal/pycore_fileutils.h. Only keep _Py_fopen_obj() in Include/cpython/fileutils.h, since it's used by _testcapi which must not use the internal C API. Move EncodeLocaleEx() and DecodeLocaleEx() functions from _testcapi to _testinternalcapi, since the C API moved to the internal C API.
Diffstat (limited to 'Include')
-rw-r--r--Include/cpython/fileutils.h160
-rw-r--r--Include/internal/pycore_fileutils.h159
-rw-r--r--Include/internal/pycore_unicodeobject.h2
3 files changed, 162 insertions, 159 deletions
diff --git a/Include/cpython/fileutils.h b/Include/cpython/fileutils.h
index 7ab2290184..b386ad107b 100644
--- a/Include/cpython/fileutils.h
+++ b/Include/cpython/fileutils.h
@@ -2,165 +2,7 @@
# error "this header file must not be included directly"
#endif
-typedef enum {
- _Py_ERROR_UNKNOWN=0,
- _Py_ERROR_STRICT,
- _Py_ERROR_SURROGATEESCAPE,
- _Py_ERROR_REPLACE,
- _Py_ERROR_IGNORE,
- _Py_ERROR_BACKSLASHREPLACE,
- _Py_ERROR_SURROGATEPASS,
- _Py_ERROR_XMLCHARREFREPLACE,
- _Py_ERROR_OTHER
-} _Py_error_handler;
-
-PyAPI_FUNC(_Py_error_handler) _Py_GetErrorHandler(const char *errors);
-
-PyAPI_FUNC(int) _Py_DecodeLocaleEx(
- const char *arg,
- wchar_t **wstr,
- size_t *wlen,
- const char **reason,
- int current_locale,
- _Py_error_handler errors);
-
-PyAPI_FUNC(int) _Py_EncodeLocaleEx(
- const wchar_t *text,
- char **str,
- size_t *error_pos,
- const char **reason,
- int current_locale,
- _Py_error_handler errors);
-
-PyAPI_FUNC(char*) _Py_EncodeLocaleRaw(
- const wchar_t *text,
- size_t *error_pos);
-
-PyAPI_FUNC(PyObject *) _Py_device_encoding(int);
-
-#if defined(MS_WINDOWS) || defined(__APPLE__)
- /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611).
- On macOS 10.13, read() and write() with more than INT_MAX bytes
- fail with EINVAL (bpo-24658). */
-# define _PY_READ_MAX INT_MAX
-# define _PY_WRITE_MAX INT_MAX
-#else
- /* write() should truncate the input to PY_SSIZE_T_MAX bytes,
- but it's safer to do it ourself to have a portable behaviour */
-# define _PY_READ_MAX PY_SSIZE_T_MAX
-# define _PY_WRITE_MAX PY_SSIZE_T_MAX
-#endif
-
-#ifdef MS_WINDOWS
-struct _Py_stat_struct {
- unsigned long st_dev;
- uint64_t st_ino;
- unsigned short st_mode;
- int st_nlink;
- int st_uid;
- int st_gid;
- unsigned long st_rdev;
- __int64 st_size;
- time_t st_atime;
- int st_atime_nsec;
- time_t st_mtime;
- int st_mtime_nsec;
- time_t st_ctime;
- int st_ctime_nsec;
- unsigned long st_file_attributes;
- unsigned long st_reparse_tag;
-};
-#else
-# define _Py_stat_struct stat
-#endif
-
-PyAPI_FUNC(int) _Py_fstat(
- int fd,
- struct _Py_stat_struct *status);
-
-PyAPI_FUNC(int) _Py_fstat_noraise(
- int fd,
- struct _Py_stat_struct *status);
-
-PyAPI_FUNC(int) _Py_stat(
- PyObject *path,
- struct stat *status);
-
-PyAPI_FUNC(int) _Py_open(
- const char *pathname,
- int flags);
-
-PyAPI_FUNC(int) _Py_open_noraise(
- const char *pathname,
- int flags);
-
-PyAPI_FUNC(FILE *) _Py_wfopen(
- const wchar_t *path,
- const wchar_t *mode);
-
+// Used by _testcapi which must not use the internal C API
PyAPI_FUNC(FILE*) _Py_fopen_obj(
PyObject *path,
const char *mode);
-
-PyAPI_FUNC(Py_ssize_t) _Py_read(
- int fd,
- void *buf,
- size_t count);
-
-PyAPI_FUNC(Py_ssize_t) _Py_write(
- int fd,
- const void *buf,
- size_t count);
-
-PyAPI_FUNC(Py_ssize_t) _Py_write_noraise(
- int fd,
- const void *buf,
- size_t count);
-
-#ifdef HAVE_READLINK
-PyAPI_FUNC(int) _Py_wreadlink(
- const wchar_t *path,
- wchar_t *buf,
- /* Number of characters of 'buf' buffer
- including the trailing NUL character */
- size_t buflen);
-#endif
-
-#ifdef HAVE_REALPATH
-PyAPI_FUNC(wchar_t*) _Py_wrealpath(
- const wchar_t *path,
- wchar_t *resolved_path,
- /* Number of characters of 'resolved_path' buffer
- including the trailing NUL character */
- size_t resolved_path_len);
-#endif
-
-PyAPI_FUNC(wchar_t*) _Py_wgetcwd(
- wchar_t *buf,
- /* Number of characters of 'buf' buffer
- including the trailing NUL character */
- size_t buflen);
-
-PyAPI_FUNC(int) _Py_get_inheritable(int fd);
-
-PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable,
- int *atomic_flag_works);
-
-PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable,
- int *atomic_flag_works);
-
-PyAPI_FUNC(int) _Py_dup(int fd);
-
-#ifndef MS_WINDOWS
-PyAPI_FUNC(int) _Py_get_blocking(int fd);
-
-PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking);
-#else /* MS_WINDOWS */
-PyAPI_FUNC(void*) _Py_get_osfhandle_noraise(int fd);
-
-PyAPI_FUNC(void*) _Py_get_osfhandle(int fd);
-
-PyAPI_FUNC(int) _Py_open_osfhandle_noraise(void *handle, int flags);
-
-PyAPI_FUNC(int) _Py_open_osfhandle(void *handle, int flags);
-#endif /* MS_WINDOWS */
diff --git a/Include/internal/pycore_fileutils.h b/Include/internal/pycore_fileutils.h
index 38df73b745..61c11a8b2d 100644
--- a/Include/internal/pycore_fileutils.h
+++ b/Include/internal/pycore_fileutils.h
@@ -10,6 +10,165 @@ extern "C" {
#include <locale.h> /* struct lconv */
+typedef enum {
+ _Py_ERROR_UNKNOWN=0,
+ _Py_ERROR_STRICT,
+ _Py_ERROR_SURROGATEESCAPE,
+ _Py_ERROR_REPLACE,
+ _Py_ERROR_IGNORE,
+ _Py_ERROR_BACKSLASHREPLACE,
+ _Py_ERROR_SURROGATEPASS,
+ _Py_ERROR_XMLCHARREFREPLACE,
+ _Py_ERROR_OTHER
+} _Py_error_handler;
+
+PyAPI_FUNC(_Py_error_handler) _Py_GetErrorHandler(const char *errors);
+
+PyAPI_FUNC(int) _Py_DecodeLocaleEx(
+ const char *arg,
+ wchar_t **wstr,
+ size_t *wlen,
+ const char **reason,
+ int current_locale,
+ _Py_error_handler errors);
+
+PyAPI_FUNC(int) _Py_EncodeLocaleEx(
+ const wchar_t *text,
+ char **str,
+ size_t *error_pos,
+ const char **reason,
+ int current_locale,
+ _Py_error_handler errors);
+
+PyAPI_FUNC(char*) _Py_EncodeLocaleRaw(
+ const wchar_t *text,
+ size_t *error_pos);
+
+PyAPI_FUNC(PyObject *) _Py_device_encoding(int);
+
+#if defined(MS_WINDOWS) || defined(__APPLE__)
+ /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611).
+ On macOS 10.13, read() and write() with more than INT_MAX bytes
+ fail with EINVAL (bpo-24658). */
+# define _PY_READ_MAX INT_MAX
+# define _PY_WRITE_MAX INT_MAX
+#else
+ /* write() should truncate the input to PY_SSIZE_T_MAX bytes,
+ but it's safer to do it ourself to have a portable behaviour */
+# define _PY_READ_MAX PY_SSIZE_T_MAX
+# define _PY_WRITE_MAX PY_SSIZE_T_MAX
+#endif
+
+#ifdef MS_WINDOWS
+struct _Py_stat_struct {
+ unsigned long st_dev;
+ uint64_t st_ino;
+ unsigned short st_mode;
+ int st_nlink;
+ int st_uid;
+ int st_gid;
+ unsigned long st_rdev;
+ __int64 st_size;
+ time_t st_atime;
+ int st_atime_nsec;
+ time_t st_mtime;
+ int st_mtime_nsec;
+ time_t st_ctime;
+ int st_ctime_nsec;
+ unsigned long st_file_attributes;
+ unsigned long st_reparse_tag;
+};
+#else
+# define _Py_stat_struct stat
+#endif
+
+PyAPI_FUNC(int) _Py_fstat(
+ int fd,
+ struct _Py_stat_struct *status);
+
+PyAPI_FUNC(int) _Py_fstat_noraise(
+ int fd,
+ struct _Py_stat_struct *status);
+
+PyAPI_FUNC(int) _Py_stat(
+ PyObject *path,
+ struct stat *status);
+
+PyAPI_FUNC(int) _Py_open(
+ const char *pathname,
+ int flags);
+
+PyAPI_FUNC(int) _Py_open_noraise(
+ const char *pathname,
+ int flags);
+
+PyAPI_FUNC(FILE *) _Py_wfopen(
+ const wchar_t *path,
+ const wchar_t *mode);
+
+PyAPI_FUNC(Py_ssize_t) _Py_read(
+ int fd,
+ void *buf,
+ size_t count);
+
+PyAPI_FUNC(Py_ssize_t) _Py_write(
+ int fd,
+ const void *buf,
+ size_t count);
+
+PyAPI_FUNC(Py_ssize_t) _Py_write_noraise(
+ int fd,
+ const void *buf,
+ size_t count);
+
+#ifdef HAVE_READLINK
+PyAPI_FUNC(int) _Py_wreadlink(
+ const wchar_t *path,
+ wchar_t *buf,
+ /* Number of characters of 'buf' buffer
+ including the trailing NUL character */
+ size_t buflen);
+#endif
+
+#ifdef HAVE_REALPATH
+PyAPI_FUNC(wchar_t*) _Py_wrealpath(
+ const wchar_t *path,
+ wchar_t *resolved_path,
+ /* Number of characters of 'resolved_path' buffer
+ including the trailing NUL character */
+ size_t resolved_path_len);
+#endif
+
+PyAPI_FUNC(wchar_t*) _Py_wgetcwd(
+ wchar_t *buf,
+ /* Number of characters of 'buf' buffer
+ including the trailing NUL character */
+ size_t buflen);
+
+PyAPI_FUNC(int) _Py_get_inheritable(int fd);
+
+PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable,
+ int *atomic_flag_works);
+
+PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable,
+ int *atomic_flag_works);
+
+PyAPI_FUNC(int) _Py_dup(int fd);
+
+#ifndef MS_WINDOWS
+PyAPI_FUNC(int) _Py_get_blocking(int fd);
+
+PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking);
+#else /* MS_WINDOWS */
+PyAPI_FUNC(void*) _Py_get_osfhandle_noraise(int fd);
+
+PyAPI_FUNC(void*) _Py_get_osfhandle(int fd);
+
+PyAPI_FUNC(int) _Py_open_osfhandle_noraise(void *handle, int flags);
+
+PyAPI_FUNC(int) _Py_open_osfhandle(void *handle, int flags);
+#endif /* MS_WINDOWS */
+
// This is used after getting NULL back from Py_DecodeLocale().
#define DECODE_LOCALE_ERR(NAME, LEN) \
((LEN) == (size_t)-2) \
diff --git a/Include/internal/pycore_unicodeobject.h b/Include/internal/pycore_unicodeobject.h
index 97d11aeb82..3b6dfe9dbb 100644
--- a/Include/internal/pycore_unicodeobject.h
+++ b/Include/internal/pycore_unicodeobject.h
@@ -8,6 +8,8 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
+#include "pycore_fileutils.h" // _Py_error_handler
+
/* runtime lifecycle */