- struct zip_member *zm = xzalloc (sizeof *zm);
-
- uint16_t v, nlen, extralen;
- uint16_t gp, time, date;
-
- uint16_t clen, diskstart, iattr;
- uint32_t eattr;
- uint16_t comp_type;
-
- ds_clear (zr->errs);
- zm->errmsgs = zr->errs;
-
- if ( ! check_magic (zr->fr, MAGIC_SOCD, zr->errs))
- return NULL;
-
- if (! get_u16 (zr->fr, &v)) return NULL;
-
- if (! get_u16 (zr->fr, &v)) return NULL;
- if (! get_u16 (zr->fr, &gp)) return NULL;
- if (! get_u16 (zr->fr, &comp_type)) return NULL;
-
- zm->decompressor = get_decompressor (zm, comp_type);
- if (! zm->decompressor) return NULL;
-
- if (! get_u16 (zr->fr, &time)) return NULL;
- if (! get_u16 (zr->fr, &date)) return NULL;
- if (! get_u32 (zr->fr, &zm->expected_crc)) return NULL;
- if (! get_u32 (zr->fr, &zm->comp_size)) return NULL;
- if (! get_u32 (zr->fr, &zm->ucomp_size)) return NULL;
- if (! get_u16 (zr->fr, &nlen)) return NULL;
- if (! get_u16 (zr->fr, &extralen)) return NULL;
- if (! get_u16 (zr->fr, &clen)) return NULL;
- if (! get_u16 (zr->fr, &diskstart)) return NULL;
- if (! get_u16 (zr->fr, &iattr)) return NULL;
- if (! get_u32 (zr->fr, &eattr)) return NULL;
- if (! get_u32 (zr->fr, &zm->offset)) return NULL;
-
- zm->name = xzalloc (nlen + 1);
- if (! get_bytes (zr->fr, zm->name, nlen)) return NULL;
-
- skip_bytes (zr->fr, extralen);