From: Timo Sirainen Date: Tue, 20 Jun 2023 15:54:49 +0000 (+0300) Subject: dbox: Split off dbox_mailbox_list_cleanup() X-Git-Tag: 2.3.21~56 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=41ddf3076239f7dbc44f4df17f6e0d7bf7a39ded;p=thirdparty%2Fdovecot%2Fcore.git dbox: Split off dbox_mailbox_list_cleanup() --- diff --git a/src/lib-storage/index/dbox-common/dbox-storage.c b/src/lib-storage/index/dbox-common/dbox-storage.c index b9f651f746..35ab65cc5c 100644 --- a/src/lib-storage/index/dbox-common/dbox-storage.c +++ b/src/lib-storage/index/dbox-common/dbox-storage.c @@ -176,7 +176,7 @@ static time_t cleanup_interval(struct mailbox_list *list) { time_t interval = list->mail_set->mail_temp_scan_interval; - const char *username = list->ns->storage->user->username; + const char *username = list->ns->user->username; /* No need for a cryptographic-quality hash here. */ unsigned int hash = crc32_str(username); @@ -282,39 +282,45 @@ int dbox_mailbox_open(struct mailbox *box) return 0; } -void dbox_mailbox_close_cleanup(struct mailbox *box) +int dbox_mailbox_list_cleanup(struct mailbox_list *list, const char *path, + time_t last_temp_file_scan) { - if (box->view == NULL) - return; - - const struct mail_index_header *hdr = - mail_index_get_header(box->view); - - const char *box_path = mailbox_get_path(box); - time_t scan_time = hdr->last_temp_file_scan; time_t change_time = -1; - if (scan_time == 0) { - /* Try to fetch the scan time from dhe directory's atime + if (last_temp_file_scan == 0) { + /* Try to fetch the scan time from the directory's atime if the directory exists. In case, get also the ctime */ struct stat stats; - if (stat(box_path, &stats) == 0) { - scan_time = stats.st_atim.tv_sec; + if (stat(path, &stats) == 0) { + last_temp_file_scan = stats.st_atim.tv_sec; change_time = stats.st_ctim.tv_sec; } else { if (errno != ENOENT) { - e_error(box->event, - "stat(%s) failed: %m", box_path); + e_error(list->ns->user->event, + "stat(%s) failed: %m", path); } - return; + return -1; } } - if (dbox_cleanup_temp_files(box->list, box_path, scan_time, change_time) || - hdr->last_temp_file_scan == 0) { + if (dbox_cleanup_temp_files(list, path, last_temp_file_scan, change_time) || + last_temp_file_scan == 0) { /* temp files were scanned. update the last scan timestamp. */ - index_mailbox_update_last_temp_file_scan(box); + return 1; } + return 0; +} + +void dbox_mailbox_close_cleanup(struct mailbox *box) +{ + if (box->view == NULL) + return; + + const struct mail_index_header *hdr = + mail_index_get_header(box->view); + if (dbox_mailbox_list_cleanup(box->list, mailbox_get_path(box), + hdr->last_temp_file_scan) > 0) + index_mailbox_update_last_temp_file_scan(box); } void dbox_mailbox_close(struct mailbox *box) diff --git a/src/lib-storage/index/dbox-common/dbox-storage.h b/src/lib-storage/index/dbox-common/dbox-storage.h index 9c614e7300..9a85fee4d9 100644 --- a/src/lib-storage/index/dbox-common/dbox-storage.h +++ b/src/lib-storage/index/dbox-common/dbox-storage.h @@ -76,6 +76,8 @@ int dbox_mailbox_check_existence(struct mailbox *box); int dbox_mailbox_open(struct mailbox *box); void dbox_mailbox_close(struct mailbox *box); void dbox_mailbox_close_cleanup(struct mailbox *box); +int dbox_mailbox_list_cleanup(struct mailbox_list *list, const char *path, + time_t last_temp_file_scan); int dbox_mailbox_create(struct mailbox *box, const struct mailbox_update *update, bool directory); int dbox_mailbox_create_indexes(struct mailbox *box,