* 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>
|
2006-01-23 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* fhandler_socket.cc (fhandler_socket::fixup_after_fork): Reset
|
* 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_REMOVABLE:
|
||||||
case DRIVE_CDROM:
|
case DRIVE_CDROM:
|
||||||
case DRIVE_RAMDISK:
|
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
|
/* Although the documentation indicates otherwise, it seems like
|
||||||
"inodes" on these devices are persistent, at least across reboots. */
|
"inodes" on these devices are persistent, at least across reboots. */
|
||||||
buf->st_ino = (((__ino64_t) nFileIndexHigh) << 32)
|
buf->st_ino = (((__ino64_t) nFileIndexHigh) << 32)
|
||||||
| (__ino64_t) nFileIndexLow;
|
| (__ino64_t) nFileIndexLow;
|
||||||
break;
|
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:
|
default:
|
||||||
/* Either the nFileIndex* fields are unreliable or unavailable. Use the
|
/* Either the nFileIndex* fields are unreliable or unavailable. Use the
|
||||||
next best alternative. */
|
next best alternative. */
|
||||||
|
|
Loading…
Reference in New Issue