aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortenox7 <as@tenoware.com>2018-05-09 02:38:34 -0700
committertenox7 <as@tenoware.com>2018-05-09 02:38:34 -0700
commitb3e790c8fb0f6886c02617d9b3c2f752d538d36e (patch)
treee0132c673685e7f76b29cb1559ebc24bee1cb932
parent43a48ecc6ef98d9f0c1f68bf138645257dccbb09 (diff)
downloadwfm-b3e790c8fb0f6886c02617d9b3c2f752d538d36e.tar.gz
fixes recursive du() performance issue by skipping over dot files
-rw-r--r--fileio.c40
1 files 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);