-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 According to Eric Blake on 10/2/2009 6:32 PM: > I'll let others decide how Hurd will fix /dev/null, or if a fix is even > necessary. But meanwhile, the point of test-open was to test that opening > a non-directory with a trailing slash fails, not whether Hurd complies.
Likewise, fdopendir shouldn't examine /dev/null. But in the process of improving the test, I found that GNU/Hurd fdopendir does not (yet) reject non-dir fds. I also improved the testsuite for symlink (accepting non-standard errno values, not worth working around with a wrapper), and fixed unlinkat(fd,"file/"0) (the same failure occurred for unlink). With this series, the openat module now passes unit tests on the Hurd. - -- Don't work too hard, make some time for fun as well! Eric Blake e...@byu.net -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (Cygwin) Comment: Public key at home.comcast.net/~ericblake/eblake.gpg Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAkrMFT4ACgkQ84KuGfSFAYADEgCfUqD4EJjaiLntEVdtz17r2GA0 4w4AnjXG2xKp2jsh3pVXszN2dGZjBkIR =vq0d -----END PGP SIGNATURE-----
From 48b0feac54dce2caf46cc53dd160e699737ff52a Mon Sep 17 00:00:00 2001 From: Eric Blake <e...@byu.net> Date: Tue, 6 Oct 2009 07:09:13 -0600 Subject: [PATCH 1/4] test-symlink: port to GNU/Hurd * tests/test-symlink.h (test_symlink): Relax expected errno. Signed-off-by: Eric Blake <e...@byu.net> --- ChangeLog | 3 +++ tests/test-symlink.h | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c2ed577..ef050d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2009-10-06 Eric Blake <e...@byu.net> + test-symlink: port to GNU/Hurd + * tests/test-symlink.h (test_symlink): Relax expected errno. + doc: tweak more cygwin information * doc/glibc-headers/getopt.texi (getopt.h): Cygwin 1.7 getopt is now compatible with glibc. diff --git a/tests/test-symlink.h b/tests/test-symlink.h index ef51564..9907293 100644 --- a/tests/test-symlink.h +++ b/tests/test-symlink.h @@ -60,14 +60,14 @@ test_symlink (int (*func) (char const *, char const *), bool print) ASSERT (errno == EEXIST); errno = 0; ASSERT (func ("nowhere", BASE "dir/") == -1); - ASSERT (errno == EEXIST); + ASSERT (errno == EEXIST || errno == EINVAL); ASSERT (close (creat (BASE "file", 0600)) == 0); errno = 0; ASSERT (func ("nowhere", BASE "file") == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func ("nowhere", BASE "file/") == -1); - ASSERT (errno == EEXIST || errno == ENOTDIR); + ASSERT (errno == EEXIST || errno == ENOTDIR || errno == ENOENT); ASSERT (rmdir (BASE "dir") == 0); ASSERT (unlink (BASE "file") == 0); -- 1.6.5.rc1 From dfbec8be94ca116ce40c04f88302329505dbb745 Mon Sep 17 00:00:00 2001 From: Eric Blake <e...@byu.net> Date: Tue, 6 Oct 2009 06:58:08 -0600 Subject: [PATCH 2/4] fdopendir: fix GNU/Hurd bug fdopendir(open("file",O_RDONLY)) mistakenly succeeded, with subsequent readdir() failing with ENOTDIR. * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Check for Hurd bug in allowing non-directory fds. * lib/fdopendir.c (rpl_fdopendir): Work around it. * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): New witness. * modules/dirent (Makefile.am): Substitute it. * lib/dirent.in.h (fdopendir): Declare replacement. * doc/posix-functions/fdopendir.texi (fdopendir): Document this. * tests/test-fdopendir.c (main): Test something other than /dev/null, since on Hurd that behaves like a directory. Signed-off-by: Eric Blake <e...@byu.net> --- ChangeLog | 11 ++++++++ doc/posix-functions/fdopendir.texi | 4 +++ lib/dirent.in.h | 6 ++++- lib/fdopendir.c | 45 ++++++++++++++++++++++++++++------- m4/dirent_h.m4 | 25 ++++++++++--------- m4/fdopendir.m4 | 19 ++++++++++++++- modules/dirent | 1 + tests/test-fdopendir.c | 3 +- 8 files changed, 90 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index ef050d7..7ab9135 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2009-10-06 Eric Blake <e...@byu.net> + fdopendir: fix GNU/Hurd bug + * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Check for Hurd bug in + allowing non-directory fds. + * lib/fdopendir.c (rpl_fdopendir): Work around it. + * m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): New witness. + * modules/dirent (Makefile.am): Substitute it. + * lib/dirent.in.h (fdopendir): Declare replacement. + * doc/posix-functions/fdopendir.texi (fdopendir): Document this. + * tests/test-fdopendir.c (main): Test something other than + /dev/null, since on Hurd that behaves like a directory. + test-symlink: port to GNU/Hurd * tests/test-symlink.h (test_symlink): Relax expected errno. diff --git a/doc/posix-functions/fdopendir.texi b/doc/posix-functions/fdopendir.texi index 20db12c..fae7bb7 100644 --- a/doc/posix-functions/fdopendir.texi +++ b/doc/posix-functions/fdopendir.texi @@ -16,6 +16,10 @@ fdopendir is not multithread-safe. Also, the replacement does not guarantee that @samp{dirfd(fdopendir(n))==n} (dirfd might fail, or return a different file descriptor than n). +...@item +This function does not reject non-directory file descriptors on some +platforms: +GNU/Hurd. @end itemize Portability problems not fixed by Gnulib: diff --git a/lib/dirent.in.h b/lib/dirent.in.h index 6da77d9..2885c56 100644 --- a/lib/dirent.in.h +++ b/lib/dirent.in.h @@ -55,7 +55,11 @@ extern int dirfd (DIR const *dir); #endif #if @GNULIB_FDOPENDIR@ -# if !...@have_fdopendir@ +# if @REPLACE_FDOPENDIR@ +# undef fdopendir +# define fdopendir rpl_fdopendir +# endif +# if !...@have_fdopendir@ || @REPLACE_FDOPENDIR@ /* Open a directory stream visiting the given directory file descriptor. Return NULL and set errno if fd is not visiting a directory. On success, this function consumes fd (it will be diff --git a/lib/fdopendir.c b/lib/fdopendir.c index 14dc111..c364306 100644 --- a/lib/fdopendir.c +++ b/lib/fdopendir.c @@ -23,13 +23,15 @@ #include <stdlib.h> #include <unistd.h> -#include "openat.h" -#include "openat-priv.h" -#include "save-cwd.h" +#if !HAVE_FDOPENDIR -#if GNULIB_DIRENT_SAFER -# include "dirent--.h" -#endif +# include "openat.h" +# include "openat-priv.h" +# include "save-cwd.h" + +# if GNULIB_DIRENT_SAFER +# include "dirent--.h" +# endif /* Replacement for Solaris' function by the same name. <http://www.google.com/search?q=fdopendir+site:docs.sun.com> @@ -70,12 +72,12 @@ fdopendir (int fd) save_cwd/restore_cwd. */ if (! dir && EXPECTED_ERRNO (saved_errno)) { -#if REPLACE_FCHDIR +# if REPLACE_FCHDIR const char *name = _gl_directory_name (fd); if (name) dir = opendir (name); saved_errno = errno; -#else /* !REPLACE_FCHDIR */ +# else /* !REPLACE_FCHDIR */ struct saved_cwd saved_cwd; if (save_cwd (&saved_cwd) != 0) openat_save_fail (errno); @@ -95,7 +97,7 @@ fdopendir (int fd) } free_cwd (&saved_cwd); -#endif /* !REPLACE_FCHDIR */ +# endif /* !REPLACE_FCHDIR */ } if (dir) @@ -105,3 +107,28 @@ fdopendir (int fd) errno = saved_errno; return dir; } + +#else /* HAVE_FDOPENDIR */ + +# include <errno.h> +# include <sys/stat.h> + +# undef fdopendir + +/* Like fdopendir, but work around GNU/Hurd bug by validating FD. */ + +DIR * +rpl_fdopendir (int fd) +{ + struct stat st; + if (fstat (fd, &st)) + return NULL; + if (!S_ISDIR (st.st_mode)) + { + errno = ENOTDIR; + return NULL; + } + return fdopendir (fd); +} + +#endif /* HAVE_FDOPENDIR */ diff --git a/m4/dirent_h.m4 b/m4/dirent_h.m4 index 16d8a02..a9964e2 100644 --- a/m4/dirent_h.m4 +++ b/m4/dirent_h.m4 @@ -1,4 +1,4 @@ -# dirent_h.m4 serial 5 +# dirent_h.m4 serial 6 dnl Copyright (C) 2008-2009 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -32,16 +32,17 @@ AC_DEFUN([gl_DIRENT_MODULE_INDICATOR], AC_DEFUN([gl_DIRENT_H_DEFAULTS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR - GNULIB_DIRFD=0; AC_SUBST([GNULIB_DIRFD]) - GNULIB_FDOPENDIR=0; AC_SUBST([GNULIB_FDOPENDIR]) - GNULIB_SCANDIR=0; AC_SUBST([GNULIB_SCANDIR]) - GNULIB_ALPHASORT=0; AC_SUBST([GNULIB_ALPHASORT]) + GNULIB_DIRFD=0; AC_SUBST([GNULIB_DIRFD]) + GNULIB_FDOPENDIR=0; AC_SUBST([GNULIB_FDOPENDIR]) + GNULIB_SCANDIR=0; AC_SUBST([GNULIB_SCANDIR]) + GNULIB_ALPHASORT=0; AC_SUBST([GNULIB_ALPHASORT]) dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_DECL_DIRFD=1; AC_SUBST([HAVE_DECL_DIRFD]) - HAVE_FDOPENDIR=1; AC_SUBST([HAVE_FDOPENDIR]) - HAVE_SCANDIR=1; AC_SUBST([HAVE_SCANDIR]) - HAVE_ALPHASORT=1; AC_SUBST([HAVE_ALPHASORT]) - REPLACE_CLOSEDIR=0; AC_SUBST([REPLACE_CLOSEDIR]) - REPLACE_OPENDIR=0; AC_SUBST([REPLACE_OPENDIR]) - DIRENT_H=''; AC_SUBST([DIRENT_H]) + HAVE_DECL_DIRFD=1; AC_SUBST([HAVE_DECL_DIRFD]) + HAVE_FDOPENDIR=1; AC_SUBST([HAVE_FDOPENDIR]) + HAVE_SCANDIR=1; AC_SUBST([HAVE_SCANDIR]) + HAVE_ALPHASORT=1; AC_SUBST([HAVE_ALPHASORT]) + REPLACE_CLOSEDIR=0; AC_SUBST([REPLACE_CLOSEDIR]) + REPLACE_FDOPENDIR=0; AC_SUBST([REPLACE_FDOPENDIR]) + REPLACE_OPENDIR=0; AC_SUBST([REPLACE_OPENDIR]) + DIRENT_H=''; AC_SUBST([DIRENT_H]) ]) diff --git a/m4/fdopendir.m4 b/m4/fdopendir.m4 index 09670bb..0ffb7fb 100644 --- a/m4/fdopendir.m4 +++ b/m4/fdopendir.m4 @@ -1,4 +1,4 @@ -# serial 1 +# serial 2 # See if we need to provide fdopendir. dnl Copyright (C) 2009 Free Software Foundation, Inc. @@ -17,5 +17,22 @@ AC_DEFUN([gl_FUNC_FDOPENDIR], AC_LIBOBJ([fdopendir]) gl_REPLACE_DIRENT_H HAVE_FDOPENDIR=0 + else + AC_CACHE_CHECK([whether fdopendir works], + [gl_cv_func_fdopendir_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include <dirent.h> +#include <fcntl.h> +]], [int fd = open ("conftest.h", O_RDONLY); + if (fd < 0) return 2; + return !!fdopendir (fd);])], + [gl_cv_func_fdopendir_works=yes], + [gl_cv_func_fdopendir_works=no], + [gl_cv_func_fdopendir_works="guessing no"])]) + if test "$gl_cv_func_fdopendir_works" != yes; then + REPLACE_FDOPENDIR=1 + gl_REPLACE_DIRENT_H + AC_LIBOBJ([fdopendir]) + fi fi ]) diff --git a/modules/dirent b/modules/dirent index f729bcd..d21cfaf 100644 --- a/modules/dirent +++ b/modules/dirent @@ -33,6 +33,7 @@ dirent.h: dirent.in.h -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \ -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \ -e 's|@''REPLACE_CLOSEDIR''@|$(REPLACE_CLOSEDIR)|g' \ + -e 's|@''REPLACE_FDOPENDIR''@|$(REPLACE_FDOPENDIR)|g' \ -e 's|@''REPLACE_OPENDIR''@|$(REPLACE_OPENDIR)|g' \ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ < $(srcdir)/dirent.in.h; \ diff --git a/tests/test-fdopendir.c b/tests/test-fdopendir.c index 003a279..330544c 100644 --- a/tests/test-fdopendir.c +++ b/tests/test-fdopendir.c @@ -45,12 +45,13 @@ main () int fd; /* A non-directory cannot be turned into a directory stream. */ - fd = open ("/dev/null", O_RDONLY); + fd = open ("test-fdopendir.tmp", O_RDONLY | O_CREAT, 0600); ASSERT (0 <= fd); errno = 0; ASSERT (fdopendir (fd) == NULL); ASSERT (errno == ENOTDIR); ASSERT (close (fd) == 0); + ASSERT (unlink ("test-fdopendir.tmp") == 0); /* A bad fd cannot be turned into a stream. */ errno = 0; -- 1.6.5.rc1 From 3cfa87074aacbe7975f7b019d652a97488173f02 Mon Sep 17 00:00:00 2001 From: Eric Blake <e...@byu.net> Date: Tue, 6 Oct 2009 12:03:58 -0600 Subject: [PATCH 3/4] openat: fix GNU/Hurd bug in unlinkat unlinkat(fd,"file/",0) mistakenly succeeded. * m4/openat.m4 (gl_FUNC_OPENAT): Replace unlinkat if unlink is broken. * doc/posix-functions/unlink.texi (unlink): Document this. * doc/posix-functions/unlinkat.texi (unlinkat): Likewise. Signed-off-by: Eric Blake <e...@byu.net> --- ChangeLog | 6 ++++++ doc/posix-functions/unlink.texi | 2 +- doc/posix-functions/unlinkat.texi | 2 +- m4/openat.m4 | 10 ++++++++-- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7ab9135..05a4730 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2009-10-06 Eric Blake <e...@byu.net> + openat: fix GNU/Hurd bug in unlinkat + * m4/openat.m4 (gl_FUNC_OPENAT): Replace unlinkat if unlink is + broken. + * doc/posix-functions/unlink.texi (unlink): Document this. + * doc/posix-functions/unlinkat.texi (unlinkat): Likewise. + fdopendir: fix GNU/Hurd bug * m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Check for Hurd bug in allowing non-directory fds. diff --git a/doc/posix-functions/unlink.texi b/doc/posix-functions/unlink.texi index 1249c42..1df1e30 100644 --- a/doc/posix-functions/unlink.texi +++ b/doc/posix-functions/unlink.texi @@ -10,7 +10,7 @@ unlink @itemize @item Some systems mistakenly succeed on @code{unlink("file/")}: -Solaris 9. +GNU/Hurd, Solaris 9. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/unlinkat.texi b/doc/posix-functions/unlinkat.texi index dfff9b9..1ec724e 100644 --- a/doc/posix-functions/unlinkat.texi +++ b/doc/posix-functions/unlinkat.texi @@ -15,7 +15,7 @@ unlinkat But the replacement function is not safe to be used in libraries and is not multithread-safe. @item Some systems mistakenly succeed on @code{unlinkat(fd,"file/",flag)}: -Solaris 9. +GNU/Hurd, Solaris 9. @end itemize Portability problems not fixed by Gnulib: diff --git a/m4/openat.m4 b/m4/openat.m4 index 42df3ee..6b4f95c 100644 --- a/m4/openat.m4 +++ b/m4/openat.m4 @@ -1,4 +1,4 @@ -# serial 24 +# serial 25 # See if we need to use our replacement for Solaris' openat et al functions. dnl Copyright (C) 2004-2009 Free Software Foundation, Inc. @@ -27,8 +27,14 @@ AC_DEFUN([gl_FUNC_OPENAT], AC_CHECK_FUNCS_ONCE([lchmod]) AC_REPLACE_FUNCS([fchmodat fstatat mkdirat openat unlinkat]) AC_REQUIRE([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) + AC_REQUIRE([gl_FUNC_UNLINK]) case $ac_cv_func_openat+$ac_cv_func_lstat_dereferences_slashed_symlink in - yes+yes) ;; + yes+yes) + # GNU/Hurd has unlinkat, but it has the same bug as unlink. + if test $REPLACE_UNLINK = 1; then + AC_LIBOBJ([unlinkat]) + REPLACE_UNLINKAT=1 + fi ;; yes+*) # Solaris 9 has *at functions, but uniformly mishandles trailing # slash in all of them. -- 1.6.5.rc1 From 396ef4ef06e423ba882bbe65ad70ab0b06332a7b Mon Sep 17 00:00:00 2001 From: Eric Blake <e...@byu.net> Date: Tue, 6 Oct 2009 13:57:50 -0600 Subject: [PATCH 4/4] doc: tweak *at function documentation * doc/posix-functions/faccessat.texi (faccessat): Mention known issue with replacement. * doc/posix-functions/fchdir.texi (fchdir): Likewise. * doc/posix-functions/linkat.texi (linkat): Likewise. * doc/posix-functions/mkfifoat.texi (mkfifoat): Likewise. * doc/posix-functions/mknodat.texi (mknodat): Likewise. * doc/posix-functions/readlinkat.texi (readlinkat): Likewise. * doc/posix-functions/renameat.texi (renameat): Likewise. * doc/posix-functions/symlinkat.texi (symlinkat): Likewise. Signed-off-by: Eric Blake <e...@byu.net> --- ChangeLog | 11 +++++++++++ doc/posix-functions/faccessat.texi | 3 ++- doc/posix-functions/fchdir.texi | 1 + doc/posix-functions/linkat.texi | 1 + doc/posix-functions/mkfifoat.texi | 1 + doc/posix-functions/mknodat.texi | 1 + doc/posix-functions/readlinkat.texi | 1 + doc/posix-functions/renameat.texi | 1 + doc/posix-functions/symlinkat.texi | 1 + 9 files changed, 20 insertions(+), 1 deletions(-) diff --git a/ChangeLog b/ChangeLog index 05a4730..cc4b51d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2009-10-06 Eric Blake <e...@byu.net> + doc: tweak *at function documentation + * doc/posix-functions/faccessat.texi (faccessat): Mention + known issue with replacement. + * doc/posix-functions/fchdir.texi (fchdir): Likewise. + * doc/posix-functions/linkat.texi (linkat): Likewise. + * doc/posix-functions/mkfifoat.texi (mkfifoat): Likewise. + * doc/posix-functions/mknodat.texi (mknodat): Likewise. + * doc/posix-functions/readlinkat.texi (readlinkat): Likewise. + * doc/posix-functions/renameat.texi (renameat): Likewise. + * doc/posix-functions/symlinkat.texi (symlinkat): Likewise. + openat: fix GNU/Hurd bug in unlinkat * m4/openat.m4 (gl_FUNC_OPENAT): Replace unlinkat if unlink is broken. diff --git a/doc/posix-functions/faccessat.texi b/doc/posix-functions/faccessat.texi index 835a5d8..f1d7be0 100644 --- a/doc/posix-functions/faccessat.texi +++ b/doc/posix-functions/faccessat.texi @@ -13,7 +13,8 @@ faccessat 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. -However, the replacement does not always take into account ACLs. +However, the replacement does not always take into account ACLs. Also, +it is not safe to be used in libraries and is not multithread-safe. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/fchdir.texi b/doc/posix-functions/fchdir.texi index 5283b6c..06e99d8 100644 --- a/doc/posix-functions/fchdir.texi +++ b/doc/posix-functions/fchdir.texi @@ -11,6 +11,7 @@ fchdir @item This function is missing on some platforms: Tandem/NSK, mingw, BeOS. +But the replacement function is not safe to be used in libraries and is not multithread-safe. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/linkat.texi b/doc/posix-functions/linkat.texi index 62fc43d..1fe5434 100644 --- a/doc/posix-functions/linkat.texi +++ b/doc/posix-functions/linkat.texi @@ -12,6 +12,7 @@ linkat 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. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/mkfifoat.texi b/doc/posix-functions/mkfifoat.texi index c3e39ca..2cd9f6f 100644 --- a/doc/posix-functions/mkfifoat.texi +++ b/doc/posix-functions/mkfifoat.texi @@ -13,6 +13,7 @@ mkfifoat 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. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/mknodat.texi b/doc/posix-functions/mknodat.texi index d1af058..6a6ed3f 100644 --- a/doc/posix-functions/mknodat.texi +++ b/doc/posix-functions/mknodat.texi @@ -13,6 +13,7 @@ mknodat 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. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/readlinkat.texi b/doc/posix-functions/readlinkat.texi index 65f088f..4cef743 100644 --- a/doc/posix-functions/readlinkat.texi +++ b/doc/posix-functions/readlinkat.texi @@ -12,6 +12,7 @@ readlinkat 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. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/renameat.texi b/doc/posix-functions/renameat.texi index 52f3921..ff08b09 100644 --- a/doc/posix-functions/renameat.texi +++ b/doc/posix-functions/renameat.texi @@ -21,6 +21,7 @@ renameat 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 8, 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. @end itemize Portability problems not fixed by Gnulib: diff --git a/doc/posix-functions/symlinkat.texi b/doc/posix-functions/symlinkat.texi index 7dd3887..d5ef9dc 100644 --- a/doc/posix-functions/symlinkat.texi +++ b/doc/posix-functions/symlinkat.texi @@ -12,6 +12,7 @@ symlinkat 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. @end itemize Portability problems not fixed by Gnulib: -- 1.6.5.rc1