Commit 2db8940e authored by Chuck Lever's avatar Chuck Lever
Browse files

xdrgen: XDR width for variable-length array

parent 59b01b96
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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):