From 8fdd042394b7395c13bee66afb45dd3875c60c63 Mon Sep 17 00:00:00 2001 From: graham.gower Date: Thu, 26 Nov 2009 20:22:10 -0500 Subject: Check the unzip child process for errors and pass the upwards. Also, avoid child from being killed by SIGPIPE. git-svn-id: http://opkg.googlecode.com/svn/trunk@392 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358 --- (limited to 'libbb/unarchive.c') diff --git a/libbb/unarchive.c b/libbb/unarchive.c index 3108f37..c3630b0 100644 --- a/libbb/unarchive.c +++ b/libbb/unarchive.c @@ -624,6 +624,7 @@ deb_extract(const char *package_filename, FILE *out_stream, char *output_buffer = NULL; char *ared_file = NULL; char ar_magic[8]; + int gz_err; *err = 0; @@ -678,7 +679,9 @@ deb_extract(const char *package_filename, FILE *out_stream, extract_function, prefix, file_list, err); fclose(uncompressed_stream); - gz_close(gunzip_pid); + gz_err = gz_close(gunzip_pid); + if (gz_err) + *err = -1; free_header_ar(ar_header); break; } @@ -726,7 +729,9 @@ deb_extract(const char *package_filename, FILE *out_stream, free_header_tar(tar_header); fclose(uncompressed_stream); - gz_close(gunzip_pid); + gz_err = gz_close(gunzip_pid); + if (gz_err) + *err = -1; free_header_tar(tar_header); break; } @@ -734,7 +739,9 @@ deb_extract(const char *package_filename, FILE *out_stream, free_header_tar(tar_header); } fclose(unzipped_opkg_stream); - gz_close(unzipped_opkg_pid); + gz_err = gz_close(unzipped_opkg_pid); + if (gz_err) + *err = -1; goto cleanup; } else { -- cgit v0.9.1