diff options
author | tenox7 <as@tenoware.com> | 2018-05-09 02:38:34 -0700 |
---|---|---|
committer | tenox7 <as@tenoware.com> | 2018-05-09 02:38:34 -0700 |
commit | b3e790c8fb0f6886c02617d9b3c2f752d538d36e (patch) | |
tree | e0132c673685e7f76b29cb1559ebc24bee1cb932 | |
parent | 43a48ecc6ef98d9f0c1f68bf138645257dccbb09 (diff) | |
download | wfm-b3e790c8fb0f6886c02617d9b3c2f752d538d36e.tar.gz |
fixes recursive du() performance issue by skipping over dot files
-rw-r--r-- | fileio.c | 40 |
1 files changed, 21 insertions, 19 deletions
@@ -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); |