diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2009-07-28 16:49:19 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2009-07-28 16:49:19 +0000 |
commit | ecf5c883df2c125ca3441898699a6597a6eae141 (patch) | |
tree | 38438b4bf08b88787506aa5252fdccff2a099f01 | |
parent | 8d641a5b46d3e5903c6f35125a45e23a4cbc8205 (diff) | |
download | cygnal-ecf5c883df2c125ca3441898699a6597a6eae141.tar.gz cygnal-ecf5c883df2c125ca3441898699a6597a6eae141.tar.bz2 cygnal-ecf5c883df2c125ca3441898699a6597a6eae141.zip |
* libc/stdlib/mbtowc_r.c (__utf8_mbtowc): Fix incrementing n in case
of handling incomplete sequences.
-rw-r--r-- | newlib/ChangeLog | 5 | ||||
-rw-r--r-- | newlib/libc/stdlib/mbtowc_r.c | 21 |
2 files changed, 18 insertions, 8 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 0ed96068b..cf857246b 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,8 @@ +2009-07-28 Corinna Vinschen <corinna@vinschen.de> + + * libc/stdlib/mbtowc_r.c (__utf8_mbtowc): Fix incrementing n in case + of handling incomplete sequences. + 2009-07-22 Eric Blake <ebb9@byu.net> Avoid a fault from locking a closed standard file. diff --git a/newlib/libc/stdlib/mbtowc_r.c b/newlib/libc/stdlib/mbtowc_r.c index 010ce1da5..7e1362245 100644 --- a/newlib/libc/stdlib/mbtowc_r.c +++ b/newlib/libc/stdlib/mbtowc_r.c @@ -220,11 +220,7 @@ _DEFUN (__utf8_mbtowc, (r, pwc, s, n, charset, state), if (state->__count == 0) ch = t[i++]; else - { - if (n < (size_t)-1) - ++n; - ch = state->__value.__wchb[0]; - } + ch = state->__value.__wchb[0]; if (ch == '\0') { @@ -244,7 +240,10 @@ _DEFUN (__utf8_mbtowc, (r, pwc, s, n, charset, state), { /* two-byte sequence */ state->__value.__wchb[0] = ch; - state->__count = 1; + if (state->__count == 0) + state->__count = 1; + else if (n < (size_t)-1) + ++n; if (n < 2) return -2; ch = t[i++]; @@ -288,7 +287,10 @@ _DEFUN (__utf8_mbtowc, (r, pwc, s, n, charset, state), return -1; } state->__value.__wchb[1] = ch; - state->__count = 2; + if (state->__count == 1) + state->__count = 2; + else if (n < (size_t)-1) + ++n; if (n < 3) return -2; ch = t[i++]; @@ -347,7 +349,10 @@ _DEFUN (__utf8_mbtowc, (r, pwc, s, n, charset, state), return -1; } state->__value.__wchb[2] = ch; - state->__count = 3; + if (state->__count == 2) + state->__count = 3; + else if (n < (size_t)-1) + ++n; if (n < 4) return -2; ch = t[i++]; |