aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Weiss <luca@z3ntu.xyz>2021-12-25 14:25:55 +0100
committerDavid Gibson <david@gibson.dropbear.id.au>2021-12-28 15:29:31 +1100
commit83102717d7c4171aeb2d26941fa1ee2997bf4a7d (patch)
tree19ca9d3f31a5ff59d17c25212f5820cbe8060da3
parentd152126bb0293c321cae437bdf7437c393ee3619 (diff)
downloaddtc-83102717d7c4171aeb2d26941fa1ee2997bf4a7d.tar.gz
pylibfdt: add Property.as_stringlist()
Add a new method for decoding a string list property, useful for e.g. the "reg-names" property. Also add a test for the new method. Signed-off-by: Luca Weiss <luca@z3ntu.xyz> Message-Id: <20211225132558.167123-2-luca@z3ntu.xyz> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--pylibfdt/libfdt.i7
-rw-r--r--tests/pylibfdt_tests.py8
2 files changed, 15 insertions, 0 deletions
diff --git a/pylibfdt/libfdt.i b/pylibfdt/libfdt.i
index 9ccc57b..c81b504 100644
--- a/pylibfdt/libfdt.i
+++ b/pylibfdt/libfdt.i
@@ -724,6 +724,13 @@ class Property(bytearray):
raise ValueError('Property contains embedded nul characters')
return self[:-1].decode('utf-8')
+ def as_stringlist(self):
+ """Unicode is supported by decoding from UTF-8"""
+ if self[-1] != 0:
+ raise ValueError('Property lacks nul termination')
+ parts = self[:-1].split(b'\x00')
+ return list(map(lambda x: x.decode('utf-8'), parts))
+
class FdtSw(FdtRo):
"""Software interface to create a device tree from scratch
diff --git a/tests/pylibfdt_tests.py b/tests/pylibfdt_tests.py
index 64b5bd1..7e3cc4c 100644
--- a/tests/pylibfdt_tests.py
+++ b/tests/pylibfdt_tests.py
@@ -382,6 +382,14 @@ class PyLibfdtBasicTests(unittest.TestCase):
self.get_prop("prop-uint64").as_uint64())
self.assertEqual(-2, self.get_prop("prop-int64").as_int64())
+ def testGetStringlistProperties(self):
+ """Test that we can access properties as string list"""
+ node = self.fdt.path_offset('/subnode@1/subsubnode')
+ self.assertEqual(["subsubnode1", "subsubnode"],
+ self.fdt.getprop(node, "compatible").as_stringlist())
+ self.assertEqual(["this is a placeholder string", "string2"],
+ self.fdt.getprop(node, "placeholder").as_stringlist())
+
def testReserveMap(self):
"""Test that we can access the memory reserve map"""
self.assertEqual(2, self.fdt.num_mem_rsv())