Lines Matching refs:file

1 /* Copyright (c) 2015-2018 Dovecot authors, see the included COPYING file */
30 struct fs_file file;
40 /* defined outside this file */
137 struct crypt_fs_file *file = i_new(struct crypt_fs_file, 1);
138 return &file->file;
146 struct crypt_fs_file *file = (struct crypt_fs_file *)_file;
148 file->file.path = i_strdup(path);
149 file->fs = fs;
150 file->open_mode = mode;
155 file->file.parent = fs_file_init_parent(_file, path, mode | flags);
160 file->super_read = fs_file_init_parent(_file, path,
163 file->super_read = file->file.parent;
169 struct crypt_fs_file *file = (struct crypt_fs_file *)_file;
171 if (file->super_read != _file->parent && file->super_read != NULL)
172 fs_file_deinit(&file->super_read);
174 i_free(file->file.path);
175 i_free(file);
180 struct crypt_fs_file *file = (struct crypt_fs_file *)_file;
182 i_stream_unref(&file->input);
183 if (file->super_read != NULL)
184 fs_file_close(file->super_read);
252 struct crypt_fs_file *file = context;
254 if (fs_crypt_load_keys(file->fs, error_r) < 0)
257 *priv_key_r = mail_crypt_global_key_find(&file->fs->keys, pubkey_digest);
264 struct crypt_fs_file *file = (struct crypt_fs_file *)_file;
267 if (file->input != NULL) {
268 i_stream_ref(file->input);
269 i_stream_seek(file->input, 0);
270 return file->input;
273 input = fs_read_stream(file->super_read, max_buffer_size);
275 file->input = i_stream_create_decrypt_callback(input,
276 fs_crypt_istream_get_key, file);
278 i_stream_ref(file->input);
279 return file->input;
284 struct crypt_fs_file *file = (struct crypt_fs_file *)_file;
289 if (fs_crypt_load_keys(file->fs, &error) < 0) {
295 if (file->fs->keys.public_key == NULL) {
300 file->super_output = fs_write_stream(_file->parent);
301 _file->output = file->super_output;
306 if (strstr(file->fs->enc_algo, "gcm") != NULL ||
307 strstr(file->fs->enc_algo, "ccm") != NULL) {
313 file->temp_output =
317 _file->output = o_stream_create_encrypt(file->temp_output,
318 file->fs->enc_algo, file->fs->keys.public_key,
324 struct crypt_fs_file *file = (struct crypt_fs_file *)_file;
329 if (_file->output == file->super_output)
335 if (file->super_output != NULL) {
337 i_assert(file->temp_output == NULL);
338 fs_write_stream_abort_error(_file->parent, &file->super_output,
340 o_stream_get_name(file->super_output),
341 o_stream_get_error(file->super_output));
343 o_stream_destroy(&file->temp_output);
348 if (file->super_output != NULL) {
350 i_assert(file->temp_output == NULL);
351 return fs_write_stream_finish(_file->parent, &file->super_output);
353 if (file->temp_output == NULL) {
355 i_assert(file->super_output == NULL);
359 /* finish writing the temporary file */
360 input = iostream_temp_finish(&file->temp_output, IO_BLOCK_SIZE);
361 file->super_output = fs_write_stream(_file->parent);
362 o_stream_nsend_istream(file->super_output, input);
363 ret = fs_write_stream_finish(_file->parent, &file->super_output);