notmuch/test/corpus/cur/30:2,
Carl Worth f6ec7ca78f test: Move corpus emails into maildir directory structure
Now that we have maildir synchronization turned on by default, it's
advantageous to make all of the tests exercise it as much as possible.
2010-11-11 04:17:29 -08:00

75 lines
1.8 KiB
Text

From: "Stewart Smith" <stewart@flamingspork.com>
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