On Wed, Jul 30, 2014 at 07:37:29PM -0700, patrick keshishian wrote:
> On Wed, Jul 30, 2014 at 10:14:54PM +0200, Fritjof Bornebusch wrote:
> > Hi tech,
> > 
> > there is an unnecessary NULL check before calling free.
> > 
> > fritjof
> > 
> > Index: xmalloc.c
> > ===================================================================
> > RCS file: /cvs/src/usr.bin/rcs/xmalloc.c,v
> > retrieving revision 1.4
> > diff -u -p -r1.4 xmalloc.c
> > --- xmalloc.c   7 Jun 2009 08:39:13 -0000       1.4
> > +++ xmalloc.c   31 May 2014 19:19:18 -0000
> > @@ -76,8 +76,6 @@ xrealloc(void *ptr, size_t nmemb, size_t
> >  void
> >  xfree(void *ptr)
> >  {
> > -       if (ptr == NULL)
> > -               errx(1, "xfree: NULL pointer given as argument");
> >         free(ptr);
> >  }
> 
> 
> Going by this context, a quick grep in src/usr.bin/rcs, and
> especially the error message, the NULL check's purpose is to
> catach this condition.
> 
> The code you claim to correct:
> 
> > there is an unnecessary NULL check before calling free.
> 
> would have been of the form:
> 
>       if (ptr != NULL)        -or-    if (ptr == NULL)
>               free(ptr);                      return;
> 
That is true, but free() can handle NULL itself:

...
        /* This is legal. */
        if (ptr == NULL)
                return;
....

That's why there is no need, to use a condition like:
        if(ptr == NULL)
                errx(1, "xfree: NULL pointer given as argument");

> --patrick
> 
fritjof

Reply via email to