summaryrefslogtreecommitdiff
path: root/libarchive/archive_write_add_filter_program.c
diff options
context:
space:
mode:
authorTim Kientzle <kientzle@gmail.com>2010-02-21 03:25:42 -0500
committerTim Kientzle <kientzle@gmail.com>2010-02-21 03:25:42 -0500
commit992610f1dd74565cda8df166f70f0d8abf4abda7 (patch)
tree08da3d98240104f98ec0fb50cd6ac5a7c349cc20 /libarchive/archive_write_add_filter_program.c
parent0eb2fe95fbb65e82759f9fd1a0aef553981cae74 (diff)
downloadlibarchive-992610f1dd74565cda8df166f70f0d8abf4abda7.tar.gz
The only place blocking is really needed is just before calling
the client write functions. So I've moved all of the blocking code (that used to be duplicated in every compression filter) into archive_write.c in the code that wraps the client callbacks. As a result, add_filter_none is a true no-op. SVN-Revision: 1936
Diffstat (limited to 'libarchive/archive_write_add_filter_program.c')
-rw-r--r--libarchive/archive_write_add_filter_program.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libarchive/archive_write_add_filter_program.c b/libarchive/archive_write_add_filter_program.c
index 0efeb7c4..90c5f11d 100644
--- a/libarchive/archive_write_add_filter_program.c
+++ b/libarchive/archive_write_add_filter_program.c
@@ -259,7 +259,7 @@ static int
archive_compressor_program_close(struct archive_write_filter *f)
{
struct private_data *data = (struct private_data *)f->data;
- int ret, status;
+ int ret, r1, status;
ssize_t bytes_read;
ret = 0;
@@ -308,7 +308,8 @@ cleanup:
"Filter exited with failure.");
ret = ARCHIVE_FATAL;
}
- return (ret);
+ r1 = __archive_write_close_filter(f->next_filter);
+ return (r1 < ret ? r1 : ret);
}
static int