From d99179dbf3d1f5b3735a77970d004c4e280e691f Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Tue, 17 Mar 2009 12:16:28 +0000 Subject: * libc/stdlib/mbstowcs_r.c (_mbstowcs_r): Handle NULL destination string correctly. --- newlib/libc/stdlib/mbstowcs_r.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'newlib/libc/stdlib/mbstowcs_r.c') diff --git a/newlib/libc/stdlib/mbstowcs_r.c b/newlib/libc/stdlib/mbstowcs_r.c index c6130b2bd..3dd73e42c 100644 --- a/newlib/libc/stdlib/mbstowcs_r.c +++ b/newlib/libc/stdlib/mbstowcs_r.c @@ -9,25 +9,29 @@ _DEFUN (_mbstowcs_r, (reent, pwcs, s, n, state), size_t n _AND mbstate_t *state) { - wchar_t *ptr = pwcs; - size_t max = n; + size_t ret = 0; char *t = (char *)s; int bytes; + if (!pwcs) + n = (size_t) 1; /* Value doesn't matter as long as it's not 0. */ while (n > 0) { - bytes = _mbtowc_r (r, ptr, t, MB_CUR_MAX, state); + bytes = _mbtowc_r (r, pwcs, t, MB_CUR_MAX, state); if (bytes < 0) { state->__count = 0; return -1; } else if (bytes == 0) - return ptr - pwcs; + break; t += bytes; - ++ptr; - --n; + ++ret; + if (pwcs) + { + ++pwcs; + --n; + } } - - return max; + return ret; } -- cgit v1.2.3