I wrote:
> 2026-06-07  Bruno Haible  <[email protected]>
> 
>       setlocale: Detect invalid writes to the returned string in some cases.
>       * lib/locale.in.h (setlocale): Change the return type to 'const char *'.

It's a portability pitfall if the developer gets a warning on some non-GNU
systems but no warning on GNU systems. So, better enforce something like
  warning: initialization discards ‘const’ qualifier from pointer target type 
[-Wdiscarded-qualifiers]
on all platforms.


2026-06-08  Bruno Haible  <[email protected]>

        setlocale: Avoid a portability pitfall through the last patch.
        * lib/locale.in.h (setlocale): Cast the return value to 'const char *'
        on the other platforms.
        * NEWS: Update.

diff --git a/NEWS b/NEWS
index 9369ba9acc..260f2736c4 100644
--- a/NEWS
+++ b/NEWS
@@ -79,7 +79,7 @@ User visible incompatible changes
 Date        Modules         Changes
 
 2026-06-07  setlocale       The return type of the setlocale function is now
-                            'const char *' on some platforms.  You may need to
+                            'const char *' on most platforms.  You may need to
                             adjust assignments of the form
                               char *l = setlocale (...);
                             to
diff --git a/lib/locale.in.h b/lib/locale.in.h
index 7db5621452..fdf8c065d4 100644
--- a/lib/locale.in.h
+++ b/lib/locale.in.h
@@ -287,6 +287,9 @@ _GL_CXXALIAS_RPL (setlocale, const char *,
 # else
 _GL_CXXALIAS_SYS_CAST (setlocale, const char *,
                        (int category, const char *locale));
+#  if !defined setlocale && !defined __cplusplus
+#   define setlocale(...) ((const char *) setlocale (__VA_ARGS__))
+#  endif
 # endif
 # if __GLIBC__ >= 2
 _GL_CXXALIASWARN (setlocale);




Reply via email to