@@ -35,84 +35,16 @@ use std::io;
3535use std:: mem;
3636use std:: ptr;
3737
38- type HANDLE = * mut u8 ;
39- type BOOL = i32 ;
40- type DWORD = u32 ;
41- type LPHANDLE = * mut HANDLE ;
42- type LPVOID = * mut u8 ;
43- type JOBOBJECTINFOCLASS = i32 ;
44- type SIZE_T = usize ;
45- type LARGE_INTEGER = i64 ;
46- type UINT = u32 ;
47- type ULONG_PTR = usize ;
48- type ULONGLONG = u64 ;
49-
50- const FALSE : BOOL = 0 ;
51- const DUPLICATE_SAME_ACCESS : DWORD = 0x2 ;
52- const PROCESS_DUP_HANDLE : DWORD = 0x40 ;
53- const JobObjectExtendedLimitInformation : JOBOBJECTINFOCLASS = 9 ;
54- const JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE : DWORD = 0x2000 ;
55- const JOB_OBJECT_LIMIT_PRIORITY_CLASS : DWORD = 0x00000020 ;
56- const SEM_FAILCRITICALERRORS : UINT = 0x0001 ;
57- const SEM_NOGPFAULTERRORBOX : UINT = 0x0002 ;
58- const BELOW_NORMAL_PRIORITY_CLASS : DWORD = 0x00004000 ;
59-
60- extern "system" {
61- fn CreateJobObjectW ( lpJobAttributes : * mut u8 , lpName : * const u8 ) -> HANDLE ;
62- fn CloseHandle ( hObject : HANDLE ) -> BOOL ;
63- fn GetCurrentProcess ( ) -> HANDLE ;
64- fn OpenProcess ( dwDesiredAccess : DWORD , bInheritHandle : BOOL , dwProcessId : DWORD ) -> HANDLE ;
65- fn DuplicateHandle (
66- hSourceProcessHandle : HANDLE ,
67- hSourceHandle : HANDLE ,
68- hTargetProcessHandle : HANDLE ,
69- lpTargetHandle : LPHANDLE ,
70- dwDesiredAccess : DWORD ,
71- bInheritHandle : BOOL ,
72- dwOptions : DWORD ,
73- ) -> BOOL ;
74- fn AssignProcessToJobObject ( hJob : HANDLE , hProcess : HANDLE ) -> BOOL ;
75- fn SetInformationJobObject (
76- hJob : HANDLE ,
77- JobObjectInformationClass : JOBOBJECTINFOCLASS ,
78- lpJobObjectInformation : LPVOID ,
79- cbJobObjectInformationLength : DWORD ,
80- ) -> BOOL ;
81- fn SetErrorMode ( mode : UINT ) -> UINT ;
82- }
83-
84- #[ repr( C ) ]
85- struct JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
86- BasicLimitInformation : JOBOBJECT_BASIC_LIMIT_INFORMATION ,
87- IoInfo : IO_COUNTERS ,
88- ProcessMemoryLimit : SIZE_T ,
89- JobMemoryLimit : SIZE_T ,
90- PeakProcessMemoryUsed : SIZE_T ,
91- PeakJobMemoryUsed : SIZE_T ,
92- }
93-
94- #[ repr( C ) ]
95- struct IO_COUNTERS {
96- ReadOperationCount : ULONGLONG ,
97- WriteOperationCount : ULONGLONG ,
98- OtherOperationCount : ULONGLONG ,
99- ReadTransferCount : ULONGLONG ,
100- WriteTransferCount : ULONGLONG ,
101- OtherTransferCount : ULONGLONG ,
102- }
103-
104- #[ repr( C ) ]
105- struct JOBOBJECT_BASIC_LIMIT_INFORMATION {
106- PerProcessUserTimeLimit : LARGE_INTEGER ,
107- PerJobUserTimeLimit : LARGE_INTEGER ,
108- LimitFlags : DWORD ,
109- MinimumWorkingsetSize : SIZE_T ,
110- MaximumWorkingsetSize : SIZE_T ,
111- ActiveProcessLimit : DWORD ,
112- Affinity : ULONG_PTR ,
113- PriorityClass : DWORD ,
114- SchedulingClass : DWORD ,
115- }
38+ use winapi:: shared:: minwindef:: { DWORD , FALSE , LPVOID } ;
39+ use winapi:: um:: errhandlingapi:: SetErrorMode ;
40+ use winapi:: um:: handleapi:: { CloseHandle , DuplicateHandle } ;
41+ use winapi:: um:: jobapi2:: { AssignProcessToJobObject , CreateJobObjectW , SetInformationJobObject } ;
42+ use winapi:: um:: processthreadsapi:: { GetCurrentProcess , OpenProcess } ;
43+ use winapi:: um:: winbase:: { BELOW_NORMAL_PRIORITY_CLASS , SEM_NOGPFAULTERRORBOX } ;
44+ use winapi:: um:: winnt:: {
45+ JobObjectExtendedLimitInformation , DUPLICATE_SAME_ACCESS , JOBOBJECT_EXTENDED_LIMIT_INFORMATION ,
46+ JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE , JOB_OBJECT_LIMIT_PRIORITY_CLASS , PROCESS_DUP_HANDLE ,
47+ } ;
11648
11749pub unsafe fn setup ( build : & mut Build ) {
11850 // Enable the Windows Error Reporting dialog which msys disables,
0 commit comments