Skip to content

Commit f6c8f5e

Browse files
committed
tools: ynl: fix setting presence bits in simple nests
When we set members of simple nested structures in requests we need to set "presence" bits for all the nesting layers below. This has nothing to do with the presence type of the last layer. Fixes: be5bea1 ("net: add basic C code generators for Netlink") Reviewed-by: Breno Leitao <leitao@debian.org> Link: https://lore.kernel.org/r/20240321020214.1250202-1-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent d24b035 commit f6c8f5e

1 file changed

Lines changed: 5 additions & 2 deletions

File tree

tools/net/ynl/ynl-gen-c.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,11 @@ def setter(self, ri, space, direction, deref=False, ref=None):
228228
presence = ''
229229
for i in range(0, len(ref)):
230230
presence = f"{var}->{'.'.join(ref[:i] + [''])}_present.{ref[i]}"
231-
if self.presence_type() == 'bit':
232-
code.append(presence + ' = 1;')
231+
# Every layer below last is a nest, so we know it uses bit presence
232+
# last layer is "self" and may be a complex type
233+
if i == len(ref) - 1 and self.presence_type() != 'bit':
234+
continue
235+
code.append(presence + ' = 1;')
233236
code += self._setter_lines(ri, member, presence)
234237

235238
func_name = f"{op_prefix(ri, direction, deref=deref)}_set_{'_'.join(ref)}"

0 commit comments

Comments
 (0)