dovecot-2.0: doveadm dump: Detect also if directory has dovecot....
dovecot at dovecot.org
dovecot at dovecot.org
Tue Jun 22 17:53:06 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/280fe153a7ba
changeset: 11610:280fe153a7ba
user: Timo Sirainen <tss at iki.fi>
date: Tue Jun 22 15:53:02 2010 +0100
description:
doveadm dump: Detect also if directory has dovecot.map.index
diffstat:
src/doveadm/doveadm-dump-index.c | 49 ++++++++++++++++--------
1 files changed, 32 insertions(+), 17 deletions(-)
diffs (75 lines):
diff -r 407e7ff098ca -r 280fe153a7ba src/doveadm/doveadm-dump-index.c
--- a/src/doveadm/doveadm-dump-index.c Mon Jun 21 21:55:24 2010 +0100
+++ b/src/doveadm/doveadm-dump-index.c Tue Jun 22 15:53:02 2010 +0100
@@ -498,22 +498,42 @@
}
}
+static bool dir_has_index(const char *dir, const char *name)
+{
+ struct stat st;
+
+ return stat(t_strconcat(dir, "/", name, NULL), &st) == 0 ||
+ stat(t_strconcat(dir, "/", name, ".log", NULL), &st) == 0;
+}
+
+static struct mail_index *path_open_index(const char *path)
+{
+ struct stat st;
+ const char *p;
+
+ if (stat(path, &st) == 0 && S_ISDIR(st.st_mode)) {
+ if (dir_has_index(path, "dovecot.index"))
+ return mail_index_alloc(path, "dovecot.index");
+ else if (dir_has_index(path, "dovecot.map.index"))
+ return mail_index_alloc(path, "dovecot.map.index");
+ else
+ return NULL;
+ } else if ((p = strrchr(path, '/')) != NULL)
+ return mail_index_alloc(t_strdup_until(path, p), p + 1);
+ else
+ return mail_index_alloc(".", path);
+}
+
static void cmd_dump_index(int argc ATTR_UNUSED, char *argv[])
{
struct mail_index *index;
struct mail_index_view *view;
struct mail_cache_view *cache_view;
- struct stat st;
- const char *p;
unsigned int seq, uid = 0;
- if (stat(argv[1], &st) == 0 && S_ISDIR(st.st_mode))
- index = mail_index_alloc(argv[1], "dovecot.index");
- else if ((p = strrchr(argv[1], '/')) != NULL)
- index = mail_index_alloc(t_strdup_until(argv[1], p), p + 1);
- else
- index = mail_index_alloc(".", argv[1]);
- if (mail_index_open(index, MAIL_INDEX_OPEN_FLAG_READONLY,
+ index = path_open_index(argv[1]);
+ if (index == NULL ||
+ mail_index_open(index, MAIL_INDEX_OPEN_FLAG_READONLY,
FILE_LOCK_METHOD_FCNTL) <= 0)
i_fatal("Couldn't open index %s", argv[1]);
if (argv[2] != NULL)
@@ -551,16 +571,11 @@
static bool test_dump_index(const char *path)
{
struct mail_index *index;
- struct stat st;
- const char *p;
bool ret;
- if (stat(path, &st) == 0 && S_ISDIR(st.st_mode))
- index = mail_index_alloc(path, "dovecot.index");
- else if ((p = strrchr(path, '/')) != NULL)
- index = mail_index_alloc(t_strdup_until(path, p), p + 1);
- else
- index = mail_index_alloc(".", path);
+ index = path_open_index(path);
+ if (index == NULL)
+ return FALSE;
ret = mail_index_open(index, MAIL_INDEX_OPEN_FLAG_READONLY,
FILE_LOCK_METHOD_FCNTL) > 0;
More information about the dovecot-cvs
mailing list