77
88use core:: ffi:: c_void;
99use core:: ptr:: { NonNull , null, null_mut} ;
10- use widestring:: WideCString ;
10+ use widestring:: { WideCStr , WideCString } ;
1111use windows_sys:: Win32 :: Foundation :: {
1212 CloseHandle , ERROR_BROKEN_PIPE , ERROR_INVALID_NAME , ERROR_MORE_DATA , ERROR_NOT_ENOUGH_MEMORY ,
1313 GetLastError , HANDLE , WAIT_OBJECT_0 , WAIT_TIMEOUT ,
@@ -19,7 +19,7 @@ use windows_sys::Win32::System::Threading::{
1919} ;
2020use windows_sys:: w;
2121
22- use crate :: ctypes :: wcslen ;
22+ use crate :: windows :: { sys_alloc_string_len , sys_free_string } ;
2323
2424pub const BUFFER_SIZE : usize = 8192 ;
2525
@@ -122,21 +122,20 @@ fn alloc_bstr(wide: &[u16]) -> *mut u16 {
122122 . iter ( )
123123 . position ( |& unit| unit == 0 )
124124 . unwrap_or ( wide. len ( ) ) ;
125- crate :: ctypes :: sys_alloc_string_len ( & wide[ ..len] ) . unwrap_or ( null_mut ( ) )
125+ sys_alloc_string_len ( & wide[ ..len] ) . unwrap_or ( null_mut ( ) )
126126}
127127
128128fn alloc_bstr_ptr ( ptr : * const u16 ) -> * mut u16 {
129129 let Some ( ptr) = NonNull :: new ( ptr. cast_mut ( ) ) else {
130130 return null_mut ( ) ;
131131 } ;
132- let len = unsafe { crate :: ctypes:: wcslen ( ptr) } ;
133- crate :: ctypes:: sys_alloc_string_len ( unsafe { core:: slice:: from_raw_parts ( ptr. as_ptr ( ) , len) } )
134- . unwrap_or ( null_mut ( ) )
132+ let wide = unsafe { WideCStr :: from_ptr_str ( ptr. as_ptr ( ) ) } ;
133+ sys_alloc_string_len ( wide. as_slice ( ) ) . unwrap_or ( null_mut ( ) )
135134}
136135
137136fn free_bstr ( bstr : * mut u16 ) {
138137 if !bstr. is_null ( ) {
139- crate :: ctypes :: sys_free_string ( bstr) ;
138+ sys_free_string ( bstr) ;
140139 }
141140}
142141
@@ -478,9 +477,9 @@ unsafe fn query_thread_impl(param: *mut c_void) -> u32 {
478477 }
479478
480479 if succeeded ( hr) && ( flavor & WBEM_FLAVOR_MASK_ORIGIN ) != WBEM_FLAVOR_ORIGIN_SYSTEM {
481- let Some ( cb_str1) = NonNull :: new ( prop_name)
482- . map ( |prop_name| ( unsafe { wcslen ( prop_name) } * 2 ) as u32 )
483- else {
480+ let Some ( cb_str1) = NonNull :: new ( prop_name) . map ( |prop_name| {
481+ ( unsafe { WideCStr :: from_ptr_str ( prop_name. as_ptr ( ) ) } . len ( ) * 2 ) as u32
482+ } ) else {
484483 free_bstr ( prop_name) ;
485484 break ;
486485 } ;
@@ -490,7 +489,9 @@ unsafe fn query_thread_impl(param: *mut c_void) -> u32 {
490489 VariantToString ( & prop_value, prop_str. as_mut_ptr ( ) , BUFFER_SIZE as u32 )
491490 } ;
492491 let cb_str2 = NonNull :: new ( prop_str. as_ptr ( ) . cast_mut ( ) )
493- . map ( |prop_str| ( unsafe { wcslen ( prop_str) } * 2 ) as u32 )
492+ . map ( |prop_str| {
493+ ( unsafe { WideCStr :: from_ptr_str ( prop_str. as_ptr ( ) ) } . len ( ) * 2 ) as u32
494+ } )
494495 . expect ( "prop_str is never null" ) ;
495496
496497 if succeeded ( hr)
0 commit comments