Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2004-05-04 00:17:59 +0400
committerJeff Johnston <jjohnstn@redhat.com>2004-05-04 00:17:59 +0400
commit1af84bb7f58c0aecfc1b5c6b6685e14afe36785e (patch)
tree231e4588fbf30b455a1c3c677ac87efeb61802e3 /newlib/libc/stdio/vfprintf.c
parent1c63798e1d04d7926e9ee4cc66c401f7f6d36b37 (diff)
2004-05-03 Artem B. Bityuckiy <abitytsky@softminecorp.com>
* libc/stdio/vfprintf.c (_VFPRINTF_R): Set error flag when multibyte functions return failure for %C, %S, %lc, and %ls format specifiers.
Diffstat (limited to 'newlib/libc/stdio/vfprintf.c')
-rw-r--r--newlib/libc/stdio/vfprintf.c22
1 files changed, 16 insertions, 6 deletions
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';
}