diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2017-03-12 14:17:43 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2017-03-12 14:17:43 +0300 |
commit | dd757cc43a710204046919da2cecf5f3b72ba33c (patch) | |
tree | c4f11f4fc2c58507e2a4bfed52f5d02436aa75f9 /winsup | |
parent | a3f297d3c2657ad4e1007bc04048ae5f561466af (diff) |
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>
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/fhandler.cc | 9 | ||||
-rw-r--r-- | winsup/cygwin/fhandler.h | 2 |
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 |