GH-111293: Fix DirEntry.inode dropping higher bits on Windows (GH-111294)

This commit is contained in:
zcxsythenew 2023-10-27 00:37:52 +08:00 committed by GitHub
parent a0c414c35d
commit b468538d35
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 3 deletions

View file

@ -0,0 +1 @@
Fix :data:`os.DirEntry.inode` dropping higher 64 bits of a file id on some filesystems on Windows.

View file

@ -14805,6 +14805,7 @@ typedef struct {
#ifdef MS_WINDOWS
struct _Py_stat_struct win32_lstat;
uint64_t win32_file_index;
uint64_t win32_file_index_high;
int got_file_index;
#else /* POSIX */
#ifdef HAVE_DIRENT_D_TYPE
@ -15134,11 +15135,10 @@ os_DirEntry_inode_impl(DirEntry *self)
}
self->win32_file_index = stat.st_ino;
self->win32_file_index_high = stat.st_ino_high;
self->got_file_index = 1;
}
static_assert(sizeof(unsigned long long) >= sizeof(self->win32_file_index),
"DirEntry.win32_file_index is larger than unsigned long long");
return PyLong_FromUnsignedLongLong(self->win32_file_index);
return _pystat_l128_from_l64_l64(self->win32_file_index, self->win32_file_index_high);
#else /* POSIX */
static_assert(sizeof(unsigned long long) >= sizeof(self->d_ino),
"DirEntry.d_ino is larger than unsigned long long");