1 #ifndef DFLTCC_INFLATE_H 2 #define DFLTCC_INFLATE_H 3 4 #include "dfltcc_common.h" 5 6 struct inflate_state Z_INTERNAL *PREFIX(dfltcc_alloc_inflate_state)(PREFIX3(streamp) strm); 7 void Z_INTERNAL PREFIX(dfltcc_reset_inflate_state)(PREFIX3(streamp) strm); 8 void Z_INTERNAL PREFIX(dfltcc_copy_inflate_state)(struct inflate_state *dst, const struct inflate_state *src); 9 int Z_INTERNAL PREFIX(dfltcc_can_inflate)(PREFIX3(streamp) strm); 10 typedef enum { 11 DFLTCC_INFLATE_CONTINUE, 12 DFLTCC_INFLATE_BREAK, 13 DFLTCC_INFLATE_SOFTWARE, 14 } dfltcc_inflate_action; 15 dfltcc_inflate_action Z_INTERNAL PREFIX(dfltcc_inflate)(PREFIX3(streamp) strm, int flush, int *ret); 16 int Z_INTERNAL PREFIX(dfltcc_was_inflate_used)(PREFIX3(streamp) strm); 17 int Z_INTERNAL PREFIX(dfltcc_inflate_disable)(PREFIX3(streamp) strm); 18 19 #define ZALLOC_INFLATE_STATE PREFIX(dfltcc_alloc_inflate_state) 20 #define ZCOPY_INFLATE_STATE PREFIX(dfltcc_copy_inflate_state) 21 22 #define INFLATE_RESET_KEEP_HOOK PREFIX(dfltcc_reset_inflate_state) 23 24 #define INFLATE_PRIME_HOOK(strm, bits, value) \ 25 do { if (PREFIX(dfltcc_inflate_disable)((strm))) return Z_STREAM_ERROR; } while (0) 26 27 #define INFLATE_TYPEDO_HOOK(strm, flush) \ 28 if (PREFIX(dfltcc_can_inflate)((strm))) { \ 29 dfltcc_inflate_action action; \ 30 \ 31 RESTORE(); \ 32 action = PREFIX(dfltcc_inflate)((strm), (flush), &ret); \ 33 LOAD(); \ 34 if (action == DFLTCC_INFLATE_CONTINUE) \ 35 break; \ 36 else if (action == DFLTCC_INFLATE_BREAK) \ 37 goto inf_leave; \ 38 } 39 40 #define INFLATE_NEED_CHECKSUM(strm) (!PREFIX(dfltcc_can_inflate)((strm))) 41 42 #define INFLATE_NEED_UPDATEWINDOW(strm) (!PREFIX(dfltcc_can_inflate)((strm))) 43 44 #define INFLATE_MARK_HOOK(strm) \ 45 do { \ 46 if (PREFIX(dfltcc_was_inflate_used)((strm))) return -(1L << 16); \ 47 } while (0) 48 49 #define INFLATE_SYNC_POINT_HOOK(strm) \ 50 do { \ 51 if (PREFIX(dfltcc_was_inflate_used)((strm))) return Z_STREAM_ERROR; \ 52 } while (0) 53 54 #endif 55