]> Savannah Git Hosting - gnulib.git/commitdiff
*c32*: Inline most functions on glibc and musl libc.
authorBruno Haible <bruno@clisp.org>
Tue, 4 Apr 2023 10:38:25 +0000 (12:38 +0200)
committerBruno Haible <bruno@clisp.org>
Tue, 4 Apr 2023 11:09:52 +0000 (13:09 +0200)
* lib/uchar.in.h: Invoke _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END.
(btoc32): Inline if _GL_WCHAR_T_IS_UCS4.
(c32isalnum, c32isalpha, c32isblank, c32iscntrl, c32isdigit, c32isgraph,
c32islower, c32isprint, c32ispunct, c32isspace, c32isupper,
c32isxdigit): Inline if
_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t.
(c32snrtombs, c32srtombs, c32stombs, c32tob, mbsnrtoc32s, mbsrtoc32s,
mbstoc32s): Inline if _GL_WCHAR_T_IS_UCS4.
* lib/btoc32.c: Define compilation unit marker.
(btoc32): Conditionally mark as _GL_EXTERN_INLINE.
* lib/c32isalnum.c: Define compilation unit marker.
* lib/c32isalpha.c: Likewise.
* lib/c32isblank.c: Likewise.
* lib/c32iscntrl.c: Likewise.
* lib/c32isdigit.c: Likewise.
* lib/c32isgraph.c: Likewise.
* lib/c32islower.c: Likewise.
* lib/c32isprint.c: Likewise.
* lib/c32ispunct.c: Likewise.
* lib/c32isspace.c: Likewise.
* lib/c32isupper.c: Likewise.
* lib/c32isxdigit.c: Likewise.
* lib/c32is-impl.h (FUNC): Conditionally mark as _GL_EXTERN_INLINE.
* lib/c32snrtombs.c: Define compilation unit marker.
(c32snrtombs): Conditionally mark as _GL_EXTERN_INLINE.
* lib/c32srtombs.c: Define compilation unit marker.
(c32srtombs): Conditionally mark as _GL_EXTERN_INLINE.
* lib/c32stombs.c: Define compilation unit marker.
(c32stombs): Conditionally mark as _GL_EXTERN_INLINE.
* lib/c32tob.c: Define compilation unit marker.
(c32tob): Conditionally mark as _GL_EXTERN_INLINE.
* lib/mbsnrtoc32s.c: Define compilation unit marker.
(mbsnrtoc32s): Conditionally mark as _GL_EXTERN_INLINE.
* lib/mbsrtoc32s.c: Define compilation unit marker.
(mbsrtoc32s): Conditionally mark as _GL_EXTERN_INLINE.
* lib/mbstoc32s.c: Define compilation unit marker.
(mbstoc32s): Conditionally mark as _GL_EXTERN_INLINE.
* modules/uchar (Depends-on): Add extern-inline.

24 files changed:
ChangeLog
lib/btoc32.c
lib/c32is-impl.h
lib/c32isalnum.c
lib/c32isalpha.c
lib/c32isblank.c
lib/c32iscntrl.c
lib/c32isdigit.c
lib/c32isgraph.c
lib/c32islower.c
lib/c32isprint.c
lib/c32ispunct.c
lib/c32isspace.c
lib/c32isupper.c
lib/c32isxdigit.c
lib/c32snrtombs.c
lib/c32srtombs.c
lib/c32stombs.c
lib/c32tob.c
lib/mbsnrtoc32s.c
lib/mbsrtoc32s.c
lib/mbstoc32s.c
lib/uchar.in.h
modules/uchar

