Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2020-07-10 11:29:33 +0300
committerCorinna Vinschen <corinna@vinschen.de>2020-07-10 11:29:33 +0300
commit462fcdb67f21c4806641c1cbbe0bc01a11d5ce44 (patch)
tree83bde431c882906ca1e82c0e3775f4afaa3ed995 /winsup/cygwin/strfuncs.cc
parentb3af1d5aa30c093aa96e1a4e61e05c3e984e635f (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/strfuncs.cc')
-rw-r--r--winsup/cygwin/strfuncs.cc60
1 files changed, 13 insertions, 47 deletions
diff --git a/winsup/cygwin/strfuncs.cc b/winsup/cygwin/strfuncs.cc
index 604d7611c..07f2e48bb 100644
--- a/winsup/cygwin/strfuncs.cc
+++ b/winsup/cygwin/strfuncs.cc
@@ -410,9 +410,9 @@ __big5_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n,
to buffer size, it's a bug in Cygwin and the buffer in the calling
function should be raised.
*/
-static size_t __reg3
-sys_wcstombs (char *dst, size_t len, const wchar_t *src, size_t nwc,
- bool is_path)
+size_t
+_sys_wcstombs (char *dst, size_t len, const wchar_t *src, size_t nwc,
+ bool is_path)
{
char buf[10];
char *ptr = dst;
@@ -436,7 +436,7 @@ sys_wcstombs (char *dst, size_t len, const wchar_t *src, size_t nwc,
/* Convert UNICODE private use area. Reverse functionality for the
ASCII area <= 0x7f (only for path names) is transform_chars above.
Reverse functionality for invalid bytes in a multibyte sequence is
- in sys_cp_mbstowcs below. */
+ in _sys_mbstowcs below. */
if (is_path && (pw & 0xff00) == 0xf000
&& (((cwc = (pw & 0xff)) <= 0x7f && tfx_rev_chars[cwc] >= 0xf000)
|| (cwc >= 0x80 && MB_CUR_MAX > 1)))
@@ -498,18 +498,6 @@ sys_wcstombs (char *dst, size_t len, const wchar_t *src, size_t nwc,
return n;
}
-size_t __reg3
-sys_wcstombs (char *dst, size_t len, const wchar_t * src, size_t nwc)
-{
- return sys_wcstombs (dst, len, src, nwc, true);
-}
-
-size_t __reg3
-sys_wcstombs_no_path (char *dst, size_t len, const wchar_t * src, size_t nwc)
-{
- return sys_wcstombs (dst, len, src, nwc, false);
-}
-
/* Allocate a buffer big enough for the string, always including the
terminating '\0'. The buffer pointer is returned in *dst_p, the return
value is the number of bytes written to the buffer, as usual.
@@ -520,13 +508,13 @@ sys_wcstombs_no_path (char *dst, size_t len, const wchar_t * src, size_t nwc)
Note that this code is shared by cygserver (which requires it via
__small_vsprintf) and so when built there plain calloc is the
only choice. */
-static size_t __reg3
-sys_wcstombs_alloc (char **dst_p, int type, const wchar_t *src, size_t nwc,
+size_t
+_sys_wcstombs_alloc (char **dst_p, int type, const wchar_t *src, size_t nwc,
bool is_path)
{
size_t ret;
- ret = sys_wcstombs (NULL, (size_t) -1, src, nwc, is_path);
+ ret = _sys_wcstombs (NULL, (size_t) -1, src, nwc, is_path);
if (ret > 0)
{
size_t dlen = ret + 1;
@@ -537,32 +525,19 @@ sys_wcstombs_alloc (char **dst_p, int type, const wchar_t *src, size_t nwc,
*dst_p = (char *) ccalloc ((cygheap_types) type, dlen, sizeof (char));
if (!*dst_p)
return 0;
- ret = sys_wcstombs (*dst_p, dlen, src, nwc, is_path);
+ ret = _sys_wcstombs (*dst_p, dlen, src, nwc, is_path);
}
return ret;
}
-size_t __reg3
-sys_wcstombs_alloc (char **dst_p, int type, const wchar_t *src, size_t nwc)
-{
- return sys_wcstombs_alloc (dst_p, type, src, nwc, true);
-}
-
-size_t __reg3
-sys_wcstombs_alloc_no_path (char **dst_p, int type, const wchar_t *src,
- size_t nwc)
-{
- return sys_wcstombs_alloc (dst_p, type, src, nwc, false);
-}
-
-/* sys_cp_mbstowcs is actually most of the time called as sys_mbstowcs with
+/* _sys_mbstowcs is actually most of the time called as sys_mbstowcs with
a 0 codepage. If cp is not 0, the codepage is evaluated and used for the
conversion. This is so that fhandler_console can switch to an alternate
charset, which is the charset returned by GetConsoleCP (). Most of the
time this is used for box and line drawing characters. */
-size_t __reg3
-sys_cp_mbstowcs (mbtowc_p f_mbtowc, wchar_t *dst, size_t dlen,
- const char *src, size_t nms)
+size_t
+_sys_mbstowcs (mbtowc_p f_mbtowc, wchar_t *dst, size_t dlen, const char *src,
+ size_t nms)
{
wchar_t *ptr = dst;
unsigned const char *pmbs = (unsigned const char *) src;
@@ -670,17 +645,8 @@ sys_cp_mbstowcs (mbtowc_p f_mbtowc, wchar_t *dst, size_t dlen,
return count;
}
-size_t __reg3
-sys_mbstowcs (wchar_t * dst, size_t dlen, const char *src, size_t nms)
-{
- mbtowc_p f_mbtowc = __MBTOWC;
- if (f_mbtowc == __ascii_mbtowc)
- f_mbtowc = __utf8_mbtowc;
- return sys_cp_mbstowcs (f_mbtowc, dst, dlen, src, nms);
-}
-
/* Same as sys_wcstombs_alloc, just backwards. */
-size_t __reg3
+size_t
sys_mbstowcs_alloc (wchar_t **dst_p, int type, const char *src, size_t nms)
{
size_t ret;