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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to