summaryrefslogtreecommitdiffstats
path: root/sys-utils/dmesg.c
diff options
context:
space:
mode:
authorPetr Uzel2011-11-01 16:29:42 +0100
committerKarel Zak2011-11-02 16:27:34 +0100
commit0720766e3bbe1b047da1569de9d308a710e383e8 (patch)
treec9e91b8c38cb1408f40fd285dd7abcb98f12acbc /sys-utils/dmesg.c
parentdocs: update TODO file (diff)
downloadkernel-qcow2-util-linux-0720766e3bbe1b047da1569de9d308a710e383e8.tar.gz
kernel-qcow2-util-linux-0720766e3bbe1b047da1569de9d308a710e383e8.tar.xz
kernel-qcow2-util-linux-0720766e3bbe1b047da1569de9d308a710e383e8.zip
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>
Diffstat (limited to 'sys-utils/dmesg.c')
-rw-r--r--sys-utils/dmesg.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/sys-utils/dmesg.c b/sys-utils/dmesg.c
index c6e242f2e..793b1c475 100644
--- a/sys-utils/dmesg.c
+++ b/sys-utils/dmesg.c
@@ -429,10 +429,11 @@ static void safe_fwrite(const char *buf, size_t size, FILE *out)
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;
@@ -440,16 +441,15 @@ static void safe_fwrite(const char *buf, size_t size, FILE *out)
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
- {
- if (!isprint((unsigned int) *p) &&
- !isspace((unsigned int) *p)) /* non-printable */
- hex = 1;
}
+ 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