diff options
Diffstat (limited to 'winsup/cygwin/wchar.h')
-rw-r--r-- | winsup/cygwin/wchar.h | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/winsup/cygwin/wchar.h b/winsup/cygwin/wchar.h index 51e71bb92..e6cccd4ed 100644 --- a/winsup/cygwin/wchar.h +++ b/winsup/cygwin/wchar.h @@ -13,6 +13,8 @@ details. */ #include_next <wchar.h> +#define ENCODING_LEN 31 + #ifdef __cplusplus extern "C" { #endif @@ -21,16 +23,19 @@ typedef int mbtowc_f (struct _reent *, wchar_t *, const char *, size_t, const char *, mbstate_t *); typedef mbtowc_f *mbtowc_p; -extern int __utf8_wctomb (struct _reent *, char *, wchar_t, - const char *, mbstate_t *); - -extern int (*__mbtowc) (struct _reent *, wchar_t *, const char *, size_t, - const char *, mbstate_t *); +extern mbtowc_p __mbtowc; extern mbtowc_f __ascii_mbtowc; extern mbtowc_f __utf8_mbtowc; extern mbtowc_f __iso_mbtowc; extern mbtowc_f __cp_mbtowc; +typedef int wctomb_f (struct _reent *, char *, wchar_t, const char *, + mbstate_t *); +typedef wctomb_f *wctomb_p; + +extern wctomb_p __wctomb; +extern wctomb_f __utf8_wctomb; + extern char *__locale_charset (); extern mbtowc_p __set_charset_from_codepage (unsigned int cp, char *charset); @@ -38,4 +43,31 @@ extern mbtowc_p __set_charset_from_codepage (unsigned int cp, char *charset); #ifdef __cplusplus } #endif + +size_t __stdcall sys_cp_wcstombs (wctomb_p, char *, char *, size_t, + const PWCHAR, size_t = (size_t) -1) + __attribute__ ((regparm(3))); +inline size_t +__stdcall sys_wcstombs (char *dst, size_t len, const PWCHAR src, + size_t nwc = (size_t) -1) +{ + return sys_cp_wcstombs (__wctomb, __locale_charset (), dst, len, src, nwc); +} +size_t __stdcall sys_wcstombs_alloc (char **, int, const PWCHAR, + size_t = (size_t) -1) + __attribute__ ((regparm(3))); + +size_t __stdcall sys_cp_mbstowcs (mbtowc_p, char *, PWCHAR, size_t, + const char *, size_t = (size_t) -1) + __attribute__ ((regparm(3))); +inline size_t +sys_mbstowcs (PWCHAR dst, size_t dlen, const char *src, + size_t nms = (size_t) -1) +{ + return sys_cp_mbstowcs (__mbtowc, __locale_charset (), dst, dlen, src, nms); +} +size_t __stdcall sys_mbstowcs_alloc (PWCHAR *, int, const char *, + size_t = (size_t) -1) + __attribute__ ((regparm(3))); + #endif /* _CYGWIN_WCHAR_H */ |