X-Git-Url: https://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=ncurses%2Ftrace%2Flib_tracechr.c;h=36158d6f45a6725d455ed9db17d293ef155f9f9a;hb=HEAD;hp=8977f752b50553c24bf912f8ba23aec98312a3d0;hpb=8b06e371ed1bce3dd6f37138e6becb5e1a562fe0;p=ncurses.git diff --git a/ncurses/trace/lib_tracechr.c b/ncurses/trace/lib_tracechr.c index 8977f752..9c879dc6 100644 --- a/ncurses/trace/lib_tracechr.c +++ b/ncurses/trace/lib_tracechr.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2009,2012 Free Software Foundation, Inc. * + * 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 * * copy of this software and associated documentation files (the * @@ -39,7 +40,7 @@ #include -MODULE_ID("$Id: lib_tracechr.c,v 1.22 2012/02/22 22:40:24 tom Exp $") +MODULE_ID("$Id: lib_tracechr.c,v 1.24 2024/02/04 00:11:35 tom Exp $") #ifdef TRACE @@ -53,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); }