1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-30 15:01:27 +02:00

dtoc: Tidy up implementation of AddStringList()

Refactor this to avoid a loop. Also add a test for an empty string.

Signed-off-by: Simon Glass <sjg@chromium.org>
Suggested-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
Reviewed-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
This commit is contained in:
Simon Glass
2022-03-05 20:18:56 -07:00
parent b13114cd21
commit 0ded4d434d
3 changed files with 13 additions and 3 deletions

View File

@@ -516,9 +516,7 @@ class Node:
Returns: Returns:
Prop added Prop added
""" """
out = b'' out = b'\0'.join(bytes(s, 'utf-8') for s in val) + b'\0' if val else b''
for string in val:
out += bytes(string, 'utf-8') + b'\0'
return self.AddData(prop_name, out) return self.AddData(prop_name, out)
def AddInt(self, prop_name, val): def AddInt(self, prop_name, val):

View File

@@ -158,6 +158,8 @@ def GetString(node, propname, default=None):
if not prop: if not prop:
return default return default
value = prop.value value = prop.value
if not prop.bytes:
return ''
if isinstance(value, list): if isinstance(value, list):
raise ValueError("Node '%s' property '%s' has list value: expecting " raise ValueError("Node '%s' property '%s' has list value: expecting "
"a single string" % (node.name, propname)) "a single string" % (node.name, propname))
@@ -179,6 +181,8 @@ def GetStringList(node, propname, default=None):
if not prop: if not prop:
return default return default
value = prop.value value = prop.value
if not prop.bytes:
return []
if not isinstance(value, list): if not isinstance(value, list):
strval = GetString(node, propname) strval = GetString(node, propname)
return [strval] return [strval]

View File

@@ -550,6 +550,12 @@ class TestProp(unittest.TestCase):
data = self.fdt.getprop(self.node.Offset(), 'stringlist') data = self.fdt.getprop(self.node.Offset(), 'stringlist')
self.assertEqual(b'123\x00456\0', data) self.assertEqual(b'123\x00456\0', data)
val = []
self.node.AddStringList('stringlist', val)
self.dtb.Sync(auto_resize=True)
data = self.fdt.getprop(self.node.Offset(), 'stringlist')
self.assertEqual(b'', data)
def test_delete_node(self): def test_delete_node(self):
"""Test deleting a node""" """Test deleting a node"""
old_offset = self.fdt.path_offset('/spl-test') old_offset = self.fdt.path_offset('/spl-test')
@@ -637,6 +643,7 @@ class TestFdtUtil(unittest.TestCase):
self.assertEqual('message', fdt_util.GetString(self.node, 'stringval')) self.assertEqual('message', fdt_util.GetString(self.node, 'stringval'))
self.assertEqual('test', fdt_util.GetString(self.node, 'missing', self.assertEqual('test', fdt_util.GetString(self.node, 'missing',
'test')) 'test'))
self.assertEqual('', fdt_util.GetString(self.node, 'boolval'))
with self.assertRaises(ValueError) as e: with self.assertRaises(ValueError) as e:
self.assertEqual(3, fdt_util.GetString(self.node, 'stringarray')) self.assertEqual(3, fdt_util.GetString(self.node, 'stringarray'))
@@ -651,6 +658,7 @@ class TestFdtUtil(unittest.TestCase):
fdt_util.GetStringList(self.node, 'stringarray')) fdt_util.GetStringList(self.node, 'stringarray'))
self.assertEqual(['test'], self.assertEqual(['test'],
fdt_util.GetStringList(self.node, 'missing', ['test'])) fdt_util.GetStringList(self.node, 'missing', ['test']))
self.assertEqual([], fdt_util.GetStringList(self.node, 'boolval'))
def testGetArgs(self): def testGetArgs(self):
node = self.dtb.GetNode('/orig-node') node = self.dtb.GetNode('/orig-node')