1 // SPDX-License-Identifier: Zlib
2 #ifndef DFLTCC_INFLATE_H
3 #define DFLTCC_INFLATE_H
4 
5 #include "dfltcc.h"
6 
7 /* External functions */
8 void dfltcc_reset_inflate_state(z_streamp strm);
9 int dfltcc_can_inflate(z_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 dfltcc_inflate(z_streamp strm,
16                                      int flush, int *ret);
17 #define INFLATE_RESET_HOOK(strm) \
18     dfltcc_reset_inflate_state((strm))
19 
20 #define INFLATE_TYPEDO_HOOK(strm, flush) \
21     if (dfltcc_can_inflate((strm))) { \
22         dfltcc_inflate_action action; \
23 \
24         RESTORE(); \
25         action = dfltcc_inflate((strm), (flush), &ret); \
26         LOAD(); \
27         if (action == DFLTCC_INFLATE_CONTINUE) \
28             break; \
29         else if (action == DFLTCC_INFLATE_BREAK) \
30             goto inf_leave; \
31     }
32 
33 #define INFLATE_NEED_CHECKSUM(strm) (!dfltcc_can_inflate((strm)))
34 
35 #define INFLATE_NEED_UPDATEWINDOW(strm) (!dfltcc_can_inflate((strm)))
36 
37 #endif /* DFLTCC_DEFLATE_H */
38