diff options
author | AN Long <aisk@users.noreply.github.com> | 2023-11-13 16:10:06 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-13 16:10:06 (GMT) |
commit | 29af7369dbbbba8cefafb196e977bce8189a527d (patch) | |
tree | c2b3476accd65deb6c96ee1dcb71ba22ad041562 /Python | |
parent | d2f305dfd183025a95592319b280fcf4b20c8694 (diff) | |
download | cpython-29af7369dbbbba8cefafb196e977bce8189a527d.zip cpython-29af7369dbbbba8cefafb196e977bce8189a527d.tar.gz cpython-29af7369dbbbba8cefafb196e977bce8189a527d.tar.bz2 |
gh-111856: Fix os.fstat on windows with FAT32 and exFAT filesystem (GH-112038)
Diffstat (limited to 'Python')
-rw-r--r-- | Python/fileutils.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/Python/fileutils.c b/Python/fileutils.c index 17a4ae5..649b188 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -1239,6 +1239,7 @@ _Py_fstat_noraise(int fd, struct _Py_stat_struct *status) BY_HANDLE_FILE_INFORMATION info; FILE_BASIC_INFO basicInfo; FILE_ID_INFO idInfo; + FILE_ID_INFO *pIdInfo = &idInfo; HANDLE h; int type; @@ -1271,15 +1272,19 @@ _Py_fstat_noraise(int fd, struct _Py_stat_struct *status) } if (!GetFileInformationByHandle(h, &info) || - !GetFileInformationByHandleEx(h, FileBasicInfo, &basicInfo, sizeof(basicInfo)) || - !GetFileInformationByHandleEx(h, FileIdInfo, &idInfo, sizeof(idInfo))) { + !GetFileInformationByHandleEx(h, FileBasicInfo, &basicInfo, sizeof(basicInfo))) { /* The Win32 error is already set, but we also set errno for callers who expect it */ errno = winerror_to_errno(GetLastError()); return -1; } - _Py_attribute_data_to_stat(&info, 0, &basicInfo, &idInfo, status); + if (!GetFileInformationByHandleEx(h, FileIdInfo, &idInfo, sizeof(idInfo))) { + /* Failed to get FileIdInfo, so do not pass it along */ + pIdInfo = NULL; + } + + _Py_attribute_data_to_stat(&info, 0, &basicInfo, pIdInfo, status); return 0; #else return fstat(fd, status); |