index b3d4ca389f45035901aadc6f24ead959d9f49343..9a78e7f77179832c13c1a53056276c7bb774ab33 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,45 @@
+2023-04-04  Bruno Haible  <bruno@clisp.org>
+
+       *c32*: Inline most functions on glibc and musl libc.
+       * lib/uchar.in.h: Invoke _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END.
+       (btoc32): Inline if _GL_WCHAR_T_IS_UCS4.
+       (c32isalnum, c32isalpha, c32isblank, c32iscntrl, c32isdigit, c32isgraph,
+       c32islower, c32isprint, c32ispunct, c32isspace, c32isupper,
+       c32isxdigit): Inline if
+       _GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t.
+       (c32snrtombs, c32srtombs, c32stombs, c32tob, mbsnrtoc32s, mbsrtoc32s,
+       mbstoc32s): Inline if _GL_WCHAR_T_IS_UCS4.
+       * lib/btoc32.c: Define compilation unit marker.
+       (btoc32): Conditionally mark as _GL_EXTERN_INLINE.
+       * lib/c32isalnum.c: Define compilation unit marker.
+       * lib/c32isalpha.c: Likewise.
+       * lib/c32isblank.c: Likewise.
+       * lib/c32iscntrl.c: Likewise.
+       * lib/c32isdigit.c: Likewise.
+       * lib/c32isgraph.c: Likewise.
+       * lib/c32islower.c: Likewise.
+       * lib/c32isprint.c: Likewise.
+       * lib/c32ispunct.c: Likewise.
+       * lib/c32isspace.c: Likewise.
+       * lib/c32isupper.c: Likewise.
+       * lib/c32isxdigit.c: Likewise.
+       * lib/c32is-impl.h (FUNC): Conditionally mark as _GL_EXTERN_INLINE.
+       * lib/c32snrtombs.c: Define compilation unit marker.
+       (c32snrtombs): Conditionally mark as _GL_EXTERN_INLINE.
+       * lib/c32srtombs.c: Define compilation unit marker.
+       (c32srtombs): Conditionally mark as _GL_EXTERN_INLINE.
+       * lib/c32stombs.c: Define compilation unit marker.
+       (c32stombs): Conditionally mark as _GL_EXTERN_INLINE.
+       * lib/c32tob.c: Define compilation unit marker.
+       (c32tob): Conditionally mark as _GL_EXTERN_INLINE.
+       * lib/mbsnrtoc32s.c: Define compilation unit marker.
+       (mbsnrtoc32s): Conditionally mark as _GL_EXTERN_INLINE.
+       * lib/mbsrtoc32s.c: Define compilation unit marker.
+       (mbsrtoc32s): Conditionally mark as _GL_EXTERN_INLINE.
+       * lib/mbstoc32s.c: Define compilation unit marker.
+       (mbstoc32s): Conditionally mark as _GL_EXTERN_INLINE.
+       * modules/uchar (Depends-on): Add extern-inline.
+
 2023-04-04  Pádraig Brady  <P@draigBrady.com>
 
        backupfile: fix bug when renaming from subdirectory
index 9ba8fb5a5ea09adfc3c16c0a1854588864b8521d..07fbe194b694fb9baa434621146f93685092457c 100644 (file)
 
 #include <config.h>
 
+#define IN_BTOC32
 /* Specification.  */
 #include <uchar.h>
 
 #include <stdio.h>
 #include <string.h>
 
