Discussion:
[newlib-cygwin] Cygwin: lseek: return ESPIPE rather than EINVAL when called on a fifo
Corinna Vinschen
2018-10-10 11:22:07 UTC
Permalink
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=323b48b975e5b305a5aaa5046ef1dc655fb1deba

commit 323b48b975e5b305a5aaa5046ef1dc655fb1deba
Author: Corinna Vinschen <***@vinschen.de>
Date: Wed Oct 10 13:20:04 2018 +0200

Cygwin: lseek: return ESPIPE rather than EINVAL when called on a fifo

Thanks to Henri for tracking this down:
https://cygwin.com/ml/cygwin/2018-10/msg00062.html

Signed-off-by: Corinna Vinschen <***@vinschen.de>

Diff:
---
winsup/cygwin/fhandler.h | 1 +
winsup/cygwin/fhandler_fifo.cc | 8 ++++++++
winsup/cygwin/release/2.11.2 | 13 +++++++++++++
3 files changed, 22 insertions(+)

diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index b946ddd..2cc99d7 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -1237,6 +1237,7 @@ class fhandler_fifo: public fhandler_base_overlapped
public:
fhandler_fifo ();
int open (int, mode_t);
+ off_t lseek (off_t offset, int whence);
int close ();
int dup (fhandler_base *child, int);
bool isfifo () const { return true; }
diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc
index 642949a..5733ec7 100644
--- a/winsup/cygwin/fhandler_fifo.cc
+++ b/winsup/cygwin/fhandler_fifo.cc
@@ -221,6 +221,14 @@ out:
return res == success;
}

+off_t
+fhandler_fifo::lseek (off_t offset, int whence)
+{
+ debug_printf ("(%D, %d)", offset, whence);
+ set_errno (ESPIPE);
+ return -1;
+}
+
bool
fhandler_fifo::wait (HANDLE h)
{
diff --git a/winsup/cygwin/release/2.11.2 b/winsup/cygwin/release/2.11.2
new file mode 100644
index 0000000..c8d81d4
--- /dev/null
+++ b/winsup/cygwin/release/2.11.2
@@ -0,0 +1,13 @@
+What's new:
+-----------
+
+
+What changed:
+-------------
+
+
+Bug Fixes
+---------
+
+- Return ESPIPE rather than EINVAL from lseek on a fifo.
+ Addresses: https://cygwin.com/ml/cygwin/2018-10/msg00019.html

Loading...