Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit91c0c8b

Browse files
authored
Merge pull requestRustPython#5085 from youknowone/windows
port winapi to windows-sys
2 parents987d50c +4a61eba commit91c0c8b

File tree

4 files changed

+111
-103
lines changed

4 files changed

+111
-103
lines changed

‎vm/Cargo.toml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,10 @@ features = [
130130
"Win32_System_Console",
131131
"Win32_System_LibraryLoader",
132132
"Win32_System_Pipes",
133+
"Win32_System_SystemServices",
133134
"Win32_System_Threading",
134135
"Win32_UI_Shell",
136+
"Win32_UI_WindowsAndMessaging",
135137
]
136138

137139
[target.'cfg(windows)'.dependencies.winapi]

‎vm/src/lib.rs‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ pub mod utils;
7979
pubmod version;
8080
pubmod vm;
8181
pubmod warn;
82+
#[cfg(windows)]
83+
pubmod windows;
8284

8385
pubuseself::compiler::parser::source_code;
8486
pubuseself::convert::{TryFromBorrowedObject,TryFromObject};

‎vm/src/stdlib/winapi.rs‎

Lines changed: 39 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -6,123 +6,57 @@ mod _winapi {
66
usecrate::{
77
builtins::PyStrRef,
88
common::windows::ToWideString,
9-
convert::{ToPyException,ToPyObject,ToPyResult},
9+
convert::{ToPyException,ToPyResult},
1010
function::{ArgMapping,ArgSequence,OptionalArg},
1111
stdlib::os::errno_err,
12+
windows::WindowsSysResult,
1213
PyObjectRef,PyResult,TryFromObject,VirtualMachine,
1314
};
1415
use std::ptr::{null, null_mut};
15-
use winapi::um::winbase;
1616
use windows::{
1717
core::PCWSTR,
1818
Win32::Foundation::{HANDLE,HINSTANCE,MAX_PATH},
1919
};
2020
use windows_sys::Win32::Foundation::{BOOL,HANDLEasRAW_HANDLE};
2121

2222
#[pyattr]
23-
use winapi::{
24-
shared::winerror::{
25-
ERROR_ALREADY_EXISTS,ERROR_BROKEN_PIPE,ERROR_IO_PENDING,ERROR_MORE_DATA,
26-
ERROR_NETNAME_DELETED,ERROR_NO_DATA,ERROR_NO_SYSTEM_RESOURCES,
27-
ERROR_OPERATION_ABORTED,ERROR_PIPE_BUSY,ERROR_PIPE_CONNECTED,ERROR_SEM_TIMEOUT,
28-
WAIT_TIMEOUT,
23+
use windows_sys::Win32::{
24+
Foundation::{
25+
DUPLICATE_CLOSE_SOURCE,DUPLICATE_SAME_ACCESS,ERROR_ALREADY_EXISTS,ERROR_BROKEN_PIPE,
26+
ERROR_IO_PENDING,ERROR_MORE_DATA,ERROR_NETNAME_DELETED,ERROR_NO_DATA,
27+
ERROR_NO_SYSTEM_RESOURCES,ERROR_OPERATION_ABORTED,ERROR_PIPE_BUSY,
28+
ERROR_PIPE_CONNECTED,ERROR_SEM_TIMEOUT,GENERIC_READ,GENERIC_WRITE,STILL_ACTIVE,
29+
WAIT_ABANDONED,WAIT_ABANDONED_0,WAIT_OBJECT_0,WAIT_TIMEOUT,
2930
},
30-
um::{
31-
fileapi::OPEN_EXISTING,
32-
memoryapi::{
33-
FILE_MAP_ALL_ACCESS,FILE_MAP_COPY,FILE_MAP_EXECUTE,FILE_MAP_READ,FILE_MAP_WRITE,
31+
Storage::FileSystem::{
32+
FILE_FLAG_FIRST_PIPE_INSTANCE,FILE_FLAG_OVERLAPPED,FILE_GENERIC_READ,
33+
FILE_GENERIC_WRITE,FILE_TYPE_CHAR,FILE_TYPE_DISK,FILE_TYPE_PIPE,FILE_TYPE_REMOTE,
34+
FILE_TYPE_UNKNOWN,OPEN_EXISTING,PIPE_ACCESS_DUPLEX,PIPE_ACCESS_INBOUND,SYNCHRONIZE,
35+
},
36+
System::{
37+
Console::{STD_ERROR_HANDLE,STD_INPUT_HANDLE,STD_OUTPUT_HANDLE},
38+
Memory::{
39+
FILE_MAP_ALL_ACCESS,MEM_COMMIT,MEM_FREE,MEM_IMAGE,MEM_MAPPED,MEM_PRIVATE,
40+
MEM_RESERVE,PAGE_EXECUTE,PAGE_EXECUTE_READ,PAGE_EXECUTE_READWRITE,
41+
PAGE_EXECUTE_WRITECOPY,PAGE_GUARD,PAGE_NOACCESS,PAGE_NOCACHE,PAGE_READONLY,
42+
PAGE_READWRITE,PAGE_WRITECOMBINE,PAGE_WRITECOPY,SEC_COMMIT,SEC_IMAGE,
43+
SEC_LARGE_PAGES,SEC_NOCACHE,SEC_RESERVE,SEC_WRITECOMBINE,
44+
},
45+
Pipes::{
46+
PIPE_READMODE_MESSAGE,PIPE_TYPE_MESSAGE,PIPE_UNLIMITED_INSTANCES,PIPE_WAIT,
3447
},
35-
minwinbase::STILL_ACTIVE,
36-
winbase::{
48+
SystemServices::LOCALE_NAME_MAX_LENGTH,
49+
Threading::{
3750
ABOVE_NORMAL_PRIORITY_CLASS,BELOW_NORMAL_PRIORITY_CLASS,
3851
CREATE_BREAKAWAY_FROM_JOB,CREATE_DEFAULT_ERROR_MODE,CREATE_NEW_CONSOLE,
39-
CREATE_NEW_PROCESS_GROUP,CREATE_NO_WINDOW,DETACHED_PROCESS,
40-
FILE_FLAG_FIRST_PIPE_INSTANCE,FILE_FLAG_OVERLAPPED,FILE_TYPE_CHAR,
41-
FILE_TYPE_DISK,FILE_TYPE_PIPE,FILE_TYPE_REMOTE,FILE_TYPE_UNKNOWN,
42-
HIGH_PRIORITY_CLASS,IDLE_PRIORITY_CLASS,INFINITE,NORMAL_PRIORITY_CLASS,
43-
PIPE_ACCESS_DUPLEX,PIPE_ACCESS_INBOUND,PIPE_READMODE_MESSAGE,PIPE_TYPE_MESSAGE,
44-
PIPE_UNLIMITED_INSTANCES,PIPE_WAIT,REALTIME_PRIORITY_CLASS,STARTF_USESHOWWINDOW,
45-
STARTF_USESTDHANDLES,STD_ERROR_HANDLE,STD_INPUT_HANDLE,STD_OUTPUT_HANDLE,
46-
WAIT_ABANDONED,WAIT_ABANDONED_0,WAIT_OBJECT_0,
52+
CREATE_NEW_PROCESS_GROUP,CREATE_NO_WINDOW,DETACHED_PROCESS,HIGH_PRIORITY_CLASS,
53+
IDLE_PRIORITY_CLASS,INFINITE,NORMAL_PRIORITY_CLASS,PROCESS_DUP_HANDLE,
54+
REALTIME_PRIORITY_CLASS,STARTF_USESHOWWINDOW,STARTF_USESTDHANDLES,
4755
},
48-
winnt::{
49-
DUPLICATE_CLOSE_SOURCE,DUPLICATE_SAME_ACCESS,FILE_GENERIC_READ,
50-
FILE_GENERIC_WRITE,GENERIC_READ,GENERIC_WRITE,LOCALE_NAME_MAX_LENGTH,
51-
MEM_COMMIT,MEM_FREE,MEM_IMAGE,MEM_MAPPED,MEM_PRIVATE,MEM_RESERVE,
52-
PAGE_EXECUTE,PAGE_EXECUTE_READ,PAGE_EXECUTE_READWRITE,PAGE_EXECUTE_WRITECOPY,
53-
PAGE_GUARD,PAGE_NOACCESS,PAGE_NOCACHE,PAGE_READONLY,PAGE_READWRITE,
54-
PAGE_WRITECOMBINE,PAGE_WRITECOPY,PROCESS_DUP_HANDLE,SEC_COMMIT,SEC_IMAGE,
55-
SEC_LARGE_PAGES,SEC_NOCACHE,SEC_RESERVE,SEC_WRITECOMBINE,SYNCHRONIZE,
56-
},
57-
winuser::SW_HIDE,
5856
},
57+
UI::WindowsAndMessaging::SW_HIDE,
5958
};
6059

61-
fnGetLastError() ->u32{
62-
unsafe{ winapi::um::errhandlingapi::GetLastError()}
63-
}
64-
65-
traitWindowsSysResultValue{
66-
typeOk:ToPyObject;
67-
fnis_err(&self) ->bool;
68-
fninto_ok(self) ->Self::Ok;
69-
}
70-
71-
implWindowsSysResultValueforRAW_HANDLE{
72-
typeOk =HANDLE;
73-
fnis_err(&self) ->bool{
74-
*self == windows_sys::Win32::Foundation::INVALID_HANDLE_VALUE
75-
}
76-
fninto_ok(self) ->Self::Ok{
77-
HANDLE(self)
78-
}
79-
}
80-
81-
implWindowsSysResultValueforBOOL{
82-
typeOk =();
83-
fnis_err(&self) ->bool{
84-
*self ==0
85-
}
86-
fninto_ok(self) ->Self::Ok{}
87-
}
88-
89-
structWindowsSysResult<T>(T);
90-
91-
impl<T:WindowsSysResultValue>WindowsSysResult<T>{
92-
fnis_err(&self) ->bool{
93-
self.0.is_err()
94-
}
95-
fninto_pyresult(self,vm:&VirtualMachine) ->PyResult<T::Ok>{
96-
ifself.is_err(){
97-
Err(errno_err(vm))
98-
}else{
99-
Ok(self.0.into_ok())
100-
}
101-
}
102-
}
103-
104-
impl<T:WindowsSysResultValue>ToPyResultforWindowsSysResult<T>{
105-
fnto_pyresult(self,vm:&VirtualMachine) ->PyResult{
106-
let ok =self.into_pyresult(vm)?;
107-
Ok(ok.to_pyobject(vm))
108-
}
109-
}
110-
111-
typeHandleInt =usize;// TODO: change to isize when fully ported to windows-rs
112-
113-
implTryFromObjectforHANDLE{
114-
fntry_from_object(vm:&VirtualMachine,obj:PyObjectRef) ->PyResult<Self>{
115-
let handle =HandleInt::try_from_object(vm, obj)?;
116-
Ok(HANDLE(handleasisize))
117-
}
118-
}
119-
120-
implToPyObjectforHANDLE{
121-
fnto_pyobject(self,vm:&VirtualMachine) ->PyObjectRef{
122-
(self.0asHandleInt).to_pyobject(vm)
123-
}
124-
}
125-
12660
#[pyfunction]
12761
fnCloseHandle(handle:HANDLE) ->WindowsSysResult<BOOL>{
12862
WindowsSysResult(unsafe{ windows_sys::Win32::Foundation::CloseHandle(handle.0)})
@@ -193,7 +127,7 @@ mod _winapi {
193127
vm:&VirtualMachine,
194128
) ->PyResult<windows_sys::Win32::Storage::FileSystem::FILE_TYPE>{
195129
let file_type =unsafe{ windows_sys::Win32::Storage::FileSystem::GetFileType(h.0)};
196-
if file_type ==0 &&GetLastError() !=0{
130+
if file_type ==0 &&unsafe{ windows_sys::Win32::Foundation::GetLastError()} !=0{
197131
Err(errno_err(vm))
198132
}else{
199133
Ok(file_type)
@@ -227,7 +161,8 @@ mod _winapi {
227161
args:CreateProcessArgs,
228162
vm:&VirtualMachine,
229163
) ->PyResult<(HANDLE,HANDLE,u32,u32)>{
230-
letmut si = winbase::STARTUPINFOEXW::default();
164+
letmut si: windows_sys::Win32::System::Threading::STARTUPINFOEXW =
165+
unsafe{ std::mem::zeroed()};
231166
si.StartupInfo.cb = std::mem::size_of_val(&si)as_;
232167

233168
macro_rules! si_attr{
@@ -292,11 +227,11 @@ mod _winapi {
292227
std::ptr::null(),
293228
args.inherit_handles,
294229
args.creation_flags
295-
|winbase::EXTENDED_STARTUPINFO_PRESENT
296-
|winbase::CREATE_UNICODE_ENVIRONMENT,
230+
|windows_sys::Win32::System::Threading::EXTENDED_STARTUPINFO_PRESENT
231+
|windows_sys::Win32::System::Threading::CREATE_UNICODE_ENVIRONMENT,
297232
envas_,
298233
current_dir,
299-
&mut sias*mutwinbase::STARTUPINFOEXWas_,
234+
&mut sias*mut_as*mut_,
300235
procinfo.as_mut_ptr(),
301236
))
302237
.into_pyresult(vm)?;
@@ -390,7 +325,8 @@ mod _winapi {
390325
(result, size.assume_init())
391326
};
392327
if !result.is_err()
393-
||GetLastError() != winapi::shared::winerror::ERROR_INSUFFICIENT_BUFFER
328+
||unsafe{ windows_sys::Win32::Foundation::GetLastError()}
329+
!= windows_sys::Win32::Foundation::ERROR_INSUFFICIENT_BUFFER
394330
{
395331
returnErr(errno_err(vm));
396332
}

‎vm/src/windows.rs‎

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
usecrate::{
2+
convert::{ToPyObject,ToPyResult},
3+
stdlib::os::errno_err,
4+
PyObjectRef,PyResult,TryFromObject,VirtualMachine,
5+
};
6+
use windows::Win32::Foundation::HANDLE;
7+
use windows_sys::Win32::Foundation::{BOOL,HANDLEasRAW_HANDLE};
8+
9+
pub(crate)traitWindowsSysResultValue{
10+
typeOk:ToPyObject;
11+
fnis_err(&self) ->bool;
12+
fninto_ok(self) ->Self::Ok;
13+
}
14+
15+
implWindowsSysResultValueforRAW_HANDLE{
16+
typeOk =HANDLE;
17+
fnis_err(&self) ->bool{
18+
*self == windows_sys::Win32::Foundation::INVALID_HANDLE_VALUE
19+
}
20+
fninto_ok(self) ->Self::Ok{
21+
HANDLE(self)
22+
}
23+
}
24+
25+
implWindowsSysResultValueforBOOL{
26+
typeOk =();
27+
fnis_err(&self) ->bool{
28+
*self ==0
29+
}
30+
fninto_ok(self) ->Self::Ok{}
31+
}
32+
33+
pub(crate)structWindowsSysResult<T>(pubT);
34+
35+
impl<T:WindowsSysResultValue>WindowsSysResult<T>{
36+
pubfnis_err(&self) ->bool{
37+
self.0.is_err()
38+
}
39+
pubfninto_pyresult(self,vm:&VirtualMachine) ->PyResult<T::Ok>{
40+
ifself.is_err(){
41+
Err(errno_err(vm))
42+
}else{
43+
Ok(self.0.into_ok())
44+
}
45+
}
46+
}
47+
48+
impl<T:WindowsSysResultValue>ToPyResultforWindowsSysResult<T>{
49+
fnto_pyresult(self,vm:&VirtualMachine) ->PyResult{
50+
let ok =self.into_pyresult(vm)?;
51+
Ok(ok.to_pyobject(vm))
52+
}
53+
}
54+
55+
typeHandleInt =usize;// TODO: change to isize when fully ported to windows-rs
56+
57+
implTryFromObjectforHANDLE{
58+
fntry_from_object(vm:&VirtualMachine,obj:PyObjectRef) ->PyResult<Self>{
59+
let handle =HandleInt::try_from_object(vm, obj)?;
60+
Ok(HANDLE(handleasisize))
61+
}
62+
}
63+
64+
implToPyObjectforHANDLE{
65+
fnto_pyobject(self,vm:&VirtualMachine) ->PyObjectRef{
66+
(self.0asHandleInt).to_pyobject(vm)
67+
}
68+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp