123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #include "tinf.h"
- #define FTEXT 1
- #define FHCRC 2
- #define FEXTRA 4
- #define FNAME 8
- #define FCOMMENT 16
- void tinf_skip_bytes(TINF_DATA *d, int num);
- uint16_t tinf_get_uint16(TINF_DATA *d);
- void tinf_skip_bytes(TINF_DATA *d, int num)
- {
- while (num--) uzlib_get_byte(d);
- }
- uint16_t tinf_get_uint16(TINF_DATA *d)
- {
- unsigned int v = uzlib_get_byte(d);
- v = (uzlib_get_byte(d) << 8) | v;
- return v;
- }
- int uzlib_gzip_parse_header(TINF_DATA *d)
- {
- unsigned char flg;
-
-
- if (uzlib_get_byte(d) != 0x1f || uzlib_get_byte(d) != 0x8b) return TINF_DATA_ERROR;
-
- if (uzlib_get_byte(d) != 8) return TINF_DATA_ERROR;
-
- flg = uzlib_get_byte(d);
-
- if (flg & 0xe0) return TINF_DATA_ERROR;
-
-
- tinf_skip_bytes(d, 6);
-
- if (flg & FEXTRA)
- {
- unsigned int xlen = tinf_get_uint16(d);
- tinf_skip_bytes(d, xlen);
- }
-
- if (flg & FNAME) { while (uzlib_get_byte(d)); }
-
- if (flg & FCOMMENT) { while (uzlib_get_byte(d)); }
-
- if (flg & FHCRC)
- {
- tinf_get_uint16(d);
-
- }
-
- d->checksum_type = TINF_CHKSUM_CRC;
- d->checksum = ~0;
- return TINF_OK;
- }
|