From 131b477b61c7eb82aef913bae5aec63f019b7076 Mon Sep 17 00:00:00 2001 From: Petr Uzel Date: Tue, 1 Nov 2011 16:17:57 +0100 Subject: [PATCH] dmesg: fix printing of multibyte characters Also make it compile if HAVE_WIDECHAR is not defined. Addresses: https://bugzilla.novell.com/show_bug.cgi?id=725993 Reported-by: Harald Koenig Signed-off-by: Petr Uzel --- sys-utils/dmesg.c | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-) Index: util-linux-2.20.1/sys-utils/dmesg.c =================================================================== --- util-linux-2.20.1.orig/sys-utils/dmesg.c +++ util-linux-2.20.1/sys-utils/dmesg.c @@ -391,10 +391,11 @@ static void safe_fwrite(const char *buf, for (i = 0; i < size; i++) { const char *p = buf + i; int rc, hex = 0; + size_t len = 1; #ifdef HAVE_WIDECHAR wchar_t wc; - size_t len = mbrtowc(&wc, p, size - i, &s); + len = mbrtowc(&wc, p, size - i, &s); if (len == 0) /* L'\0' */ return; @@ -402,16 +403,15 @@ static void safe_fwrite(const char *buf, if (len == (size_t)-1 || len == (size_t)-2) { /* invalid sequence */ memset(&s, 0, sizeof (s)); len = hex = 1; - } else if (len > 1 && !iswprint(wc)) { /* non-printable multibyte */ hex = 1; - } else -#endif - { + } + i += len - 1; +#else if (!isprint((unsigned int) *p) && !isspace((unsigned int) *p)) /* non-printable */ hex = 1; - } +#endif if (hex) rc = fwrite_hex(p, len, out); else