[PATCH 3/7] cli: use dirent_type in count_files too

Jani Nikula jani at nikula.org
Sun Jan 19 12:32:24 PST 2014


Avoid an extra stat per file, if possible, also when counting the
files for initial indexing.
---
 notmuch-new.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/notmuch-new.c b/notmuch-new.c
index 7f3b3b0..e6ca841 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);
 	}
 
-- 
1.8.5.2



More information about the notmuch mailing list