aboutsummaryrefslogtreecommitdiffstats
path: root/tools/net/sunrpc/xdrgen/generators/struct.py
diff options
context:
space:
mode:
authorChuck Lever <[email protected]>2024-10-03 18:54:45 +0000
committerChuck Lever <[email protected]>2024-11-11 18:42:05 +0000
commite9e1e7e75acd737cf41c6ee64d62da6ea0c10036 (patch)
tree3cfd4d4186ae968d4031dacfef9da44b4c0efede /tools/net/sunrpc/xdrgen/generators/struct.py
parentxdrgen: XDR width for union types (diff)
downloadkernel-e9e1e7e75acd737cf41c6ee64d62da6ea0c10036.tar.gz
kernel-e9e1e7e75acd737cf41c6ee64d62da6ea0c10036.zip
xdrgen: Add generator code for XDR width macros
Introduce logic in the code generators to emit maxsize (XDR width) definitions. In C, these are pre-processor macros. Signed-off-by: Chuck Lever <[email protected]>
Diffstat (limited to 'tools/net/sunrpc/xdrgen/generators/struct.py')
-rw-r--r--tools/net/sunrpc/xdrgen/generators/struct.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/tools/net/sunrpc/xdrgen/generators/struct.py b/tools/net/sunrpc/xdrgen/generators/struct.py
index 6dd7f4d7cd53..64911de46f62 100644
--- a/tools/net/sunrpc/xdrgen/generators/struct.py
+++ b/tools/net/sunrpc/xdrgen/generators/struct.py
@@ -12,7 +12,7 @@ from xdr_ast import _XdrBasic, _XdrString
from xdr_ast import _XdrFixedLengthOpaque, _XdrVariableLengthOpaque
from xdr_ast import _XdrFixedLengthArray, _XdrVariableLengthArray
from xdr_ast import _XdrOptionalData, _XdrStruct, _XdrDeclaration
-from xdr_ast import public_apis
+from xdr_ast import public_apis, get_header_name
def emit_struct_declaration(environment: Environment, node: _XdrStruct) -> None:
@@ -247,6 +247,18 @@ def emit_struct_encoder(environment: Environment, node: _XdrStruct) -> None:
print(template.render())
+def emit_struct_maxsize(environment: Environment, node: _XdrStruct) -> None:
+ """Emit one maxsize macro for an XDR struct type"""
+ macro_name = get_header_name().upper() + "_" + node.name + "_sz"
+ template = get_jinja2_template(environment, "maxsize", "struct")
+ print(
+ template.render(
+ macro=macro_name,
+ width=" + ".join(node.symbolic_width()),
+ )
+ )
+
+
class XdrStructGenerator(SourceGenerator):
"""Generate source code for XDR structs"""
@@ -270,3 +282,7 @@ class XdrStructGenerator(SourceGenerator):
def emit_encoder(self, node: _XdrStruct) -> None:
"""Emit one encoder function for an XDR struct type"""
emit_struct_encoder(self.environment, node)
+
+ def emit_maxsize(self, node: _XdrStruct) -> None:
+ """Emit one maxsize macro for an XDR struct type"""
+ emit_struct_maxsize(self.environment, node)