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