aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid B. Lamkins <david@lamkins.net>2015-07-03 09:03:42 +0200
committerMarc André Tanner <mat@brain-dump.org>2015-07-03 10:00:46 +0200
commita9263c79fa0afaebccb3b34a65d623e3028dee2c (patch)
tree9acab38c628af1a910ec10e9ba565d9368ee7744
parent87c7258ccc683965d2b6a5190f1e98d74c8d25d3 (diff)
downloadvis-a9263c79fa0afaebccb3b34a65d623e3028dee2c.tar.gz
vis-a9263c79fa0afaebccb3b34a65d623e3028dee2c.tar.xz
Fix handling of multibyte characters (at start of display area)
Previously a sequence of Unicode REPLACEMENT CHARACTER was displayed. Use an explicitly initialized mbstate_t object in the call to mbrtowc(). While this should not strictly be necessary, it works around a bug in certain implementations. Closes #56.
-rw-r--r--view.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/view.c b/view.c
index a002cd5..c418a65 100644
--- a/view.c
+++ b/view.c
@@ -374,6 +374,8 @@ void view_draw(View *view) {
memset(match, 0, sizeof match);
/* default and current curses attributes to use */
int default_attrs = COLOR_PAIR(0) | A_NORMAL, attrs = default_attrs;
+ /* start from known multibyte state */
+ mbstate_t mbstate = { 0 };
while (rem > 0) {
@@ -428,7 +430,7 @@ void view_draw(View *view) {
}
}
- size_t len = mbrtowc(&wchar, cur, rem, NULL);
+ size_t len = mbrtowc(&wchar, cur, rem, &mbstate);
if (len == (size_t)-1 && errno == EILSEQ) {
/* ok, we encountered an invalid multibyte sequence,
* replace it with the Unicode Replacement Character