44use crate :: { PyRef , VirtualMachine , builtins:: PyModule } ;
55
66pub ( crate ) fn make_module ( vm : & VirtualMachine ) -> PyRef < PyModule > {
7- let module = winreg:: make_module ( vm) ;
8- module
7+ winreg:: make_module ( vm)
98}
109
1110#[ pymodule]
@@ -53,48 +52,55 @@ mod winreg {
5352 #[ pyattr( once) ]
5453 fn HKEY_CLASSES_ROOT ( _vm : & VirtualMachine ) -> PyHKEYObject {
5554 PyHKEYObject {
55+ #[ allow( clippy:: arc_with_non_send_sync) ]
5656 hkey : Arc :: new ( PyRwLock :: new ( Registry :: HKEY_CLASSES_ROOT ) ) ,
5757 }
5858 }
5959
6060 #[ pyattr( once) ]
6161 fn HKEY_CURRENT_USER ( _vm : & VirtualMachine ) -> PyHKEYObject {
6262 PyHKEYObject {
63+ #[ allow( clippy:: arc_with_non_send_sync) ]
6364 hkey : Arc :: new ( PyRwLock :: new ( Registry :: HKEY_CURRENT_USER ) ) ,
6465 }
6566 }
6667
6768 #[ pyattr( once) ]
6869 fn HKEY_LOCAL_MACHINE ( _vm : & VirtualMachine ) -> PyHKEYObject {
6970 PyHKEYObject {
71+ #[ allow( clippy:: arc_with_non_send_sync) ]
7072 hkey : Arc :: new ( PyRwLock :: new ( Registry :: HKEY_LOCAL_MACHINE ) ) ,
7173 }
7274 }
7375
7476 #[ pyattr( once) ]
7577 fn HKEY_USERS ( _vm : & VirtualMachine ) -> PyHKEYObject {
7678 PyHKEYObject {
79+ #[ allow( clippy:: arc_with_non_send_sync) ]
7780 hkey : Arc :: new ( PyRwLock :: new ( Registry :: HKEY_USERS ) ) ,
7881 }
7982 }
8083
8184 #[ pyattr( once) ]
8285 fn HKEY_PERFORMANCE_DATA ( _vm : & VirtualMachine ) -> PyHKEYObject {
8386 PyHKEYObject {
87+ #[ allow( clippy:: arc_with_non_send_sync) ]
8488 hkey : Arc :: new ( PyRwLock :: new ( Registry :: HKEY_PERFORMANCE_DATA ) ) ,
8589 }
8690 }
8791
8892 #[ pyattr( once) ]
8993 fn HKEY_CURRENT_CONFIG ( _vm : & VirtualMachine ) -> PyHKEYObject {
9094 PyHKEYObject {
95+ #[ allow( clippy:: arc_with_non_send_sync) ]
9196 hkey : Arc :: new ( PyRwLock :: new ( Registry :: HKEY_CURRENT_CONFIG ) ) ,
9297 }
9398 }
9499
95100 #[ pyattr( once) ]
96101 fn HKEY_DYN_DATA ( _vm : & VirtualMachine ) -> PyHKEYObject {
97102 PyHKEYObject {
103+ #[ allow( clippy:: arc_with_non_send_sync) ]
98104 hkey : Arc :: new ( PyRwLock :: new ( Registry :: HKEY_DYN_DATA ) ) ,
99105 }
100106 }
@@ -266,7 +272,7 @@ mod winreg {
266272 Registry :: RegConnectRegistryW (
267273 wide_computer_name. as_ptr ( ) ,
268274 * key. hkey . read ( ) ,
269- & mut ret_key
275+ & mut ret_key,
270276 )
271277 } ;
272278 if res == 0 {
@@ -277,11 +283,7 @@ mod winreg {
277283 } else {
278284 let mut ret_key = std:: ptr:: null_mut ( ) ;
279285 let res = unsafe {
280- Registry :: RegConnectRegistryW (
281- std:: ptr:: null_mut ( ) ,
282- * key. hkey . read ( ) ,
283- & mut ret_key
284- )
286+ Registry :: RegConnectRegistryW ( std:: ptr:: null_mut ( ) , * key. hkey . read ( ) , & mut ret_key)
285287 } ;
286288 if res == 0 {
287289 Ok ( PyHKEYObject :: new ( ret_key) )
@@ -436,18 +438,15 @@ mod winreg {
436438 )
437439 } ;
438440 if rc != 0 {
439- return Err ( vm. new_os_error ( format ! (
440- "RegQueryInfoKeyW failed with error code {}" ,
441- rc
442- ) ) ) ;
441+ return Err ( vm. new_os_error ( format ! ( "RegQueryInfoKeyW failed with error code {}" , rc) ) ) ;
443442 }
444-
443+
445444 // Include room for null terminators.
446445 ret_value_size += 1 ;
447446 ret_data_size += 1 ;
448447 let mut buf_value_size = ret_value_size;
449448 let mut buf_data_size = ret_data_size;
450-
449+
451450 // Allocate buffers.
452451 let mut ret_value_buf: Vec < u16 > = vec ! [ 0 ; ret_value_size as usize ] ;
453452 let mut ret_data_buf: Vec < u8 > = vec ! [ 0 ; ret_data_size as usize ] ;
@@ -484,12 +483,9 @@ mod winreg {
484483 continue ;
485484 }
486485 if rc != 0 {
487- return Err ( vm. new_os_error ( format ! (
488- "RegEnumValueW failed with error code {}" ,
489- rc
490- ) ) ) ;
486+ return Err ( vm. new_os_error ( format ! ( "RegEnumValueW failed with error code {}" , rc) ) ) ;
491487 }
492-
488+
493489 // At this point, current_value_size and current_data_size have been updated.
494490 // Retrieve the registry type.
495491 let mut reg_type: u32 = 0 ;
@@ -505,25 +501,28 @@ mod winreg {
505501 & mut current_data_size as * mut u32 ,
506502 )
507503 } ;
508-
504+
509505 // Convert the registry value name from UTF‑16.
510506 let name_len = ret_value_buf
511507 . iter ( )
512508 . position ( |& c| c == 0 )
513509 . unwrap_or ( ret_value_buf. len ( ) ) ;
514510 let name = String :: from_utf16 ( & ret_value_buf[ ..name_len] )
515511 . map_err ( |e| vm. new_value_error ( format ! ( "UTF16 conversion error: {}" , e) ) ) ?;
516-
512+
517513 // Slice the data buffer to the actual size returned.
518514 let data_slice = & ret_data_buf[ ..current_data_size as usize ] ;
519515 let py_data = reg_to_py ( vm, data_slice, reg_type) ?;
520-
516+
521517 // Return tuple (value_name, data, type)
522- return Ok ( vm. ctx . new_tuple ( vec ! [
523- vm. ctx. new_str( name) . into( ) ,
524- py_data,
525- vm. ctx. new_int( reg_type) . into( ) ,
526- ] ) . into ( ) ) ;
518+ return Ok ( vm
519+ . ctx
520+ . new_tuple ( vec ! [
521+ vm. ctx. new_str( name) . into( ) ,
522+ py_data,
523+ vm. ctx. new_int( reg_type) . into( ) ,
524+ ] )
525+ . into ( ) ) ;
527526 }
528527 }
529528
@@ -614,8 +613,13 @@ mod winreg {
614613 if err != 0 {
615614 return Err ( vm. new_os_error ( format ! ( "error code: {}" , err) ) ) ;
616615 }
617- let l: u64 = ( lpftlastwritetime. dwHighDateTime as u64 ) << 32 | lpftlastwritetime. dwLowDateTime as u64 ;
618- let tup: Vec < PyObjectRef > = vec ! [ vm. ctx. new_int( lpcsubkeys) . into( ) , vm. ctx. new_int( lpcvalues) . into( ) , vm. ctx. new_int( l) . into( ) ] ;
616+ let l: u64 = ( lpftlastwritetime. dwHighDateTime as u64 ) << 32
617+ | lpftlastwritetime. dwLowDateTime as u64 ;
618+ let tup: Vec < PyObjectRef > = vec ! [
619+ vm. ctx. new_int( lpcsubkeys) . into( ) ,
620+ vm. ctx. new_int( lpcvalues) . into( ) ,
621+ vm. ctx. new_int( l) . into( ) ,
622+ ] ;
619623 Ok ( vm. ctx . new_tuple ( tup) )
620624 }
621625
@@ -642,7 +646,11 @@ mod winreg {
642646 }
643647
644648 #[ pyfunction]
645- fn QueryValueEx ( key : PyRef < PyHKEYObject > , name : String , vm : & VirtualMachine ) -> PyResult < PyObjectRef > {
649+ fn QueryValueEx (
650+ key : PyRef < PyHKEYObject > ,
651+ name : String ,
652+ vm : & VirtualMachine ,
653+ ) -> PyResult < PyObjectRef > {
646654 let wide_name = to_utf16 ( name) ;
647655 let mut buf_size = 0 ;
648656 let res = unsafe {
@@ -693,11 +701,17 @@ mod winreg {
693701 }
694702
695703 #[ pyfunction]
696- fn SetValue ( key : PyRef < PyHKEYObject > , sub_key : String , typ : u32 , value : String , vm : & VirtualMachine ) -> PyResult < ( ) > {
704+ fn SetValue (
705+ key : PyRef < PyHKEYObject > ,
706+ sub_key : String ,
707+ typ : u32 ,
708+ value : String ,
709+ vm : & VirtualMachine ,
710+ ) -> PyResult < ( ) > {
697711 if typ != Registry :: REG_SZ {
698712 return Err ( vm. new_type_error ( "type must be winreg.REG_SZ" . to_string ( ) ) ) ;
699713 }
700-
714+
701715 let wide_sub_key = to_utf16 ( sub_key) ;
702716
703717 // TODO: Value check
@@ -753,7 +767,10 @@ mod winreg {
753767 std:: slice:: from_raw_parts ( ret_data. as_ptr ( ) as * const u16 , u16_count)
754768 } ;
755769 // Only use characters up to the first NUL.
756- let len = u16_slice. iter ( ) . position ( |& c| c == 0 ) . unwrap_or ( u16_slice. len ( ) ) ;
770+ let len = u16_slice
771+ . iter ( )
772+ . position ( |& c| c == 0 )
773+ . unwrap_or ( u16_slice. len ( ) ) ;
757774 let s = String :: from_utf16 ( & u16_slice[ ..len] )
758775 . map_err ( |e| vm. new_value_error ( format ! ( "UTF16 error: {}" , e) ) ) ?;
759776 Ok ( vm. ctx . new_str ( s) . into ( ) )
@@ -814,10 +831,11 @@ mod winreg {
814831 }
815832 // REG_SZ is fallthrough
816833 REG_EXPAND_SZ => {
817- return Err ( vm. new_type_error ( "TODO: RUSTPYTHON REG_EXPAND_SZ is not supported" . to_string ( ) ) ) ;
834+ Err ( vm
835+ . new_type_error ( "TODO: RUSTPYTHON REG_EXPAND_SZ is not supported" . to_string ( ) ) )
818836 }
819837 REG_MULTI_SZ => {
820- return Err ( vm. new_type_error ( "TODO: RUSTPYTHON REG_MULTI_SZ is not supported" . to_string ( ) ) ) ;
838+ Err ( vm. new_type_error ( "TODO: RUSTPYTHON REG_MULTI_SZ is not supported" . to_string ( ) ) )
821839 }
822840 // REG_BINARY is fallthrough
823841 _ => {
@@ -856,7 +874,7 @@ mod winreg {
856874 if res != 0 {
857875 return Err ( vm. new_os_error ( format ! ( "error code: {}" , res) ) ) ;
858876 }
859- } ,
877+ }
860878 Ok ( None ) => {
861879 let len = 0 ;
862880 let ptr = std:: ptr:: null ( ) ;
@@ -874,7 +892,7 @@ mod winreg {
874892 if res != 0 {
875893 return Err ( vm. new_os_error ( format ! ( "error code: {}" , res) ) ) ;
876894 }
877- } ,
895+ }
878896 Err ( _) => return Err ( vm. new_type_error ( "value must be an integer" . to_string ( ) ) ) ,
879897 }
880898 Ok ( ( ) )
0 commit comments