diff options
| -rw-r--r-- | text-motions.c | 2 | ||||
| -rw-r--r-- | text-regex-tre.c | 1 | ||||
| -rw-r--r-- | text-util.c | 2 | ||||
| -rw-r--r-- | view.c | 1 |
4 files changed, 6 insertions, 0 deletions
diff --git a/text-motions.c b/text-motions.c index d44e623..68f43b5 100644 --- a/text-motions.c +++ b/text-motions.c @@ -199,6 +199,7 @@ int text_line_width_get(Text *txt, size_t pos) { wchar_t wc; size_t wclen = mbrtowc(&wc, buf, len, &ps); if (wclen == (size_t)-1 && errno == EILSEQ) { + ps = (mbstate_t){0}; /* assume a replacement symbol will be displayed */ width++; } else if (wclen == (size_t)-2) { @@ -236,6 +237,7 @@ size_t text_line_width_set(Text *txt, size_t pos, int width) { wchar_t wc; size_t wclen = mbrtowc(&wc, buf, len, &ps); if (wclen == (size_t)-1 && errno == EILSEQ) { + ps = (mbstate_t){0}; /* assume a replacement symbol will be displayed */ cur_width++; } else if (wclen == (size_t)-2) { diff --git a/text-regex-tre.c b/text-regex-tre.c index 3f02dcd..cbfc4ee 100644 --- a/text-regex-tre.c +++ b/text-regex-tre.c @@ -37,6 +37,7 @@ static int str_next_char(tre_char_t *c, unsigned int *pos_add, void *context) { size_t len = rem < plen ? rem : plen; size_t wclen = mbrtowc(c, it->text, len, &ps); if (wclen == (size_t)-1 && errno == EILSEQ) { + ps = (mbstate_t){0}; *c = L'\0'; text_iterator_codepoint_next(it, NULL); break; diff --git a/text-util.c b/text-util.c index 4936d92..3cc994e 100644 --- a/text-util.c +++ b/text-util.c @@ -63,6 +63,7 @@ int text_char_count(const char *data, size_t len) { wchar_t wc; size_t wclen = mbrtowc(&wc, data, len, &ps); if (wclen == (size_t)-1 && errno == EILSEQ) { + ps = (mbstate_t){0}; count++; while (!ISUTF8(*data)) data++, len--; @@ -93,6 +94,7 @@ int text_string_width(const char *data, size_t len) { wchar_t wc; size_t wclen = mbrtowc(&wc, s, len, &ps); if (wclen == (size_t)-1 && errno == EILSEQ) { + ps = (mbstate_t){0}; /* assume a replacement symbol will be displayed */ width++; wclen = 1; @@ -352,6 +352,7 @@ void view_draw(View *view) { /* ok, we encountered an invalid multibyte sequence, * replace it with the Unicode Replacement Character * (FFFD) and skip until the start of the next utf8 char */ + mbstate = (mbstate_t){0}; for (len = 1; rem > len && !ISUTF8(cur[len]); len++); cell = (Cell){ .data = "\xEF\xBF\xBD", .len = len, .width = 1 }; } else if (len == (size_t)-2) { |
