summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2017-03-12 12:17:43 +0100
committerCorinna Vinschen <corinna@vinschen.de>2017-03-12 12:17:43 +0100
commitdd757cc43a710204046919da2cecf5f3b72ba33c (patch)
treec4f11f4fc2c58507e2a4bfed52f5d02436aa75f9
parenta3f297d3c2657ad4e1007bc04048ae5f561466af (diff)
downloadcygnal-dd757cc43a710204046919da2cecf5f3b72ba33c.tar.gz
cygnal-dd757cc43a710204046919da2cecf5f3b72ba33c.tar.bz2
cygnal-dd757cc43a710204046919da2cecf5f3b72ba33c.zip
Implement fhandler_dev_null::write to workaround a problem with NUL
Windows NUL device returns only the lower 32 bit of the number of bytes written. Implement a fake write function to ignore the underlying NUL device. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r--winsup/cygwin/fhandler.cc9
-rw-r--r--winsup/cygwin/fhandler.h2
2 files changed, 11 insertions, 0 deletions
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index af334805a..d719b7ca2 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -1529,6 +1529,15 @@ fhandler_dev_null::fhandler_dev_null () :
{
}
+ssize_t __stdcall
+fhandler_dev_null::write (const void *ptr, size_t len)
+{
+ /* Shortcut. This also fixes a problem with the NUL device on 64 bit:
+ If you write > 4 GB in a single attempt, the bytes written returned
+ from by is numBytes & 0xffffffff. */
+ return len;
+}
+
void
fhandler_base::set_no_inheritance (HANDLE &h, bool not_inheriting)
{
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index 14f7680ad..153e3847f 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -1682,6 +1682,8 @@ class fhandler_dev_null: public fhandler_base
copyto (fh);
return fh;
}
+
+ ssize_t __stdcall write (const void *ptr, size_t len);
};
class fhandler_dev_zero: public fhandler_base