diff options
author | Petr Uzel | 2011-11-01 16:29:42 +0100 |
---|---|---|
committer | Karel Zak | 2011-11-02 16:27:34 +0100 |
commit | 0720766e3bbe1b047da1569de9d308a710e383e8 (patch) | |
tree | c9e91b8c38cb1408f40fd285dd7abcb98f12acbc /sys-utils/dmesg.c | |
parent | docs: update TODO file (diff) | |
download | kernel-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.c | 16 |
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 |