in mbstrchr(), don't count matches between valid and invalid multibyte

sequences anymore, for consistency


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2894 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
master
David Lawrence Ramsey 2005-07-18 19:47:13 +00:00
parent 91d468d7fd
commit e3bae98aab
2 changed files with 8 additions and 1 deletions

View File

@ -73,6 +73,10 @@ CVS code -
- Make sure that the current position in the history list is - Make sure that the current position in the history list is
properly set to the bottom if we cancel out of the prompt. properly set to the bottom if we cancel out of the prompt.
New function history_reset(); changes to nanogetstr(). (DLR) New function history_reset(); changes to nanogetstr(). (DLR)
- chars.c:
mbstrchr()
- Don't count matches between valid and invalid multibyte
sequences anymore, for consistency. (DLR)
- files.c: - files.c:
open_file() open_file()
- Assert that filename isn't NULL, and don't do anything special - Assert that filename isn't NULL, and don't do anything special

View File

@ -808,6 +808,7 @@ char *mbstrchr(const char *s, char *c)
#ifdef ENABLE_UTF8 #ifdef ENABLE_UTF8
if (ISSET(USE_UTF8)) { if (ISSET(USE_UTF8)) {
bool bad_c_mb = FALSE, bad_s_mb = FALSE;
char *s_mb = charalloc(MB_CUR_MAX); char *s_mb = charalloc(MB_CUR_MAX);
const char *q = s; const char *q = s;
wchar_t ws, wc; wchar_t ws, wc;
@ -816,6 +817,7 @@ char *mbstrchr(const char *s, char *c)
if (c_mb_len <= 0) { if (c_mb_len <= 0) {
mbtowc(NULL, NULL, 0); mbtowc(NULL, NULL, 0);
wc = (unsigned char)*c; wc = (unsigned char)*c;
bad_c_mb = TRUE;
} }
while (*s != '\0') { while (*s != '\0') {
@ -824,9 +826,10 @@ char *mbstrchr(const char *s, char *c)
if (mbtowc(&ws, s_mb, s_mb_len) <= 0) { if (mbtowc(&ws, s_mb, s_mb_len) <= 0) {
mbtowc(NULL, NULL, 0); mbtowc(NULL, NULL, 0);
ws = (unsigned char)*s; ws = (unsigned char)*s;
bad_s_mb = TRUE;
} }
if (ws == wc) if (bad_s_mb == bad_c_mb && ws == wc)
break; break;
s += s_mb_len; s += s_mb_len;