Skip to content

Commit

Permalink
xdrgen: XDR width for variable-length array
Browse files Browse the repository at this point in the history
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
  • Loading branch information
Chuck Lever committed Nov 11, 2024
1 parent 59b01b9 commit 2db8940
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions tools/net/sunrpc/xdrgen/xdr_ast.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,22 @@ class _XdrVariableLengthArray(_XdrDeclaration):
maxsize: str
template: str = "variable_length_array"

def max_width(self) -> int:
"""Return width of type in XDR_UNITS"""
return 1 + (xdr_quadlen(self.maxsize) * max_widths[self.spec.type_name])

def symbolic_width(self) -> List:
"""Return list containing XDR width of type's components"""
widths = ["XDR_unsigned_int"]
if self.maxsize != "0":
item_width = " + ".join(symbolic_widths[self.spec.type_name])
widths.append("(" + self.maxsize + " * (" + item_width + "))")
return widths

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


@dataclass
class _XdrOptionalData(_XdrDeclaration):
Expand Down

0 comments on commit 2db8940

Please sign in to comment.