From: Timo Sirainen Date: Mon, 15 Feb 2010 02:29:47 +0000 (+0200) Subject: lib-index: Added mail_index_get_modification_time(). X-Git-Tag: 2.0.beta3~76 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6c2ddb9f586e6392552ddfb82ab55e57fcfc4110;p=thirdparty%2Fdovecot%2Fcore.git lib-index: Added mail_index_get_modification_time(). --HG-- branch : HEAD --- diff --git a/src/lib-index/mail-index.c b/src/lib-index/mail-index.c index 0a6e69e84b..b41376be16 100644 --- a/src/lib-index/mail-index.c +++ b/src/lib-index/mail-index.c @@ -751,6 +751,23 @@ bool mail_index_is_deleted(struct mail_index *index) return index->index_delete_requested || index->index_deleted; } +int mail_index_get_modification_time(struct mail_index *index, time_t *mtime_r) +{ + struct stat st; + + if (mail_transaction_log_get_mtime(index->log, mtime_r) < 0) + return -1; + + if (*mtime_r == 0) { + if (stat(index->filepath, &st) < 0) { + mail_index_set_syscall_error(index, "stat()"); + return -1; + } + *mtime_r = st.st_mtime; + } + return 0; +} + void mail_index_fchown(struct mail_index *index, int fd, const char *path) { mode_t mode; diff --git a/src/lib-index/mail-index.h b/src/lib-index/mail-index.h index 41fc63014e..2bf75b0c56 100644 --- a/src/lib-index/mail-index.h +++ b/src/lib-index/mail-index.h @@ -456,6 +456,8 @@ void mail_index_set_undeleted(struct mail_index_transaction *t); /* Returns TRUE if index has been set deleted. This gets set only after index has been opened/refreshed and the transaction has been seen. */ bool mail_index_is_deleted(struct mail_index *index); +/* Returns the last time mailbox was modified. */ +int mail_index_get_modification_time(struct mail_index *index, time_t *mtime_r); /* Lookup a keyword, returns TRUE if found, FALSE if not. */ bool mail_index_keyword_lookup(struct mail_index *index, diff --git a/src/lib-index/mail-transaction-log.c b/src/lib-index/mail-transaction-log.c index d630817a3e..a4477abc7f 100644 --- a/src/lib-index/mail-transaction-log.c +++ b/src/lib-index/mail-transaction-log.c @@ -509,3 +509,21 @@ bool mail_transaction_log_is_head_prev(struct mail_transaction_log *log, return log->head->hdr.prev_file_seq == file_seq && log->head->hdr.prev_file_offset == file_offset; } + +int mail_transaction_log_get_mtime(struct mail_transaction_log *log, + time_t *mtime_r) +{ + struct stat st; + + *mtime_r = 0; + if (stat(log->filepath, &st) < 0) { + if (errno == ENOENT) + return 0; + + mail_index_file_set_syscall_error(log->index, log->filepath, + "stat()"); + return -1; + } + *mtime_r = st.st_mtime; + return 0; +} diff --git a/src/lib-index/mail-transaction-log.h b/src/lib-index/mail-transaction-log.h index 686b24cb53..a633db76fe 100644 --- a/src/lib-index/mail-transaction-log.h +++ b/src/lib-index/mail-transaction-log.h @@ -280,5 +280,9 @@ bool mail_transaction_log_is_head_prev(struct mail_transaction_log *log, /* Move currently opened log head file to memory (called by mail_index_move_to_memory()) */ void mail_transaction_log_move_to_memory(struct mail_transaction_log *log); +/* Returns mtime of the transaction log head file. + If it doesn't exist, mtime_r is set to 0. */ +int mail_transaction_log_get_mtime(struct mail_transaction_log *log, + time_t *mtime_r); #endif