static int szddd_read_headers(struct mspack_system *sys, struct mspack_file *fh, struct msszddd_header *hdr) { unsigned char buf[8]; /* read and check signature */ if (sys->read(fh, buf, 8) != 8) return MSPACK_ERR_READ; if ((mspack_memcmp(buf, szdd_signature_expand, 8) == 0)) { /* common SZDD */ hdr->format = MSSZDD_FMT_NORMAL; /* read the rest of the header */ if (sys->read(fh, buf, 6) != 6) return MSPACK_ERR_READ; if (buf[0] != 0x41) return MSPACK_ERR_DATAFORMAT; hdr->missing_char = buf[1]; hdr->length = EndGetI32(&buf[2]); } else if ((mspack_memcmp(buf, szdd_signature_qbasic, 8) == 0)) { /* special QBasic SZDD */ hdr->format = MSSZDD_FMT_QBASIC; if (sys->read(fh, buf, 4) != 4) return MSPACK_ERR_READ; hdr->missing_char = '\0'; hdr->length = EndGetI32(buf); } else { return MSPACK_ERR_SIGNATURE; } return MSPACK_ERR_OK; }
static int szddd_read_headers(struct mspack_system *sys, struct mspack_file *fh, struct msszddd_header *szdd) { unsigned char buf[szddhead_SIZEOF]; szdd->length = 0; szdd->missing_char = '\0'; /* read header */ if (sys->read(fh, &buf[0], szddhead_SIZEOF) != szddhead_SIZEOF) { return MSPACK_ERR_READ; } /* check signature */ if ((mspack_memcmp(&buf[szddhead_Signature], &szdd_signature[0], 8) != 0)) { return MSPACK_ERR_SIGNATURE; } /* check compression method */ if (buf[szddhead_CompType] != SZDD_COMPTYPE_A) { return MSPACK_ERR_DATAFORMAT; } /* read missing character from filename */ szdd->missing_char = buf[szddhead_FileChar]; /* read decompressed length of file */ szdd->length = EndGetI32(&buf[szddhead_FileLength]); return MSPACK_ERR_OK; }