From 67a634dc4cefa60a3dba49edfbc01f9713fc1e07 Mon Sep 17 00:00:00 2001 From: Jim Warner Date: Sat, 20 Aug 2016 00:00:00 -0500 Subject: [PATCH] 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. [ this patch parallels a similar change under newlib ] Reference(s): commit 7b0fc19e9d28380dc9790615b93bc3653d6d686e Signed-off-by: Jim Warner --- proc/escape.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/proc/escape.c b/proc/escape.c index 971c5d81..520f27d3 100644 --- a/proc/escape.c +++ b/proc/escape.c @@ -59,6 +59,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++) = '?';