Skip to content

Commit

Permalink
xdrgen: XDR width for pointer types
Browse files Browse the repository at this point in the history
The XDR width of a pointer type is the sum of the widths of each of
the struct's fields, except for the last field. The width of the
implicit boolean "value follows" field is added as well.

Signed-off-by: Chuck Lever <[email protected]>
  • Loading branch information
chucklever committed Nov 11, 2024
1 parent f4bc1e9 commit 447dc1e
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions tools/net/sunrpc/xdrgen/xdr_ast.py
Original file line number Diff line number Diff line change
Expand Up @@ -378,9 +378,26 @@ class _XdrPointer(_XdrAst):
name: str
fields: List[_XdrDeclaration]

def max_width(self) -> int:
"""Return width of type in XDR_UNITS"""
width = 1
for field in self.fields[0:-1]:
width += field.max_width()
return width

def symbolic_width(self) -> List:
"""Return list containing XDR width of type's components"""
widths = []
widths += ["XDR_bool"]
for field in self.fields[0:-1]:
widths += field.symbolic_width()
return widths

def __post_init__(self):
structs.add(self.name)
pass_by_reference.add(self.name)
max_widths[self.name] = self.max_width()
symbolic_widths[self.name] = self.symbolic_width()


@dataclass
Expand Down

0 comments on commit 447dc1e

Please sign in to comment.