projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Avoid problems with G_CONST_RETURN
[pspp]
/
src
/
libpspp
/
zip-reader.c
diff --git
a/src/libpspp/zip-reader.c
b/src/libpspp/zip-reader.c
index a36bd6f25f24d3db7176f403bbea9337017740b1..7c1e342aa76e51bb513afa1e72cf01d9bf41e7d0 100644
(file)
--- 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 == NULL)
return;
- if (zr->fr != NULL)
- fclose (zr->fr);
-
+ fclose (zr->fr);
free (zr->filename);
for (i = 0; i < zr->n_members; ++i)
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;
uint32_t ucomp_size, comp_size;
uint32_t crc;
-
+ bool new_member = false;
char *name = NULL;
int i;
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];
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
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;
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;
return NULL;
return zm;