@@ -1267,7 +1267,7 @@ new file mode 100644
12671267index 0000000..e2f9e94
12681268--- /dev/null
12691269+++ b/psutil/_psutil_cygwin.c
1270- @@ -0,0 +1,2025 @@
1270+ @@ -0,0 +1,2035 @@
12711271+ #define WIN32_LEAN_AND_MEAN
12721272+
12731273+ #include <windows.h>
@@ -1904,8 +1904,18 @@ index 0000000..e2f9e94
19041904+ return NULL;
19051905+
19061906+ num_handles = process->HandleCount;
1907- + for (i = 0; i < process->NumberOfThreads; i++)
1907+ + for (i = 0; i < process->NumberOfThreads; i++) {
1908+ + // The updated headers in mingw-w64 appear to be using an older version
1909+ + // of this API in which the ContextSwitches member is still called
1910+ + // Reserved3
1911+ + #if __MINGW64_VERSION_MAJOR < 7
1912+ + // Using the copy of this struct definition included in psutil
19081913+ ctx_switches += process->Threads[i].ContextSwitches;
1914+ + #else
1915+ + // Using the definition from mingw-w64-w32api-headers
1916+ + ctx_switches += process->Threads[i].Reserved3;
1917+ + #endif
1918+ + }
19091919+ user_time = (double)process->UserTime.HighPart * 429.4967296 + \
19101920+ (double)process->UserTime.LowPart * 1e-7;
19111921+ kernel_time = (double)process->KernelTime.HighPart * 429.4967296 + \
@@ -3465,28 +3475,38 @@ index 1bbbf2a..0d50f5b 100644
34653475 } KTHREAD_STATE, *PKTHREAD_STATE;
34663476
34673477
3468- + #ifndef __CYGWIN__
3478+ + #ifndef __MINGW64_VERSION_MAJOR
34693479 typedef enum _KWAIT_REASON {
34703480 Executive = 0,
34713481 FreePage = 1,
3472- @@ -168,6 +169,8 @@ typedef struct _CLIENT_ID {
3482+ @@ -168,7 +169,10 @@ typedef struct _CLIENT_ID {
34733483 HANDLE UniqueThread;
34743484 } CLIENT_ID, *PCLIENT_ID;
34753485
34763486+ #endif
3477- +
34783487
3488+ +
3489+ + #if !defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 7
34793490 typedef struct _SYSTEM_THREAD_INFORMATION {
34803491 LARGE_INTEGER KernelTime;
3481- @@ -287,6 +290,7 @@ typedef NTSTATUS (NTAPI *_NtSetInformationProcess)(
3492+ LARGE_INTEGER UserTime;
3493+ @@ -182,6 +186,7 @@ typedef struct _SYSTEM_THREAD_INFORMATION {
3494+ ULONG ThreadState;
3495+ KWAIT_REASON WaitReason;
3496+ } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
3497+ + #endif
3498+
3499+
3500+ typedef struct _TEB *PTEB;
3501+ @@ -287,6 +292,7 @@ typedef NTSTATUS (NTAPI *_NtSetInformationProcess)(
34823502 );
34833503
34843504
34853505+ #ifndef __CYGWIN__
34863506 typedef enum _PROCESSINFOCLASS2 {
34873507 _ProcessBasicInformation,
34883508 ProcessQuotaLimits,
3489- @@ -338,4 +342 ,6 @@ typedef enum _PROCESSINFOCLASS2 {
3509+ @@ -338,4 +344 ,6 @@ typedef enum _PROCESSINFOCLASS2 {
34903510 #define ProcessImageFileName _ProcessImageFileName
34913511 #define ProcessBreakOnTermination _ProcessBreakOnTermination
34923512
0 commit comments