+#if _GL_WCHAR_T_IS_UCS4
+_GL_EXTERN_INLINE
+#endif
 wint_t
 btoc32 (int c)
 {
index d5e5362c0bc0ddb3f6eb5eec885c292d8f2d399c..8682a6897ed86257d1c8deeafd43c6a8298d7222 100644 (file)
@@ -38,6 +38,9 @@
 
 #include "unictype.h"
 
+#if _GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t
+_GL_EXTERN_INLINE
+#endif
 int
 FUNC (wint_t wc)
 {
index 6127d991488e1e602f33ea6fd3996dcd95f23ffb..c3ab2b82999927dd8c504e59e0849b660e500c96 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#define IN_C32ISALNUM
 /* Specification.  */
 #include <uchar.h>
 
index 4041bed6059445a69a7d4da6d1e780966650e4bd..1462cf7083fad78ed00de20b78a5b4bb14209189 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#define IN_C32ISALPHA
 /* Specification.  */
 #include <uchar.h>
 
index cae38e29f9bec904671d4cb168bb0c2d558ed3d3..edd79e8963d03389ae3ac4ece489d8c580d3b72f 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#define IN_C32ISBLANK
 /* Specification.  */
 #include <uchar.h>
 
index 48288eb1124f381295c64c24cd1c520f1d2e6e09..b067aacb1b8b082462cf8ce55aed72bb0e5e7f26 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#define IN_C32ISCNTRL
 /* Specification.  */
 #include <uchar.h>
 
index 83819373341cf43b8448763189e9a26b44fd40ac..70ed5ff5f772c314720e05b88f522572f0d0194e 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#define IN_C32ISDIGIT
 /* Specification.  */
 #include <uchar.h>
 
index 4c0677105e851075c1f49c461bfc7ebaa5a6fac2..f23d19173549008553933deb262ed1568e227eec 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#define IN_C32ISGRAPH
 /* Specification.  */
 #include <uchar.h>
 
index 55b689e8188260d8e630eb9e54fdf57c5a39bc53..3a3d6bc3363d5c820ee679df384a4c2afa148ca9 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#define IN_C32ISLOWER
 /* Specification.  */
 #include <uchar.h>
 
index fd98088c315a107a786f294fbcc0ad2d9e9f0186..f19e53dd6c4dda3ad84b5f1a70e9ade84c2604a1 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#define IN_C32ISPRINT
 /* Specification.  */
 #include <uchar.h>
 
index aba446d73e712776d43e1ab79316c1c42f5a41b2..f06d79f0c6530e8b851bb23c2d0eee3ffc118169 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#define IN_C32ISPUNCT
 /* Specification.  */
 #include <uchar.h>
 
index 84c4fcfe6a066656e68decf1dd7b3dc877c7d1d2..115d0fb2a122185e3d1967b2f576661cf300e4ac 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#define IN_C32ISSPACE
 /* Specification.  */
 #include <uchar.h>
 
index 5dc3a3d3ea4342e2db74a75c4d6345943f5f0ddf..5fdc2c4daea3b234eb25efa4ba0d944b910d0e9b 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#define IN_C32ISUPPER
 /* Specification.  */
 #include <uchar.h>
 
index b78fdc9d043d238f212ce94f9b955dfd232c7159..8dcd91427ed53a598b737185e69bed8958f4febf 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <config.h>
 
+#define IN_C32ISXDIGIT
 /* Specification.  */
 #include <uchar.h>
 
index fd10fc15953822b6c356bed4b19d8970f6958532..e47df6bf8edec751f6d1ee5bfbd0f7a62c8005c2 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <config.h>
 
+#define IN_C32SNRTOMBS
 /* Specification.  */
 #include <uchar.h>
 
@@ -44,6 +45,9 @@ extern mbstate_t _gl_c32srtombs_state;
 
 static_assert (sizeof (char32_t) == sizeof (wchar_t));
 
+# if _GL_WCHAR_T_IS_UCS4
+_GL_EXTERN_INLINE
+# endif
 size_t
 c32snrtombs (char *dest, const char32_t **srcp, size_t srclen, size_t len,
              mbstate_t *ps)
index 50db58c3d30e71b461e147e4258f32bf52fd9205..306c75ae439ec0a3f601b0a802acd7a4c1f6d1c4 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <config.h>
 
+#define IN_C32SRTOMBS
 /* Specification.  */
 #include <uchar.h>
 
@@ -44,6 +45,9 @@ extern mbstate_t _gl_c32srtombs_state;
 
 static_assert (sizeof (char32_t) == sizeof (wchar_t));
 
+# if _GL_WCHAR_T_IS_UCS4
+_GL_EXTERN_INLINE
+# endif
 size_t
 c32srtombs (char *dest, const char32_t **srcp, size_t len, mbstate_t *ps)
 {
index f469d3bb52abe4ea211920a3fabe5729c5fe1249..86e84b2fe7a2986b010a4678ff1d2f7cf5d3f80c 100644 (file)
 
 #include <config.h>
 
+#define IN_C32STOMBS
 /* Specification.  */
 #include <uchar.h>
 
 #include <string.h>
 #include <wchar.h>
 
+#if _GL_WCHAR_T_IS_UCS4
+_GL_EXTERN_INLINE
+#endif
 size_t
 c32stombs (char *dest, const char32_t *src, size_t len)
 {
index a18aac6efcf0248f226363a047fc8a4795fc6c77..7b164352c542f277d9c756cfba052ad00ab4da8d 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <config.h>
 
+#define IN_C32TOB
 /* Specification.  */
 #include <uchar.h>
 
@@ -25,6 +26,9 @@
 #include <string.h>
 #include <wchar.h>
 
+#if _GL_WCHAR_T_IS_UCS4
+_GL_EXTERN_INLINE
+#endif
 int
 c32tob (wint_t wc)
 {
index c8084da3d9ca95d1663d1b60a664c13882cf5cd6..d52e9934e07235ee4a5fc4b967917b313db4df5e 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <config.h>
 
+#define IN_MBSNRTOC32S
 /* Specification.  */
 #include <uchar.h>
 
@@ -53,6 +54,9 @@ extern mbstate_t _gl_mbsrtoc32s_state;
 
 static_assert (sizeof (char32_t) == sizeof (wchar_t));
 
+# if _GL_WCHAR_T_IS_UCS4
+_GL_EXTERN_INLINE
+# endif
 size_t
 mbsnrtoc32s (char32_t *dest, const char **srcp, size_t srclen, size_t len,
              mbstate_t *ps)
index 9c5a5d096a12ecd9e2b161a1d4ecc7c7b648901a..32306a50e7697a1b5b1986dd46dcca097dff90d3 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <config.h>
 
+#define IN_MBSRTOC32S
 /* Specification.  */
 #include <uchar.h>
 
@@ -45,6 +46,9 @@ extern mbstate_t _gl_mbsrtoc32s_state;
 
 static_assert (sizeof (char32_t) == sizeof (wchar_t));
 
+# if _GL_WCHAR_T_IS_UCS4
+_GL_EXTERN_INLINE
+# endif
 size_t
 mbsrtoc32s (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps)
 {
index 24564152dc30e12c2a200b0443cbad2b239be99b..0dac80e8b0cc0629ef4fd48320dfc7999c1dae4e 100644 (file)
 
 #include <config.h>
 
+#define IN_MBSTOC32S
 /* Specification.  */
 #include <uchar.h>
 
 #include <string.h>
 #include <wchar.h>
 
+#if _GL_WCHAR_T_IS_UCS4
+_GL_EXTERN_INLINE
+#endif
 size_t
 mbstoc32s (char32_t *dest, const char *src, size_t len)
 {
index 46b4be4f6d99b2b49d3772d38d6acc60b39c46e7..bd1c5441cc6542a3ef821679ab3c33b7b4532f7d 100644 (file)
 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
 
 
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+
+
 #if !(@HAVE_UCHAR_H@ || (defined __cplusplus && @CXX_HAS_CHAR8_TYPE@))
 
 /* An 8-bit variant of wchar_t.
@@ -123,10 +129,22 @@ typedef uint_least32_t gl_char32_t;
 /* glibc, musl libc */
 # define _GL_WCHAR_T_IS_UCS4 1
 #endif
+#if _GL_WCHAR_T_IS_UCS4
+static_assert (sizeof (char32_t) == sizeof (wchar_t));
+#endif
+
 
 /* Convert a single-byte character to a 32-bit wide character.  */
 #if @GNULIB_BTOC32@
+# if _GL_WCHAR_T_IS_UCS4 && !defined IN_BTOC32
+_GL_INLINE _GL_ATTRIBUTE_PURE wint_t
+btoc32 (int c)
+{
+  return btowc (c);
+}
+# else
 _GL_FUNCDECL_SYS (btoc32, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+# endif
 _GL_CXXALIAS_SYS (btoc32, wint_t, (int c));
 _GL_CXXALIASWARN (btoc32);
 #endif
@@ -134,62 +152,158 @@ _GL_CXXALIASWARN (btoc32);
 
 /* Test a specific property of a 32-bit wide character.  */
 #if @GNULIB_C32ISALNUM@
+# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISALNUM
+_GL_INLINE int
+c32isalnum (wint_t wc)
+{
+  return iswalnum (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32isalnum, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32isalnum, int, (wint_t wc));
 _GL_CXXALIASWARN (c32isalnum);
 #endif
 #if @GNULIB_C32ISALPHA@
+# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISALPHA
+_GL_INLINE int
+c32isalpha (wint_t wc)
+{
+  return iswalpha (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32isalpha, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32isalpha, int, (wint_t wc));
 _GL_CXXALIASWARN (c32isalpha);
 #endif
 #if @GNULIB_C32ISBLANK@
+# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISBLANK
+_GL_INLINE int
+c32isblank (wint_t wc)
+{
+  return iswblank (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32isblank, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32isblank, int, (wint_t wc));
 _GL_CXXALIASWARN (c32isblank);
 #endif
 #if @GNULIB_C32ISCNTRL@
+# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISCNTRL
+_GL_INLINE int
+c32iscntrl (wint_t wc)
+{
+  return iswcntrl (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32iscntrl, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32iscntrl, int, (wint_t wc));
 _GL_CXXALIASWARN (c32iscntrl);
 #endif
 #if @GNULIB_C32ISDIGIT@
+# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISDIGIT
+_GL_INLINE int
+c32isdigit (wint_t wc)
+{
+  return iswdigit (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32isdigit, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32isdigit, int, (wint_t wc));
 _GL_CXXALIASWARN (c32isdigit);
 #endif
 #if @GNULIB_C32ISGRAPH@
+# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISGRAPH
+_GL_INLINE int
+c32isgraph (wint_t wc)
+{
+  return iswgraph (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32isgraph, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32isgraph, int, (wint_t wc));
 _GL_CXXALIASWARN (c32isgraph);
 #endif
 #if @GNULIB_C32ISLOWER@
+# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISLOWER
+_GL_INLINE int
+c32islower (wint_t wc)
+{
+  return iswlower (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32islower, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32islower, int, (wint_t wc));
 _GL_CXXALIASWARN (c32islower);
 #endif
 #if @GNULIB_C32ISPRINT@
+# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISPRINT
+_GL_INLINE int
+c32isprint (wint_t wc)
+{
+  return iswprint (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32isprint, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32isprint, int, (wint_t wc));
 _GL_CXXALIASWARN (c32isprint);
 #endif
 #if @GNULIB_C32ISPUNCT@
+# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISPUNCT
+_GL_INLINE int
+c32ispunct (wint_t wc)
+{
+  return iswpunct (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32ispunct, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32ispunct, int, (wint_t wc));
 _GL_CXXALIASWARN (c32ispunct);
 #endif
 #if @GNULIB_C32ISSPACE@
+# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISSPACE
+_GL_INLINE int
+c32isspace (wint_t wc)
+{
+  return iswspace (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32isspace, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32isspace, int, (wint_t wc));
 _GL_CXXALIASWARN (c32isspace);
 #endif
 #if @GNULIB_C32ISUPPER@
+# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISUPPER
+_GL_INLINE int
+c32isupper (wint_t wc)
+{
+  return iswupper (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32isupper, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32isupper, int, (wint_t wc));
 _GL_CXXALIASWARN (c32isupper);
 #endif
 #if @GNULIB_C32ISXDIGIT@
+# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISXDIGIT
+_GL_INLINE int
+c32isxdigit (wint_t wc)
+{
+  return iswxdigit (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32isxdigit, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32isxdigit, int, (wint_t wc));
 _GL_CXXALIASWARN (c32isxdigit);
 #endif
@@ -224,10 +338,19 @@ _GL_WARN_ON_USE (c32rtomb, "c32rtomb is not portable - "
 
 /* Convert a 32-bit wide string to a string.  */
 #if @GNULIB_C32SNRTOMBS@
+# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32SNRTOMBS
+_GL_INLINE _GL_ARG_NONNULL ((2)) size_t
+c32snrtombs (char *dest, const char32_t **srcp, size_t srclen, size_t len,
+             mbstate_t *ps)
+{
+  return wcsnrtombs (dest, (const wchar_t **) srcp, srclen, len, ps);
+}
+# else
 _GL_FUNCDECL_SYS (c32snrtombs, size_t,
                   (char *dest, const char32_t **srcp, size_t srclen, size_t len,
                    mbstate_t *ps)
                   _GL_ARG_NONNULL ((2)));
+# endif
 _GL_CXXALIAS_SYS (c32snrtombs, size_t,
                   (char *dest, const char32_t **srcp, size_t srclen, size_t len,
                    mbstate_t *ps));
@@ -237,9 +360,17 @@ _GL_CXXALIASWARN (c32snrtombs);
 
 /* Convert a 32-bit wide string to a string.  */
 #if @GNULIB_C32SRTOMBS@
+# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32SRTOMBS
+_GL_INLINE _GL_ARG_NONNULL ((2)) size_t
+c32srtombs (char *dest, const char32_t **srcp, size_t len, mbstate_t *ps)
+{
+  return wcsrtombs (dest, (const wchar_t **) srcp, len, ps);
+}
+# else
 _GL_FUNCDECL_SYS (c32srtombs, size_t,
                   (char *dest, const char32_t **srcp, size_t len, mbstate_t *ps)
                   _GL_ARG_NONNULL ((2)));
+# endif
 _GL_CXXALIAS_SYS (c32srtombs, size_t,
                   (char *dest, const char32_t **srcp, size_t len,
                    mbstate_t *ps));
@@ -249,9 +380,20 @@ _GL_CXXALIASWARN (c32srtombs);
 
 /* Convert a 32-bit wide string to a string.  */
 #if @GNULIB_C32STOMBS@
+# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32STOMBS
+_GL_INLINE _GL_ARG_NONNULL ((2)) size_t
+c32stombs (char *dest, const char32_t *src, size_t len)
+{
+  mbstate_t state;
+
+  memset (&state, '\0', sizeof (mbstate_t));
+  return c32srtombs (dest, &src, len, &state);
+}
+# else
 _GL_FUNCDECL_SYS (c32stombs, size_t,
                   (char *dest, const char32_t *src, size_t len)
                   _GL_ARG_NONNULL ((2)));
+# endif
 _GL_CXXALIAS_SYS (c32stombs, size_t,
                   (char *dest, const char32_t *src, size_t len));
 _GL_CXXALIASWARN (c32stombs);
@@ -262,7 +404,15 @@ _GL_CXXALIASWARN (c32stombs);
    Returns the single-byte representation of WC if it exists,
    or EOF otherwise.  */
 #if @GNULIB_C32TOB@
+# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32TOB
+_GL_INLINE int
+c32tob (wint_t wc)
+{
+  return wctob (wc);
+}
+# else
 _GL_FUNCDECL_SYS (c32tob, int, (wint_t wc));
+# endif
 _GL_CXXALIAS_SYS (c32tob, int, (wint_t wc));
 _GL_CXXALIASWARN (c32tob);
 #endif
@@ -301,10 +451,19 @@ _GL_WARN_ON_USE (mbrtoc32, "mbrtoc32 is not portable - "
 
 /* Convert a string to a 32-bit wide string.  */
 #if @GNULIB_MBSNRTOC32S@
+# if _GL_WCHAR_T_IS_UCS4 && !defined IN_MBSNRTOC32S
+_GL_INLINE _GL_ARG_NONNULL ((2)) size_t
+mbsnrtoc32s (char32_t *dest, const char **srcp, size_t srclen, size_t len,
+             mbstate_t *ps)
+{
+  return mbsnrtowcs ((wchar_t *) dest, srcp, srclen, len, ps);
+}
+# else
 _GL_FUNCDECL_SYS (mbsnrtoc32s, size_t,
                   (char32_t *dest, const char **srcp, size_t srclen, size_t len,
                    mbstate_t *ps)
                   _GL_ARG_NONNULL ((2)));
+# endif
 _GL_CXXALIAS_SYS (mbsnrtoc32s, size_t,
                   (char32_t *dest, const char **srcp, size_t srclen, size_t len,
                    mbstate_t *ps));
@@ -314,9 +473,17 @@ _GL_CXXALIASWARN (mbsnrtoc32s);
 
 /* Convert a string to a 32-bit wide string.  */
 #if @GNULIB_MBSRTOC32S@
+# if _GL_WCHAR_T_IS_UCS4 && !defined IN_MBSRTOC32S
+_GL_INLINE _GL_ARG_NONNULL ((2)) size_t
+mbsrtoc32s (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+{
+  return mbsrtowcs ((wchar_t *) dest, srcp, len, ps);
+}
+# else
 _GL_FUNCDECL_SYS (mbsrtoc32s, size_t,
                   (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps)
                   _GL_ARG_NONNULL ((2)));
+# endif
 _GL_CXXALIAS_SYS (mbsrtoc32s, size_t,
                   (char32_t *dest, const char **srcp, size_t len,
                    mbstate_t *ps));
@@ -326,13 +493,26 @@ _GL_CXXALIASWARN (mbsrtoc32s);
 
 /* Convert a string to a 32-bit wide string.  */
 #if @GNULIB_MBSTOC32S@
+# if _GL_WCHAR_T_IS_UCS4 && !defined IN_MBSTOC32S
+_GL_INLINE _GL_ARG_NONNULL ((2)) size_t
+mbstoc32s (char32_t *dest, const char *src, size_t len)
+{
+  mbstate_t state;
+
+  memset (&state, '\0', sizeof (mbstate_t));
+  return mbsrtoc32s (dest, &src, len, &state);
+}
+# else
 _GL_FUNCDECL_SYS (mbstoc32s, size_t,
                   (char32_t *dest, const char *src, size_t len)
                   _GL_ARG_NONNULL ((2)));
+# endif
 _GL_CXXALIAS_SYS (mbstoc32s, size_t,
                   (char32_t *dest, const char *src, size_t len));
 _GL_CXXALIASWARN (mbstoc32s);
 #endif
 
 
+_GL_INLINE_HEADER_END
+
 #endif /* _@GUARD_PREFIX@_UCHAR_H */
index 8cf4cfb5cf0959801a8d0db5df977b9eab7a63d9..985b58206f440aebe86a242e67928d52ecfdb3f5 100644 (file)
@@ -10,6 +10,8 @@ Depends-on:
 gen-header
 include_next
 snippet/c++defs
+extern-inline
+assert-h
 stdint
 wchar