return ret;
}
-int sdbox_file_assign_uid(struct sdbox_file *file, uint32_t uid)
+int sdbox_file_assign_uid(struct sdbox_file *file, uint32_t uid,
+ bool ignore_if_exists)
{
const char *p, *old_path, *dir, *new_fname, *new_path;
struct stat st;
new_fname = t_strdup_printf(SDBOX_MAIL_FILE_FORMAT, uid);
new_path = t_strdup_printf("%s/%s", dir, new_fname);
- if (stat(new_path, &st) == 0) {
+ if (!ignore_if_exists && stat(new_path, &st) == 0) {
mail_storage_set_critical(&file->file.storage->storage,
"sdbox: %s already exists, rebuilding index", new_path);
sdbox_set_mailbox_corrupted(&file->mbox->box);
sdbox_file_attachment_relpath(struct sdbox_file *file, const char *srcpath);
/* Assign UID for a newly created file (by renaming it) */
-int sdbox_file_assign_uid(struct sdbox_file *file, uint32_t uid);
+int sdbox_file_assign_uid(struct sdbox_file *file, uint32_t uid,
+ bool ignore_if_exists);
int sdbox_file_create_fd(struct dbox_file *file, const char *path,
bool parents);
ret = seq_range_array_iter_nth(&iter, n++, &uid);
i_assert(ret);
- if (sdbox_file_assign_uid(sfile, uid) < 0)
+ if (sdbox_file_assign_uid(sfile, uid, FALSE) < 0)
return -1;
if (ctx->ctx.highest_pop3_uidl_seq == i+1) {
index_pop3_uidl_set_max_uid(&ctx->mbox->box,
ctx->first_saved_seq + i, &uid);
i_assert(uid != 0);
- if (sdbox_file_assign_uid(sfile, uid) < 0)
+ if (sdbox_file_assign_uid(sfile, uid, TRUE) < 0)
return -1;
}