xdrgen: XDR width for a string

A string works like a variable-length opaque. See Section 4.11 of
RFC 4506.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
Chuck Lever 2024-10-03 14:54:37 -04:00
parent b0b85ef754
commit da298d0113

View File

@ -172,6 +172,21 @@ class _XdrString(_XdrDeclaration):
maxsize: str
template: str = "string"
def max_width(self) -> int:
"""Return width of type in XDR_UNITS"""
return 1 + xdr_quadlen(self.maxsize)
def symbolic_width(self) -> List:
"""Return list containing XDR width of type's components"""
widths = ["XDR_unsigned_int"]
if self.maxsize != "0":
widths.append("XDR_QUADLEN(" + self.maxsize + ")")
return widths
def __post_init__(self):
max_widths[self.name] = self.max_width()
symbolic_widths[self.name] = self.symbolic_width()
@dataclass
class _XdrFixedLengthArray(_XdrDeclaration):