diff options
author | Eric Blake <ebb9@byu.net> | 2009-09-17 15:55:24 -0600 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2009-09-19 13:22:28 -0600 |
commit | b4caad347f49b6fc8ec0b656e494dcd90f031b7c (patch) | |
tree | 8ef4226610ad283a5082956951772663eb712738 /doc/posix-functions/lstat.texi | |
parent | ba1652925190702bec29e2c5129ee857576853d6 (diff) | |
download | gnulib-b4caad347f49b6fc8ec0b656e494dcd90f031b7c.tar.gz |
lstat: fix Solaris 9 bug
lstat("file/",buf) mistakenly succeeded.
* lib/lstat.c (lstat): Also check for trailing slash on
non-symlink, non-directories. Use stat module to simplify logic.
* doc/posix-functions/lstat.texi (lstat): Document it.
* modules/lstat-tests (Depends-on): Add errno, same-inode.
(configure.ac): Check for symlink.
* tests/test-lstat.c (main): Add more tests.
Signed-off-by: Eric Blake <ebb9@byu.net>
Diffstat (limited to 'doc/posix-functions/lstat.texi')
-rw-r--r-- | doc/posix-functions/lstat.texi | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/doc/posix-functions/lstat.texi b/doc/posix-functions/lstat.texi index 7a82d87bfe..dbe31f8636 100644 --- a/doc/posix-functions/lstat.texi +++ b/doc/posix-functions/lstat.texi @@ -9,8 +9,13 @@ Gnulib module: lstat Portability problems fixed by Gnulib: @itemize @item -When the argument ends in a slash, some platforms don't dereference the -argument. +For symlinks, when the argument ends in a slash, some platforms don't +dereference the argument: +Solaris 9. +@item +On some platforms, @code{lstat("file/",buf)} succeeds instead of +failing with @code{ENOTDIR}. +Solaris 9. @item On Windows platforms (excluding Cygwin), symlinks are not supported, so @code{lstat} does not exist. @@ -22,4 +27,12 @@ Portability problems not fixed by Gnulib: On platforms where @code{off_t} is a 32-bit type, @code{lstat} may not correctly report the size of files or block devices larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. +@item +On Windows platforms (excluding Cygwin), @code{st_ino} is always 0. +@item +Because of the definition of @code{struct stat}, it is not possible to +portably replace @code{stat} via an object-like macro. Therefore, +expressions such as @code{(islnk ? lstat : stat) (name, buf)} are not +portable, and should instead be written @code{islnk ? lstat (name, +buf) : stat (name, buf)}. @end itemize |