dtoc: Support reading a list of arguments
It is helpful to support a string or stringlist containing a list of
space-separated arguments, for example:
args = "-n fred", "-a", "123";
This resolves to the list:
-n fred -a 123
which can be passed to a program as arguments.
Add a helper to do the required processing.
Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/tools/dtoc/fdt_util.py b/tools/dtoc/fdt_util.py
index d59ea2f..c82e774 100644
--- a/tools/dtoc/fdt_util.py
+++ b/tools/dtoc/fdt_util.py
@@ -184,6 +184,18 @@
return [strval]
return value
+def GetArgs(node, propname):
+ prop = node.props.get(propname)
+ if not prop:
+ raise ValueError(f"Node '{node.path}': Expected property '{propname}'")
+ if prop.bytes:
+ value = GetStringList(node, propname)
+ else:
+ value = []
+ lists = [v.split() for v in value]
+ args = [x for l in lists for x in l]
+ return args
+
def GetBool(node, propname, default=False):
"""Get an boolean from a property
diff --git a/tools/dtoc/test/dtoc_test_simple.dts b/tools/dtoc/test/dtoc_test_simple.dts
index 4c2c70a..2d321fb 100644
--- a/tools/dtoc/test/dtoc_test_simple.dts
+++ b/tools/dtoc/test/dtoc_test_simple.dts
@@ -62,5 +62,6 @@
orig-node {
orig = <1 23 4>;
+ args = "-n first", "second", "-p", "123,456", "-x";
};
};
diff --git a/tools/dtoc/test_fdt.py b/tools/dtoc/test_fdt.py
index 5455759..576d65b 100755
--- a/tools/dtoc/test_fdt.py
+++ b/tools/dtoc/test_fdt.py
@@ -652,6 +652,21 @@
self.assertEqual(['test'],
fdt_util.GetStringList(self.node, 'missing', ['test']))
+ def testGetArgs(self):
+ node = self.dtb.GetNode('/orig-node')
+ self.assertEqual(['message'], fdt_util.GetArgs(self.node, 'stringval'))
+ self.assertEqual(
+ ['multi-word', 'message'],
+ fdt_util.GetArgs(self.node, 'stringarray'))
+ self.assertEqual([], fdt_util.GetArgs(self.node, 'boolval'))
+ self.assertEqual(['-n', 'first', 'second', '-p', '123,456', '-x'],
+ fdt_util.GetArgs(node, 'args'))
+ with self.assertRaises(ValueError) as exc:
+ fdt_util.GetArgs(self.node, 'missing')
+ self.assertIn(
+ "Node '/spl-test': Expected property 'missing'",
+ str(exc.exception))
+
def testGetBool(self):
self.assertEqual(True, fdt_util.GetBool(self.node, 'boolval'))
self.assertEqual(False, fdt_util.GetBool(self.node, 'missing'))