#ifndef HB_ZLIB_HH #define HB_ZLIB_HH #include "hb-blob.hh" static inline bool hb_blob_is_gzip (const char *data, unsigned data_len) { return data_len >= 3 && (unsigned char) data[0] == 0x1Fu && (unsigned char) data[1] == 0x8Bu && (unsigned char) data[2] == 0x08u; } static inline bool hb_gzip_get_uncompressed_size (const char *data, unsigned data_len, uint32_t *size) { if (data_len < 4) return false; const unsigned char *trailer = (const unsigned char *) data + data_len - 4; if (size) *size = (uint32_t) trailer[0] | ((uint32_t) trailer[1] << 8) | ((uint32_t) trailer[2] << 16) | ((uint32_t) trailer[3] << 24); return true; } HB_INTERNAL hb_blob_t * hb_blob_decompress_gzip (hb_blob_t *blob, unsigned max_output_len); #endif /* HB_ZLIB_HH */