From b3e790c8fb0f6886c02617d9b3c2f752d538d36e Mon Sep 17 00:00:00 2001 From: tenox7 Date: Wed, 9 May 2018 02:38:34 -0700 Subject: fixes recursive du() performance issue by skipping over dot files --- fileio.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/fileio.c b/fileio.c index 0e2b389..497adfa 100644 --- a/fileio.c +++ b/fileio.c @@ -516,25 +516,27 @@ int asscandir(const char *dir, ASDIR **namelist, int (*compar)(const void *, con entry=readdir(dirh); while(entry!=NULL) { - snprintf(filename, sizeof(filename), "%s/%s", dir, entry->d_name); - if(stat(filename, &fileinfo)!=0) - return -1; - - memset(&names[entries], 0, sizeof(ASDIR)); - strcpy(names[entries].name, entry->d_name); - names[entries].type=fileinfo.st_mode; - if(S_ISDIR(fileinfo.st_mode) && recursive_du) - names[entries].size=du(filename); - else - names[entries].size=fileinfo.st_size; - names[entries].atime=fileinfo.st_atime; - names[entries].mtime=fileinfo.st_mtime; - names[entries].rtime=fileinfo.st_ctime; - - names=(ASDIR*)realloc((ASDIR*)names, sizeof(ASDIR)*(entries+2)); - if(names==NULL) - return -1; - entries++; + if(entry->d_name[0]!='.') { + snprintf(filename, sizeof(filename), "%s/%s", dir, entry->d_name); + if(stat(filename, &fileinfo)!=0) + return -1; + + memset(&names[entries], 0, sizeof(ASDIR)); + strcpy(names[entries].name, entry->d_name); + names[entries].type=fileinfo.st_mode; + if(S_ISDIR(fileinfo.st_mode) && recursive_du) + names[entries].size=du(filename); + else + names[entries].size=fileinfo.st_size; + names[entries].atime=fileinfo.st_atime; + names[entries].mtime=fileinfo.st_mtime; + names[entries].rtime=fileinfo.st_ctime; + + names=(ASDIR*)realloc((ASDIR*)names, sizeof(ASDIR)*(entries+2)); + if(names==NULL) + return -1; + entries++; + } entry=readdir(dirh); } closedir(dirh); -- cgit v1.2.3