summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2012-10-15 09:31:07 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2012-10-15 09:31:52 -0700
commita4abf7a49b68df18db471e0af03903e8e3bb916f (patch)
tree5653239c6f2c4bd50a2c978da95b1d8d4cb39527
parent290d23ac868ab45c255654966b2d8fde99e3fa80 (diff)
downloadgnulib-a4abf7a49b68df18db471e0af03903e8e3bb916f.tar.gz
fcntl-h: support GNU flags like O_IGNORE_CTTY
* doc/posix-headers/fcntl.texi (fcntl.h): Support O_IGNORE_CTTY, O_NOLINK, and O_NOTRANS. These flags are nonzero on GNU/Hurd systems. Discovered when using fcntl-h with GNU Emacs, which uses O_IGNORE_CTTY. Fix misspelling of F_SETLKW. * lib/fcntl.in.h (O_IGNORE_CTTY, O_NOLINK, O_NOTRANS): Define to 0 if not already defined. * tests/test-fcntl-h.c: Test these new flags.
-rw-r--r--ChangeLog11
-rw-r--r--doc/posix-headers/fcntl.texi7
-rw-r--r--lib/fcntl.in.h12
-rw-r--r--tests/test-fcntl-h.c15
4 files changed, 39 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 45637f3c94..ab27b51de7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2012-10-15 Paul Eggert <eggert@cs.ucla.edu>
+
+ fcntl-h: support GNU flags like O_IGNORE_CTTY
+ * doc/posix-headers/fcntl.texi (fcntl.h): Support O_IGNORE_CTTY,
+ O_NOLINK, and O_NOTRANS. These flags are nonzero on GNU/Hurd
+ systems. Discovered when using fcntl-h with GNU Emacs, which uses
+ O_IGNORE_CTTY. Fix misspelling of F_SETLKW.
+ * lib/fcntl.in.h (O_IGNORE_CTTY, O_NOLINK, O_NOTRANS):
+ Define to 0 if not already defined.
+ * tests/test-fcntl-h.c: Test these new flags.
+
2012-10-14 Paul Eggert <eggert@cs.ucla.edu>
faccessat, etc.: support AT_FDCWD-only use
diff --git a/doc/posix-headers/fcntl.texi b/doc/posix-headers/fcntl.texi
index 10d5d8d757..eaa885da11 100644
--- a/doc/posix-headers/fcntl.texi
+++ b/doc/posix-headers/fcntl.texi
@@ -45,8 +45,9 @@ portability to native Windows platforms) are defined on some platforms but
not on others.
@item
-@samp{O_DIRECT}, @samp{O_NDELAY}, @samp{O_NOATIME},
-and @samp{O_NOLINKS} (not specified by POSIX) are defined
+@samp{O_DIRECT}, @samp{O_IGNORE_CTTY}, @samp{O_NDELAY},
+@samp{O_NOATIME}, @samp{O_NOLINK}, @samp{O_NOLINKS}, and
+@samp{O_NOTRANS} (not specified by POSIX) are defined
on some platforms but not on others.
@item
@@ -77,7 +78,7 @@ Portability problems not fixed by Gnulib:
@itemize
@item
@samp{F_SETFD}, @samp{F_GETFL}, @samp{F_SETFL}, @samp{F_GETLK},
-@samp{F_SETLK}, @samp{F_SETLOKW}, @samp{F_GETOWN}, and @samp{F_SETOWN}
+@samp{F_SETLK}, @samp{F_SETLKW}, @samp{F_GETOWN}, and @samp{F_SETOWN}
are not defined on some platforms:
mingw, MSVC 9.
diff --git a/lib/fcntl.in.h b/lib/fcntl.in.h
index 76e12f78a6..5fdac2313d 100644
--- a/lib/fcntl.in.h
+++ b/lib/fcntl.in.h
@@ -216,6 +216,10 @@ _GL_WARN_ON_USE (openat, "openat is not portable - "
# define O_EXEC O_RDONLY /* This is often close enough in older systems. */
#endif
+#ifndef O_IGNORE_CTTY
+# define O_IGNORE_CTTY 0
+#endif
+
#ifndef O_NDELAY
# define O_NDELAY 0
#endif
@@ -249,10 +253,18 @@ _GL_WARN_ON_USE (openat, "openat is not portable - "
# define O_NOFOLLOW 0
#endif
+#ifndef O_NOLINK
+# define O_NOLINK 0
+#endif
+
#ifndef O_NOLINKS
# define O_NOLINKS 0
#endif
+#ifndef O_NOTRANS
+# define O_NOTRANS 0
+#endif
+
#ifndef O_RSYNC
# define O_RSYNC 0
#endif
diff --git a/tests/test-fcntl-h.c b/tests/test-fcntl-h.c
index 00c5468dff..9515f828e3 100644
--- a/tests/test-fcntl-h.c
+++ b/tests/test-fcntl-h.c
@@ -21,9 +21,9 @@
#include <fcntl.h>
/* Check that the various O_* macros are defined. */
-int o = O_DIRECT | O_DIRECTORY | O_DSYNC | O_NDELAY | O_NOATIME | O_NONBLOCK
- | O_NOCTTY | O_NOFOLLOW | O_NOLINKS | O_RSYNC | O_SYNC | O_TTY_INIT
- | O_BINARY | O_TEXT;
+int o = (O_DIRECT | O_DIRECTORY | O_DSYNC | O_IGNORE_CTTY | O_NDELAY | O_NOATIME
+ | O_NONBLOCK | O_NOCTTY | O_NOFOLLOW | O_NOLINK | O_NOLINKS | O_NOTRANS
+ | O_RSYNC | O_SYNC | O_TTY_INIT | O_BINARY | O_TEXT);
/* Check that the various SEEK_* macros are defined. */
int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET };
@@ -84,6 +84,9 @@ main (void)
#if O_DSYNC
case O_DSYNC:
#endif
+#if O_IGNORE_CTTY
+ case O_IGNORE_CTTY:
+#endif
#if O_NOATIME
case O_NOATIME:
#endif
@@ -96,9 +99,15 @@ main (void)
#if O_NOFOLLOW
case O_NOFOLLOW:
#endif
+#if O_NOLINK
+ case O_NOLINK:
+#endif
#if O_NOLINKS
case O_NOLINKS:
#endif
+#if O_NOTRANS
+ case O_NOTRANS:
+#endif
#if O_RSYNC && O_RSYNC != O_DSYNC
case O_RSYNC:
#endif