Mercurial > dovecot > core-2.2
changeset 10722:31aca1df525b HEAD
lib-index: Added mail_index_get_modification_time().
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 15 Feb 2010 04:29:47 +0200 |
parents | ea8f213f0e19 |
children | eae6e4a7ee55 |
files | src/lib-index/mail-index.c src/lib-index/mail-index.h src/lib-index/mail-transaction-log.c src/lib-index/mail-transaction-log.h |
diffstat | 4 files changed, 41 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index.c Mon Feb 15 04:08:46 2010 +0200 +++ b/src/lib-index/mail-index.c Mon Feb 15 04:29:47 2010 +0200 @@ -751,6 +751,23 @@ 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;
--- a/src/lib-index/mail-index.h Mon Feb 15 04:08:46 2010 +0200 +++ b/src/lib-index/mail-index.h Mon Feb 15 04:29:47 2010 +0200 @@ -456,6 +456,8 @@ /* 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,
--- a/src/lib-index/mail-transaction-log.c Mon Feb 15 04:08:46 2010 +0200 +++ b/src/lib-index/mail-transaction-log.c Mon Feb 15 04:29:47 2010 +0200 @@ -509,3 +509,21 @@ 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; +}
--- a/src/lib-index/mail-transaction-log.h Mon Feb 15 04:08:46 2010 +0200 +++ b/src/lib-index/mail-transaction-log.h Mon Feb 15 04:29:47 2010 +0200 @@ -280,5 +280,9 @@ /* 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