Skip to content

Commit 97b282e

Browse files
committed
Update Python inlined files: 3.12.8
add include/internal/pycore_fileutils_windows.h
1 parent 87a43c8 commit 97b282e

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
#ifndef Py_INTERNAL_FILEUTILS_WINDOWS_H
2+
#define Py_INTERNAL_FILEUTILS_WINDOWS_H
3+
#ifdef __cplusplus
4+
extern "C" {
5+
#endif
6+
7+
#ifndef Py_BUILD_CORE
8+
# error "Py_BUILD_CORE must be defined to include this header"
9+
#endif
10+
11+
#ifdef MS_WINDOWS
12+
13+
#if !defined(NTDDI_WIN10_NI) || !(NTDDI_VERSION >= NTDDI_WIN10_NI)
14+
typedef struct _FILE_STAT_BASIC_INFORMATION {
15+
LARGE_INTEGER FileId;
16+
LARGE_INTEGER CreationTime;
17+
LARGE_INTEGER LastAccessTime;
18+
LARGE_INTEGER LastWriteTime;
19+
LARGE_INTEGER ChangeTime;
20+
LARGE_INTEGER AllocationSize;
21+
LARGE_INTEGER EndOfFile;
22+
ULONG FileAttributes;
23+
ULONG ReparseTag;
24+
ULONG NumberOfLinks;
25+
ULONG DeviceType;
26+
ULONG DeviceCharacteristics;
27+
ULONG Reserved;
28+
LARGE_INTEGER VolumeSerialNumber;
29+
FILE_ID_128 FileId128;
30+
} FILE_STAT_BASIC_INFORMATION;
31+
32+
typedef enum _FILE_INFO_BY_NAME_CLASS {
33+
FileStatByNameInfo,
34+
FileStatLxByNameInfo,
35+
FileCaseSensitiveByNameInfo,
36+
FileStatBasicByNameInfo,
37+
MaximumFileInfoByNameClass
38+
} FILE_INFO_BY_NAME_CLASS;
39+
#endif
40+
41+
typedef BOOL (WINAPI *PGetFileInformationByName)(
42+
PCWSTR FileName,
43+
FILE_INFO_BY_NAME_CLASS FileInformationClass,
44+
PVOID FileInfoBuffer,
45+
ULONG FileInfoBufferSize
46+
);
47+
48+
static inline BOOL _Py_GetFileInformationByName(
49+
PCWSTR FileName,
50+
FILE_INFO_BY_NAME_CLASS FileInformationClass,
51+
PVOID FileInfoBuffer,
52+
ULONG FileInfoBufferSize
53+
) {
54+
static PGetFileInformationByName GetFileInformationByName = NULL;
55+
static int GetFileInformationByName_init = -1;
56+
57+
if (GetFileInformationByName_init < 0) {
58+
HMODULE hMod = LoadLibraryW(L"api-ms-win-core-file-l2-1-4");
59+
GetFileInformationByName_init = 0;
60+
if (hMod) {
61+
GetFileInformationByName = (PGetFileInformationByName)GetProcAddress(
62+
hMod, "GetFileInformationByName");
63+
if (GetFileInformationByName) {
64+
GetFileInformationByName_init = 1;
65+
} else {
66+
FreeLibrary(hMod);
67+
}
68+
}
69+
}
70+
71+
if (GetFileInformationByName_init <= 0) {
72+
SetLastError(ERROR_NOT_SUPPORTED);
73+
return FALSE;
74+
}
75+
return GetFileInformationByName(FileName, FileInformationClass, FileInfoBuffer, FileInfoBufferSize);
76+
}
77+
78+
static inline BOOL _Py_GetFileInformationByName_ErrorIsTrustworthy(int error)
79+
{
80+
switch(error) {
81+
case ERROR_FILE_NOT_FOUND:
82+
case ERROR_PATH_NOT_FOUND:
83+
case ERROR_NOT_READY:
84+
case ERROR_BAD_NET_NAME:
85+
case ERROR_BAD_NETPATH:
86+
case ERROR_BAD_PATHNAME:
87+
case ERROR_INVALID_NAME:
88+
case ERROR_FILENAME_EXCED_RANGE:
89+
return TRUE;
90+
case ERROR_NOT_SUPPORTED:
91+
return FALSE;
92+
}
93+
return FALSE;
94+
}
95+
96+
#endif
97+
98+
#endif

0 commit comments

Comments
 (0)