int fs_default_copy(struct fs_file *src, struct fs_file *dest)
{
+ int tmp_errno;
/* we're going to be counting this as read+write, so remove the
copy_count we just added */
dest->fs->stats.copy_count--;
i_stream_unref(&dest->copy_input);
return -1;
case OSTREAM_SEND_ISTREAM_RESULT_ERROR_OUTPUT:
+ /* errno might not survive abort error */
+ tmp_errno = dest->copy_output->stream_errno;
fs_write_stream_abort_error(dest, &dest->copy_output,
"write(%s) failed: %s",
o_stream_get_name(dest->copy_output),
o_stream_get_error(dest->copy_output));
- errno = dest->copy_output->stream_errno;
+ errno = tmp_errno;
i_stream_unref(&dest->copy_input);
return -1;
}