From: Timo Sirainen Date: Sun, 22 Sep 2013 01:41:50 +0000 (+0300) Subject: lib-fs: Improved fs_write_*() error messages. X-Git-Tag: 2.2.6~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6516e7c2cfb84bbdaff7d748df0a0f1f6f39f75d;p=thirdparty%2Fdovecot%2Fcore.git lib-fs: Improved fs_write_*() error messages. --- diff --git a/src/lib-fs/fs-posix.c b/src/lib-fs/fs-posix.c index 92c3ca6b43..00d70dc4ab 100644 --- a/src/lib-fs/fs-posix.c +++ b/src/lib-fs/fs-posix.c @@ -47,6 +47,7 @@ struct posix_fs_file { bool seek_to_beginning; bool success; + bool open_failed; }; struct posix_fs_lock { @@ -462,7 +463,9 @@ static void fs_posix_write_stream(struct fs_file *_file) file->write_buf = buffer_create_dynamic(default_pool, 1024*32); _file->output = o_stream_create_buffer(file->write_buf); } else if (file->fd == -1 && fs_posix_open(file) < 0) { - _file->output = o_stream_create_error(errno); + _file->output = o_stream_create_error_str(errno, "%s", + fs_file_last_error(_file)); + file->open_failed = TRUE; } else { _file->output = o_stream_create_fd_file(file->fd, (uoff_t)-1, FALSE); @@ -475,9 +478,12 @@ static int fs_posix_write_stream_finish(struct fs_file *_file, bool success) struct posix_fs_file *file = (struct posix_fs_file *)_file; int ret = success ? 0 : -1; - if (o_stream_nfinish(_file->output) < 0) { - fs_set_error(_file->fs, "write(%s) failed: %m", - o_stream_get_name(_file->output)); + if (file->open_failed) + ret = -1; + else if (o_stream_nfinish(_file->output) < 0) { + fs_set_error(_file->fs, "write(%s) failed: %s", + o_stream_get_name(_file->output), + o_stream_get_error(_file->output)); ret = -1; } o_stream_destroy(&_file->output); diff --git a/src/lib-fs/fs-sis-queue.c b/src/lib-fs/fs-sis-queue.c index 914403eb24..ef79d55f18 100644 --- a/src/lib-fs/fs-sis-queue.c +++ b/src/lib-fs/fs-sis-queue.c @@ -234,10 +234,12 @@ static void fs_sis_queue_write_stream(struct fs_file *_file) i_assert(_file->output == NULL); - if (file->super == NULL) - _file->output = o_stream_create_error(EINVAL); - else + if (file->super == NULL) { + _file->output = o_stream_create_error_str(EINVAL, "%s", + fs_file_last_error(_file)); + } else { _file->output = fs_write_stream(file->super); + } o_stream_set_name(_file->output, _file->path); } diff --git a/src/lib-fs/fs-sis.c b/src/lib-fs/fs-sis.c index 14f0920a41..aa95cdcff8 100644 --- a/src/lib-fs/fs-sis.c +++ b/src/lib-fs/fs-sis.c @@ -354,9 +354,10 @@ static void fs_sis_write_stream(struct fs_file *_file) i_assert(_file->output == NULL); - if (file->super == NULL) - _file->output = o_stream_create_error(EINVAL); - else { + if (file->super == NULL) { + _file->output = o_stream_create_error_str(EINVAL, "%s", + fs_file_last_error(_file)); + } else { file->fs_output = fs_write_stream(file->super); if (file->hash_input == NULL) _file->output = file->fs_output;