From: Bruno Haible Date: Sun, 14 May 2017 15:33:37 +0000 (+0200) Subject: same-inode: Adapt for windows-stat-inodes. X-Git-Tag: v1.0~6151 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=0e9b97cffc239000d07cc51c16eda56cf87f5195;p=gnulib.git same-inode: Adapt for windows-stat-inodes. * lib/same-inode.h: Include . (SAME_INODE) [_GL_WINDOWS_STAT_INODES]: Define specifically. * modules/same-inode (Depends-on): Add sys_types. --- diff --git a/ChangeLog b/ChangeLog index 488d25894c..a7a3968e98 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2017-05-14 Bruno Haible + + same-inode: Adapt for windows-stat-inodes. + * lib/same-inode.h: Include . + (SAME_INODE) [_GL_WINDOWS_STAT_INODES]: Define specifically. + * modules/same-inode (Depends-on): Add sys_types. + 2017-05-14 Bruno Haible windows-stat-inodes: New module. diff --git a/lib/same-inode.h b/lib/same-inode.h index 7cece6dda5..a08bc4ec0d 100644 --- a/lib/same-inode.h +++ b/lib/same-inode.h @@ -18,6 +18,8 @@ #ifndef SAME_INODE_H # define SAME_INODE_H 1 +# include + # ifdef __VMS # define SAME_INODE(a, b) \ ((a).st_ino[0] == (b).st_ino[0] \ @@ -25,9 +27,17 @@ && (a).st_ino[2] == (b).st_ino[2] \ && (a).st_dev == (b).st_dev) # elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -/* On MinGW, struct stat lacks necessary info, so always return 0. - Callers can use !a.st_ino to deduce that the information is unknown. */ -# define SAME_INODE(a, b) 0 + /* Native Windows. */ +# if _GL_WINDOWS_STAT_INODES + /* stat() and fstat() set st_dev and st_ino to 0 if information about + the inode is not available. */ +# define SAME_INODE(a, b) \ + (!((a).st_ino == 0 && (a).st_dev == 0) \ + && (a).st_ino == (b).st_ino && (a).st_dev == (b).st_dev) +# else + /* stat() and fstat() set st_ino to 0 always. */ +# define SAME_INODE(a, b) 0 +# endif # else # define SAME_INODE(a, b) \ ((a).st_ino == (b).st_ino \ diff --git a/modules/same-inode b/modules/same-inode index 27da5d2464..53964d0409 100644 --- a/modules/same-inode +++ b/modules/same-inode @@ -5,6 +5,7 @@ Files: lib/same-inode.h Depends-on: +sys_types configure.ac: