diff options
author | Xiaofeng Liu <liuxf09@yahoo.com> | 2017-11-08 15:21:30 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2017-11-08 15:21:30 +0300 |
commit | 46702f92ea499d15cb43c7c46ff9ad05f26aec6d (patch) | |
tree | b4340e7329ab1d640587c99a290125f1141196dd | |
parent | 2e989b212955665384bf61ee82dd487844a9371a (diff) |
cygwin: pread() returns non-zero if read beyond EOF
NtReadFile returns EOF status but doesn't set information to 0.
Set return value explicitly on EOF.
-rw-r--r-- | winsup/cygwin/fhandler_disk_file.cc | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc index bc8fead5e..2e4cf4936 100644 --- a/winsup/cygwin/fhandler_disk_file.cc +++ b/winsup/cygwin/fhandler_disk_file.cc @@ -1529,7 +1529,9 @@ fhandler_disk_file::pread (void *buf, size_t count, off_t offset) goto non_atomic; status = NtReadFile (prw_handle, NULL, NULL, NULL, &io, buf, count, &off, NULL); - if (!NT_SUCCESS (status) && status != STATUS_END_OF_FILE) + if (status == STATUS_END_OF_FILE) + res = 0; + else if (!NT_SUCCESS (status)) { if (pc.isdir ()) { @@ -1557,7 +1559,8 @@ fhandler_disk_file::pread (void *buf, size_t count, off_t offset) __seterrno_from_nt_status (status); return -1; } - res = io.Information; /* Valid on EOF. */ + else + res = io.Information; /* Valid on EOF. */ } else { |