aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2002-05-09 22:55:08 +0000
committerChristopher Faylor <me@cgf.cx>2002-05-09 22:55:08 +0000
commitf561f644e97894f6d4f07d43ae46f84dc0c4d7a4 (patch)
treefeb3b3b070997e8a9c52887dbcb9eed76428298b
parent62ae6f36e2968bdc2da87073bb03c35830a9f183 (diff)
downloadnewlib-f561f644e97894f6d4f07d43ae46f84dc0c4d7a4.zip
newlib-f561f644e97894f6d4f07d43ae46f84dc0c4d7a4.tar.gz
newlib-f561f644e97894f6d4f07d43ae46f84dc0c4d7a4.tar.bz2
* syscalls.cc (_write): Change error to EBADF if attempt to write to a
non-writable fd.
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/syscalls.cc3
2 files changed, 8 insertions, 0 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index e33b5bd..7584ed1 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-09 Christopher Faylor <cgf@redhat.com>
+
+ * syscalls.cc (_write): Change error to EBADF if attempt to write to a
+ non-writable fd.
+
2002-05-08 Corinna Vinschen <corinna@vinschen.de>
* cygheap.h (class cygheap_user): Add member `orig_psid'.
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index b549f95..0be393a 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -384,6 +384,9 @@ _write (int fd, const void *ptr, size_t len)
myself->process_state |= PID_TTYOU;
res = cfd->write (ptr, len);
myself->process_state &= ~PID_TTYOU;
+ if (res && get_errno () == EACCES &&
+ !(cfd->get_flags () & (O_WRONLY | O_RDWR)))
+ set_errno (EBADF);
}
done: