X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=doc%2Fposix-headers%2Fsys_stat.texi;h=bd644f6007116dad9f0839894d5335053aae1c3d;hb=55c6e4b6fe65fdfd5154228209a5c9828bb8ec9d;hp=e4979aaabd1beff586a0ffb6980474c47d3ec1ac;hpb=b14c9a8fe13af6d31cdd5cb0a2210eb6b5e8a620;p=gnulib.git diff --git a/doc/posix-headers/sys_stat.texi b/doc/posix-headers/sys_stat.texi index e4979aaab..bd644f600 100644 --- a/doc/posix-headers/sys_stat.texi +++ b/doc/posix-headers/sys_stat.texi @@ -8,7 +8,11 @@ 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