Commit 60448895 authored by David Lawrence Ramsey's avatar David Lawrence Ramsey
Browse files

reset the mbtowc() and wctomb() state machines at the right places

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2178 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
No related merge requests found
Showing with 17 additions and 7 deletions
+17 -7
...@@ -3582,6 +3582,10 @@ void do_output(int *kbinput, size_t kbinput_len) ...@@ -3582,6 +3582,10 @@ void do_output(int *kbinput, size_t kbinput_len)
/* Turn off constant cursor position display. */ /* Turn off constant cursor position display. */
UNSET(CONSTUPDATE); UNSET(CONSTUPDATE);
#ifdef NANO_WIDE
wctomb(NULL, 0);
#endif
for (i = 0; i < kbinput_len; i++) { for (i = 0; i < kbinput_len; i++) {
#ifdef NANO_WIDE #ifdef NANO_WIDE
/* Change the wide character to its multibyte value. If it's /* Change the wide character to its multibyte value. If it's
...@@ -3665,6 +3669,10 @@ void do_output(int *kbinput, size_t kbinput_len) ...@@ -3665,6 +3669,10 @@ void do_output(int *kbinput, size_t kbinput_len)
#endif #endif
} }
#ifdef NANO_WIDE
wctomb(NULL, 0);
#endif
/* Turn constant cursor position display back on if it was on /* Turn constant cursor position display back on if it was on
* before. */ * before. */
if (old_constupdate) if (old_constupdate)
......
...@@ -112,13 +112,6 @@ static bool resetstatuspos = FALSE; ...@@ -112,13 +112,6 @@ static bool resetstatuspos = FALSE;
/* Reset all the input routines that rely on character sequences. */ /* Reset all the input routines that rely on character sequences. */
void reset_kbinput(void) void reset_kbinput(void)
{ {
#ifdef NANO_WIDE
/* Reset the multibyte and wide character interpreter states. */
if (!ISSET(NO_UTF8)) {
mbtowc(NULL, NULL, 0);
wctomb(NULL, 0);
}
#endif
parse_kbinput(NULL, NULL, NULL, TRUE); parse_kbinput(NULL, NULL, NULL, TRUE);
get_word_kbinput(0, TRUE); get_word_kbinput(0, TRUE);
} }
...@@ -191,6 +184,8 @@ void get_buffer(WINDOW *win) ...@@ -191,6 +184,8 @@ void get_buffer(WINDOW *win)
buffer *clean_key_buffer = NULL; buffer *clean_key_buffer = NULL;
size_t clean_key_buffer_len = 0; size_t clean_key_buffer_len = 0;
mbtowc(NULL, NULL, 0);
/* Change all complete and valid multibyte keystrokes to /* Change all complete and valid multibyte keystrokes to
* their wide character values, discarding the others. */ * their wide character values, discarding the others. */
for (i = 0; i < key_buffer_len; i++) { for (i = 0; i < key_buffer_len; i++) {
...@@ -216,6 +211,8 @@ void get_buffer(WINDOW *win) ...@@ -216,6 +211,8 @@ void get_buffer(WINDOW *win)
} }
} }
mbtowc(NULL, NULL, 0);
/* Replace the default keystroke buffer with the non-(-1) /* Replace the default keystroke buffer with the non-(-1)
* keystroke buffer. */ * keystroke buffer. */
key_buffer_len = clean_key_buffer_len; key_buffer_len = clean_key_buffer_len;
...@@ -260,6 +257,8 @@ void unget_input(buffer *input, size_t input_len) ...@@ -260,6 +257,8 @@ void unget_input(buffer *input, size_t input_len)
if (!ISSET(NO_UTF8)) { if (!ISSET(NO_UTF8)) {
size_t i; size_t i;
wctomb(NULL, 0);
/* Keep all valid wide keystrokes, discarding the others. */ /* Keep all valid wide keystrokes, discarding the others. */
for (i = 0; i < input_len; i++) { for (i = 0; i < input_len; i++) {
char key[MB_LEN_MAX]; char key[MB_LEN_MAX];
...@@ -276,6 +275,9 @@ void unget_input(buffer *input, size_t input_len) ...@@ -276,6 +275,9 @@ void unget_input(buffer *input, size_t input_len)
input[i].key_code; input[i].key_code;
} }
} }
wctomb(NULL, 0);
} else { } else {
#endif #endif
clean_input = input; clean_input = input;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment