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