All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luca Weiss <luca-IfPCFPJWly+lVyrhU4qvOw@public.gmane.org>
To: Simon Glass <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>,
	David Gibson
	<david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org>
Cc: Devicetree Compiler
	<devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH v4] pylibfdt: add FdtRo.get_path()
Date: Wed, 20 Apr 2022 20:19:43 +0200	[thread overview]
Message-ID: <11961807.O9o76ZdvQC@g550jk> (raw)
In-Reply-To: <Yl92T9KL/dlQntRi@yekko>

Hi Simon and David,

On Mittwoch, 20. April 2022 04:56:15 CEST David Gibson wrote:
> On Tue, Apr 19, 2022 at 03:54:07PM -0600, Simon Glass wrote:
> > Hi Luca,
> > 
> > On Tue, 19 Apr 2022 at 13:49, Luca Weiss <luca-IfPCFPJWly+lVyrhU4qvOw@public.gmane.org> 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>
> > > ---
> > > Changes since v3:
> > > * add quiet parameter
> > > * return integer error when error is quieted
> > > 
> > > Changes since v2:
> > > * Remove arbitrary size limit
> > > * Change size calculation to increase exponentially
> > > * Add test to verify we still get exceptions with bad parameters
> > > 
> > >  pylibfdt/libfdt.i       | 28 ++++++++++++++++++++++++++++
> > >  tests/pylibfdt_tests.py | 13 +++++++++++++
> > >  2 files changed, 41 insertions(+)
> > 
> > Reviewed-by: Simon Glass <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
> > 
> > You don't check for when it is output of space, but I think that is
> > OK.
> 
> Right, a testcase for that would be good, but it can be a follow up.

I don't quite understand what you mean "is output of space".

Maybe you mean a test for when the string is longer than 1024 characters 
("size = 1024") so the size increase gets triggered?

If yes, then I did test that manually before by setting the value absurdly 
low. Not sure how to properly check that in the tests though. Add a node with 
a super long name into the test dtb?

> 
> Applied.

Thanks!

Regards
Luca

> 
> > > diff --git a/pylibfdt/libfdt.i b/pylibfdt/libfdt.i
> > > index ac70762..f9f7e7e 100644
> > > --- a/pylibfdt/libfdt.i
> > > +++ b/pylibfdt/libfdt.i
> > > 
> > > @@ -443,6 +443,29 @@ class FdtRo(object):
> > >          """
> > >          return fdt_get_alias(self._fdt, name)
> > > 
> > > +    def get_path(self, nodeoffset, quiet=()):
> > > +        """Get the full path of a node
> > > +
> > > +        Args:
> > > +            nodeoffset: Node offset to check
> > > +
> > > +        Returns:
> > > +            Full path to the node
> > > +
> > > +        Raises:
> > > +            FdtException if an error occurs
> > > +        """
> > > +        size = 1024
> > > +        while True:
> > > +            ret, path = fdt_get_path(self._fdt, nodeoffset, size)
> > > +            if ret == -NOSPACE:
> > > +                size = size * 2
> > > +                continue
> > > +            err = check_err(ret, quiet)
> > > +            if err:
> > > +                return err
> > > +            return path
> > > +
> > > 
> > >      def parent_offset(self, nodeoffset, quiet=()):
> > >          """Get the offset of a node's parent
> > > 
> > > @@ -1115,6 +1138,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..68d6aaa 100644
> > > --- a/tests/pylibfdt_tests.py
> > > +++ b/tests/pylibfdt_tests.py
> > > 
> > > @@ -348,6 +348,19 @@ 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/subsubnode",
> > > self.fdt.get_path(node2)) +
> > > +        with self.assertRaises(FdtException) as e:
> > > +            self.fdt.get_path(-1)
> > > +        self.assertEqual(e.exception.err, -libfdt.BADOFFSET)
> > > +
> > > +        self.assertEqual(-libfdt.BADOFFSET, self.fdt.get_path(-1,
> > > quiet=(libfdt.BADOFFSET,))) +
> > > 
> > >      def testParentOffset(self):
> > >          """Test for the parent_offset() method"""
> > >          self.assertEqual(-libfdt.NOTFOUND,
> > 
> > Regards,
> > Simon





  reply	other threads:[~2022-04-20 18:19 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-19 19:45 [PATCH v4] pylibfdt: add FdtRo.get_path() Luca Weiss
     [not found] ` <20220419194537.63170-1-luca-IfPCFPJWly+lVyrhU4qvOw@public.gmane.org>
2022-04-19 21:54   ` Simon Glass
     [not found]     ` <CAPnjgZ2izMUDXJ43jSOzXW7DKbuoN5j26MyKZaLn5Wt2gd28wQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2022-04-20  2:56       ` David Gibson
2022-04-20 18:19         ` Luca Weiss [this message]
2022-04-20 21:29           ` Simon Glass
     [not found]             ` <CAPnjgZ2CjKLrCXEcBH0vTN77d7zk29dxnmRta4tTR_Th2arBzQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2022-04-26  6:29               ` David Gibson
2022-04-26  6:28           ` 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=11961807.O9o76ZdvQC@g550jk \
    --to=luca-ifpcfpjwly+lvyrhu4qvow@public.gmane.org \
    --cc=david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org \
    --cc=devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=sjg-F7+t8E8rja9g9hUCZPvPmw@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.