On 04/09/2014 06:25 AM, Bernhard Voelker wrote: > I was wondering why strlen() showed up over 3M times when > running "rm -rf some-dir" - where "some-dir" contained 1M files. > This was shown by "ltrace -c ...". > > The attached avoids 2M strlen() invocations for this case. >
> #include <dirent.h> > -#ifndef _D_EXACT_NAMLEN > -# define _D_EXACT_NAMLEN(dirent) strlen ((dirent)->d_name) > -#endif Doesn't _D_EXACT_NAMLEN avoid a strlen() call on platforms where it is defined? > > - if ((p = fts_alloc (sp, dp->d_name, > - _D_EXACT_NAMLEN (dp))) == NULL) > + namlen = strlen (dp->d_name); In other words, I think it still might sense to do: namlen = _D_EXACT_NAMLEN (dp); then use namlen everywhere else, rather than blindly calling strlen(), for the case where _D_EXACT_NAMLEN also shaves a call. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
