X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=test%2Fcorpus%2Fcur%2F30%3A2%2C;fp=test%2Fcorpus%2Fcur%2F30%3A2%2C;h=a5b94a0af87c21db445335d61083932882cf3556;hp=0000000000000000000000000000000000000000;hb=f6ec7ca78f867c2ae27d0dba154a2395ccf15f52;hpb=666e410b60855dd714c2b4f36085aeae1810907c diff --git a/test/corpus/cur/30:2, b/test/corpus/cur/30:2, new file mode 100644 index 00000000..a5b94a0a --- /dev/null +++ b/test/corpus/cur/30:2, @@ -0,0 +1,75 @@ +From: "Stewart Smith" +To: notmuch@notmuchmail.org +Date: Wed, 18 Nov 2009 13:22:20 +1100 +Subject: [notmuch] [PATCH] count_files: sort directory in inode order before + statting +Message-ID: <1258510940-7018-1-git-send-email-stewart@flamingspork.com> + +--- + notmuch-new.c | 30 ++++++++++-------------------- + 1 files changed, 10 insertions(+), 20 deletions(-) + +diff --git a/notmuch-new.c b/notmuch-new.c +index 11fad8c..c5f841a 100644 +--- a/notmuch-new.c ++++ b/notmuch-new.c +@@ -308,36 +308,26 @@ add_files (notmuch_database_t *notmuch, + static void + count_files (const char *path, int *count) + { +- DIR *dir; +- struct dirent *e, *entry = NULL; +- int entry_length; +- int err; ++ struct dirent *entry = NULL; + char *next; + struct stat st; ++ struct dirent **namelist = NULL; + +- dir = opendir (path); ++ int n_entries= scandir(path, &namelist, 0, ino_cmp); + +- if (dir == NULL) { ++ if (n_entries == -1) { + fprintf (stderr, "Warning: failed to open directory %s: %s\n", + path, strerror (errno)); + goto DONE; + } + +- entry_length = offsetof (struct dirent, d_name) + +- pathconf (path, _PC_NAME_MAX) + 1; +- entry = malloc (entry_length); ++ int i=0; + + while (!interrupted) { +- err = readdir_r (dir, entry, &e); +- if (err) { +- fprintf (stderr, "Error reading directory: %s\n", +- strerror (errno)); +- free (entry); +- goto DONE; +- } ++ if (i == n_entries) ++ break; + +- if (e == NULL) +- break; ++ entry= namelist[i++]; + + /* Ignore special directories to avoid infinite recursion. + * Also ignore the .notmuch directory. +@@ -376,8 +366,8 @@ count_files (const char *path, int *count) + DONE: + if (entry) + free (entry); +- +- closedir (dir); ++ if (namelist) ++ free (namelist); + } + + int +-- +1.6.3.3 + +