diff options
-rw-r--r-- | winsup/cygwin/fhandler/base.cc | 2 | ||||
-rw-r--r-- | winsup/cygwin/release/3.4.10 | 3 | ||||
-rw-r--r-- | winsup/cygwin/syscalls.cc | 4 |
3 files changed, 8 insertions, 1 deletions
diff --git a/winsup/cygwin/fhandler/base.cc b/winsup/cygwin/fhandler/base.cc index a57ffcb86..3f0dc5f69 100644 --- a/winsup/cygwin/fhandler/base.cc +++ b/winsup/cygwin/fhandler/base.cc @@ -1797,7 +1797,7 @@ fhandler_base::fadvise (off_t offset, off_t length, int advice) int fhandler_base::ftruncate (off_t length, bool allow_truncate) { - return EINVAL; + return ENODEV; } int diff --git a/winsup/cygwin/release/3.4.10 b/winsup/cygwin/release/3.4.10 index 758a6e071..02f688583 100644 --- a/winsup/cygwin/release/3.4.10 +++ b/winsup/cygwin/release/3.4.10 @@ -18,3 +18,6 @@ Bug Fixes - Align behaviour of rand(3) to ISO C. Adresses: https://cygwin.com/pipermail/cygwin/2023-November/254735.html + +- Fix posix_fallocate(3) return value in case of being called on + other than regular files. diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index e4b3dd2f3..c3c17d604 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -3000,6 +3000,8 @@ posix_fallocate (int fd, off_t offset, off_t len) res = cfd->ftruncate (offset + len, false); else res = EBADF; + if (res == EISDIR) + res = ENODEV; } syscall_printf ("%R = posix_fallocate(%d, %D, %D)", res, fd, offset, len); return res; @@ -3015,6 +3017,8 @@ ftruncate (int fd, off_t length) res = cfd->ftruncate (length, true); if (res) { + if (res == ENODEV) + res = EINVAL; set_errno (res); res = -1; } |