2018-11-06 19:44:03 -04:00
|
|
|
#ifndef Py_INTERNAL_FILEUTILS_H
|
|
|
|
#define Py_INTERNAL_FILEUTILS_H
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef Py_BUILD_CORE
|
|
|
|
# error "Py_BUILD_CORE must be defined to include this header"
|
|
|
|
#endif
|
|
|
|
|
2018-11-20 11:20:16 -04:00
|
|
|
#include <locale.h> /* struct lconv */
|
|
|
|
|
2021-09-27 13:00:32 -03:00
|
|
|
// This is used after getting NULL back from Py_DecodeLocale().
|
|
|
|
#define DECODE_LOCALE_ERR(NAME, LEN) \
|
|
|
|
((LEN) == (size_t)-2) \
|
|
|
|
? _PyStatus_ERR("cannot decode " NAME) \
|
|
|
|
: _PyStatus_NO_MEMORY()
|
|
|
|
|
2019-03-01 12:52:56 -04:00
|
|
|
PyAPI_DATA(int) _Py_HasFileSystemDefaultEncodeErrors;
|
|
|
|
|
2018-11-06 19:44:03 -04:00
|
|
|
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,
|
2019-03-18 21:46:25 -03:00
|
|
|
Py_ssize_t arglen,
|
|
|
|
size_t *wlen);
|
2018-11-06 19:44:03 -04:00
|
|
|
|
2021-09-27 13:00:32 -03:00
|
|
|
extern int
|
|
|
|
_Py_wstat(const wchar_t *, struct stat *);
|
|
|
|
|
2018-11-06 19:44:03 -04:00
|
|
|
PyAPI_FUNC(int) _Py_GetForceASCII(void);
|
|
|
|
|
2018-11-23 08:08:26 -04:00
|
|
|
/* Reset "force ASCII" mode (if it was initialized).
|
|
|
|
|
|
|
|
This function should be called when Python changes the LC_CTYPE locale,
|
|
|
|
so the "force ASCII" mode can be detected again on the new locale
|
|
|
|
encoding. */
|
|
|
|
PyAPI_FUNC(void) _Py_ResetForceASCII(void);
|
|
|
|
|
|
|
|
|
2018-11-20 11:20:16 -04:00
|
|
|
PyAPI_FUNC(int) _Py_GetLocaleconvNumeric(
|
|
|
|
struct lconv *lc,
|
|
|
|
PyObject **decimal_point,
|
|
|
|
PyObject **thousands_sep);
|
|
|
|
|
2020-10-13 17:04:44 -03:00
|
|
|
PyAPI_FUNC(void) _Py_closerange(int first, int last);
|
|
|
|
|
2020-11-01 18:07:23 -04:00
|
|
|
PyAPI_FUNC(wchar_t*) _Py_GetLocaleEncoding(void);
|
2020-11-01 15:59:35 -04:00
|
|
|
PyAPI_FUNC(PyObject*) _Py_GetLocaleEncodingObject(void);
|
2020-10-30 21:02:09 -03:00
|
|
|
|
2021-04-30 10:21:42 -03:00
|
|
|
#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION
|
|
|
|
extern int _Py_LocaleUsesNonUnicodeWchar(void);
|
|
|
|
|
|
|
|
extern wchar_t* _Py_DecodeNonUnicodeWchar(
|
|
|
|
const wchar_t* native,
|
|
|
|
Py_ssize_t size);
|
|
|
|
|
|
|
|
extern int _Py_EncodeNonUnicodeWchar_InPlace(
|
|
|
|
wchar_t* unicode,
|
|
|
|
Py_ssize_t size);
|
|
|
|
#endif
|
|
|
|
|
2021-12-02 20:08:42 -04:00
|
|
|
extern int _Py_isabs(const wchar_t *path);
|
|
|
|
extern int _Py_abspath(const wchar_t *path, wchar_t **abspath_p);
|
2021-09-27 13:00:32 -03:00
|
|
|
extern wchar_t * _Py_join_relfile(const wchar_t *dirname,
|
|
|
|
const wchar_t *relfile);
|
|
|
|
extern int _Py_add_relfile(wchar_t *dirname,
|
|
|
|
const wchar_t *relfile,
|
|
|
|
size_t bufsize);
|
2021-10-16 16:16:08 -03:00
|
|
|
extern size_t _Py_find_basename(const wchar_t *filename);
|
2021-12-02 20:08:42 -04:00
|
|
|
PyAPI_FUNC(wchar_t *) _Py_normpath(wchar_t *path, Py_ssize_t size);
|
2021-10-22 20:20:03 -03:00
|
|
|
|
2021-09-27 13:00:32 -03:00
|
|
|
|
2021-10-13 10:03:35 -03:00
|
|
|
// Macros to protect CRT calls against instant termination when passed an
|
|
|
|
// invalid parameter (bpo-23524). IPH stands for Invalid Parameter Handler.
|
|
|
|
// Usage:
|
|
|
|
//
|
|
|
|
// _Py_BEGIN_SUPPRESS_IPH
|
|
|
|
// ...
|
|
|
|
// _Py_END_SUPPRESS_IPH
|
|
|
|
#if defined _MSC_VER && _MSC_VER >= 1900
|
2021-10-13 14:25:53 -03:00
|
|
|
|
|
|
|
# include <stdlib.h> // _set_thread_local_invalid_parameter_handler()
|
|
|
|
|
2021-10-13 10:03:35 -03:00
|
|
|
extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler;
|
|
|
|
# define _Py_BEGIN_SUPPRESS_IPH \
|
|
|
|
{ _invalid_parameter_handler _Py_old_handler = \
|
|
|
|
_set_thread_local_invalid_parameter_handler(_Py_silent_invalid_parameter_handler);
|
|
|
|
# define _Py_END_SUPPRESS_IPH \
|
|
|
|
_set_thread_local_invalid_parameter_handler(_Py_old_handler); }
|
|
|
|
#else
|
|
|
|
# define _Py_BEGIN_SUPPRESS_IPH
|
|
|
|
# define _Py_END_SUPPRESS_IPH
|
|
|
|
#endif /* _MSC_VER >= 1900 */
|
|
|
|
|
2018-11-06 19:44:03 -04:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif /* !Py_INTERNAL_FILEUTILS_H */
|