NEWS.stable: log cherry-pick [e446f25]->[c092018] relocatable-shell: Update suggested...
[gnulib.git] / doc / posix-headers / sys_stat.texi
index 8f4fbcc..bd644f6 100644 (file)
@@ -1,14 +1,18 @@
 @node sys/stat.h
 @section @file{sys/stat.h}
 
-POSIX specification:@* @url{http://www.opengroup.org/susv3xbd/sys/stat.h.html}
+POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html}
 
 Gnulib module: sys_stat
 
 Portability problems fixed by Gnulib:
 @itemize
 @item
-Some macros, such as @code{S_IFMT}, are missing on some platforms.
+The type @code{mode_t} is not defined on some platforms:
+MSVC 9.
+@item
+Some macros, such as @code{S_IFMT} or @code{S_IFIFO}, are missing on some
+platforms.
 @item
 The macros @code{S_ISBLK}, @code{S_ISCHR}, @code{S_ISDIR}, @code{S_ISFIFO},
 @code{S_ISLNK}, @code{S_ISREG}, @code{S_ISSOCK} are broken on some platforms.
@@ -16,7 +20,8 @@ The macros @code{S_ISBLK}, @code{S_ISCHR}, @code{S_ISDIR}, @code{S_ISFIFO},
 Some platforms define macros, such as @code{S_ISDOOR}, that are not defined
 on other platforms.
 @item
-The functions @code{lstat} and @code{mkdir} are not declared on mingw.
+The functions @code{lstat} and @code{mkdir} are not declared on some platforms:
+mingw, MSVC 9.
 @item
 The macros @code{UTIME_NOW} and @code{UTIME_OMIT} are missing on some
 platforms.
@@ -28,4 +33,43 @@ On some platforms, @code{struct stat} does not include @code{st_atim},
 
 Portability problems not fixed by Gnulib:
 @itemize
+@item
+The macro @code{S_IFBLK} is missing on some platforms:
+MSVC 9.
+@item
+On Windows platforms (excluding Cygwin), @code{st_ino} is always 0.
+@item
+On OpenVMS, @code{st_ino} is an array of three @code{ino_t} values,
+not a single value.
+@item
+To partially work around the previous two problems, you can test for
+nonzero @code{st_ino} and use the Gnulib @code{same-inode} module to
+compare nonzero values.  For example, @code{(a.st_ino && SAME_INODE
+(a, b))} is true if the @code{struct stat} values @code{a} and
+@code{b} are known to represent the same file, @code{(a.st_ino &&
+!SAME_INODE (a, b))} is true if they are known to represent different
+files, and @code{!a.st_ino} is true if it is not known whether they
+represent different files.
+@item
+On some platforms, two different files may have the same @code{st_dev}
+and @code{st_ino} values, even when @code{st_ino} is nonzero:
+@itemize
+@item
+GNU/Linux NFS servers that export all local file systems as a single
+NFS file system, if a local @code{st_dev} exceeds 255, or if a local
+@code{st_ino} exceeds 16777215.
+@item
+Network Appliance NFS servers in snapshot directories; see Network
+Appliance bug #195.
+@item
+ClearCase MVFS; see bug id ATRia04618.
+@end itemize
+One partial workaround is to compare other file metadata such as
+@code{st_mode} and @code{st_mtime} to detect this bug, but this
+approach does not work on files whose metadata are being changed by
+other programs.
+@item
+On some file systems, @code{st_size} contains bogus information for
+symlinks; use the Gnulib module @code{areadlink-with-size} for a
+better way to get symlink contents.
 @end itemize