From: Bruno Haible Date: Fri, 16 Sep 2011 21:17:49 +0000 (+0200) Subject: sys_stat: Support for MSVC. X-Git-Tag: v0.1~1898 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=a66220e562ac68d95d217ef89b4d3416cecb10dd;p=gnulib.git sys_stat: Support for MSVC. * lib/sys_stat.in.h (S_IFIFO): Define to _S_IFIFO if that exists. * tests/test-sys_stat.c: Don't assume that S_IFBLK exists. * doc/posix-headers/sys_stat.texi: Mention missing S_IFIFO, S_IFBLK on MSVC. --- diff --git a/ChangeLog b/ChangeLog index 056daba48..7f56e2235 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2011-09-16 Bruno Haible + sys_stat: Support for MSVC. + * lib/sys_stat.in.h (S_IFIFO): Define to _S_IFIFO if that exists. + * tests/test-sys_stat.c: Don't assume that S_IFBLK exists. + * doc/posix-headers/sys_stat.texi: Mention missing S_IFIFO, S_IFBLK on + MSVC. + +2011-09-16 Bruno Haible + Support for MSVC compiler: Ensure off_t gets defined. * lib/unistd.in.h: Include . * tests/test-fcntl-h.c: Check that off_t is defined. diff --git a/doc/posix-headers/sys_stat.texi b/doc/posix-headers/sys_stat.texi index 158911aa2..86fd2deef 100644 --- a/doc/posix-headers/sys_stat.texi +++ b/doc/posix-headers/sys_stat.texi @@ -8,7 +8,8 @@ Gnulib module: sys_stat Portability problems fixed by Gnulib: @itemize @item -Some macros, such as @code{S_IFMT}, are missing on some platforms. +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. @@ -29,4 +30,7 @@ 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. @end itemize diff --git a/lib/sys_stat.in.h b/lib/sys_stat.in.h index 53b30811a..bc39a1727 100644 --- a/lib/sys_stat.in.h +++ b/lib/sys_stat.in.h @@ -61,6 +61,12 @@ # include /* mingw64 */ #endif +#ifndef S_IFIFO +# ifdef _S_IFIFO +# define S_IFIFO _S_IFIFO +# endif +#endif + #ifndef S_IFMT # define S_IFMT 0170000 #endif diff --git a/tests/test-sys_stat.c b/tests/test-sys_stat.c index ec18ad072..6e8178e9b 100644 --- a/tests/test-sys_stat.c +++ b/tests/test-sys_stat.c @@ -26,11 +26,14 @@ int a[] = { S_IFMT, - S_IFBLK, S_IFCHR, S_IFDIR, S_IFIFO, S_IFREG, -#ifdef S_IFLNK /* missing on mingw and djgpp */ +#ifdef S_IFBLK /* missing on MSVC */ + S_IFBLK, +#endif + S_IFCHR, S_IFDIR, S_IFIFO, S_IFREG, +#ifdef S_IFLNK /* missing on native Windows and DJGPP */ S_IFLNK, #endif -#ifdef S_IFSOCK /* missing on mingw and djgpp */ +#ifdef S_IFSOCK /* missing on native Windows and DJGPP */ S_IFSOCK, #endif S_IRWXU, S_IRUSR, S_IWUSR, S_IXUSR, @@ -61,7 +64,9 @@ verify (S_IRWXU == (S_IRUSR | S_IWUSR | S_IXUSR)); verify (S_IRWXG == (S_IRGRP | S_IWGRP | S_IXGRP)); verify (S_IRWXO == (S_IROTH | S_IWOTH | S_IXOTH)); +#ifdef S_IFBLK verify (S_ISBLK (S_IFBLK)); +#endif verify (!S_ISBLK (S_IFCHR)); verify (!S_ISBLK (S_IFDIR)); verify (!S_ISBLK (S_IFIFO)); @@ -73,7 +78,9 @@ verify (!S_ISBLK (S_IFLNK)); verify (!S_ISBLK (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISCHR (S_IFBLK)); +#endif verify (S_ISCHR (S_IFCHR)); verify (!S_ISCHR (S_IFDIR)); verify (!S_ISCHR (S_IFIFO)); @@ -85,7 +92,9 @@ verify (!S_ISCHR (S_IFLNK)); verify (!S_ISCHR (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISDIR (S_IFBLK)); +#endif verify (!S_ISDIR (S_IFCHR)); verify (S_ISDIR (S_IFDIR)); verify (!S_ISDIR (S_IFIFO)); @@ -97,7 +106,9 @@ verify (!S_ISDIR (S_IFLNK)); verify (!S_ISDIR (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISFIFO (S_IFBLK)); +#endif verify (!S_ISFIFO (S_IFCHR)); verify (!S_ISFIFO (S_IFDIR)); verify (S_ISFIFO (S_IFIFO)); @@ -109,7 +120,9 @@ verify (!S_ISFIFO (S_IFLNK)); verify (!S_ISFIFO (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISREG (S_IFBLK)); +#endif verify (!S_ISREG (S_IFCHR)); verify (!S_ISREG (S_IFDIR)); verify (!S_ISREG (S_IFIFO)); @@ -121,7 +134,9 @@ verify (!S_ISREG (S_IFLNK)); verify (!S_ISREG (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISLNK (S_IFBLK)); +#endif verify (!S_ISLNK (S_IFCHR)); verify (!S_ISLNK (S_IFDIR)); verify (!S_ISLNK (S_IFIFO)); @@ -133,7 +148,9 @@ verify (S_ISLNK (S_IFLNK)); verify (!S_ISLNK (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISSOCK (S_IFBLK)); +#endif verify (!S_ISSOCK (S_IFCHR)); verify (!S_ISSOCK (S_IFDIR)); verify (!S_ISSOCK (S_IFIFO)); @@ -145,7 +162,9 @@ verify (!S_ISSOCK (S_IFLNK)); verify (S_ISSOCK (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISDOOR (S_IFBLK)); +#endif verify (!S_ISDOOR (S_IFCHR)); verify (!S_ISDOOR (S_IFDIR)); verify (!S_ISDOOR (S_IFIFO)); @@ -157,7 +176,9 @@ verify (!S_ISDOOR (S_IFLNK)); verify (!S_ISDOOR (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISMPB (S_IFBLK)); +#endif verify (!S_ISMPB (S_IFCHR)); verify (!S_ISMPB (S_IFDIR)); verify (!S_ISMPB (S_IFIFO)); @@ -169,7 +190,9 @@ verify (!S_ISMPB (S_IFLNK)); verify (!S_ISMPB (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISNAM (S_IFBLK)); +#endif verify (!S_ISNAM (S_IFCHR)); verify (!S_ISNAM (S_IFDIR)); verify (!S_ISNAM (S_IFIFO)); @@ -181,7 +204,9 @@ verify (!S_ISNAM (S_IFLNK)); verify (!S_ISNAM (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISNWK (S_IFBLK)); +#endif verify (!S_ISNWK (S_IFCHR)); verify (!S_ISNWK (S_IFDIR)); verify (!S_ISNWK (S_IFIFO)); @@ -193,7 +218,9 @@ verify (!S_ISNWK (S_IFLNK)); verify (!S_ISNWK (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISPORT (S_IFBLK)); +#endif verify (!S_ISPORT (S_IFCHR)); verify (!S_ISPORT (S_IFDIR)); verify (!S_ISPORT (S_IFIFO)); @@ -205,7 +232,9 @@ verify (!S_ISPORT (S_IFLNK)); verify (!S_ISPORT (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISCTG (S_IFBLK)); +#endif verify (!S_ISCTG (S_IFCHR)); verify (!S_ISCTG (S_IFDIR)); verify (!S_ISCTG (S_IFIFO)); @@ -217,7 +246,9 @@ verify (!S_ISCTG (S_IFLNK)); verify (!S_ISCTG (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISOFD (S_IFBLK)); +#endif verify (!S_ISOFD (S_IFCHR)); verify (!S_ISOFD (S_IFDIR)); verify (!S_ISOFD (S_IFIFO)); @@ -229,7 +260,9 @@ verify (!S_ISOFD (S_IFLNK)); verify (!S_ISOFD (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISOFL (S_IFBLK)); +#endif verify (!S_ISOFL (S_IFCHR)); verify (!S_ISOFL (S_IFDIR)); verify (!S_ISOFL (S_IFIFO)); @@ -241,7 +274,9 @@ verify (!S_ISOFL (S_IFLNK)); verify (!S_ISOFL (S_IFSOCK)); #endif +#ifdef S_IFBLK verify (!S_ISWHT (S_IFBLK)); +#endif verify (!S_ISWHT (S_IFCHR)); verify (!S_ISWHT (S_IFDIR)); verify (!S_ISWHT (S_IFIFO));