summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2015-07-24 14:59:38 -0500
committerEdward Thomson <ethomson@edwardthomson.com>2015-07-24 14:59:38 -0500
commit14e805a2ceebb360e0bf8d5c006244d5f8af4741 (patch)
tree2a554b1698f1a46d1701b6833c00df73da7f430c
parent4e0421fdbdd54004041797b5dd5e79597c86f447 (diff)
parent4de7f3bfc3ad9b2b22620cbe012a70c1c11b3b17 (diff)
downloadlibgit2-14e805a2ceebb360e0bf8d5c006244d5f8af4741.tar.gz
Merge pull request #3304 from libgit2/cmn/checkout-free-stream
filter: make sure to close the stream even on error
-rw-r--r--src/filter.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/filter.c b/src/filter.c
index 70c4fa382..60473e4e1 100644
--- a/src/filter.c
+++ b/src/filter.c
@@ -950,18 +950,20 @@ int git_filter_list_stream_data(
{
git_vector filter_streams = GIT_VECTOR_INIT;
git_writestream *stream_start;
- int error = 0;
+ int error = 0, close_error;
git_buf_sanitize(data);
- if ((error = stream_list_init(
- &stream_start, &filter_streams, filters, target)) == 0 &&
- (error =
- stream_start->write(stream_start, data->ptr, data->size)) == 0)
- error = stream_start->close(stream_start);
+ if ((error = stream_list_init(&stream_start, &filter_streams, filters, target)) < 0)
+ goto out;
+ error = stream_start->write(stream_start, data->ptr, data->size);
+
+out:
+ close_error = stream_start->close(stream_start);
stream_list_free(&filter_streams);
- return error;
+ /* propagate the stream init or write error */
+ return error < 0 ? error : close_error;
}
int git_filter_list_stream_blob(