* fhandler_disk_file.cc (fhandler_base::fstat_helper): Try harder
to determine remote file systems with reliable inode numbers. Add longish comment.
This commit is contained in:
parent
3784b87b32
commit
26d27a276f
|
@ -1,3 +1,9 @@
|
|||
2006-01-24 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler_disk_file.cc (fhandler_base::fstat_helper): Try harder
|
||||
to determine remote file systems with reliable inode numbers. Add
|
||||
longish comment.
|
||||
|
||||
2006-01-23 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler_socket.cc (fhandler_socket::fixup_after_fork): Reset
|
||||
|
|
|
@ -326,14 +326,36 @@ fhandler_base::fstat_helper (struct __stat64 *buf,
|
|||
case DRIVE_REMOVABLE:
|
||||
case DRIVE_CDROM:
|
||||
case DRIVE_RAMDISK:
|
||||
/* Temporarily enable remote drives until we find out why we disabled them
|
||||
in the first place. When we find out don't forget to write a comment! */
|
||||
case DRIVE_REMOTE:
|
||||
/* Although the documentation indicates otherwise, it seems like
|
||||
"inodes" on these devices are persistent, at least across reboots. */
|
||||
buf->st_ino = (((__ino64_t) nFileIndexHigh) << 32)
|
||||
| (__ino64_t) nFileIndexLow;
|
||||
break;
|
||||
|
||||
case DRIVE_REMOTE:
|
||||
/* From own experiments and replies from the Cygwin mailing list,
|
||||
we're now trying to figure out how to determine remote file
|
||||
systems which are capable of returning persistent inode
|
||||
numbers. It seems that NT4 NTFS, when accessed remotly, and
|
||||
some other remote file systems return unreliable values in
|
||||
nFileIndex. The common factor of these unreliable remote FS
|
||||
seem to be that FILE_SUPPORTS_OBJECT_IDS isn't set, even though
|
||||
this should have nothing to do with inode numbers.
|
||||
An exception is Samba, which seems to return valid inode numbers
|
||||
without having the FILE_SUPPORTS_OBJECT_IDS flag set. So we're
|
||||
testing for the flag values returned by a 3.x Samba explicitely
|
||||
for now. */
|
||||
#define FS_IS_SAMBA (FILE_CASE_SENSITIVE_SEARCH \
|
||||
| FILE_CASE_PRESERVED_NAMES \
|
||||
| FILE_PERSISTENT_ACLS)
|
||||
if ((pc.fs_flags () & FILE_SUPPORTS_OBJECT_IDS)
|
||||
|| pc.fs_flags () == FS_IS_SAMBA)
|
||||
{
|
||||
buf->st_ino = (((__ino64_t) nFileIndexHigh) << 32)
|
||||
| (__ino64_t) nFileIndexLow;
|
||||
break;
|
||||
}
|
||||
/*FALLTHRU*/
|
||||
default:
|
||||
/* Either the nFileIndex* fields are unreliable or unavailable. Use the
|
||||
next best alternative. */
|
||||
|
|
Loading…
Reference in New Issue