@@ -417,28 +417,27 @@ def _add_attr(self, space, name, value):
417
417
pad = b'\x00 ' * ((4 - len (attr_payload ) % 4 ) % 4 )
418
418
return struct .pack ('HH' , len (attr_payload ) + 4 , nl_type ) + attr_payload + pad
419
419
420
- def _decode_enum (self , rsp , attr_spec ):
421
- raw = rsp [attr_spec ['name' ]]
420
+ def _decode_enum (self , raw , attr_spec ):
422
421
enum = self .consts [attr_spec ['enum' ]]
423
- i = attr_spec .get ('value-start' , 0 )
424
422
if 'enum-as-flags' in attr_spec and attr_spec ['enum-as-flags' ]:
423
+ i = 0
425
424
value = set ()
426
425
while raw :
427
426
if raw & 1 :
428
427
value .add (enum .entries_by_val [i ].name )
429
428
raw >>= 1
430
429
i += 1
431
430
else :
432
- value = enum .entries_by_val [raw - i ].name
433
- rsp [ attr_spec [ 'name' ]] = value
431
+ value = enum .entries_by_val [raw ].name
432
+ return value
434
433
435
434
def _decode_binary (self , attr , attr_spec ):
436
435
if attr_spec .struct_name :
437
436
members = self .consts [attr_spec .struct_name ]
438
437
decoded = attr .as_struct (members )
439
438
for m in members :
440
439
if m .enum :
441
- self ._decode_enum (decoded , m )
440
+ decoded [ m . name ] = self ._decode_enum (decoded [ m . name ] , m )
442
441
elif attr_spec .sub_type :
443
442
decoded = attr .as_c_array (attr_spec .sub_type )
444
443
else :
@@ -466,15 +465,16 @@ def _decode(self, attrs, space):
466
465
else :
467
466
raise Exception (f'Unknown { attr_spec ["type" ]} with name { attr_spec ["name" ]} ' )
468
467
468
+ if 'enum' in attr_spec :
469
+ decoded = self ._decode_enum (decoded , attr_spec )
470
+
469
471
if not attr_spec .is_multi :
470
472
rsp [attr_spec ['name' ]] = decoded
471
473
elif attr_spec .name in rsp :
472
474
rsp [attr_spec .name ].append (decoded )
473
475
else :
474
476
rsp [attr_spec .name ] = [decoded ]
475
477
476
- if 'enum' in attr_spec :
477
- self ._decode_enum (rsp , attr_spec )
478
478
return rsp
479
479
480
480
def _decode_extack_path (self , attrs , attr_set , offset , target ):
0 commit comments