-static bool
-zip_header_read_next (FILE *file, struct zip_entry *ze, struct string *errs)
-{
- uint16_t v, nlen, extralen;
- uint16_t gp, time, date;
- uint32_t expected_crc;
-
- uint16_t clen, diskstart, iattr;
- uint32_t eattr;
- uint16_t comp_type;
-
- if ( ! check_magic (file, MAGIC_SOCD, errs))
- return false;
-
- if (! get_u16 (file, &v)) return false;
- if (! get_u16 (file, &v)) return false;
- if (! get_u16 (file, &gp)) return false;
- if (! get_u16 (file, &comp_type)) return false;
- if (! get_u16 (file, &time)) return false;
- if (! get_u16 (file, &date)) return false;
- if (! get_u32 (file, &expected_crc)) return false;
- if (! get_u32 (file, &ze->comp_size)) return false;
- if (! get_u32 (file, &ze->ucomp_size)) return false;
- if (! get_u16 (file, &nlen)) return false;
- if (! get_u16 (file, &extralen)) return false;
- if (! get_u16 (file, &clen)) return false;
- if (! get_u16 (file, &diskstart)) return false;
- if (! get_u16 (file, &iattr)) return false;
- if (! get_u32 (file, &eattr)) return false;
- if (! get_u32 (file, &ze->offset)) return false;
+static char * WARN_UNUSED_RESULT
+zip_header_read_next (FILE *file, const char *file_name,
+ struct zip_entry *ze)
+{
+ char *error = check_magic (file, file_name, MAGIC_SOCD);
+ if (error)
+ return error;
+
+ get_u16 (file); /* v */
+ get_u16 (file); /* v */
+ get_u16 (file); /* gp */
+ get_u16 (file); /* comp_type */
+ get_u16 (file); /* time */
+ get_u16 (file); /* date */
+ get_u32 (file); /* expected_crc */
+ ze->comp_size = get_u32 (file);
+ ze->ucomp_size = get_u32 (file);
+ uint16_t nlen = get_u16 (file);
+ uint16_t extralen = get_u16 (file);
+ get_u16 (file); /* clen */
+ get_u16 (file); /* diskstart */
+ get_u16 (file); /* iattr */
+ get_u32 (file); /* eattr */
+ ze->offset = get_u32 (file);
+
+ error = get_stream_error (file, file_name);
+ if (error)
+ return error;