From: David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org>
To: Luca Weiss <luca-IfPCFPJWly+lVyrhU4qvOw@public.gmane.org>
Cc: devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 3/4] pylibfdt: add FdtRo.get_path()
Date: Tue, 28 Dec 2021 15:33:31 +1100 [thread overview]
Message-ID: <YcqTmyrWb7Uw5LB2@yekko> (raw)
In-Reply-To: <20211225132558.167123-4-luca-IfPCFPJWly+lVyrhU4qvOw@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 3215 bytes --]
On Sat, Dec 25, 2021 at 02:25:57PM +0100, Luca Weiss wrote:
> Add a new Python method wrapping fdt_get_path() from the C API.
>
> Also add a test for the new method.
>
> Signed-off-by: Luca Weiss <luca-IfPCFPJWly+lVyrhU4qvOw@public.gmane.org>
> ---
> pylibfdt/libfdt.i | 21 +++++++++++++++++++++
> tests/pylibfdt_tests.py | 12 ++++++++++++
> 2 files changed, 33 insertions(+)
>
> diff --git a/pylibfdt/libfdt.i b/pylibfdt/libfdt.i
> index ac70762..5434d48 100644
> --- a/pylibfdt/libfdt.i
> +++ b/pylibfdt/libfdt.i
> @@ -443,6 +443,22 @@ class FdtRo(object):
> """
> return fdt_get_alias(self._fdt, name)
>
> + def get_path(self, nodeoffset, size=128):
Having an explicit max buffer size here makes for a very un-Pythonic
interface. The python interface really needs to re-allocate and retry
automatically until it gets the full result.
Whether you implement that in Python code or in the C wrapper is up to
you.
> + """Get the full path of a node
> +
> + Args:
> + nodeoffset: Node offset to check
> +
> + Returns:
> + Full path to the node
> +
> + Raises:
> + FdtException if the path is longer than 'size' or other error occurs
> + """
> + ret, path = fdt_get_path(self._fdt, nodeoffset, size)
> + check_err(ret)
> + return path
> +
> def parent_offset(self, nodeoffset, quiet=()):
> """Get the offset of a node's parent
>
> @@ -1115,6 +1131,11 @@ typedef uint32_t fdt32_t;
> }
> }
>
> +%include "cstring.i"
> +
> +%cstring_output_maxsize(char *buf, int buflen);
> +int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen);
> +
> /* We have both struct fdt_property and a function fdt_property() */
> %warnfilter(302) fdt_property;
>
> diff --git a/tests/pylibfdt_tests.py b/tests/pylibfdt_tests.py
> index 5479363..bcd3daa 100644
> --- a/tests/pylibfdt_tests.py
> +++ b/tests/pylibfdt_tests.py
> @@ -348,6 +348,18 @@ class PyLibfdtBasicTests(unittest.TestCase):
> self.assertEqual("/subnode@1/subsubnode", self.fdt3.get_alias('ss1'))
> self.assertEqual("/subnode@1/subsubnode/subsubsubnode", self.fdt3.get_alias('sss1'))
>
> + def testGetPath(self):
> + """Test for the get_path() method"""
> + node = self.fdt.path_offset('/subnode@1')
> + 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, 16))
> + self.assertEqual("/subnode@1/subsubnode", self.fdt.get_path(node2))
> +
> + with self.assertRaises(FdtException) as e:
> + self.fdt.get_path(node2, 16)
> + self.assertEqual(e.exception.err, -libfdt.NOSPACE)
> +
> def testParentOffset(self):
> """Test for the parent_offset() method"""
> self.assertEqual(-libfdt.NOTFOUND,
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2021-12-28 4:33 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-25 13:25 [PATCH 0/4] Add new helpers to pylibfdt Luca Weiss
[not found] ` <20211225132558.167123-1-luca-IfPCFPJWly+lVyrhU4qvOw@public.gmane.org>
2021-12-25 13:25 ` [PATCH 1/4] pylibfdt: add Property.as_stringlist() Luca Weiss
[not found] ` <20211225132558.167123-2-luca-IfPCFPJWly+lVyrhU4qvOw@public.gmane.org>
2021-12-28 4:29 ` David Gibson
2022-01-05 22:48 ` Rob Herring
[not found] ` <CAL_JsqLvQdm1kqMED8G03LEsm+xgyY2A+F+FD8DYeAy5o+eiGg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2022-01-18 10:08 ` David Gibson
2022-01-20 19:24 ` Luca Weiss
2022-01-21 0:12 ` David Gibson
2021-12-25 13:25 ` [PATCH 2/4] pylibfdt: add Property.as_*int*_array() Luca Weiss
[not found] ` <20211225132558.167123-3-luca-IfPCFPJWly+lVyrhU4qvOw@public.gmane.org>
2021-12-28 4:30 ` David Gibson
2021-12-25 13:25 ` [PATCH 3/4] pylibfdt: add FdtRo.get_path() Luca Weiss
[not found] ` <20211225132558.167123-4-luca-IfPCFPJWly+lVyrhU4qvOw@public.gmane.org>
2021-12-28 4:33 ` David Gibson [this message]
2021-12-25 13:25 ` [PATCH 4/4] pylibfdt: add FdtRo.getprop_or_none() Luca Weiss
[not found] ` <20211225132558.167123-5-luca-IfPCFPJWly+lVyrhU4qvOw@public.gmane.org>
2021-12-28 5:20 ` David Gibson
2021-12-28 8:34 ` Simon Glass
[not found] ` <CAPnjgZ3wun92Q1vMSEem9CH6A8MWNbKZNaepf4j4Ttmf-GNPtQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2022-01-22 10:36 ` Luca Weiss
2022-01-24 17:57 ` Simon Glass
[not found] ` <CAPnjgZ1NX2Q884T_LNUOLJT8=RKZXEj2z7uxzQF4MrHiKObZvA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2022-01-24 20:50 ` Luca Weiss
2022-01-24 21:28 ` Simon Glass
2022-01-25 4:50 ` David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YcqTmyrWb7Uw5LB2@yekko \
--to=david-xt8fgy+axnrb3ne2bgzf6laj5h9x9tb+@public.gmane.org \
--cc=devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=luca-IfPCFPJWly+lVyrhU4qvOw@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.