From 86c22b430f2922f15533117d0e21dbe7d5898d39 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Wed, 23 Dec 2009 18:42:59 -0700 Subject: [PATCH] unistd: work around cygwin bug Cygwin 1.7.1 placed symlinkat and unlinkat in the wrong headers (due to a bug in the Linux man pages). * lib/unistd.in.h (includes): Pick up headers needed for cygwin. * doc/posix-functions/unlinkat.texi (unlinkat): Document the bug. * doc/posix-functions/symlinkat.texi (symlinkat): Likewise. Signed-off-by: Eric Blake --- ChangeLog | 7 +++++++ doc/posix-functions/symlinkat.texi | 4 ++++ doc/posix-functions/unlinkat.texi | 4 ++++ lib/unistd.in.h | 9 ++++++++- 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 2133dc5373..8c4fe25ee4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-12-23 Eric Blake + + unistd: work around cygwin bug + * lib/unistd.in.h (includes): Pick up headers needed for cygwin. + * doc/posix-functions/unlinkat.texi (unlinkat): Document the bug. + * doc/posix-functions/symlinkat.texi (symlinkat): Likewise. + 2009-12-23 Bruno Haible localename: More tests. diff --git a/doc/posix-functions/symlinkat.texi b/doc/posix-functions/symlinkat.texi index d5ef9dca85..32760a4150 100644 --- a/doc/posix-functions/symlinkat.texi +++ b/doc/posix-functions/symlinkat.texi @@ -13,6 +13,10 @@ This function is missing on some platforms: glibc 2.3.6, MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, Interix 3.5, BeOS. But the replacement function is not safe to be used in libraries and is not multithread-safe. +@item +Some platforms declare this function in @code{stdio.h} instead of +@code{unistd.h}: +Cygwin 1.7.1. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/unlinkat.texi b/doc/posix-functions/unlinkat.texi index 1ec724e4ed..cf334098a2 100644 --- a/doc/posix-functions/unlinkat.texi +++ b/doc/posix-functions/unlinkat.texi @@ -16,6 +16,10 @@ But the replacement function is not safe to be used in libraries and is not mult @item Some systems mistakenly succeed on @code{unlinkat(fd,"file/",flag)}: GNU/Hurd, Solaris 9. +@item +Some platforms declare this function in @code{fcntl.h} instead of +@code{unistd.h}: +Cygwin 1.7.1. @end itemize Portability problems not fixed by Gnulib: diff --git a/lib/unistd.in.h b/lib/unistd.in.h index a3a49ed60e..d0188f58ed 100644 --- a/lib/unistd.in.h +++ b/lib/unistd.in.h @@ -33,10 +33,17 @@ #include /* mingw doesn't define the SEEK_* or *_FILENO macros in . */ -#if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) +/* Cygwin 1.7.1 declares symlinkat in , not in . */ +#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ + || @GNULIB_SYMLINKAT@) # include #endif +/* Cygwin 1.7.1 declares unlinkat in , not in . */ +#if @GNULIB_UNLINKAT@ +# include +#endif + /* mingw fails to declare _exit in . */ /* mingw, BeOS, Haiku declare environ in , not in . */ /* Solaris declares getcwd not only in but also in . */ -- 2.30.2