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>
This commit is contained in:
Simon Glass 2022-02-08 11:49:53 -07:00
parent dd857ee761
commit 7e4b66aa87
3 changed files with 28 additions and 0 deletions

View File

@ -184,6 +184,18 @@ def GetStringList(node, propname, default=None):
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

View File

@ -62,5 +62,6 @@
orig-node {
orig = <1 23 4>;
args = "-n first", "second", "-p", "123,456", "-x";
};
};

View File

@ -652,6 +652,21 @@ class TestFdtUtil(unittest.TestCase):
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'))