[Pdbg] [PATCH 5/5] libpdbg: Return immediate parent if class is NULL

Alistair Popple alistair at popple.id.au
Fri Sep 7 15:23:21 AEST 2018


On Friday, 7 September 2018 2:03:45 PM AEST Amitay Isaacs wrote:
> On Fri, 2018-09-07 at 13:23 +1000, Alistair Popple wrote:
> > Hi Amitay,
> > 
> > What is this needed for? In the targetting model we have we are
> > trying to avoid
> > relying on overly specific parent/child relationships as they can be
> > brittle,
> > hence why callers need to specify which specific type/class of parent
> > they are
> > looking for. There's not much that could be done with an arbitrary
> > parent
> > anyway.
> 
> Well we need some mechanisms for traverseing the tree.  I am re-using
> this function to also do that.  May be we need separate api when we are
> just traversing the tree and when we are searching for targets based on
> class.
> 
> I needed this functionality in testing to go up and down the device
> tree from a node.

You could just use pdbg_for_each_child_target() to traverse down the tree.
Although the existance of this functionality negates my previous argument about
relying on searching for specific classes/types so I'll merge this (which is
just the reverse of what we already have) as well. Thanks!

- Alistair

> > 
> > Although I agree an `assert(class)` would probably assist debug.
> > 
> > - Alistair
> > 
> > On Thursday, 16 August 2018 3:57:56 PM AEST Amitay Isaacs wrote:
> > > This avoids the segfault if class is NULL.  Also, this api can be
> > > used
> > > to traverse the tree by explicitly setting class=NULL.
> > > 
> > > Signed-off-by: Amitay Isaacs <amitay at ozlabs.org>
> > > ---
> > >  libpdbg/libpdbg.c | 3 +++
> > >  1 file changed, 3 insertions(+)
> > > 
> > > diff --git a/libpdbg/libpdbg.c b/libpdbg/libpdbg.c
> > > index 522bec9..810e045 100644
> > > --- a/libpdbg/libpdbg.c
> > > +++ b/libpdbg/libpdbg.c
> > > @@ -89,6 +89,9 @@ struct pdbg_target *pdbg_target_parent(const char
> > > *class, struct pdbg_target *ta
> > >  {
> > >  	struct pdbg_target *parent;
> > >  
> > > +	if (!class)
> > > +		return target->parent;
> > > +
> > >  	for (parent = target->parent; parent && parent->parent; parent
> > > = parent->parent) {
> > >  		if (!strcmp(class, pdbg_target_class_name(parent)))
> > >  			return parent;
> > > 
> > 
> > 
> 
> Amitay.
> 




More information about the Pdbg mailing list