@@ -72,7 +72,7 @@ impl RegistryHelper {
72
72
Ok ( Registry {
73
73
key_path : self . config . key_path . clone ( ) ,
74
74
value_name : Some ( value_name. clone ( ) ) ,
75
- value_data : Some ( convert_reg_value ( & value) ?) ,
75
+ value_data : convert_reg_value ( & value) ?,
76
76
..Default :: default ( )
77
77
} )
78
78
} else {
@@ -100,7 +100,7 @@ impl RegistryHelper {
100
100
} ;
101
101
102
102
if self . what_if {
103
- what_if_metadata. push ( t ! ( "registry_helper.whatIfCreateKey" , " subkey" => subkey) . to_string ( ) ) ;
103
+ what_if_metadata. push ( t ! ( "registry_helper.whatIfCreateKey" , subkey = subkey) . to_string ( ) ) ;
104
104
}
105
105
else {
106
106
reg_key = reg_key. create ( path, Security :: CreateSubKey ) ?;
@@ -116,8 +116,13 @@ impl RegistryHelper {
116
116
Err ( e) => return self . handle_error_or_what_if ( e)
117
117
} ;
118
118
119
- if let Some ( value_data) = & self . config . value_data {
120
- let Ok ( value_name) = U16CString :: from_str ( self . config . value_name . as_ref ( ) . unwrap ( ) ) else {
119
+ if let Some ( value_name) = & self . config . value_name {
120
+ let value_data = match & self . config . value_data {
121
+ Some ( value_data) => value_data,
122
+ None => & RegistryValueData :: None ,
123
+ } ;
124
+
125
+ let Ok ( value_name) = U16CString :: from_str ( value_name) else {
121
126
return self . handle_error_or_what_if ( RegistryError :: Utf16Conversion ( "valueName" . to_string ( ) ) ) ;
122
127
} ;
123
128
@@ -153,12 +158,15 @@ impl RegistryHelper {
153
158
RegistryValueData :: QWord ( q) => {
154
159
Data :: U64 ( * q)
155
160
} ,
161
+ RegistryValueData :: None => {
162
+ Data :: None
163
+ } ,
156
164
} ;
157
165
158
166
if self . what_if {
159
167
return Ok ( Some ( Registry {
160
168
key_path : self . config . key_path . clone ( ) ,
161
- value_data : Some ( convert_reg_value ( & data) ?) ,
169
+ value_data : convert_reg_value ( & data) ?,
162
170
value_name : self . config . value_name . clone ( ) ,
163
171
metadata : if what_if_metadata. is_empty ( ) { None } else { Some ( Metadata { what_if : Some ( what_if_metadata) } ) } ,
164
172
..Default :: default ( )
@@ -222,8 +230,12 @@ impl RegistryHelper {
222
230
let parent_key: RegKey ;
223
231
let mut subkeys: Vec < & str > = Vec :: new ( ) ;
224
232
let parent_key_path = get_parent_key_path ( & self . subkey ) ;
225
- let subkey_name = & self . subkey [ parent_key_path. len ( ) + 1 ..] ;
226
- subkeys. push ( subkey_name) ;
233
+ let subkey_name = if parent_key_path. is_empty ( ) { & self . subkey } else {
234
+ & self . subkey [ parent_key_path. len ( ) + 1 ..]
235
+ } ;
236
+ if !subkey_name. is_empty ( ) {
237
+ subkeys. push ( subkey_name) ;
238
+ }
227
239
let mut current_key_path = parent_key_path;
228
240
229
241
loop {
@@ -305,17 +317,18 @@ fn get_parent_key_path(key_path: &str) -> &str {
305
317
}
306
318
}
307
319
308
- fn convert_reg_value ( value : & Data ) -> Result < RegistryValueData , RegistryError > {
320
+ fn convert_reg_value ( value : & Data ) -> Result < Option < RegistryValueData > , RegistryError > {
309
321
match value {
310
- Data :: String ( s) => Ok ( RegistryValueData :: String ( s. to_string_lossy ( ) ) ) ,
311
- Data :: ExpandString ( s) => Ok ( RegistryValueData :: ExpandString ( s. to_string_lossy ( ) ) ) ,
312
- Data :: Binary ( b) => Ok ( RegistryValueData :: Binary ( b. clone ( ) ) ) ,
313
- Data :: U32 ( d) => Ok ( RegistryValueData :: DWord ( * d) ) ,
322
+ Data :: String ( s) => Ok ( Some ( RegistryValueData :: String ( s. to_string_lossy ( ) ) ) ) ,
323
+ Data :: ExpandString ( s) => Ok ( Some ( RegistryValueData :: ExpandString ( s. to_string_lossy ( ) ) ) ) ,
324
+ Data :: Binary ( b) => Ok ( Some ( RegistryValueData :: Binary ( b. clone ( ) ) ) ) ,
325
+ Data :: U32 ( d) => Ok ( Some ( RegistryValueData :: DWord ( * d) ) ) ,
314
326
Data :: MultiString ( m) => {
315
327
let m: Vec < String > = m. iter ( ) . map ( |s| s. to_string_lossy ( ) ) . collect ( ) ;
316
- Ok ( RegistryValueData :: MultiString ( m) )
328
+ Ok ( Some ( RegistryValueData :: MultiString ( m) ) )
317
329
} ,
318
- Data :: U64 ( q) => Ok ( RegistryValueData :: QWord ( * q) ) ,
330
+ Data :: U64 ( q) => Ok ( Some ( RegistryValueData :: QWord ( * q) ) ) ,
331
+ Data :: None => Ok ( None ) ,
319
332
_ => Err ( RegistryError :: UnsupportedValueDataType )
320
333
}
321
334
}
0 commit comments