Lines Matching refs:file
1 /* Copyright (c) 2007-2018 Dovecot authors, see the included COPYING file */
11 #include "file-lock.h"
12 #include "file-set-size.h"
20 #include "mdbox-file.h"
48 dbox_file_free(&files[i]->file);
59 if (files[i]->file.input != NULL)
60 i_stream_sync(files[i]->file.input);
72 if (files[i]->file.refcount == 0) {
73 dbox_file_free(&files[i]->file);
87 mdbox_file_init_paths(struct mdbox_file *file, const char *fname, bool alt)
89 i_free(file->file.primary_path);
90 i_free(file->file.alt_path);
91 file->file.primary_path =
92 i_strdup_printf("%s/%s", file->storage->storage_dir, fname);
93 if (file->storage->alt_storage_dir != NULL) {
94 file->file.alt_path =
95 i_strdup_printf("%s/%s", file->storage->alt_storage_dir,
98 file->file.cur_path = !alt ? file->file.primary_path :
99 file->file.alt_path;
102 static int mdbox_file_create(struct mdbox_file *file)
104 struct dbox_file *_file = &file->file;
114 if (file->storage->preallocate_space) {
116 file->storage->set->mdbox_rotate_size);
130 file->storage->preallocate_space = FALSE;
140 struct mdbox_file *file;
144 file = file_id == 0 ? NULL :
146 if (file != NULL) {
147 file->file.refcount++;
148 return &file->file;
157 file = i_new(struct mdbox_file, 1);
158 file->storage = storage;
159 file->file.storage = &storage->storage;
160 file->file_id = file_id;
163 mdbox_file_init_paths(file, fname, FALSE);
164 dbox_file_init(&file->file);
166 file->file.cur_path = file->file.alt_path;
169 array_append(&storage->open_files, &file, 1);
171 (void)mdbox_file_create(file);
172 return &file->file;
187 int mdbox_file_assign_file_id(struct mdbox_file *file, uint32_t file_id)
193 i_assert(file->file_id == 0);
196 old_path = file->file.cur_path;
198 new_dir = !dbox_file_is_in_alt(&file->file) ?
199 file->storage->storage_dir : file->storage->alt_storage_dir;
203 mail_storage_set_critical(&file->file.storage->storage,
205 mdbox_storage_set_corrupted(file->storage);
209 mail_storage_set_critical(&file->storage->storage.storage,
214 mdbox_file_init_paths(file, new_fname,
215 dbox_file_is_in_alt(&file->file));
216 file->file_id = file_id;
217 array_append(&file->storage->open_files, &file, 1);
231 if (files[i]->file.refcount == 0) {
252 dbox_file_free(&oldest->file);
268 void mdbox_file_unrefed(struct dbox_file *file)
270 struct mdbox_file *mfile = (struct mdbox_file *)file;
274 /* don't cache metadata seeks while file isn't being referenced */
275 file->metadata_read_offset = (uoff_t)-1;
281 /* we can leave this file open for now */
286 /* close the oldest file with refcount=0 */
291 dbox_file_free(&oldest_file->file);
297 dbox_file_free(file);
300 int mdbox_file_create_fd(struct dbox_file *file, const char *path, bool parents)
302 struct mdbox_file *mfile = (struct mdbox_file *)file;
318 path != file->alt_path ?
321 mail_storage_copy_list_error(&file->storage->storage,
331 mail_storage_set_critical(&file->storage->storage,
337 mail_storage_set_critical(&file->storage->storage, "%s",
342 mail_storage_set_critical(&file->storage->storage,