Browse Source

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>
main
Luca Weiss 3 years ago committed by David Gibson
parent
commit
83102717d7
  1. 7
      pylibfdt/libfdt.i
  2. 8
      tests/pylibfdt_tests.py

7
pylibfdt/libfdt.i

@ -724,6 +724,13 @@ class Property(bytearray):
raise ValueError('Property contains embedded nul characters') raise ValueError('Property contains embedded nul characters')
return self[:-1].decode('utf-8') 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): class FdtSw(FdtRo):
"""Software interface to create a device tree from scratch """Software interface to create a device tree from scratch

8
tests/pylibfdt_tests.py

@ -382,6 +382,14 @@ class PyLibfdtBasicTests(unittest.TestCase):
self.get_prop("prop-uint64").as_uint64()) self.get_prop("prop-uint64").as_uint64())
self.assertEqual(-2, self.get_prop("prop-int64").as_int64()) 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): def testReserveMap(self):
"""Test that we can access the memory reserve map""" """Test that we can access the memory reserve map"""
self.assertEqual(2, self.fdt.num_mem_rsv()) self.assertEqual(2, self.fdt.num_mem_rsv())

Loading…
Cancel
Save