]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-111293: Fix DirEntry.inode dropping higher bits on Windows (GH-111294)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 26 Oct 2023 17:08:41 +0000 (19:08 +0200)
committerGitHub <noreply@github.com>
Thu, 26 Oct 2023 17:08:41 +0000 (17:08 +0000)
(cherry picked from commit b468538d356552f0242763fe44a17b1939e8bd55)

Co-authored-by: zcxsythenew <30565051+zcxsythenew@users.noreply.github.com>
Misc/NEWS.d/next/Windows/2023-10-25-05-01-28.gh-issue-111293.FSsLT6.rst [new file with mode: 0644]
Modules/posixmodule.c

diff --git a/Misc/NEWS.d/next/Windows/2023-10-25-05-01-28.gh-issue-111293.FSsLT6.rst b/Misc/NEWS.d/next/Windows/2023-10-25-05-01-28.gh-issue-111293.FSsLT6.rst
new file mode 100644 (file)
index 0000000..4c6b255
--- /dev/null
@@ -0,0 +1 @@
+Fix :data:`os.DirEntry.inode` dropping higher 64 bits of a file id on some filesystems on Windows.
index b33293992f0d8e330378cf1f0fb94ea0dcb76a09..265c817ca6e37d747753d413833c7d82f7652ff2 100644 (file)
@@ -14528,6 +14528,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
@@ -14859,11 +14860,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");