diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2020-07-10 11:29:33 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2020-07-10 11:29:33 +0300 |
commit | 462fcdb67f21c4806641c1cbbe0bc01a11d5ce44 (patch) | |
tree | 83bde431c882906ca1e82c0e3775f4afaa3ed995 /winsup/cygwin/wchar.h | |
parent | b3af1d5aa30c093aa96e1a4e61e05c3e984e635f (diff) |
Cygwin: convert sys_wcstombs/sys_mbstowcs wrapper to inline functions
This should slightly speed up especially path conversions,
given there's one less function call rearranging all function
arguments in registers/stack (and less stack pressure).
For clarity, rename overloaded sys_wcstombs to _sys_wcstombs
and sys_cp_mbstowcs to _sys_mbstowcs.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/wchar.h')
-rw-r--r-- | winsup/cygwin/wchar.h | 62 |
1 files changed, 46 insertions, 16 deletions
diff --git a/winsup/cygwin/wchar.h b/winsup/cygwin/wchar.h index b3dacf3b5..42919054a 100644 --- a/winsup/cygwin/wchar.h +++ b/winsup/cygwin/wchar.h @@ -45,22 +45,52 @@ extern wctomb_f __utf8_wctomb; #ifdef __INSIDE_CYGWIN__ #ifdef __cplusplus -size_t __reg3 sys_wcstombs (char *dst, size_t len, const wchar_t * src, - size_t nwc = (size_t) -1); -size_t __reg3 sys_wcstombs_no_path (char *dst, size_t len, - const wchar_t * src, - size_t nwc = (size_t) -1); -size_t __reg3 sys_wcstombs_alloc (char **, int, const wchar_t *, - size_t = (size_t) -1); -size_t __reg3 sys_wcstombs_alloc_no_path (char **, int, const wchar_t *, - size_t = (size_t) -1); - -size_t __reg3 sys_cp_mbstowcs (mbtowc_p, wchar_t *, size_t, const char *, - size_t = (size_t) -1); -size_t __reg3 sys_mbstowcs (wchar_t * dst, size_t dlen, const char *src, - size_t nms = (size_t) -1); -size_t __reg3 sys_mbstowcs_alloc (wchar_t **, int, const char *, - size_t = (size_t) -1); +extern size_t _sys_wcstombs (char *dst, size_t len, const wchar_t *src, + size_t nwc, bool is_path); +extern size_t _sys_wcstombs_alloc (char **dst_p, int type, const wchar_t *src, + size_t nwc, bool is_path); + +static inline size_t +sys_wcstombs (char *dst, size_t len, const wchar_t * src, + size_t nwc = (size_t) -1) +{ + return _sys_wcstombs (dst, len, src, nwc, true); +} + +static inline size_t +sys_wcstombs_no_path (char *dst, size_t len, const wchar_t * src, + size_t nwc = (size_t) -1) +{ + return _sys_wcstombs (dst, len, src, nwc, false); +} + +static inline size_t +sys_wcstombs_alloc (char **dst_p, int type, const wchar_t *src, + size_t nwc = (size_t) -1) +{ + return _sys_wcstombs_alloc (dst_p, type, src, nwc, true); +} + +static inline size_t +sys_wcstombs_alloc_no_path (char **dst_p, int type, const wchar_t *src, + size_t nwc = (size_t) -1) +{ + return _sys_wcstombs_alloc (dst_p, type, src, nwc, false); +} + +size_t _sys_mbstowcs (mbtowc_p, wchar_t *, size_t, const char *, + size_t = (size_t) -1); + +static inline size_t +sys_mbstowcs (wchar_t * dst, size_t dlen, const char *src, + size_t nms = (size_t) -1) +{ + mbtowc_p f_mbtowc = (__MBTOWC == __ascii_mbtowc) ? __utf8_mbtowc : __MBTOWC; + return _sys_mbstowcs (f_mbtowc, dst, dlen, src, nms); +} + +size_t sys_mbstowcs_alloc (wchar_t **, int, const char *, size_t = (size_t) -1); + #endif /* __cplusplus */ #endif /* __INSIDE_CYGWIN__ */ |