aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--text-motions.c2
-rw-r--r--text-regex-tre.c1
-rw-r--r--text-util.c2
-rw-r--r--view.c1
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;
diff --git a/view.c b/view.c
index fafabc5..773f3a7 100644
--- a/view.c
+++ b/view.c
@@ -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) {