[pacman-dev] [PATCH] _alpm_depmiss_isin fix

Xavier shiningxc at gmail.com
Wed Oct 24 18:30:51 EDT 2007


On Wed, Oct 24, 2007 at 05:23:01PM -0500, Aaron Griffin wrote:
> On 10/24/07, Xavier <shiningxc at gmail.com> wrote:
> > On Wed, Oct 24, 2007 at 10:58:34PM +0200, Nagy Gabor wrote:
> > > ---
> > >  lib/libalpm/deps.c |    7 +++++--
> > >  1 files changed, 5 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
> > > index b7e49be..69c675c 100644
> > > --- a/lib/libalpm/deps.c
> > > +++ b/lib/libalpm/deps.c
> > > @@ -98,8 +98,11 @@ int _alpm_depmiss_isin(pmdepmissing_t *needle, alpm_list_t *haystack)
> > >
> > >       for(i = haystack; i; i = i->next) {
> > >               pmdepmissing_t *miss = i->data;
> > > -             if(!memcmp(needle, miss, sizeof(pmdepmissing_t))
> > > -                && !memcmp(&needle->depend, &miss->depend, sizeof(pmdepend_t))) {
> >
> > Could someone explain what these two lines are supposed to do, because it
> > doesn't make any sense to me. The second line looks redundant.
> 
> It's comparing the entire structure. When you do with with a structure
> that has a pointer, it's comparing, say 0x8239482308 to 0x8239482308,
> which isn't always what we want. The second line compares the actual
> structures POINTED TO
> 

But it's not a pointer, is it?

/* Dependency */
struct __pmdepend_t {
        pmdepmod_t mod;
        char name[PKG_NAME_LEN];
        char version[PKG_VERSION_LEN];
};

/* Missing dependency */
struct __pmdepmissing_t {
        char target[PKG_NAME_LEN];
        pmdeptype_t type;
        pmdepend_t depend;
};


If it was a pointer, it wouldn't make sense either, because the first memcmp
would already have compared the address of needle->depend and miss->depend.




More information about the pacman-dev mailing list