Le 31/12/2012 08:33, Otto Moerbeek a écrit : > On Mon, Dec 31, 2012 at 04:53:15PM +1100, Aaron Mason wrote: > >> Ok, I just tried freeing NULL, and it did nothing. Granted it was on >> a Linux system but still... >> > > Wrong method, Just check the definition of free(3). It is OK to call > free(3) on a NULL pointer since C89 at least. > > -Otto > >> I stand by my argument that there's no clear improvement, especially >> on a modern system. >>
Improvement on a modern system? No, there is not. It's just that you avoid a nullcheck. >> On Mon, Dec 31, 2012 at 4:50 PM, Aaron Mason <[email protected]> >> wrote: >>> Maxime >>> >>> I'm not entirely clear on what you hoped to achieve with the diffs >>> below, if anything you're inducing possible segfaults if any of those >>> values are NULL. That aside, I fail to see how this could be >>> construed as any sort of improvement. >>> I don't hope to achieve anything. For the snprintf, it is evident to me that a simple strlcpy is faster. But do as you see fit. >>>> Index: pfctl_osfp.c >>>> =================================================================== >>>> RCS file: /cvs/src/sbin/pfctl/pfctl_osfp.c,v >>>> retrieving revision 1.18 >>>> diff -u -r1.18 pfctl_osfp.c >>>> --- pfctl_osfp.c 18 Oct 2010 15:55:28 -0000 1.18 >>>> +++ pfctl_osfp.c 22 Dec 2012 07:08:28 -0000 >>>> @@ -112,16 +112,11 @@ >>>> >>>> while ((line = fgetln(in, &len)) != NULL) { >>>> lineno++; >>>> - if (class) >>>> - free(class); >>>> - if (version) >>>> - free(version); >>>> - if (subtype) >>>> - free(subtype); >>>> - if (desc) >>>> - free(desc); >>>> - if (tcpopts) >>>> - free(tcpopts); >>>> + free(class); >>>> + free(version); >>>> + free(subtype); >>>> + free(desc); >>>> + free(tcpopts); >>>> class = version = subtype = desc = tcpopts = NULL; >>>> memset(&fp, 0, sizeof(fp)); >>>> >>>> @@ -250,16 +245,11 @@ >>>> add_fingerprint(dev, opts, &fp); >>>> } >>>> >>>> - if (class) >>>> - free(class); >>>> - if (version) >>>> - free(version); >>>> - if (subtype) >>>> - free(subtype); >>>> - if (desc) >>>> - free(desc); >>>> - if (tcpopts) >>>> - free(tcpopts); >>>> + free(class); >>>> + free(version); >>>> + free(subtype); >>>> + free(desc); >>>> + free(tcpopts); >>>> >>>> fclose(in); >>>> >>>> @@ -513,7 +503,7 @@ >>>> return (buf); >>>> >>>> found: >>>> - snprintf(buf, len, "%s", class_name); >>>> + strlcpy(buf, class_name, len); >>>> if (version_name) { >>>> strlcat(buf, " ", len); >>>> strlcat(buf, version_name, len); >>>> Index: pfctl_radix.c >>>> =================================================================== >>>> RCS file: /cvs/src/sbin/pfctl/pfctl_radix.c,v >>>> retrieving revision 1.29 >>>> diff -u -r1.29 pfctl_radix.c >>>> --- pfctl_radix.c 27 Jul 2011 00:26:10 -0000 1.29 >>>> +++ pfctl_radix.c 22 Dec 2012 07:08:28 -0000 >>>> @@ -499,8 +499,7 @@ >>>> { >>>> if (b == NULL) >>>> return; >>>> - if (b->pfrb_caddr != NULL) >>>> - free(b->pfrb_caddr); >>>> + free(b->pfrb_caddr); >>>> b->pfrb_caddr = NULL; >>>> b->pfrb_size = b->pfrb_msize = 0; >>>> } >>>> >>> >>> >>> >>> -- >>> Aaron Mason - Programmer, open source addict >>> I've taken my software vows - for beta or for worse >> >> >> >> -- >> Aaron Mason - Programmer, open source addict >> I've taken my software vows - for beta or for worse

