summaryrefslogtreecommitdiff
path: root/deflate.h
diff options
context:
space:
mode:
authoralk3pInjection <webmaster@raspii.tech>2023-04-20 00:08:54 +0800
committeralk3pInjection <webmaster@raspii.tech>2023-04-20 00:08:54 +0800
commit004b98220a30de0d1956a8149d8bc6ec356667da (patch)
tree1eaee2603984d7ab4524be68b57ce0a2b2b72118 /deflate.h
parent2ca0d0b38b60e8d6d49a8959bf674a79e7d16f41 (diff)
parenta583e215afa2356e23b418efa871a1cc4348702a (diff)
Merge tag '2.0.7' into tachibanatachibana-mr1tachibana
Change-Id: I7b03d60d67d184c21ff7437a35062077666951e9
Diffstat (limited to 'deflate.h')
-rw-r--r--deflate.h78
1 files changed, 29 insertions, 49 deletions
diff --git a/deflate.h b/deflate.h
index 1a1f4d1..3ae6c1b 100644
--- a/deflate.h
+++ b/deflate.h
@@ -52,16 +52,16 @@
#define END_BLOCK 256
/* end of block literal code */
-#define INIT_STATE 42 /* zlib header -> BUSY_STATE */
+#define INIT_STATE 42 /* zlib header -> BUSY_STATE */
#ifdef GZIP
-# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */
+# 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 */
#endif
-#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 BUSY_STATE 113 /* deflate -> FINISH_STATE */
-#define FINISH_STATE 666 /* stream complete */
+#define BUSY_STATE 113 /* deflate -> FINISH_STATE */
+#define FINISH_STATE 666 /* stream complete */
/* Stream status */
#define HASH_BITS 16u /* log2(HASH_SIZE) */
@@ -290,13 +290,11 @@ typedef enum {
* IN assertion: there is enough room in pending_buf.
*/
static inline void put_short(deflate_state *s, uint16_t w) {
-#if defined(UNALIGNED_OK)
- *(uint16_t *)(&s->pending_buf[s->pending]) = w;
- s->pending += 2;
-#else
- put_byte(s, (w & 0xff));
- put_byte(s, ((w >> 8) & 0xff));
+#if BYTE_ORDER == BIG_ENDIAN
+ w = ZSWAP16(w);
#endif
+ memcpy(&s->pending_buf[s->pending], &w, sizeof(w));
+ s->pending += 2;
}
/* ===========================================================================
@@ -304,8 +302,11 @@ static inline void put_short(deflate_state *s, uint16_t w) {
* IN assertion: there is enough room in pending_buf.
*/
static inline void put_short_msb(deflate_state *s, uint16_t w) {
- put_byte(s, ((w >> 8) & 0xff));
- put_byte(s, (w & 0xff));
+#if BYTE_ORDER == LITTLE_ENDIAN
+ w = ZSWAP16(w);
+#endif
+ memcpy(&s->pending_buf[s->pending], &w, sizeof(w));
+ s->pending += 2;
}
/* ===========================================================================
@@ -313,15 +314,11 @@ static inline void put_short_msb(deflate_state *s, uint16_t w) {
* IN assertion: there is enough room in pending_buf.
*/
static inline void put_uint32(deflate_state *s, uint32_t dw) {
-#if defined(UNALIGNED_OK)
- *(uint32_t *)(&s->pending_buf[s->pending]) = dw;
- s->pending += 4;
-#else
- put_byte(s, (dw & 0xff));
- put_byte(s, ((dw >> 8) & 0xff));
- put_byte(s, ((dw >> 16) & 0xff));
- put_byte(s, ((dw >> 24) & 0xff));
+#if BYTE_ORDER == BIG_ENDIAN
+ dw = ZSWAP32(dw);
#endif
+ memcpy(&s->pending_buf[s->pending], &dw, sizeof(dw));
+ s->pending += 4;
}
/* ===========================================================================
@@ -329,15 +326,11 @@ static inline void put_uint32(deflate_state *s, uint32_t dw) {
* IN assertion: there is enough room in pending_buf.
*/
static inline void put_uint32_msb(deflate_state *s, uint32_t dw) {
-#if defined(UNALIGNED_OK)
- *(uint32_t *)(&s->pending_buf[s->pending]) = ZSWAP32(dw);
- s->pending += 4;
-#else
- put_byte(s, ((dw >> 24) & 0xff));
- put_byte(s, ((dw >> 16) & 0xff));
- put_byte(s, ((dw >> 8) & 0xff));
- put_byte(s, (dw & 0xff));
+#if BYTE_ORDER == LITTLE_ENDIAN
+ dw = ZSWAP32(dw);
#endif
+ memcpy(&s->pending_buf[s->pending], &dw, sizeof(dw));
+ s->pending += 4;
}
/* ===========================================================================
@@ -345,24 +338,11 @@ static inline void put_uint32_msb(deflate_state *s, uint32_t dw) {
* IN assertion: there is enough room in pending_buf.
*/
static inline void put_uint64(deflate_state *s, uint64_t lld) {
-#if defined(UNALIGNED64_OK)
- *(uint64_t *)(&s->pending_buf[s->pending]) = lld;
- s->pending += 8;
-#elif defined(UNALIGNED_OK)
- *(uint32_t *)(&s->pending_buf[s->pending]) = lld & 0xffffffff;
- s->pending += 4;
- *(uint32_t *)(&s->pending_buf[s->pending]) = (lld >> 32) & 0xffffffff;
- s->pending += 4;
-#else
- put_byte(s, (lld & 0xff));
- put_byte(s, ((lld >> 8) & 0xff));
- put_byte(s, ((lld >> 16) & 0xff));
- put_byte(s, ((lld >> 24) & 0xff));
- put_byte(s, ((lld >> 32) & 0xff));
- put_byte(s, ((lld >> 40) & 0xff));
- put_byte(s, ((lld >> 48) & 0xff));
- put_byte(s, ((lld >> 56) & 0xff));
+#if BYTE_ORDER == BIG_ENDIAN
+ lld = ZSWAP64(lld);
#endif
+ memcpy(&s->pending_buf[s->pending], &lld, sizeof(lld));
+ s->pending += 8;
}
#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)