1 #ifndef Py_CPYTHON_FILEUTILS_H
2 #  error "this header file must not be included directly"
3 #endif
4 
5 typedef enum {
6     _Py_ERROR_UNKNOWN=0,
7     _Py_ERROR_STRICT,
8     _Py_ERROR_SURROGATEESCAPE,
9     _Py_ERROR_REPLACE,
10     _Py_ERROR_IGNORE,
11     _Py_ERROR_BACKSLASHREPLACE,
12     _Py_ERROR_SURROGATEPASS,
13     _Py_ERROR_XMLCHARREFREPLACE,
14     _Py_ERROR_OTHER
15 } _Py_error_handler;
16 
17 PyAPI_FUNC(_Py_error_handler) _Py_GetErrorHandler(const char *errors);
18 
19 PyAPI_FUNC(int) _Py_DecodeLocaleEx(
20     const char *arg,
21     wchar_t **wstr,
22     size_t *wlen,
23     const char **reason,
24     int current_locale,
25     _Py_error_handler errors);
26 
27 PyAPI_FUNC(int) _Py_EncodeLocaleEx(
28     const wchar_t *text,
29     char **str,
30     size_t *error_pos,
31     const char **reason,
32     int current_locale,
33     _Py_error_handler errors);
34 
35 PyAPI_FUNC(char*) _Py_EncodeLocaleRaw(
36     const wchar_t *text,
37     size_t *error_pos);
38 
39 PyAPI_FUNC(PyObject *) _Py_device_encoding(int);
40 
41 #if defined(MS_WINDOWS) || defined(__APPLE__)
42     /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611).
43        On macOS 10.13, read() and write() with more than INT_MAX bytes
44        fail with EINVAL (bpo-24658). */
45 #   define _PY_READ_MAX  INT_MAX
46 #   define _PY_WRITE_MAX INT_MAX
47 #else
48     /* write() should truncate the input to PY_SSIZE_T_MAX bytes,
49        but it's safer to do it ourself to have a portable behaviour */
50 #   define _PY_READ_MAX  PY_SSIZE_T_MAX
51 #   define _PY_WRITE_MAX PY_SSIZE_T_MAX
52 #endif
53 
54 #ifdef MS_WINDOWS
55 struct _Py_stat_struct {
56     unsigned long st_dev;
57     uint64_t st_ino;
58     unsigned short st_mode;
59     int st_nlink;
60     int st_uid;
61     int st_gid;
62     unsigned long st_rdev;
63     __int64 st_size;
64     time_t st_atime;
65     int st_atime_nsec;
66     time_t st_mtime;
67     int st_mtime_nsec;
68     time_t st_ctime;
69     int st_ctime_nsec;
70     unsigned long st_file_attributes;
71     unsigned long st_reparse_tag;
72 };
73 #else
74 #  define _Py_stat_struct stat
75 #endif
76 
77 PyAPI_FUNC(int) _Py_fstat(
78     int fd,
79     struct _Py_stat_struct *status);
80 
81 PyAPI_FUNC(int) _Py_fstat_noraise(
82     int fd,
83     struct _Py_stat_struct *status);
84 
85 PyAPI_FUNC(int) _Py_stat(
86     PyObject *path,
87     struct stat *status);
88 
89 PyAPI_FUNC(int) _Py_open(
90     const char *pathname,
91     int flags);
92 
93 PyAPI_FUNC(int) _Py_open_noraise(
94     const char *pathname,
95     int flags);
96 
97 PyAPI_FUNC(FILE *) _Py_wfopen(
98     const wchar_t *path,
99     const wchar_t *mode);
100 
101 PyAPI_FUNC(FILE*) _Py_fopen_obj(
102     PyObject *path,
103     const char *mode);
104 
105 PyAPI_FUNC(Py_ssize_t) _Py_read(
106     int fd,
107     void *buf,
108     size_t count);
109 
110 PyAPI_FUNC(Py_ssize_t) _Py_write(
111     int fd,
112     const void *buf,
113     size_t count);
114 
115 PyAPI_FUNC(Py_ssize_t) _Py_write_noraise(
116     int fd,
117     const void *buf,
118     size_t count);
119 
120 #ifdef HAVE_READLINK
121 PyAPI_FUNC(int) _Py_wreadlink(
122     const wchar_t *path,
123     wchar_t *buf,
124     /* Number of characters of 'buf' buffer
125        including the trailing NUL character */
126     size_t buflen);
127 #endif
128 
129 #ifdef HAVE_REALPATH
130 PyAPI_FUNC(wchar_t*) _Py_wrealpath(
131     const wchar_t *path,
132     wchar_t *resolved_path,
133     /* Number of characters of 'resolved_path' buffer
134        including the trailing NUL character */
135     size_t resolved_path_len);
136 #endif
137 
138 #ifndef MS_WINDOWS
139 PyAPI_FUNC(int) _Py_isabs(const wchar_t *path);
140 #endif
141 
142 PyAPI_FUNC(int) _Py_abspath(const wchar_t *path, wchar_t **abspath_p);
143 
144 PyAPI_FUNC(wchar_t*) _Py_wgetcwd(
145     wchar_t *buf,
146     /* Number of characters of 'buf' buffer
147        including the trailing NUL character */
148     size_t buflen);
149 
150 PyAPI_FUNC(int) _Py_get_inheritable(int fd);
151 
152 PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable,
153                                     int *atomic_flag_works);
154 
155 PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable,
156                                                int *atomic_flag_works);
157 
158 PyAPI_FUNC(int) _Py_dup(int fd);
159 
160 #ifndef MS_WINDOWS
161 PyAPI_FUNC(int) _Py_get_blocking(int fd);
162 
163 PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking);
164 #else   /* MS_WINDOWS */
165 PyAPI_FUNC(void*) _Py_get_osfhandle_noraise(int fd);
166 
167 PyAPI_FUNC(void*) _Py_get_osfhandle(int fd);
168 
169 PyAPI_FUNC(int) _Py_open_osfhandle_noraise(void *handle, int flags);
170 
171 PyAPI_FUNC(int) _Py_open_osfhandle(void *handle, int flags);
172 #endif  /* MS_WINDOWS */
173