]> sourceware.org Git - newlib-cygwin.git/commitdiff
printf: set errno for read-only stream
authorEric Blake <eblake@redhat.com>
Tue, 14 Jun 2011 03:56:05 +0000 (03:56 +0000)
committerEric Blake <eblake@redhat.com>
Tue, 14 Jun 2011 03:56:05 +0000 (03:56 +0000)
* libc/stdio/wsetup.c (__swsetup_r): Set errno on failure.
* libc/stdio/fvwrite.c (__sfvwrite_r): Simplify.
* libc/stdio/wbuf.c (__swbuf_r): Likewise.
* libc/stdio/local.h (cantwrite): Adjust comment.

newlib/ChangeLog
newlib/libc/stdio/fvwrite.c
newlib/libc/stdio/local.h
newlib/libc/stdio/wbuf.c
newlib/libc/stdio/wsetup.c

index f2faad486d1cf449db4edd5fc475cc47a05f475a..c018583819c33cff914ba7c07288c065e3218773 100644 (file)
@@ -1,3 +1,10 @@
+2011-06-13  Eric Blake  <eblake@redhat.com>
+
+       * libc/stdio/wsetup.c (__swsetup_r): Set errno on failure.
+       * libc/stdio/fvwrite.c (__sfvwrite_r): Simplify.
+       * libc/stdio/wbuf.c (__swbuf_r): Likewise.
+       * libc/stdio/local.h (cantwrite): Adjust comment.
+
 2011-06-09  Yaakov Selkowitz  <yselkowitz@...>
 
        * libc/include/string.h (strdupa): New macro function.
index d3878dc171e68d84d10a0500e44fdd106acb2c31..f196b3cfe530f78c4cfced030c6c2f7de2e90bef 100644 (file)
@@ -61,11 +61,7 @@ _DEFUN(__sfvwrite_r, (ptr, fp, uio),
 
   /* make sure we can write */
   if (cantwrite (ptr, fp))
-    {
-      fp->_flags |= __SERR;
-      ptr->_errno = EBADF;
-      return EOF;
-    }
+    return EOF;
 
   iov = uio->uio_iov;
   len = 0;
index 9ca948d96be3ef0993989275900f284e1ed820c9..187f7d8581ede91e376331fedffe995611f22d0b 100644 (file)
@@ -113,7 +113,8 @@ extern _READ_WRITE_RETURN_TYPE _EXFUN(__swrite64,(struct _reent *, void *,
     }                                          \
   while (0)
 
-/* Return true iff the given FILE cannot be written now.  */
+/* Return true and set errno and stream error flag iff the given FILE
+   cannot be written now.  */
 
 #define        cantwrite(ptr, fp)                                     \
   ((((fp)->_flags & __SWR) == 0 || (fp)->_bf._base == NULL) && \
index 33457f0d06f5677f9ccca020054059febc140662..f9197ea9e610e925217bb2819249d1fafde0a7f7 100644 (file)
@@ -54,11 +54,7 @@ _DEFUN(__swbuf_r, (ptr, c, fp),
 
   fp->_w = fp->_lbfsize;
   if (cantwrite (ptr, fp))
-    {
-      fp->_flags |= __SERR;
-      ptr->_errno = EBADF;
-      return EOF;
-    }
+    return EOF;
   c = (unsigned char) c;
 
   ORIENT (fp, -1);
index dcbda0a35c34a7dc4c541701b3e61efaacb6e1d0..08ae70f2c4a07acb0d5311fa3af17072e95572bd 100644 (file)
 #include <_ansi.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <errno.h>
 #include "local.h"
 
 /*
  * Various output routines call wsetup to be sure it is safe to write,
  * because either _flags does not include __SWR, or _buf is NULL.
- * _wsetup returns 0 if OK to write, nonzero otherwise.
+ * _wsetup returns 0 if OK to write, nonzero and set errno otherwise.
  */
 
 int
@@ -44,7 +45,11 @@ _DEFUN(__swsetup_r, (ptr, fp),
   if ((fp->_flags & __SWR) == 0)
     {
       if ((fp->_flags & __SRW) == 0)
-       return EOF;
+        {
+         ptr->_errno = EBADF;
+         fp->_flags |= __SERR;
+         return EOF;
+        }
       if (fp->_flags & __SRD)
        {
          /* clobber any ungetc data */
@@ -62,7 +67,7 @@ _DEFUN(__swsetup_r, (ptr, fp),
    * A string I/O file should not explicitly allocate a buffer
    * unless asprintf is being used.
    */
-  if (fp->_bf._base == NULL 
+  if (fp->_bf._base == NULL
         && (!(fp->_flags & __SSTR) || (fp->_flags & __SMBF)))
     __smakebuf_r (ptr, fp);
 
@@ -79,5 +84,11 @@ _DEFUN(__swsetup_r, (ptr, fp),
   else
     fp->_w = fp->_flags & __SNBF ? 0 : fp->_bf._size;
 
-  return (!fp->_bf._base && (fp->_flags & __SMBF)) ? EOF : 0;
+  if (!fp->_bf._base && (fp->_flags & __SMBF))
+    {
+      /* __smakebuf_r set errno, but not flag */
+      fp->_flags |= __SERR;
+      return EOF;
+    }
+  return 0;
 }
This page took 0.050079 seconds and 5 git commands to generate.