]> Savannah Git Hosting - gnulib.git/commitdiff
unistr, unigbrk: Use const-improved function macros for 30 functions.
authorBruno Haible <bruno@clisp.org>
Sun, 9 Feb 2025 10:27:56 +0000 (11:27 +0100)
committerBruno Haible <bruno@clisp.org>
Sun, 9 Feb 2025 10:29:53 +0000 (11:29 +0100)
Reported by Kang-Che Sung <explorer09@gmail.com> in
<https://lists.gnu.org/archive/html/bug-libunistring/2025-02/msg00000.html>.

* lib/unistr.in.h (u*_check, u*_next, u*_prev): Define as macros that
cast the result to a non-const pointer when the argument is a non-const
pointer.
(u*_chr, u*_strchr, u*_strrchr, u*_strpbrk, u*_strstr): Define as macros
that cast the result to a const pointer when the argument is a const
pointer.
* lib/unistr/u8-check.c: Define _LIBUNISTRING_NO_CONST_GENERICS.
* lib/unistr/u16-check.c: Likewise.
* lib/unistr/u32-check.c: Likewise.
* lib/unistr/u8-next.c: Likewise.
* lib/unistr/u16-next.c: Likewise.
* lib/unistr/u32-next.c: Likewise.
* lib/unistr/u8-prev.c: Likewise.
* lib/unistr/u16-prev.c: Likewise.
* lib/unistr/u32-prev.c: Likewise.
* lib/unistr/u8-chr.c: Likewise.
* lib/unistr/u16-chr.c: Likewise.
* lib/unistr/u32-chr.c: Likewise.
* lib/unistr/u8-strchr.c: Likewise.
* lib/unistr/u16-strchr.c: Likewise.
* lib/unistr/u32-strchr.c: Likewise.
* lib/unistr/u8-strrchr.c: Likewise.
* lib/unistr/u16-strrchr.c: Likewise.
* lib/unistr/u32-strrchr.c: Likewise.
* lib/unistr/u8-strpbrk.c: Likewise.
* lib/unistr/u16-strpbrk.c: Likewise.
* lib/unistr/u32-strpbrk.c: Likewise.
* lib/unistr/u8-strstr.c: Likewise.
* lib/unistr/u16-strstr.c: Likewise.
* lib/unistr/u32-strstr.c: Likewise.
* lib/unigbrk.in.h (u*_grapheme_next, u*_grapheme_prev): Define as
macros that cast the result to a non-const pointer when the argument is
a non-const pointer.
* lib/unigbrk/u8-grapheme-next.c: Define _LIBUNISTRING_NO_CONST_GENERICS.
* lib/unigbrk/u16-grapheme-next.c: Likewise.
* lib/unigbrk/u32-grapheme-next.c: Likewise.
* lib/unigbrk/u8-grapheme-prev.c: Likewise.
* lib/unigbrk/u16-grapheme-prev.c: Likewise.
* lib/unigbrk/u32-grapheme-prev.c: Likewise.

33 files changed:
ChangeLog
lib/unigbrk.in.h
lib/unigbrk/u16-grapheme-next.c
lib/unigbrk/u16-grapheme-prev.c
lib/unigbrk/u32-grapheme-next.c
lib/unigbrk/u32-grapheme-prev.c
lib/unigbrk/u8-grapheme-next.c
lib/unigbrk/u8-grapheme-prev.c
lib/unistr.in.h
lib/unistr/u16-check.c
lib/unistr/u16-chr.c
lib/unistr/u16-next.c
lib/unistr/u16-prev.c
lib/unistr/u16-strchr.c
lib/unistr/u16-strpbrk.c
lib/unistr/u16-strrchr.c
lib/unistr/u16-strstr.c
lib/unistr/u32-check.c
lib/unistr/u32-chr.c
lib/unistr/u32-next.c
lib/unistr/u32-prev.c
lib/unistr/u32-strchr.c
lib/unistr/u32-strpbrk.c
lib/unistr/u32-strrchr.c
lib/unistr/u32-strstr.c
lib/unistr/u8-check.c
lib/unistr/u8-chr.c
lib/unistr/u8-next.c
lib/unistr/u8-prev.c
lib/unistr/u8-strchr.c
lib/unistr/u8-strpbrk.c
lib/unistr/u8-strrchr.c
lib/unistr/u8-strstr.c

