53 lines
1.5 KiB
Diff
53 lines
1.5 KiB
Diff
From 131b477b61c7eb82aef913bae5aec63f019b7076 Mon Sep 17 00:00:00 2001
|
|
From: Petr Uzel <petr.uzel@suse.cz>
|
|
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 <koenig@linux.de>
|
|
Signed-off-by: Petr Uzel <petr.uzel@suse.cz>
|
|
---
|
|
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
|