From 1af84bb7f58c0aecfc1b5c6b6685e14afe36785e Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Mon, 3 May 2004 20:17:59 +0000 Subject: 2004-05-03 Artem B. Bityuckiy * libc/stdio/vfprintf.c (_VFPRINTF_R): Set error flag when multibyte functions return failure for %C, %S, %lc, and %ls format specifiers. --- newlib/libc/stdio/vfprintf.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'newlib/libc/stdio/vfprintf.c') diff --git a/newlib/libc/stdio/vfprintf.c b/newlib/libc/stdio/vfprintf.c index ab40b2f6c..b72117582 100644 --- a/newlib/libc/stdio/vfprintf.c +++ b/newlib/libc/stdio/vfprintf.c @@ -762,8 +762,10 @@ reswitch: switch (ch) { memset ((_PTR)&ps, '\0', sizeof (mbstate_t)); if ((size = (int)_wcrtomb_r (data, cp, (wchar_t)GET_ARG (N, ap, wint_t), - &ps)) == -1) + &ps)) == -1) { + fp->_flags |= __SERR; goto error; + } } else { *cp = GET_ARG (N, ap, int); @@ -942,8 +944,10 @@ reswitch: switch (ch) { if (wcp[m] == L'\0') break; if ((n = (int)_wcrtomb_r (data, - buf, wcp[m], &ps)) == -1) + buf, wcp[m], &ps)) == -1) { + fp->_flags |= __SERR; goto error; + } if (n + size > prec) break; m += 1; @@ -954,8 +958,10 @@ reswitch: switch (ch) { } else { if ((size = (int)_wcsrtombs_r (data, - NULL, &wcp, 0, &ps)) == -1) - goto error; + NULL, &wcp, 0, &ps)) == -1) { + fp->_flags |= __SERR; + goto error; + } wcp = (_CONST wchar_t *)cp; } @@ -963,14 +969,18 @@ reswitch: switch (ch) { break; if ((malloc_buf = - (char *)_malloc_r (data, size + 1)) == NULL) + (char *)_malloc_r (data, size + 1)) == NULL) { + fp->_flags |= __SERR; goto error; + } /* Convert widechar string to multibyte string. */ memset ((_PTR)&ps, '\0', sizeof (mbstate_t)); if (_wcsrtombs_r (data, malloc_buf, - &wcp, size, &ps) != size) + &wcp, size, &ps) != size) { + fp->_flags |= __SERR; goto error; + } cp = malloc_buf; cp[size] = '\0'; } -- cgit v1.2.3