index 135637d97b4c0455b8c0b13b96e012623d4d9b71..a24d96bc4fd8d77c98cf3b31f418bf1b77d7d80d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,48 @@
+2025-02-09  Bruno Haible  <bruno@clisp.org>
+
+       unistr, unigbrk: Use const-improved function macros for 30 functions.
+       Reported by Kang-Che Sung <explorer09@gmail.com> in
+       <https://lists.gnu.org/archive/html/bug-libunistring/2025-02/msg00000.html>.
+       * lib/unistr.in.h (u*_check, u*_next, u*_prev): Define as macros that
+       cast the result to a non-const pointer when the argument is a non-const
+       pointer.
+       (u*_chr, u*_strchr, u*_strrchr, u*_strpbrk, u*_strstr): Define as macros
+       that cast the result to a const pointer when the argument is a const
+       pointer.
+       * lib/unistr/u8-check.c: Define _LIBUNISTRING_NO_CONST_GENERICS.
+       * lib/unistr/u16-check.c: Likewise.
+       * lib/unistr/u32-check.c: Likewise.
+       * lib/unistr/u8-next.c: Likewise.
+       * lib/unistr/u16-next.c: Likewise.
+       * lib/unistr/u32-next.c: Likewise.
+       * lib/unistr/u8-prev.c: Likewise.
+       * lib/unistr/u16-prev.c: Likewise.
+       * lib/unistr/u32-prev.c: Likewise.
+       * lib/unistr/u8-chr.c: Likewise.
+       * lib/unistr/u16-chr.c: Likewise.
+       * lib/unistr/u32-chr.c: Likewise.
+       * lib/unistr/u8-strchr.c: Likewise.
+       * lib/unistr/u16-strchr.c: Likewise.
+       * lib/unistr/u32-strchr.c: Likewise.
+       * lib/unistr/u8-strrchr.c: Likewise.
+       * lib/unistr/u16-strrchr.c: Likewise.
+       * lib/unistr/u32-strrchr.c: Likewise.
+       * lib/unistr/u8-strpbrk.c: Likewise.
+       * lib/unistr/u16-strpbrk.c: Likewise.
+       * lib/unistr/u32-strpbrk.c: Likewise.
+       * lib/unistr/u8-strstr.c: Likewise.
+       * lib/unistr/u16-strstr.c: Likewise.
+       * lib/unistr/u32-strstr.c: Likewise.
+       * lib/unigbrk.in.h (u*_grapheme_next, u*_grapheme_prev): Define as
+       macros that cast the result to a non-const pointer when the argument is
+       a non-const pointer.
+       * lib/unigbrk/u8-grapheme-next.c: Define _LIBUNISTRING_NO_CONST_GENERICS.
+       * lib/unigbrk/u16-grapheme-next.c: Likewise.
+       * lib/unigbrk/u32-grapheme-next.c: Likewise.
+       * lib/unigbrk/u8-grapheme-prev.c: Likewise.
+       * lib/unigbrk/u16-grapheme-prev.c: Likewise.
+       * lib/unigbrk/u32-grapheme-prev.c: Likewise.
+
 2025-02-09  Bruno Haible  <bruno@clisp.org>
 
        mbsstr, mbscasestr, mbspcasecmp: Fix use of 'typeof'.
index e96025274d48051955437ac5d89ee464d04084e3..19c3e0771bb5469c088bce74c9315975f9bb513e 100644 (file)
@@ -110,6 +110,73 @@ extern const uint16_t *
 extern const uint32_t *
        u32_grapheme_next (const uint32_t *s, const uint32_t *end)
        _UC_ATTRIBUTE_PURE;
