From: Jani Nikula Date: Sun, 19 Jan 2014 20:32:24 +0000 (+0200) Subject: cli: use dirent_type in count_files too X-Git-Tag: 0.18_rc0~176 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=0b247cb411fa7530003bad920bd2c85ed46187b5 cli: use dirent_type in count_files too Avoid an extra stat per file, if possible, also when counting the files for initial indexing. --- diff --git a/notmuch-new.c b/notmuch-new.c index 7f3b3b08..e6ca8414 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -702,9 +702,9 @@ count_files (const char *path, int *count, add_files_state_t *state) { struct dirent *entry = NULL; char *next; - struct stat st; struct dirent **fs_entries = NULL; int num_fs_entries = scandir (path, &fs_entries, 0, dirent_sort_inode); + int entry_type; int i = 0; if (num_fs_entries == -1) { @@ -742,15 +742,14 @@ count_files (const char *path, int *count, add_files_state_t *state) continue; } - stat (next, &st); - - if (S_ISREG (st.st_mode)) { + entry_type = dirent_type (path, entry); + if (entry_type == S_IFREG) { *count = *count + 1; if (*count % 1000 == 0) { printf ("Found %d files so far.\r", *count); fflush (stdout); } - } else if (S_ISDIR (st.st_mode)) { + } else if (entry_type == S_IFDIR) { count_files (next, count, state); }