> From: Kees Dekker <[email protected]> > Date: Thu, 23 Feb 2017 16:24:04 +0000 > > I don't have the full knowledge and (even more important) the time to make > Cygwin > alike inode implementation. So I'm willing to make a git patch for the code I > provided, > but not able to make something that let get windows more close to POSIX > behavior. > It is almost a design decision to choose to what level Windows should behave > like > POSIX systems.
Modern MS-Windows filesystems do have an equivalent of an inode, and also of uid and gid of the file's owner, but the implementations of 'stat' and 'fstat' in the MS C runtime libraries don't return this information. It is possible to obtain that information, but it would require a more-or-less complete replacement of 'stat' and 'fstat', and also replacement of 'struct stat', because the replacement inode values are (AFAIR) 48-bit values, whereas the inode field in stock MS 'struct stat' is just 16-bit wide. An example of such a replacement can be found in the Emacs sources. A simpler solution would be to return zero from same_file if both files have inode values of zero. I think such values are impossible on Posix systems, but if they are, then this could be a Windows specific definition of the macro (system.h in Diffutils is already prepared to support a build which defines a non-default macro). There's no such easy solution for same_file_attributes, but AFAICT that macro is only called by Diffutils if same_file returns non-zero, so taking care of the latter will also resolve the problem with the former. HTH
