X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fzip-reader.c;h=985b0a9027723180f6362d430ad66e9b8f49c045;hb=57531cdd0b00b297859d70b3c8ea8fcd4ba5acbd;hp=59c47bc97507e78d6e716c46288458d796a8eb53;hpb=fc4deba1edb1310028d00bf6eb3217378e1cc713;p=pspp diff --git a/src/libpspp/zip-reader.c b/src/libpspp/zip-reader.c index 59c47bc975..985b0a9027 100644 --- a/src/libpspp/zip-reader.c +++ b/src/libpspp/zip-reader.c @@ -275,7 +275,7 @@ zip_header_read_next (struct zip_reader *zr) get_u32 (zr->fr, &eattr); get_u32 (zr->fr, &zm->offset); - zm->name = calloc (nlen + 1, 1); + zm->name = xzalloc (nlen + 1); get_bytes (zr->fr, zm->name, nlen); skip_bytes (zr->fr, extralen); @@ -298,7 +298,7 @@ zip_reader_create (const char *filename, struct string *errs) off_t offset = 0; uint32_t central_dir_start, central_dir_length; - struct zip_reader *zr = malloc (sizeof *zr); + struct zip_reader *zr = xzalloc (sizeof *zr); zr->errs = errs; if ( zr->errs) ds_init_empty (zr->errs); @@ -363,7 +363,8 @@ zip_reader_create (const char *filename, struct string *errs) return NULL; } - zr->members = calloc (zr->n_members, sizeof (*zr->members)); + zr->members = xcalloc (zr->n_members, sizeof (*zr->members)); + memset (zr->members, 0, zr->n_members * sizeof (*zr->members)); zr->filename = strdup (filename); @@ -393,6 +394,7 @@ zip_member_open (struct zip_reader *zr, const char *member) for (i = 0; i < zr->n_members; ++i) { zm = zr->members[i]; + if (zm == NULL) zm = zr->members[i] = zip_header_read_next (zr); if (zm && 0 == strcmp (zm->name, member)) @@ -429,7 +431,7 @@ zip_member_open (struct zip_reader *zr, const char *member) get_u16 (zm->fp, &nlen); get_u16 (zm->fp, &extra_len); - name = calloc (nlen + 1, sizeof (char)); + name = xzalloc (nlen + 1); get_bytes (zm->fp, name, nlen);