]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Simplify deflate stream/state check.
authorNathan Moinvaziri <nathan@nathanm.com>
Mon, 29 May 2023 19:43:58 +0000 (12:43 -0700)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Sun, 6 Aug 2023 08:20:43 +0000 (10:20 +0200)
deflate.c
deflate.h

index 55abcf62176da2ec81b30f466a0d0570a3af041c..978a389b97530213e47c1fde4c07adb996a3d39a 100644 (file)
--- a/deflate.c
+++ b/deflate.c
@@ -340,21 +340,12 @@ int32_t Z_EXPORT PREFIX(deflateInit2_)(PREFIX3(stream) *strm, int32_t level, int
 /* =========================================================================
  * Check for a valid deflate stream state. Return 0 if ok, 1 if not.
  */
-static int deflateStateCheck (PREFIX3(stream) *strm) {
+static int deflateStateCheck(PREFIX3(stream) *strm) {
     deflate_state *s;
     if (strm == NULL || strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
         return 1;
     s = strm->state;
-    if (s == NULL || s->strm != strm || (s->status != INIT_STATE &&
-#ifdef GZIP
-                                           s->status != GZIP_STATE &&
-                                           s->status != EXTRA_STATE &&
-                                           s->status != NAME_STATE &&
-                                           s->status != COMMENT_STATE &&
-                                           s->status != HCRC_STATE &&
-#endif
-                                           s->status != BUSY_STATE &&
-                                           s->status != FINISH_STATE))
+    if (s == NULL || s->strm != strm || (s->status < INIT_STATE || s->status > MAX_STATE))
         return 1;
     return 0;
 }
index e4b971f88ab90e2d1180da528089e6205a07b229..8001b47c999d8fb6456081da50de6829fccca4da 100644 (file)
--- a/deflate.h
+++ b/deflate.h
 #define END_BLOCK 256
 /* end of block literal code */
 
-#define INIT_STATE      42    /* zlib header -> BUSY_STATE */
+#define INIT_STATE      1    /* zlib header -> BUSY_STATE */
 #ifdef GZIP
-#  define GZIP_STATE    57    /* gzip header -> BUSY_STATE | EXTRA_STATE */
-#  define EXTRA_STATE   69    /* gzip extra block -> NAME_STATE */
-#  define NAME_STATE    73    /* gzip file name -> COMMENT_STATE */
-#  define COMMENT_STATE 91    /* gzip comment -> HCRC_STATE */
-#  define HCRC_STATE   103    /* gzip header CRC -> BUSY_STATE */
+#  define GZIP_STATE    4    /* gzip header -> BUSY_STATE | EXTRA_STATE */
+#  define EXTRA_STATE   5    /* gzip extra block -> NAME_STATE */
+#  define NAME_STATE    6    /* gzip file name -> COMMENT_STATE */
+#  define COMMENT_STATE 7    /* gzip comment -> HCRC_STATE */
+#  define HCRC_STATE    8    /* gzip header CRC -> BUSY_STATE */
+#endif
+#define BUSY_STATE      2    /* deflate -> FINISH_STATE */
+#define FINISH_STATE    3    /* stream complete */
+#ifdef GZIP
+#  define MAX_STATE     HCRC_STATE
+#else
+#  define MAX_STATE     FINISH_STATE
 #endif
-#define BUSY_STATE     113    /* deflate -> FINISH_STATE */
-#define FINISH_STATE   666    /* stream complete */
 /* Stream status */
 
 #define HASH_BITS    16u           /* log2(HASH_SIZE) */