bpo-35134: Add Include/cpython/fileutils.h header file (GH-18493)
Move CPython C API from Include/fileutils.h into a new Include/cpython/fileutils.h header file which is included by Include/fileutils.h. Exclude the following private symbols from the limited C API: * _Py_error_handler * _Py_GetErrorHandler() * _Py_DecodeLocaleEx() * _Py_EncodeLocaleEx()
This commit is contained in:
parent
98921aeaf5
commit
8c3aee65ed
|
@ -0,0 +1,165 @@
|
||||||
|
#ifndef Py_CPYTHON_FILEUTILS_H
|
||||||
|
# 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(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(FILE*) _Py_fopen(
|
||||||
|
const char *pathname,
|
||||||
|
const char *mode);
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
#ifndef MS_WINDOWS
|
||||||
|
PyAPI_FUNC(int) _Py_isabs(const wchar_t *path);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_abspath(const wchar_t *path, wchar_t **abspath_p);
|
||||||
|
|
||||||
|
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);
|
||||||
|
#endif /* !MS_WINDOWS */
|
|
@ -18,173 +18,12 @@ PyAPI_FUNC(char*) _Py_EncodeLocaleRaw(
|
||||||
size_t *error_pos);
|
size_t *error_pos);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03080000
|
|
||||||
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);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef Py_LIMITED_API
|
#ifndef Py_LIMITED_API
|
||||||
PyAPI_FUNC(PyObject *) _Py_device_encoding(int);
|
# define Py_CPYTHON_FILEUTILS_H
|
||||||
|
# include "cpython/fileutils.h"
|
||||||
#if defined(MS_WINDOWS) || defined(__APPLE__)
|
# undef Py_CPYTHON_FILEUTILS_H
|
||||||
/* 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
|
#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(FILE*) _Py_fopen(
|
|
||||||
const char *pathname,
|
|
||||||
const char *mode);
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
#ifndef MS_WINDOWS
|
|
||||||
PyAPI_FUNC(int) _Py_isabs(const wchar_t *path);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PyAPI_FUNC(int) _Py_abspath(const wchar_t *path, wchar_t **abspath_p);
|
|
||||||
|
|
||||||
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);
|
|
||||||
#endif /* !MS_WINDOWS */
|
|
||||||
|
|
||||||
#endif /* Py_LIMITED_API */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1060,6 +1060,7 @@ PYTHON_HEADERS= \
|
||||||
$(srcdir)/Include/cpython/ceval.h \
|
$(srcdir)/Include/cpython/ceval.h \
|
||||||
$(srcdir)/Include/cpython/dictobject.h \
|
$(srcdir)/Include/cpython/dictobject.h \
|
||||||
$(srcdir)/Include/cpython/fileobject.h \
|
$(srcdir)/Include/cpython/fileobject.h \
|
||||||
|
$(srcdir)/Include/cpython/fileutils.h \
|
||||||
$(srcdir)/Include/cpython/import.h \
|
$(srcdir)/Include/cpython/import.h \
|
||||||
$(srcdir)/Include/cpython/initconfig.h \
|
$(srcdir)/Include/cpython/initconfig.h \
|
||||||
$(srcdir)/Include/cpython/interpreteridobject.h \
|
$(srcdir)/Include/cpython/interpreteridobject.h \
|
||||||
|
|
|
@ -131,6 +131,7 @@
|
||||||
<ClInclude Include="..\Include\cpython\ceval.h" />
|
<ClInclude Include="..\Include\cpython\ceval.h" />
|
||||||
<ClInclude Include="..\Include\cpython\dictobject.h" />
|
<ClInclude Include="..\Include\cpython\dictobject.h" />
|
||||||
<ClInclude Include="..\Include\cpython\fileobject.h" />
|
<ClInclude Include="..\Include\cpython\fileobject.h" />
|
||||||
|
<ClInclude Include="..\Include\cpython\fileutils.h" />
|
||||||
<ClInclude Include="..\Include\cpython\import.h" />
|
<ClInclude Include="..\Include\cpython\import.h" />
|
||||||
<ClInclude Include="..\Include\cpython\initconfig.h" />
|
<ClInclude Include="..\Include\cpython\initconfig.h" />
|
||||||
<ClInclude Include="..\Include\cpython\listobject.h" />
|
<ClInclude Include="..\Include\cpython\listobject.h" />
|
||||||
|
|
|
@ -96,6 +96,9 @@
|
||||||
<ClInclude Include="..\Include\cpython\fileobject.h">
|
<ClInclude Include="..\Include\cpython\fileobject.h">
|
||||||
<Filter>Include</Filter>
|
<Filter>Include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\Include\cpython\fileutils.h">
|
||||||
|
<Filter>Include</Filter>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="..\Include\cpython\import.h">
|
<ClInclude Include="..\Include\cpython\import.h">
|
||||||
<Filter>Include</Filter>
|
<Filter>Include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
Loading…
Reference in New Issue