OSDN Git Service

2004-05-03 Artem B. Bityuckiy <abitytsky@softminecorp.com>
authorjjohnstn <jjohnstn>
Mon, 3 May 2004 20:17:58 +0000 (20:17 +0000)
committerjjohnstn <jjohnstn>
Mon, 3 May 2004 20:17:58 +0000 (20:17 +0000)
        * libc/stdio/vfprintf.c (_VFPRINTF_R): Set error flag when
        multibyte functions return failure for %C, %S, %lc, and %ls
        format specifiers.

newlib/ChangeLog
newlib/libc/stdio/vfprintf.c

index ff1e844..f2c48ce 100644 (file)
@@ -1,5 +1,11 @@
 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.
+
+2004-05-03  Artem B. Bityuckiy  <abitytsky@softminecorp.com>
+
        * testsuite/include/check.h (CHECK): Add flush of stdout.
 
 2004-05-03  Artem B. Bityuckiy  <abitytsky@softminecorp.com>
index ab40b2f..b721175 100644 (file)
@@ -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';
                        }