+#ifndef _LIBUNISTRING_NO_CONST_GENERICS
+/* Don't silently convert a 'const uintN_t *' to a 'uintN_t *'.  Programmers
+   want compiler warnings for 'const' related mistakes.  */
+# ifdef __cplusplus
+template <typename T>
+  T * u8_grapheme_next_template (T* s, const uint8_t *end);
+template <>
+  inline uint8_t * u8_grapheme_next_template (uint8_t *s, const uint8_t *end)
+  { return const_cast<uint8_t *>(u8_grapheme_next (s, end)); }
+template <>
+  inline const uint8_t * u8_grapheme_next_template (const uint8_t *s, const uint8_t *end)
+  { return u8_grapheme_next (s, end); }
+#  define u8_grapheme_next u8_grapheme_next_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u8_grapheme_next(s,end) (typeof ((s) + 0)) u8_grapheme_next ((s), (end))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u8_grapheme_next(s,end) \
+      _Generic ((s), \
+                uint8_t *: (uint8_t *) u8_grapheme_next ((s), (end)), \
+                default  :             u8_grapheme_next ((s), (end)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u16_grapheme_next_template (T* s, const uint16_t *end);
+template <>
+  inline uint16_t * u16_grapheme_next_template (uint16_t *s, const uint16_t *end)
+  { return const_cast<uint16_t *>(u16_grapheme_next (s, end)); }
+template <>
+  inline const uint16_t * u16_grapheme_next_template (const uint16_t *s, const uint16_t *end)
+  { return u16_grapheme_next (s, end); }
+#  define u16_grapheme_next u16_grapheme_next_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u16_grapheme_next(s,end) (typeof ((s) + 0)) u16_grapheme_next ((s), (end))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u16_grapheme_next(s,end) \
+      _Generic ((s), \
+                uint16_t *: (uint16_t *) u16_grapheme_next ((s), (end)), \
+                default   :              u16_grapheme_next ((s), (end)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u32_grapheme_next_template (T* s, const uint32_t *end);
+template <>
+  inline uint32_t * u32_grapheme_next_template (uint32_t *s, const uint32_t *end)
+  { return const_cast<uint32_t *>(u32_grapheme_next (s, end)); }
+template <>
+  inline const uint32_t * u32_grapheme_next_template (const uint32_t *s, const uint32_t *end)
+  { return u32_grapheme_next (s, end); }
+#  define u32_grapheme_next u32_grapheme_next_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u32_grapheme_next(s,end) (typeof ((s) + 0)) u32_grapheme_next ((s), (end))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u32_grapheme_next(s,end) \
+      _Generic ((s), \
+                uint32_t *: (uint32_t *) u32_grapheme_next ((s), (end)), \
+                default   :              u32_grapheme_next ((s), (end)))
+#  endif
+# endif
+#endif
 
 /* Returns the start of the previous grapheme cluster before S, or NULL if the
    start of the string has been reached.
@@ -124,6 +191,73 @@ extern const uint16_t *
 extern const uint32_t *
        u32_grapheme_prev (const uint32_t *s, const uint32_t *start)
        _UC_ATTRIBUTE_PURE;
+#ifndef _LIBUNISTRING_NO_CONST_GENERICS
+/* Don't silently convert a 'const uintN_t *' to a 'uintN_t *'.  Programmers
+   want compiler warnings for 'const' related mistakes.  */
+# ifdef __cplusplus
+template <typename T>
+  T * u8_grapheme_prev_template (T* s, const uint8_t *start);
+template <>
+  inline uint8_t * u8_grapheme_prev_template (uint8_t *s, const uint8_t *start)
+  { return const_cast<uint8_t *>(u8_grapheme_prev (s, start)); }
+template <>
+  inline const uint8_t * u8_grapheme_prev_template (const uint8_t *s, const uint8_t *start)
+  { return u8_grapheme_prev (s, start); }
+#  define u8_grapheme_prev u8_grapheme_prev_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u8_grapheme_prev(s,start) (typeof ((s) + 0)) u8_grapheme_prev ((s), (start))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u8_grapheme_prev(s,start) \
+      _Generic ((s), \
+                uint8_t *: (uint8_t *) u8_grapheme_prev ((s), (start)), \
+                default  :             u8_grapheme_prev ((s), (start)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u16_grapheme_prev_template (T* s, const uint16_t *start);
+template <>
+  inline uint16_t * u16_grapheme_prev_template (uint16_t *s, const uint16_t *start)
+  { return const_cast<uint16_t *>(u16_grapheme_prev (s, start)); }
+template <>
+  inline const uint16_t * u16_grapheme_prev_template (const uint16_t *s, const uint16_t *start)
+  { return u16_grapheme_prev (s, start); }
+#  define u16_grapheme_prev u16_grapheme_prev_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u16_grapheme_prev(s,start) (typeof ((s) + 0)) u16_grapheme_prev ((s), (start))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u16_grapheme_prev(s,start) \
+      _Generic ((s), \
+                uint16_t *: (uint16_t *) u16_grapheme_prev ((s), (start)), \
+                default   :              u16_grapheme_prev ((s), (start)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u32_grapheme_prev_template (T* s, const uint32_t *start);
+template <>
+  inline uint32_t * u32_grapheme_prev_template (uint32_t *s, const uint32_t *start)
+  { return const_cast<uint32_t *>(u32_grapheme_prev (s, start)); }
+template <>
+  inline const uint32_t * u32_grapheme_prev_template (const uint32_t *s, const uint32_t *start)
+  { return u32_grapheme_prev (s, start); }
+#  define u32_grapheme_prev u32_grapheme_prev_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u32_grapheme_prev(s,start) (typeof ((s) + 0)) u32_grapheme_prev ((s), (start))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u32_grapheme_prev(s,start) \
+      _Generic ((s), \
+                uint32_t *: (uint32_t *) u32_grapheme_prev ((s), (start)), \
+                default   :              u32_grapheme_prev ((s), (start)))
+#  endif
+# endif
+#endif
 
 /* Determine the grapheme cluster boundaries in S, and store the result at
    p[0..n-1].  p[i] = 1 means that a new grapheme cluster begins at s[i].  p[i]
index 976cbd27dee544fc9002160a939a43f41825e04c..b0e47e17c884a0095298fdf13778e2e89940d6fc 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 47600bd433c714790442bf6226cda75734c98eaf..02fe72f26189dc535f5187acf2a13cffe72e65bb 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 35143967e11722cd3634a910f8b9d06df034f6ac..28fc5052e52e3899377465a73c7f7bc21413754a 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 8f962b5aa109c51a71004583f186c20c9b5c2b72..c76fb9ab521737ea73a161498c61371b48b970b0 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 95b6caba6a1b61f062cb5bb25c7b08e691ddf293..b1d2e3dd3ec984ad7caff732f73b5e31ba0878e7 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 13a5036e3993847ec6d35e922a416fe69779663e..79748cf3fbb73b9f84dbbe1ef68efac4ce9f70f0 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 221700b4a6165b81a55c4f0c37555ef147162981..fd5e0067b28054d4545a6d6aa620d66ad652fcc1 100644 (file)
@@ -81,6 +81,74 @@ extern const uint32_t *
        u32_check (const uint32_t *s, size_t n)
        _UC_ATTRIBUTE_PURE;
 
+#ifndef _LIBUNISTRING_NO_CONST_GENERICS
+/* Don't silently convert a 'const uintN_t *' to a 'uintN_t *'.  Programmers
+   want compiler warnings for 'const' related mistakes.  */
+# ifdef __cplusplus
+template <typename T>
+  T * u8_check_template (T* s, size_t n);
+template <>
+  inline uint8_t * u8_check_template (uint8_t *s, size_t n)
+  { return const_cast<uint8_t *>(u8_check (s, n)); }
+template <>
+  inline const uint8_t * u8_check_template (const uint8_t *s, size_t n)
+  { return u8_check (s, n); }
+#  define u8_check u8_check_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u8_check(s,n) (typeof ((s) + 0)) u8_check ((s), (n))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u8_check(s,n) \
+      _Generic ((s), \
+                uint8_t *: (uint8_t *) u8_check ((s), (n)), \
+                default  :             u8_check ((s), (n)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u16_check_template (T* s, size_t n);
+template <>
+  inline uint16_t * u16_check_template (uint16_t *s, size_t n)
+  { return const_cast<uint16_t *>(u16_check (s, n)); }
+template <>
+  inline const uint16_t * u16_check_template (const uint16_t *s, size_t n)
+  { return u16_check (s, n); }
+#  define u16_check u16_check_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u16_check(s,n) (typeof ((s) + 0)) u16_check ((s), (n))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u16_check(s,n) \
+      _Generic ((s), \
+                uint16_t *: (uint16_t *) u16_check ((s), (n)), \
+                default   :              u16_check ((s), (n)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u32_check_template (T* s, size_t n);
+template <>
+  inline uint32_t * u32_check_template (uint32_t *s, size_t n)
+  { return const_cast<uint32_t *>(u32_check (s, n)); }
+template <>
+  inline const uint32_t * u32_check_template (const uint32_t *s, size_t n)
+  { return u32_check (s, n); }
+#  define u32_check u32_check_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u32_check(s,n) (typeof ((s) + 0)) u32_check ((s), (n))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u32_check(s,n) \
+      _Generic ((s), \
+                uint32_t *: (uint32_t *) u32_check ((s), (n)), \
+                default   :              u32_check ((s), (n)))
+#  endif
+# endif
+#endif
+
 
 /* Elementary string conversions.  */
 
@@ -444,6 +512,73 @@ extern uint16_t *
 extern uint32_t *
        u32_chr (const uint32_t *s, size_t n, ucs4_t uc)
        _UC_ATTRIBUTE_PURE;
+#ifndef _LIBUNISTRING_NO_CONST_GENERICS
+/* Don't silently convert a 'const uintN_t *' to a 'uintN_t *'.  Programmers
+   want compiler warnings for 'const' related mistakes.  */
+# ifdef __cplusplus
+template <typename T>
+  T * u8_chr_template (T* str, size_t n, ucs4_t uc);
+template <>
+  inline uint8_t * u8_chr_template (uint8_t *str, size_t n, ucs4_t uc)
+  { return u8_chr (str, n, uc); }
+template <>
+  inline const uint8_t * u8_chr_template (const uint8_t *str, size_t n, ucs4_t uc)
+  { return u8_chr (str, n, uc); }
+#  define u8_chr u8_chr_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u8_chr(s,n,u) (typeof ((s) + 0)) u8_chr ((s), (n), (u))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u8_chr(s,n,u) \
+      _Generic ((s), \
+                uint8_t const *: (uint8_t const *) u8_chr ((s), (n), (u)), \
+                default        :                   u8_chr ((s), (n), (u)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u16_chr_template (T* str, size_t n, ucs4_t uc);
+template <>
+  inline uint16_t * u16_chr_template (uint16_t *str, size_t n, ucs4_t uc)
+  { return u16_chr (str, n, uc); }
+template <>
+  inline const uint16_t * u16_chr_template (const uint16_t *str, size_t n, ucs4_t uc)
+  { return u16_chr (str, n, uc); }
+#  define u16_chr u16_chr_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u16_chr(s,n,u) (typeof ((s) + 0)) u16_chr ((s), (n), (u))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u16_chr(s,n,u) \
+      _Generic ((s), \
+                uint16_t const *: (uint16_t const *) u16_chr ((s), (n), (u)), \
+                default         :                    u16_chr ((s), (n), (u)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u32_chr_template (T* str, size_t n, ucs4_t uc);
+template <>
+  inline uint32_t * u32_chr_template (uint32_t *str, size_t n, ucs4_t uc)
+  { return u32_chr (str, n, uc); }
+template <>
+  inline const uint32_t * u32_chr_template (const uint32_t *str, size_t n, ucs4_t uc)
+  { return u32_chr (str, n, uc); }
+#  define u32_chr u32_chr_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u32_chr(s,n,u) (typeof ((s) + 0)) u32_chr ((s), (n), (u))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u32_chr(s,n,u) \
+      _Generic ((s), \
+                uint32_t const *: (uint32_t const *) u32_chr ((s), (n), (u)), \
+                default         :                    u32_chr ((s), (n), (u)))
+#  endif
+# endif
+#endif
 
 /* Count the number of Unicode characters in the N units from S.  */
 /* Similar to mbsnlen().  */
@@ -500,6 +635,73 @@ extern const uint16_t *
        u16_next (ucs4_t *puc, const uint16_t *s);
 extern const uint32_t *
        u32_next (ucs4_t *puc, const uint32_t *s);
+#ifndef _LIBUNISTRING_NO_CONST_GENERICS
+/* Don't silently convert a 'const uintN_t *' to a 'uintN_t *'.  Programmers
+   want compiler warnings for 'const' related mistakes.  */
+# ifdef __cplusplus
+template <typename T>
+  T * u8_next_template (ucs4_t *puc, T* s);
+template <>
+  inline uint8_t * u8_next_template (ucs4_t *puc, uint8_t *s)
+  { return const_cast<uint8_t *>(u8_next (puc, s)); }
+template <>
+  inline const uint8_t * u8_next_template (ucs4_t *puc, const uint8_t *s)
+  { return u8_next (puc, s); }
+#  define u8_next u8_next_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u8_next(p,s) (typeof ((s) + 0)) u8_next ((p), (s))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u8_next(p,s) \
+      _Generic ((s), \
+                uint8_t *: (uint8_t *) u8_next ((p), (s)), \
+                default  :             u8_next ((p), (s)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u16_next_template (ucs4_t *puc, T* s);
+template <>
+  inline uint16_t * u16_next_template (ucs4_t *puc, uint16_t *s)
+  { return const_cast<uint16_t *>(u16_next (puc, s)); }
+template <>
+  inline const uint16_t * u16_next_template (ucs4_t *puc, const uint16_t *s)
+  { return u16_next (puc, s); }
+#  define u16_next u16_next_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u16_next(p,s) (typeof ((s) + 0)) u16_next ((p), (s))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u16_next(p,s) \
+      _Generic ((s), \
+                uint16_t *: (uint16_t *) u16_next ((p), (s)), \
+                default   :              u16_next ((p), (s)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u32_next_template (ucs4_t *puc, T* s);
+template <>
+  inline uint32_t * u32_next_template (ucs4_t *puc, uint32_t *s)
+  { return const_cast<uint32_t *>(u32_next (puc, s)); }
+template <>
+  inline const uint32_t * u32_next_template (ucs4_t *puc, const uint32_t *s)
+  { return u32_next (puc, s); }
+#  define u32_next u32_next_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u32_next(p,s) (typeof ((s) + 0)) u32_next ((p), (s))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u32_next(p,s) \
+      _Generic ((s), \
+                uint32_t *: (uint32_t *) u32_next ((p), (s)), \
+                default   :              u32_next ((p), (s)))
+#  endif
+# endif
+#endif
 
 /* Backward iteration step.  Advances the pointer to point to the previous
    character, or returns NULL if the beginning of the string had been reached.
@@ -510,6 +712,73 @@ extern const uint16_t *
        u16_prev (ucs4_t *puc, const uint16_t *s, const uint16_t *start);
 extern const uint32_t *
        u32_prev (ucs4_t *puc, const uint32_t *s, const uint32_t *start);
+#ifndef _LIBUNISTRING_NO_CONST_GENERICS
+/* Don't silently convert a 'const uintN_t *' to a 'uintN_t *'.  Programmers
+   want compiler warnings for 'const' related mistakes.  */
+# ifdef __cplusplus
+template <typename T>
+  T * u8_prev_template (ucs4_t *puc, T* s, const uint8_t *start);
+template <>
+  inline uint8_t * u8_prev_template (ucs4_t *puc, uint8_t *s, const uint8_t *start)
+  { return const_cast<uint8_t *>(u8_prev (puc, s, start)); }
+template <>
+  inline const uint8_t * u8_prev_template (ucs4_t *puc, const uint8_t *s, const uint8_t *start)
+  { return u8_prev (puc, s, start); }
+#  define u8_prev u8_prev_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u8_prev(p,s,start) (typeof ((s) + 0)) u8_prev ((p), (s), (start))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u8_prev(p,s,start) \
+      _Generic ((s), \
+                uint8_t *: (uint8_t *) u8_prev ((p), (s), (start)), \
+                default  :             u8_prev ((p), (s), (start)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u16_prev_template (ucs4_t *puc, T* s, const uint16_t *start);
+template <>
+  inline uint16_t * u16_prev_template (ucs4_t *puc, uint16_t *s, const uint16_t *start)
+  { return const_cast<uint16_t *>(u16_prev (puc, s, start)); }
+template <>
+  inline const uint16_t * u16_prev_template (ucs4_t *puc, const uint16_t *s, const uint16_t *start)
+  { return u16_prev (puc, s, start); }
+#  define u16_prev u16_prev_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u16_prev(p,s,start) (typeof ((s) + 0)) u16_prev ((p), (s), (start))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u16_prev(p,s,start) \
+      _Generic ((s), \
+                uint16_t *: (uint16_t *) u16_prev ((p), (s), (start)), \
+                default   :              u16_prev ((p), (s), (start)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u32_prev_template (ucs4_t *puc, T* s, const uint32_t *start);
+template <>
+  inline uint32_t * u32_prev_template (ucs4_t *puc, uint32_t *s, const uint32_t *start)
+  { return const_cast<uint32_t *>(u32_prev (puc, s, start)); }
+template <>
+  inline const uint32_t * u32_prev_template (ucs4_t *puc, const uint32_t *s, const uint32_t *start)
+  { return u32_prev (puc, s, start); }
+#  define u32_prev u32_prev_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u32_prev(p,s,start) (typeof ((s) + 0)) u32_prev ((p), (s), (start))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u32_prev(p,s,start) \
+      _Generic ((s), \
+                uint32_t *: (uint32_t *) u32_prev ((p), (s), (start)), \
+                default   :              u32_prev ((p), (s), (start)))
+#  endif
+# endif
+#endif
 
 /* Return the number of units in S.  */
 /* Similar to strlen(), wcslen().  */
@@ -656,6 +925,73 @@ extern uint16_t *
 extern uint32_t *
        u32_strchr (const uint32_t *str, ucs4_t uc)
        _UC_ATTRIBUTE_PURE;
+#ifndef _LIBUNISTRING_NO_CONST_GENERICS
+/* Don't silently convert a 'const uintN_t *' to a 'uintN_t *'.  Programmers
+   want compiler warnings for 'const' related mistakes.  */
+# ifdef __cplusplus
+template <typename T>
+  T * u8_strchr_template (T* str, ucs4_t uc);
+template <>
+  inline uint8_t * u8_strchr_template (uint8_t *str, ucs4_t uc)
+  { return u8_strchr (str, uc); }
+template <>
+  inline const uint8_t * u8_strchr_template (const uint8_t *str, ucs4_t uc)
+  { return u8_strchr (str, uc); }
+#  define u8_strchr u8_strchr_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u8_strchr(s,u) (typeof ((s) + 0)) u8_strchr ((s), (u))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u8_strchr(s,u) \
+      _Generic ((s), \
+                uint8_t const *: (uint8_t const *) u8_strchr ((s), (u)), \
+                default        :                   u8_strchr ((s), (u)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u16_strchr_template (T* str, ucs4_t uc);
+template <>
+  inline uint16_t * u16_strchr_template (uint16_t *str, ucs4_t uc)
+  { return u16_strchr (str, uc); }
+template <>
+  inline const uint16_t * u16_strchr_template (const uint16_t *str, ucs4_t uc)
+  { return u16_strchr (str, uc); }
+#  define u16_strchr u16_strchr_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u16_strchr(s,u) (typeof ((s) + 0)) u16_strchr ((s), (u))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u16_strchr(s,u) \
+      _Generic ((s), \
+                uint16_t const *: (uint16_t const *) u16_strchr ((s), (u)), \
+                default         :                    u16_strchr ((s), (u)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u32_strchr_template (T* str, ucs4_t uc);
+template <>
+  inline uint32_t * u32_strchr_template (uint32_t *str, ucs4_t uc)
+  { return u32_strchr (str, uc); }
+template <>
+  inline const uint32_t * u32_strchr_template (const uint32_t *str, ucs4_t uc)
+  { return u32_strchr (str, uc); }
+#  define u32_strchr u32_strchr_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u32_strchr(s,u) (typeof ((s) + 0)) u32_strchr ((s), (u))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u32_strchr(s,u) \
+      _Generic ((s), \
+                uint32_t const *: (uint32_t const *) u32_strchr ((s), (u)), \
+                default         :                    u32_strchr ((s), (u)))
+#  endif
+# endif
+#endif
 
 /* Find the last occurrence of UC in STR.  */
 /* Similar to strrchr(), wcsrchr().  */
@@ -668,6 +1004,73 @@ extern uint16_t *
 extern uint32_t *
        u32_strrchr (const uint32_t *str, ucs4_t uc)
        _UC_ATTRIBUTE_PURE;
+#ifndef _LIBUNISTRING_NO_CONST_GENERICS
+/* Don't silently convert a 'const uintN_t *' to a 'uintN_t *'.  Programmers
+   want compiler warnings for 'const' related mistakes.  */
+# ifdef __cplusplus
+template <typename T>
+  T * u8_strrchr_template (T* str, ucs4_t uc);
+template <>
+  inline uint8_t * u8_strrchr_template (uint8_t *str, ucs4_t uc)
+  { return u8_strrchr (str, uc); }
+template <>
+  inline const uint8_t * u8_strrchr_template (const uint8_t *str, ucs4_t uc)
+  { return u8_strrchr (str, uc); }
+#  define u8_strrchr u8_strrchr_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u8_strrchr(s,u) (typeof ((s) + 0)) u8_strrchr ((s), (u))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u8_strrchr(s,u) \
+      _Generic ((s), \
+                uint8_t const *: (uint8_t const *) u8_strrchr ((s), (u)), \
+                default        :                   u8_strrchr ((s), (u)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u16_strrchr_template (T* str, ucs4_t uc);
+template <>
+  inline uint16_t * u16_strrchr_template (uint16_t *str, ucs4_t uc)
+  { return u16_strrchr (str, uc); }
+template <>
+  inline const uint16_t * u16_strrchr_template (const uint16_t *str, ucs4_t uc)
+  { return u16_strrchr (str, uc); }
+#  define u16_strrchr u16_strrchr_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u16_strrchr(s,u) (typeof ((s) + 0)) u16_strrchr ((s), (u))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u16_strrchr(s,u) \
+      _Generic ((s), \
+                uint16_t const *: (uint16_t const *) u16_strrchr ((s), (u)), \
+                default         :                    u16_strrchr ((s), (u)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u32_strrchr_template (T* str, ucs4_t uc);
+template <>
+  inline uint32_t * u32_strrchr_template (uint32_t *str, ucs4_t uc)
+  { return u32_strrchr (str, uc); }
+template <>
+  inline const uint32_t * u32_strrchr_template (const uint32_t *str, ucs4_t uc)
+  { return u32_strrchr (str, uc); }
+#  define u32_strrchr u32_strrchr_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u32_strrchr(s,u) (typeof ((s) + 0)) u32_strrchr ((s), (u))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u32_strrchr(s,u) \
+      _Generic ((s), \
+                uint32_t const *: (uint32_t const *) u32_strrchr ((s), (u)), \
+                default         :                    u32_strrchr ((s), (u)))
+#  endif
+# endif
+#endif
 
 /* Return the length of the initial segment of STR which consists entirely
    of Unicode characters not in REJECT.  */
@@ -706,6 +1109,73 @@ extern uint16_t *
 extern uint32_t *
        u32_strpbrk (const uint32_t *str, const uint32_t *accept)
        _UC_ATTRIBUTE_PURE;
+#ifndef _LIBUNISTRING_NO_CONST_GENERICS
+/* Don't silently convert a 'const uintN_t *' to a 'uintN_t *'.  Programmers
+   want compiler warnings for 'const' related mistakes.  */
+# ifdef __cplusplus
+template <typename T>
+  T * u8_strpbrk_template (T* str, const uint8_t *accept);
+template <>
+  inline uint8_t * u8_strpbrk_template (uint8_t *str, const uint8_t *accept)
+  { return u8_strpbrk (str, accept); }
+template <>
+  inline const uint8_t * u8_strpbrk_template (const uint8_t *str, const uint8_t *accept)
+  { return u8_strpbrk (str, accept); }
+#  define u8_strpbrk u8_strpbrk_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u8_strpbrk(s,a) (typeof ((s) + 0)) u8_strpbrk ((s), (a))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u8_strpbrk(s,a) \
+      _Generic ((s), \
+                uint8_t const *: (uint8_t const *) u8_strpbrk ((s), (a)), \
+                default        :                   u8_strpbrk ((s), (a)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u16_strpbrk_template (T* str, const uint16_t *accept);
+template <>
+  inline uint16_t * u16_strpbrk_template (uint16_t *str, const uint16_t *accept)
+  { return u16_strpbrk (str, accept); }
+template <>
+  inline const uint16_t * u16_strpbrk_template (const uint16_t *str, const uint16_t *accept)
+  { return u16_strpbrk (str, accept); }
+#  define u16_strpbrk u16_strpbrk_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u16_strpbrk(s,a) (typeof ((s) + 0)) u16_strpbrk ((s), (a))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u16_strpbrk(s,a) \
+      _Generic ((s), \
+                uint16_t const *: (uint16_t const *) u16_strpbrk ((s), (a)), \
+                default         :                    u16_strpbrk ((s), (a)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u32_strpbrk_template (T* str, const uint32_t *accept);
+template <>
+  inline uint32_t * u32_strpbrk_template (uint32_t *str, const uint32_t *accept)
+  { return u32_strpbrk (str, accept); }
+template <>
+  inline const uint32_t * u32_strpbrk_template (const uint32_t *str, const uint32_t *accept)
+  { return u32_strpbrk (str, accept); }
+#  define u32_strpbrk u32_strpbrk_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u32_strpbrk(s,a) (typeof ((s) + 0)) u32_strpbrk ((s), (a))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u32_strpbrk(s,a) \
+      _Generic ((s), \
+                uint32_t const *: (uint32_t const *) u32_strpbrk ((s), (a)), \
+                default         :                    u32_strpbrk ((s), (a)))
+#  endif
+# endif
+#endif
 
 /* Find the first occurrence of NEEDLE in HAYSTACK.  */
 /* Similar to strstr(), wcsstr().  */
@@ -718,6 +1188,73 @@ extern uint16_t *
 extern uint32_t *
        u32_strstr (const uint32_t *haystack, const uint32_t *needle)
        _UC_ATTRIBUTE_PURE;
+#ifndef _LIBUNISTRING_NO_CONST_GENERICS
+/* Don't silently convert a 'const uintN_t *' to a 'uintN_t *'.  Programmers
+   want compiler warnings for 'const' related mistakes.  */
+# ifdef __cplusplus
+template <typename T>
+  T * u8_strstr_template (T* haystack, const uint8_t *needle);
+template <>
+  inline uint8_t * u8_strstr_template (uint8_t *haystack, const uint8_t *needle)
+  { return u8_strstr (haystack, needle); }
+template <>
+  inline const uint8_t * u8_strstr_template (const uint8_t *haystack, const uint8_t *needle)
+  { return u8_strstr (haystack, needle); }
+#  define u8_strstr u8_strstr_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u8_strstr(h,n) (typeof ((h) + 0)) u8_strstr ((h), (n))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u8_strstr(h,n) \
+      _Generic ((h), \
+                uint8_t const *: (uint8_t const *) u8_strstr ((h), (n)), \
+                default        :                   u8_strstr ((h), (n)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u16_strstr_template (T* haystack, const uint16_t *needle);
+template <>
+  inline uint16_t * u16_strstr_template (uint16_t *haystack, const uint16_t *needle)
+  { return u16_strstr (haystack, needle); }
+template <>
+  inline const uint16_t * u16_strstr_template (const uint16_t *haystack, const uint16_t *needle)
+  { return u16_strstr (haystack, needle); }
+#  define u16_strstr u16_strstr_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u16_strstr(h,n) (typeof ((h) + 0)) u16_strstr ((h), (n))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u16_strstr(h,n) \
+      _Generic ((h), \
+                uint16_t const *: (uint16_t const *) u16_strstr ((h), (n)), \
+                default         :                    u16_strstr ((h), (n)))
+#  endif
+# endif
+# ifdef __cplusplus
+template <typename T>
+  T * u32_strstr_template (T* haystack, const uint32_t *needle);
+template <>
+  inline uint32_t * u32_strstr_template (uint32_t *haystack, const uint32_t *needle)
+  { return u32_strstr (haystack, needle); }
+template <>
+  inline const uint32_t * u32_strstr_template (const uint32_t *haystack, const uint32_t *needle)
+  { return u32_strstr (haystack, needle); }
+#  define u32_strstr u32_strstr_template
+# else
+#  if __STDC_VERSION__ >= 202311
+#   define u32_strstr(h,n) (typeof ((h) + 0)) u32_strstr ((h), (n))
+#  elif ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \
+         || defined __ICC  || defined __TINYC__)
+#   define u32_strstr(h,n) \
+      _Generic ((h), \
+                uint32_t const *: (uint32_t const *) u32_strstr ((h), (n)), \
+                default         :                    u32_strstr ((h), (n)))
+#  endif
+# endif
+#endif
 
 /* Test whether STR starts with PREFIX.  */
 extern bool
index 15fe82e97cf9ca4218d98199fb0e48da6ded15b6..485bb8ea5c60a6d161793e5f081aed9f3c8c3665 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 26c9f7048e1e0c0c754e4659e1e9468a232e4438..6c7999ad339f5d163a09653e491f6152403443e5 100644 (file)
@@ -24,6 +24,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index f975a725b5ff769672205e73154bdd16b2bf1ad7..d74ae22492067ac2708d34119a5a6c214e0971e2 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 073349d336fc89a0c6b8fde05a90f071d150fd14..53823e0601412404533bc18b797a077b8c37932e 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 2f094731c72d4dd062a866a2b979081b4e751cb8..832c0e8ffed50846bc29368f8e76cbc1f01687db 100644 (file)
@@ -24,6 +24,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index ef38ad35641bc5bdd5bb58813ae8d37f9203565b..e9a65088ab23398abcba047be43e63da34b00199 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 52b07d1b81b550fbd3fd0cea8fd463516b69a2d5..6aa7c407cf349fad18131373cc4c0a368df39170 100644 (file)
@@ -24,6 +24,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 52f01551f3181d5781dc45073ca3d342d2b1bd9d..6e0681dc5bf3261dd052dc3abec71f7ed14d43b0 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 67aced04ec4720a60cdc055347e5a3a418f4b1eb..e6d95e989a0170c4d37429163ef612b352f4a7f0 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index ee96f22009c1f89822cd227b7356039da271a6ba..956c33af26796f75ed9d32f6399e010de488ffb1 100644 (file)
@@ -15,6 +15,9 @@
    You should have received a copy of the GNU Lesser General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 47b2415d55d07bca69fdc0a78f91ab950ffce2c5..9ed2ef134c5ab1039b58b4efce6e6f60e594e096 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 007813a8168a4f32c28b84a95765bf9f78f16807..626be452b078a998371be2eb056d6de1e6ec8902 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index a1139f69cee462128ad18b259d3f1f05c5cbe44e..8b8abfd7a4cab2d35d3cb799cb2fa93334c6dc8d 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 1be2545128d030335a480d9d1caf0554502e4e43..f057dea0a9951ae6ce4aca37e5cb578298946bbc 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 258935e84600f8eb92182b9d4569e51cd467374b..10d5958c524faa1264caf1a8ff8346ab01bc8133 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 68cd545b5365767084e899e85233762540c26802..08b97453892abbd86bd4f99e4d8adbdeb82c20b1 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index b4c7d580eb89079bd9f78433d06c556be482bc38..e7c56f1e5c08e397b09e069af2effac8c6add228 100644 (file)
@@ -15,6 +15,9 @@
    You should have received a copy of the GNU Lesser General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 53a8a6603fb28676f5af06677ddc52abb734a105..c34e1fe3e8e480c3c18044f7216535c8db86af98 100644 (file)
@@ -24,6 +24,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 9068c567adec36b5d804ae158926893540010d90..3701701a5a1dc19345e48a87de840b06a6ceff84 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 7a309f6497bc6e7a64e4ae5dcdc4ee8e468de61b..e9d0eec5e31a2ca480c2ae84805a25d103b5e27f 100644 (file)
@@ -15,6 +15,9 @@
    You should have received a copy of the GNU Lesser General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index b39962e8d66a76238164faf03c151f5463129ac3..3ccf051646e193e4387396c8e96ca91c82b5ce31 100644 (file)
@@ -24,6 +24,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index ff51858a4a2a55c04894c5a9480c43088b5cc6bd..3adc03f97dfc6ad27cd369f8781b6a202a5c3131 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index 6b6c12e54b49cf0f25f1726e511c26e32bf693fd..4f364fa6823a585896cb42697e227bff43976ad7 100644 (file)
@@ -24,6 +24,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */
index e7cd016381cb238d86a2ced4bd8d39dbd343d81f..eb30108ef025af44ab5eedd7bde43ade1d19941d 100644 (file)
@@ -23,6 +23,9 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Don't use the const-improved function macros in this compilation unit.  */
+#define _LIBUNISTRING_NO_CONST_GENERICS
+
 #include <config.h>
 
 /* Specification.  */