X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Flibpspp%2Fzip-reader.c;h=7c1e342aa76e51bb513afa1e72cf01d9bf41e7d0;hb=9f2f1ce02a857e9bc975d157a04419c021854d57;hp=a36bd6f25f24d3db7176f403bbea9337017740b1;hpb=261eabd9113876a12994f7b419cbf3cf1ee98453;p=pspp diff --git a/src/libpspp/zip-reader.c b/src/libpspp/zip-reader.c index a36bd6f25f..7c1e342aa7 100644 --- a/src/libpspp/zip-reader.c +++ b/src/libpspp/zip-reader.c @@ -126,9 +126,7 @@ zip_reader_destroy (struct zip_reader *zr) if (zr == NULL) return; - if (zr->fr != NULL) - fclose (zr->fr); - + fclose (zr->fr); free (zr->filename); for (i = 0; i < zr->n_members; ++i) @@ -384,7 +382,7 @@ zip_member_open (struct zip_reader *zr, const char *member) uint32_t ucomp_size, comp_size; uint32_t crc; - + bool new_member = false; char *name = NULL; int i; @@ -398,7 +396,10 @@ zip_member_open (struct zip_reader *zr, const char *member) zm = zr->members[i]; if (zm == NULL) - zm = zr->members[i] = zip_header_read_next (zr); + { + zm = zr->members[i] = zip_header_read_next (zr); + new_member = true; + } if (zm && 0 == strcmp (zm->name, member)) break; else @@ -452,8 +453,11 @@ zip_member_open (struct zip_reader *zr, const char *member) free (name); zm->bytes_unread = zm->ucomp_size; + + if ( !new_member) + decompressors[zm->compression].finish (zm); - if ( ! decompressors[zm->compression].init (zm) ) + if (!decompressors[zm->compression].init (zm) ) return NULL; return zm;