diff options
Diffstat (limited to 'ncurses/trace/lib_tracechr.c')
| -rw-r--r-- | ncurses/trace/lib_tracechr.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/ncurses/trace/lib_tracechr.c b/ncurses/trace/lib_tracechr.c index 36158d6f45a6..9c879dc67397 100644 --- a/ncurses/trace/lib_tracechr.c +++ b/ncurses/trace/lib_tracechr.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2020 Thomas E. Dickey * + * Copyright 2020,2024 Thomas E. Dickey * * Copyright 1998-2009,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * @@ -40,7 +40,7 @@ #include <ctype.h> -MODULE_ID("$Id: lib_tracechr.c,v 1.23 2020/02/02 23:34:34 tom Exp $") +MODULE_ID("$Id: lib_tracechr.c,v 1.24 2024/02/04 00:11:35 tom Exp $") #ifdef TRACE @@ -54,26 +54,28 @@ _nc_tracechar(SCREEN *sp, int ch) ? sp->tracechr_buf : _nc_globals.tracechr_buf); - if (ch > KEY_MIN || ch < 0) { + if ((ch > KEY_MIN && !_nc_unicode_locale()) || ch < 0) { name = safe_keyname(SP_PARM, ch); if (name == 0 || *name == '\0') name = "NULL"; _nc_SPRINTF(MyBuffer, _nc_SLIMIT(MyBufSize) - "'%.30s' = %#03o", name, ch); - } else if (!is8bits(ch) || !isprint(UChar(ch))) { + "'%.30s' = \\x%02x", name, ch); + } else if (!is8bits(ch) + || (_nc_unicode_locale() && !is7bits(ch)) + || !isprint(UChar(ch))) { /* * workaround for glibc bug: * sprintf changes the result from unctrl() to an empty string if it * does not correspond to a valid multibyte sequence. */ _nc_SPRINTF(MyBuffer, _nc_SLIMIT(MyBufSize) - "%#03o", ch); + "\\x%02x", ch); } else { name = safe_unctrl(SP_PARM, (chtype) ch); if (name == 0 || *name == 0) name = "null"; /* shouldn't happen */ _nc_SPRINTF(MyBuffer, _nc_SLIMIT(MyBufSize) - "'%.30s' = %#03o", name, ch); + "'%.30s' = \\x%02x", name, ch); } return (MyBuffer); } |
