changeset 18935:2f1378beeef6

lib-fs: Small code cleanup for handling write_stream_finish()
author Timo Sirainen <tss@iki.fi>
date Sun, 16 Aug 2015 13:10:48 +0200
parents 295fd771e02d
children e8e838cb9663
files src/lib-fs/fs-api.c
diffstat 1 files changed, 20 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-fs/fs-api.c	Sun Aug 16 13:07:21 2015 +0200
+++ b/src/lib-fs/fs-api.c	Sun Aug 16 13:10:48 2015 +0200
@@ -555,9 +555,25 @@
 	return file->output;
 }
 
+static int fs_write_stream_finish_int(struct fs_file *file, bool success)
+{
+	int ret;
+
+	T_BEGIN {
+		ret = file->fs->v.write_stream_finish(file, success);
+	} T_END;
+	if (ret == 0) {
+		file->metadata_changed = FALSE;
+	} else {
+		/* write didn't finish yet. this shouldn't happen if we
+		   indicated a failure. */
+		i_assert(success);
+	}
+	return ret;
+}
+
 int fs_write_stream_finish(struct fs_file *file, struct ostream **output)
 {
-	int ret;
 	bool success = TRUE;
 
 	i_assert(*output == file->output || *output == NULL);
@@ -573,24 +589,12 @@
 			success = FALSE;
 		}
 	}
-	T_BEGIN {
-		ret = file->fs->v.write_stream_finish(file, success);
-	} T_END;
-	if (ret != 0)
-		file->metadata_changed = FALSE;
-	return ret;
+	return fs_write_stream_finish_int(file, success);
 }
 
 int fs_write_stream_finish_async(struct fs_file *file)
 {
-	int ret;
-
-	T_BEGIN {
-		ret = file->fs->v.write_stream_finish(file, TRUE);
-	} T_END;
-	if (ret != 0)
-		file->metadata_changed = FALSE;
-	return ret;
+	return fs_write_stream_finish_int(file, TRUE);
 }
 
 void fs_write_stream_abort(struct fs_file *file, struct ostream **output)
@@ -600,10 +604,7 @@
 	*output = NULL;
 	if (file->output != NULL)
 		o_stream_ignore_last_errors(file->output);
-	T_BEGIN {
-		(void)file->fs->v.write_stream_finish(file, FALSE);
-	} T_END;
-	file->metadata_changed = FALSE;
+	(void)fs_write_stream_finish_int(file, FALSE);
 }
 
 void fs_write_set_hash(struct fs_file *file, const struct hash_method *method,