From 5c36219d404da75b66d092e60f691acb3fee43c1 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 18 Dec 1997 11:18:32 +0000 Subject: [PATCH] following a report of problems with Linux/alpha I've changed zlib.c to use uint32 instead of "long" in several places. Apparently this fixes things on the alpha. The strange thing is that my own tests on a OSF/alpha box and a 64 bit IRIX box showed no problems. I wonder what was actually going wrong? I'll email the zlib maintainers and let them know. --- lib/zlib.c | 14 +++++++------- lib/zlib.h | 3 ++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/zlib.c b/lib/zlib.c index 9d732bb7..a4cf064e 100644 --- a/lib/zlib.c +++ b/lib/zlib.c @@ -252,7 +252,7 @@ typedef struct deflate_state { * hash_shift * MIN_MATCH >= hash_bits */ - long block_start; + Long block_start; /* Window position at the beginning of the current output block. Gets * negative when the window is moved backwards. */ @@ -1122,7 +1122,7 @@ local void fill_window(s) s->match_start -= wsize; s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ - s->block_start -= (long) wsize; + s->block_start -= (Long) wsize; /* Slide the hash table (could be avoided with 32 bit values at the expense of memory usage): @@ -1187,7 +1187,7 @@ local void fill_window(s) #define FLUSH_BLOCK_ONLY(s, flush) { \ ct_flush_block(s, (s->block_start >= 0L ? \ (charf *)&s->window[(unsigned)s->block_start] : \ - (charf *)Z_NULL), (long)s->strstart - s->block_start, (flush)); \ + (charf *)Z_NULL), (Long)s->strstart - s->block_start, (flush)); \ s->block_start = s->strstart; \ flush_pending(s->strm); \ Tracev((stderr,"[FLUSH]")); \ @@ -1907,8 +1907,8 @@ local void gen_bitlen(s, desc) if (m > max_code) continue; if (tree[m].Len != (unsigned) bits) { Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - s->opt_len += ((long)bits - (long)tree[m].Len) - *(long)tree[m].Freq; + s->opt_len += ((Long)bits - (Long)tree[m].Len) + *(Long)tree[m].Freq; tree[m].Len = (ush)bits; } n--; @@ -4578,8 +4578,8 @@ uLong adler32(adler, buf, len) Bytef *buf; uInt len; { - unsigned long s1 = adler & 0xffff; - unsigned long s2 = (adler >> 16) & 0xffff; + uLong s1 = adler & 0xffff; + uLong s2 = (adler >> 16) & 0xffff; int k; if (buf == Z_NULL) return 1L; diff --git a/lib/zlib.h b/lib/zlib.h index e3413d6a..6ff2ae53 100644 --- a/lib/zlib.h +++ b/lib/zlib.h @@ -112,7 +112,8 @@ typedef unsigned char Byte; /* 8 bits */ typedef unsigned int uInt; /* 16 bits or more */ -typedef unsigned long uLong; /* 32 bits or more */ +typedef int32 Long; /* 32 bits or more */ +typedef uint32 uLong; /* 32 bits or more */ typedef Byte FAR Bytef; typedef char FAR charf; -- 2.34.1