@@ -83,10 +83,12 @@ mod _winapi {
83
83
}
84
84
}
85
85
86
+ type HandleInt = usize ; // TODO: change to isize when fully ported to windows-rs
87
+
86
88
impl TryFromObject for HANDLE {
87
89
fn try_from_object ( vm : & VirtualMachine , obj : PyObjectRef ) -> PyResult < Self > {
88
- let handle = isize :: try_from_object ( vm, obj) ?;
89
- Ok ( HANDLE ( handle) )
90
+ let handle = HandleInt :: try_from_object ( vm, obj) ?;
91
+ Ok ( HANDLE ( handle as isize ) )
90
92
}
91
93
}
92
94
@@ -97,25 +99,31 @@ mod _winapi {
97
99
}
98
100
}
99
101
102
+ impl ToPyObject for HANDLE {
103
+ fn to_pyobject ( & self , vm : & VirtualMachine ) -> PyObjectRef {
104
+ ( self . 0 as HandleInt ) . to_pyobject ( vm)
105
+ }
106
+ }
107
+
100
108
#[ pyfunction]
101
109
fn CloseHandle ( handle : HANDLE ) -> windows:: core:: Result < ( ) > {
102
110
unsafe { Win32 :: Foundation :: CloseHandle ( handle) }
103
111
}
104
112
105
113
#[ pyfunction]
106
- fn GetStdHandle ( std_handle : STD_HANDLE ) -> windows:: core:: Result < isize > {
107
- Ok ( unsafe { Win32 :: System :: Console :: GetStdHandle ( std_handle) } ?. 0 )
114
+ fn GetStdHandle ( std_handle : STD_HANDLE ) -> windows:: core:: Result < HANDLE > {
115
+ Ok ( unsafe { Win32 :: System :: Console :: GetStdHandle ( std_handle) } ?)
108
116
}
109
117
110
118
#[ pyfunction]
111
- fn CreatePipe ( _pipe_attrs : PyObjectRef , size : u32 ) -> windows:: core:: Result < ( isize , isize ) > {
119
+ fn CreatePipe ( _pipe_attrs : PyObjectRef , size : u32 ) -> windows:: core:: Result < ( HANDLE , HANDLE ) > {
112
120
let ( read, write) = unsafe {
113
121
let mut read = std:: mem:: MaybeUninit :: < HANDLE > :: uninit ( ) ;
114
122
let mut write = std:: mem:: MaybeUninit :: < HANDLE > :: uninit ( ) ;
115
123
Win32 :: System :: Pipes :: CreatePipe ( read. as_mut_ptr ( ) , write. as_mut_ptr ( ) , None , size) ?;
116
124
( read. assume_init ( ) , write. assume_init ( ) )
117
125
} ;
118
- Ok ( ( read. 0 , write. 0 ) )
126
+ Ok ( ( read, write) )
119
127
}
120
128
121
129
#[ pyfunction]
@@ -125,7 +133,7 @@ mod _winapi {
125
133
access : u32 ,
126
134
inherit : i32 ,
127
135
options : OptionalArg < u32 > ,
128
- ) -> windows:: core:: Result < isize > {
136
+ ) -> windows:: core:: Result < HANDLE > {
129
137
let target = unsafe {
130
138
let mut target = std:: mem:: MaybeUninit :: < HANDLE > :: uninit ( ) ;
131
139
Win32 :: Foundation :: DuplicateHandle (
@@ -139,12 +147,12 @@ mod _winapi {
139
147
) ?;
140
148
target. assume_init ( )
141
149
} ;
142
- Ok ( target. 0 )
150
+ Ok ( target)
143
151
}
144
152
145
153
#[ pyfunction]
146
- fn GetCurrentProcess ( ) -> isize {
147
- unsafe { Win32 :: System :: Threading :: GetCurrentProcess ( ) } . 0
154
+ fn GetCurrentProcess ( ) -> HANDLE {
155
+ unsafe { Win32 :: System :: Threading :: GetCurrentProcess ( ) }
148
156
}
149
157
150
158
#[ pyfunction]
@@ -183,7 +191,7 @@ mod _winapi {
183
191
fn CreateProcess (
184
192
args : CreateProcessArgs ,
185
193
vm : & VirtualMachine ,
186
- ) -> PyResult < ( isize , isize , u32 , u32 ) > {
194
+ ) -> PyResult < ( HANDLE , HANDLE , u32 , u32 ) > {
187
195
let mut si = winbase:: STARTUPINFOEXW :: default ( ) ;
188
196
si. StartupInfo . cb = std:: mem:: size_of_val ( & si) as _ ;
189
197
@@ -263,8 +271,8 @@ mod _winapi {
263
271
} ;
264
272
265
273
Ok ( (
266
- procinfo. hProcess . 0 ,
267
- procinfo. hThread . 0 ,
274
+ procinfo. hProcess ,
275
+ procinfo. hThread ,
268
276
procinfo. dwProcessId ,
269
277
procinfo. dwThreadId ,
270
278
) )
0 commit comments