Browse Source

pylibfdt: add size_hint parameter for get_path

This also enables us to test the -NOSPACE condition by adding a test
setting size_hint=1 so this path is taken.

Message-Id: <20230201181112.1644842-1-luca@z3ntu.xyz>
Signed-off-by: Luca Weiss <luca@z3ntu.xyz>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
main
Luca Weiss 2 years ago committed by David Gibson
parent
commit
3f29d6d85c
  1. 8
      pylibfdt/libfdt.i
  2. 1
      tests/pylibfdt_tests.py

8
pylibfdt/libfdt.i

@ -443,11 +443,12 @@ class FdtRo(object):
""" """
return fdt_get_alias(self._fdt, name) return fdt_get_alias(self._fdt, name)


def get_path(self, nodeoffset, quiet=()): def get_path(self, nodeoffset, size_hint=1024, quiet=()):
"""Get the full path of a node """Get the full path of a node


Args: Args:
nodeoffset: Node offset to check nodeoffset: Node offset to check
size_hint: Hint for size of returned string


Returns: Returns:
Full path to the node Full path to the node
@ -455,11 +456,10 @@ class FdtRo(object):
Raises: Raises:
FdtException if an error occurs FdtException if an error occurs
""" """
size = 1024
while True: while True:
ret, path = fdt_get_path(self._fdt, nodeoffset, size) ret, path = fdt_get_path(self._fdt, nodeoffset, size_hint)
if ret == -NOSPACE: if ret == -NOSPACE:
size = size * 2 size_hint *= 2
continue continue
err = check_err(ret, quiet) err = check_err(ret, quiet)
if err: if err:

1
tests/pylibfdt_tests.py

@ -354,6 +354,7 @@ class PyLibfdtBasicTests(unittest.TestCase):
node2 = self.fdt.path_offset('/subnode@1/subsubnode') node2 = self.fdt.path_offset('/subnode@1/subsubnode')
self.assertEqual("/subnode@1", self.fdt.get_path(node)) self.assertEqual("/subnode@1", self.fdt.get_path(node))
self.assertEqual("/subnode@1/subsubnode", self.fdt.get_path(node2)) self.assertEqual("/subnode@1/subsubnode", self.fdt.get_path(node2))
self.assertEqual("/subnode@1/subsubnode", self.fdt.get_path(node2, size_hint=1))


with self.assertRaises(FdtException) as e: with self.assertRaises(FdtException) as e:
self.fdt.get_path(-1) self.fdt.get_path(-1)

Loading…
Cancel
Save