mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	 3d4226a832
			
		
	
	
		3d4226a832
		
			
		
	
	
	
	
		
			
			Add support for the "surrogatepass" error handler in PyUnicode_DecodeFSDefault() and PyUnicode_EncodeFSDefault() for the UTF-8 encoding. Changes: * _Py_DecodeUTF8Ex() and _Py_EncodeUTF8Ex() now support the surrogatepass error handler (_Py_ERROR_SURROGATEPASS). * _Py_DecodeLocaleEx() and _Py_EncodeLocaleEx() now use the _Py_error_handler enum instead of "int surrogateescape" to pass the error handler. These functions now return -3 if the error handler is unknown. * Add unit tests on _Py_DecodeLocaleEx() and _Py_EncodeLocaleEx() in test_codecs. * Rename get_error_handler() to _Py_GetErrorHandler() and expose it as a private function. * _freeze_importlib doesn't need config.filesystem_errors="strict" workaround anymore.
		
			
				
	
	
		
			203 lines
		
	
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
	
		
			4.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef Py_FILEUTILS_H
 | |
| #define Py_FILEUTILS_H
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #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);
 | |
| #endif
 | |
| 
 | |
| 
 | |
| #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
 | |
| PyAPI_FUNC(wchar_t *) Py_DecodeLocale(
 | |
|     const char *arg,
 | |
|     size_t *size);
 | |
| 
 | |
| PyAPI_FUNC(char*) Py_EncodeLocale(
 | |
|     const wchar_t *text,
 | |
|     size_t *error_pos);
 | |
| 
 | |
| PyAPI_FUNC(char*) _Py_EncodeLocaleRaw(
 | |
|     const wchar_t *text,
 | |
|     size_t *error_pos);
 | |
| #endif
 | |
| 
 | |
| #ifdef Py_BUILD_CORE
 | |
| PyAPI_FUNC(int) _Py_DecodeUTF8Ex(
 | |
|     const char *arg,
 | |
|     Py_ssize_t arglen,
 | |
|     wchar_t **wstr,
 | |
|     size_t *wlen,
 | |
|     const char **reason,
 | |
|     _Py_error_handler errors);
 | |
| 
 | |
| PyAPI_FUNC(int) _Py_EncodeUTF8Ex(
 | |
|     const wchar_t *text,
 | |
|     char **str,
 | |
|     size_t *error_pos,
 | |
|     const char **reason,
 | |
|     int raw_malloc,
 | |
|     _Py_error_handler errors);
 | |
| 
 | |
| PyAPI_FUNC(wchar_t*) _Py_DecodeUTF8_surrogateescape(
 | |
|     const char *arg,
 | |
|     Py_ssize_t arglen);
 | |
| #endif
 | |
| 
 | |
| 
 | |
| #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03080000
 | |
| 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
 | |
| PyAPI_FUNC(PyObject *) _Py_device_encoding(int);
 | |
| 
 | |
| #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;
 | |
| };
 | |
| #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,
 | |
|     size_t bufsiz);
 | |
| #endif
 | |
| 
 | |
| #ifdef HAVE_REALPATH
 | |
| PyAPI_FUNC(wchar_t*) _Py_wrealpath(
 | |
|     const wchar_t *path,
 | |
|     wchar_t *resolved_path,
 | |
|     size_t resolved_path_size);
 | |
| #endif
 | |
| 
 | |
| PyAPI_FUNC(wchar_t*) _Py_wgetcwd(
 | |
|     wchar_t *buf,
 | |
|     size_t size);
 | |
| 
 | |
| 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 */
 | |
| 
 | |
| PyAPI_FUNC(int) _Py_GetLocaleconvNumeric(
 | |
|     PyObject **decimal_point,
 | |
|     PyObject **thousands_sep,
 | |
|     const char **grouping);
 | |
| 
 | |
| #endif   /* Py_LIMITED_API */
 | |
| 
 | |
| 
 | |
| #ifdef Py_BUILD_CORE
 | |
| PyAPI_FUNC(int) _Py_GetForceASCII(void);
 | |
| #endif
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* !Py_FILEUTILS_H */
 |