1 #ifndef Py_FILEUTILS_H 2 #define Py_FILEUTILS_H 3 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 8 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 9 PyAPI_FUNC(wchar_t *) Py_DecodeLocale( 10 const char *arg, 11 size_t *size); 12 13 PyAPI_FUNC(char*) Py_EncodeLocale( 14 const wchar_t *text, 15 size_t *error_pos); 16 17 PyAPI_FUNC(char*) _Py_EncodeLocaleRaw( 18 const wchar_t *text, 19 size_t *error_pos); 20 #endif 21 22 #ifdef Py_BUILD_CORE 23 PyAPI_FUNC(int) _Py_DecodeUTF8Ex( 24 const char *arg, 25 Py_ssize_t arglen, 26 wchar_t **wstr, 27 size_t *wlen, 28 const char **reason, 29 int surrogateescape); 30 31 PyAPI_FUNC(int) _Py_EncodeUTF8Ex( 32 const wchar_t *text, 33 char **str, 34 size_t *error_pos, 35 const char **reason, 36 int raw_malloc, 37 int surrogateescape); 38 39 PyAPI_FUNC(wchar_t*) _Py_DecodeUTF8_surrogateescape( 40 const char *arg, 41 Py_ssize_t arglen); 42 43 PyAPI_FUNC(int) _Py_DecodeLocaleEx( 44 const char *arg, 45 wchar_t **wstr, 46 size_t *wlen, 47 const char **reason, 48 int current_locale, 49 int surrogateescape); 50 51 PyAPI_FUNC(int) _Py_EncodeLocaleEx( 52 const wchar_t *text, 53 char **str, 54 size_t *error_pos, 55 const char **reason, 56 int current_locale, 57 int surrogateescape); 58 #endif 59 60 #ifndef Py_LIMITED_API 61 PyAPI_FUNC(PyObject *) _Py_device_encoding(int); 62 63 #if defined(MS_WINDOWS) || defined(__APPLE__) 64 /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611). 65 On macOS 10.13, read() and write() with more than INT_MAX bytes 66 fail with EINVAL (bpo-24658). */ 67 # define _PY_READ_MAX INT_MAX 68 # define _PY_WRITE_MAX INT_MAX 69 #else 70 /* write() should truncate the input to PY_SSIZE_T_MAX bytes, 71 but it's safer to do it ourself to have a portable behaviour */ 72 # define _PY_READ_MAX PY_SSIZE_T_MAX 73 # define _PY_WRITE_MAX PY_SSIZE_T_MAX 74 #endif 75 76 #ifdef MS_WINDOWS 77 struct _Py_stat_struct { 78 unsigned long st_dev; 79 uint64_t st_ino; 80 unsigned short st_mode; 81 int st_nlink; 82 int st_uid; 83 int st_gid; 84 unsigned long st_rdev; 85 __int64 st_size; 86 time_t st_atime; 87 int st_atime_nsec; 88 time_t st_mtime; 89 int st_mtime_nsec; 90 time_t st_ctime; 91 int st_ctime_nsec; 92 unsigned long st_file_attributes; 93 }; 94 #else 95 # define _Py_stat_struct stat 96 #endif 97 98 PyAPI_FUNC(int) _Py_fstat( 99 int fd, 100 struct _Py_stat_struct *status); 101 102 PyAPI_FUNC(int) _Py_fstat_noraise( 103 int fd, 104 struct _Py_stat_struct *status); 105 106 PyAPI_FUNC(int) _Py_stat( 107 PyObject *path, 108 struct stat *status); 109 110 PyAPI_FUNC(int) _Py_open( 111 const char *pathname, 112 int flags); 113 114 PyAPI_FUNC(int) _Py_open_noraise( 115 const char *pathname, 116 int flags); 117 118 PyAPI_FUNC(FILE *) _Py_wfopen( 119 const wchar_t *path, 120 const wchar_t *mode); 121 122 PyAPI_FUNC(FILE*) _Py_fopen( 123 const char *pathname, 124 const char *mode); 125 126 PyAPI_FUNC(FILE*) _Py_fopen_obj( 127 PyObject *path, 128 const char *mode); 129 130 PyAPI_FUNC(Py_ssize_t) _Py_read( 131 int fd, 132 void *buf, 133 size_t count); 134 135 PyAPI_FUNC(Py_ssize_t) _Py_write( 136 int fd, 137 const void *buf, 138 size_t count); 139 140 PyAPI_FUNC(Py_ssize_t) _Py_write_noraise( 141 int fd, 142 const void *buf, 143 size_t count); 144 145 #ifdef HAVE_READLINK 146 PyAPI_FUNC(int) _Py_wreadlink( 147 const wchar_t *path, 148 wchar_t *buf, 149 size_t bufsiz); 150 #endif 151 152 #ifdef HAVE_REALPATH 153 PyAPI_FUNC(wchar_t*) _Py_wrealpath( 154 const wchar_t *path, 155 wchar_t *resolved_path, 156 size_t resolved_path_size); 157 #endif 158 159 PyAPI_FUNC(wchar_t*) _Py_wgetcwd( 160 wchar_t *buf, 161 size_t size); 162 163 PyAPI_FUNC(int) _Py_get_inheritable(int fd); 164 165 PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable, 166 int *atomic_flag_works); 167 168 PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable, 169 int *atomic_flag_works); 170 171 PyAPI_FUNC(int) _Py_dup(int fd); 172 173 #ifndef MS_WINDOWS 174 PyAPI_FUNC(int) _Py_get_blocking(int fd); 175 176 PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking); 177 #endif /* !MS_WINDOWS */ 178 179 PyAPI_FUNC(int) _Py_GetLocaleconvNumeric( 180 PyObject **decimal_point, 181 PyObject **thousands_sep, 182 const char **grouping); 183 184 #endif /* Py_LIMITED_API */ 185 186 #ifdef Py_BUILD_CORE 187 PyAPI_FUNC(int) _Py_GetForceASCII(void); 188 189 /* Reset "force ASCII" mode (if it was initialized). 190 191 This function should be called when Python changes the LC_CTYPE locale, 192 so the "force ASCII" mode can be detected again on the new locale 193 encoding. */ 194 PyAPI_FUNC(void) _Py_ResetForceASCII(void); 195 #endif 196 197 #ifdef __cplusplus 198 } 199 #endif 200 201 #endif /* !Py_FILEUTILS_H */ 202