Problem reported by Bruno Haible <https://bugs.gnu.org/81135>. * lib/quotearg.c (chisprint, wchisprint) [USE_C_LOCALE]: Treat unassigned characters as printable. --- ChangeLog | 7 +++++++ lib/quotearg.c | 16 ++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/ChangeLog b/ChangeLog index a3aa3fc9ae..e6ce36d261 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2026-05-29 Paul Eggert <[email protected]> + + quotearg: improve USE_C_LOCALE + UTF-8 + Problem reported by Bruno Haible <https://bugs.gnu.org/81135>. + * lib/quotearg.c (chisprint, wchisprint) [USE_C_LOCALE]: + Treat unassigned characters as printable. + 2026-05-28 Paul Eggert <[email protected]> manywarnings: -Wstrict-overflow is deprecated diff --git a/lib/quotearg.c b/lib/quotearg.c index 64850af1e1..ea6fde1aca 100644 --- a/lib/quotearg.c +++ b/lib/quotearg.c @@ -39,12 +39,12 @@ #include <stdlib.h> #include <string.h> -/* If USE_C_LOCALE is nonzero, this file defines a function that uses the - "C" locale, regardless of the current locale. Applications - defining this macro might avoid the need for Gnulib's c32isprint, - gettext-h, mbrtoc32, mbsinit, wchar-h, and uchar-h modules, - but they also need the c-ctype module, and they rely on - the mbszero module defining MUSL_LIBC as needed. */ +/* If USE_C_LOCALE is nonzero, this file defines functions that + use the "C" locale, regardless of the current locale. + The functions also treat unassigned characters as printable. + Applications defining this macro might avoid the need for Gnulib's + c32isprint, gettext-h, mbrtoc32, mbsinit, and uchar-h modules, + but they also need the c-ctype module. */ #ifndef USE_C_LOCALE # define USE_C_LOCALE 0 #endif @@ -109,7 +109,7 @@ static bool chisprint (unsigned char c) { #if USE_C_LOCALE - return c_isprint (c); + return !c_iscntrl (c); #else return isprint (c) != 0; #endif @@ -121,7 +121,7 @@ wchisprint (wch w) #if !USE_C_LOCALE return c32isprint (w); #elif C_LOCALE_MIGHT_BE_MULTIBYTE - return iswprint (w); + return iswcntrl (w) == 0; #else return chisprint (w); #endif -- 2.54.0
