From b277764ab1e0a68b1db0bf254ea4dbe8e16c0603 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Fri, 8 Apr 2011 10:22:00 -0600 Subject: [PATCH] fcntl-h: fix O_ACCMODE on cygwin * doc/posix-headers/fcntl.texi (fcntl.h): Document the bug. * lib/fcntl.in.h (O_ACCMODE): Fix it. Signed-off-by: Eric Blake --- ChangeLog | 4 ++++ doc/posix-headers/fcntl.texi | 5 +++++ lib/fcntl.in.h | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/ChangeLog b/ChangeLog index fe0a88639..58f0c53ca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2011-04-08 Eric Blake + fcntl-h: fix O_ACCMODE on cygwin + * doc/posix-headers/fcntl.texi (fcntl.h): Document the bug. + * lib/fcntl.in.h (O_ACCMODE): Fix it. + pipe-filter: drop O_NONBLOCK workarounds * modules/pipe-filter-gi (Depends-on): Add fcntl-h. * modules/pipe-filter-ii (Depends-on): Likewise. diff --git a/doc/posix-headers/fcntl.texi b/doc/posix-headers/fcntl.texi index 29b61ecb4..c87e8726d 100644 --- a/doc/posix-headers/fcntl.texi +++ b/doc/posix-headers/fcntl.texi @@ -23,6 +23,11 @@ non-zero value; otherwise, the gnulib replacement is 0. Gnulib defines these macros to @samp{O_RDONLY}, which is typically 0. @item +The @samp{O_ACCMODE} mask mistakenly omits @samp{O_SEARCH} and +@samp{O_EXEC} on some platforms: +Cygwin. + +@item @samp{O_BINARY}, @samp{O_TEXT} (not specified by POSIX, but essential for portability to Woe32 platforms) are defined on some platforms but not on others. diff --git a/lib/fcntl.in.h b/lib/fcntl.in.h index b6521d671..971316fc0 100644 --- a/lib/fcntl.in.h +++ b/lib/fcntl.in.h @@ -256,6 +256,11 @@ _GL_WARN_ON_USE (openat, "openat is not portable - " # define O_TTY_INIT 0 #endif +#if O_ACCMODE != (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) +# undef O_ACCMODE +# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) +#endif + /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in fcntl.h */ #if !defined O_BINARY && defined _O_BINARY -- 2.11.0