diff options
| author | David B. Lamkins <david@lamkins.net> | 2015-07-03 09:03:42 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2015-07-03 10:00:46 +0200 |
| commit | a9263c79fa0afaebccb3b34a65d623e3028dee2c (patch) | |
| tree | 9acab38c628af1a910ec10e9ba565d9368ee7744 /view.c | |
| parent | 87c7258ccc683965d2b6a5190f1e98d74c8d25d3 (diff) | |
| download | vis-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.
Diffstat (limited to 'view.c')
| -rw-r--r-- | view.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -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 |
