From: Jim Warner Date: Sun, 21 Aug 2016 05:00:00 +0000 (-0500) Subject: library: revert one ancient 'escape_str_utf8' deletion X-Git-Tag: v4.0.0~783 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3ac040d047df189f61f7c1c3341b987aa400f674;p=procps-ng library: revert one ancient 'escape_str_utf8' deletion Profiling revealed a large amount of time spent in the 'escape_str_utf8' function (escape.c) with both of our NLS branches (newlib and master). That same result was not seen under an ancient top-3.2.8 program & library. Well, the 3.2.8 result was ultimately explained by the absence of a 'setlocale', necessary under NLS support. Thus, when that ancient library tested for locale, all it got was 'ANSI_...' & assumed 'UTF-8' wasn't active. But after a hack to that ancient code to place it on a par with newlib/master, I still found cost differences that led me to revisit an old change referenced below. It turns out that 'iswprint' costs far more than would a call of 'isprint', even with the extra support code. So this commit just reverts that five year old change. Reference(s): commit 7b0fc19e9d28380dc9790615b93bc3653d6d686e Signed-off-by: Jim Warner --- diff --git a/proc/escape.c b/proc/escape.c index 2244f54a..18b46fde 100644 --- a/proc/escape.c +++ b/proc/escape.c @@ -60,6 +60,13 @@ static int escape_str_utf8(char *restrict dst, const char *restrict src, int buf my_cells++; my_bytes++; + } else if (len==1) { + /* non-multibyte */ + *(dst++) = isprint(*src) ? *src : '?'; + src++; + my_cells++; + my_bytes++; + } else if (!iswprint(wc)) { /* multibyte - no printable */ *(dst++) = '?';