Commit e7d163f7666560c90b163907b9d96ec6207e0f6f

Authored by Chris Zankel
Committed by Linus Torvalds
1 parent 82300bf479

[PATCH] xtensa: Removed local copy of zlib and fixed O= support

Removed an unnecessary local copy of zlib (sorry for the add'l traffic).
Fixed 'O=' support (thanks to Jan Dittmer for pointing it out).  Some minor
clean-ups in the make files.

Signed-off-by: Chris Zankel <chris@zankel.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Showing 9 changed files with 53 additions and 2671 deletions Side-by-side Diff

arch/xtensa/Makefile
... ... @@ -21,24 +21,18 @@
21 21  
22 22 # Platform configuration
23 23  
24   -platform-y := common
25 24 platform-$(CONFIG_XTENSA_PLATFORM_XT2000) := xt2000
26 25 platform-$(CONFIG_XTENSA_PLATFORM_ISS) := iss
27 26  
28 27 PLATFORM = $(platform-y)
29 28 export PLATFORM
30 29  
31   -#LDFLAGS_vmlinux := -T$(word 1,$(LINKSCRIPT))
32   -AFLAGS_vmlinux.lds.o := -Uxtensa
33   -CPPFLAGS += -Iarch/xtensa -Iinclude/asm -mlongcalls -g
34   -AFLAGS += -Iarch/xtensa -Iinclude/asm
35   -CPP = $(CC) -E $(CFLAGS)
  30 +CPPFLAGS += $(if $(KBUILD_SRC),-I$(srctree)/include/asm-xtensa/)
  31 +CPPFLAGS += -Iinclude/asm
  32 +CFLAGS += -pipe -mlongcalls
36 33  
37   -cflags-y += -Iarch/xtensa -pipe -mlongcalls
  34 +KBUILD_DEFCONFIG := iss_defconfig
38 35  
39   -
40   -KBUILD_DEFCONFIG := common_defconfig
41   -
42 36 # ramdisk/initrd support
43 37 # You need a compressed ramdisk image, named ramdisk.gz in
44 38 # arch/xtensa/boot/ramdisk
45 39  
46 40  
47 41  
48 42  
49 43  
50 44  
... ... @@ -62,31 +56,37 @@
62 56 LIBGCC := $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
63 57  
64 58 head-y := arch/xtensa/kernel/head.o
65   -core-y += arch/xtensa/kernel/ \
66   - arch/xtensa/mm/ arch/xtensa/platform-$(PLATFORM)/
  59 +core-y += arch/xtensa/kernel/ arch/xtensa/mm/
  60 +ifneq ($(PLATFORM),)
  61 +core-y += arch/xtensa/platform-$(PLATFORM)/
  62 +endif
67 63 libs-y += arch/xtensa/lib/ $(LIBGCC)
68 64  
69   -boot := arch/xtensa/boot
  65 +boot := arch/xtensa/boot
70 66  
  67 +archinc := include/asm-xtensa
  68 +
71 69 arch/xtensa/kernel/asm-offsets.s: \
72   - arch/xtensa/kernel/asm-offsets.c \
73   - include/asm-xtensa/.platform
  70 + arch/xtensa/kernel/asm-offsets.c $(archinc)/.platform
74 71  
75 72 include/asm-xtensa/offsets.h: arch/xtensa/kernel/asm-offsets.s
76 73 $(call filechk,gen-asm-offsets)
77 74  
78   -prepare: include/asm-xtensa/.platform include/asm-xtensa/offsets.h
  75 +prepare: $(archinc)/.platform $(archinc)/offsets.h
79 76  
80 77 # Update machine cpu and platform symlinks if something which affects
81 78 # them changed.
82 79  
83   -include/asm-xtensa/.platform: $(wildcard include/config/arch/*.h)
84   - @echo ' Setting up cpu ($(CPU)) and platform ($(PLATFORM)) symlinks'
85   - $(Q)rm -f include/asm-xtensa/platform
86   - $(Q)rm -f include/asm-xtensa/xtensa/config
87   - $(Q)(cd include/asm-xtensa/; ln -sf platform-$(PLATFORM) platform)
88   - $(Q)(cd include/asm-xtensa/xtensa; ln -sf config-$(CPU) config)
  80 +$(archinc)/.platform: $(wildcard include/config/arch/*.h) include/config/MARKER
  81 + @echo ' SYMLINK $(archinc)/xtensa/config -> $(archinc)/xtensa/config-$(CPU)'
  82 + $(Q)mkdir -p $(archinc)
  83 + $(Q)mkdir -p $(archinc)/xtensa
  84 + $(Q)ln -fsn $(srctree)/$(archinc)/xtensa/config-$(CPU) $(archinc)/xtensa/config
  85 + @echo ' SYMLINK $(archinc)/platform -> $(archinc)/platform-$(PLATFORM)'
  86 + $(Q)ln -fsn $(srctree)/$(archinc)/platform-$(PLATFORM) $(archinc)/platform
  87 + @touch $@
89 88  
  89 +
90 90 all: zImage
91 91  
92 92 bzImage : zImage
... ... @@ -94,7 +94,9 @@
94 94 zImage zImage.initrd: vmlinux
95 95 $(Q)$(MAKE) $(build)=$(boot) $@
96 96  
97   -CLEAN_FILES += arch/xtensa/vmlinux.lds include/asm-xtensa/offset.h
  97 +CLEAN_FILES += arch/xtensa/vmlinux.lds $(archinc)/offset.h \
  98 + $(archinc)/platform $(archinc)/xtensa/config \
  99 + $(archinc)/.platform
98 100  
99 101 define archhelp
100 102 @echo '* zImage - Compressed kernel image (arch/xtensa/boot/images/zImage.*)'
arch/xtensa/boot/Makefile
... ... @@ -11,21 +11,19 @@
11 11 CFLAGS += -fno-builtin -Iarch/$(ARCH)/boot/include
12 12 HOSTFLAGS += -Iarch/$(ARCH)/boot/include
13 13  
14   -BIG_ENDIAN := $(shell echo -e "\#ifdef __XTENSA_EL__\nint little;\n\#else\nint big;\n\#endif" | $(CC) -E -|grep -c big)
  14 +BIG_ENDIAN := $(shell echo -e __XTENSA_EB__ | $(CC) -E - | grep -v "\#")
15 15  
16   -
17 16 export CFLAGS
18 17 export AFLAGS
19 18 export BIG_ENDIAN
20 19  
  20 +subdir-y := lib
  21 +
21 22 # Subdirs for the boot loader(s)
22 23  
23 24 bootdir-$(CONFIG_XTENSA_PLATFORM_ISS) += boot-elf
24 25 bootdir-$(CONFIG_XTENSA_PLATFORM_XT2000) += boot-redboot boot-elf
25 26  
26   -subdir-y := lib/
27   -
28   -subdir-y += boot-elf/ boot-redboot/
29 27  
30 28 zImage zImage.initrd Image Image.initrd: $(bootdir-y)
31 29  
arch/xtensa/boot/boot-elf/Makefile
... ... @@ -27,7 +27,7 @@
27 27 --set-section-flags image=contents,alloc,load,load,data \
28 28 $(OBJS) $@.tmp
29 29 $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) \
30   - -T arch/$(ARCH)/boot/boot-elf/boot.ld \
  30 + -T $(srctree)/arch/$(ARCH)/boot/boot-elf/boot.ld \
31 31 -o arch/$(ARCH)/boot/$@.elf $@.tmp
32 32 rm -f $@.tmp vmlinux.tmp
33 33  
... ... @@ -41,7 +41,7 @@
41 41 --set-section-flags image=contents,alloc,load,load,data \
42 42 $(OBJS) $@.tmp
43 43 $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) \
44   - -T arch/$(ARCH)/boot/boot-elf/boot.ld \
  44 + -T $(srctree)/arch/$(ARCH)/boot/boot-elf/boot.ld \
45 45 -o arch/$(ARCH)/boot/$@.elf $@.tmp
46 46 rm -f $@.tmp vmlinux.tmp
47 47  
arch/xtensa/boot/boot-redboot/Makefile
... ... @@ -12,24 +12,24 @@
12 12 OBJCOPY_ARGS := -O elf32-xtensa-le
13 13 endif
14 14  
15   -LD_ARGS = -T $(obj)/boot.ld
  15 +LD_ARGS = -T $(srctree)/$(obj)/boot.ld
16 16  
17 17 boot-y := bootstrap.o
18 18  
19 19 OBJS := $(addprefix $(obj)/,$(boot-y))
20   -LIBS := arch/$(ARCH)/boot/lib/lib.a arch/$(ARCH)/lib/lib.a
  20 +LIBS := arch/xtensa/boot/lib/lib.a arch/xtensa/lib/lib.a
21 21  
22 22 LIBGCC := $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
23 23  
24 24 zImage: vmlinux $(OBJS) $(LIBS)
25 25 $(OBJCOPY) --strip-all -R .comment -R .xt.insn -O binary \
26   - $(TOPDIR)/vmlinux vmlinux.tmp
  26 + vmlinux vmlinux.tmp
27 27 gzip -vf9 vmlinux.tmp
28 28 $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
29 29 --add-section image=vmlinux.tmp.gz \
30 30 --set-section-flags image=contents,alloc,load,load,data \
31 31 $(OBJS) $@.tmp
32 32 $(LD) $(LD_ARGS) -o $@.elf $@.tmp $(LIBS) -L/xtensa-elf/lib $(LIBGCC)
33   - $(OBJCOPY) -S -O binary $@.elf arch/$(ARCH)/boot/images/$@.redboot
34   -# rm -f $@.tmp $@.elf vmlinux.tmp.gz
  33 + $(OBJCOPY) -S -O binary $@.elf arch/$(ARCH)/boot/$@.redboot
  34 + rm -f $@.tmp $@.elf vmlinux.tmp.gz
arch/xtensa/boot/include/zlib.h
1   -/*
2   - * BK Id: SCCS/s.zlib.h 1.8 05/18/01 15:17:23 cort
3   - */
4   -/*
5   - * This file is derived from zlib.h and zconf.h from the zlib-0.95
6   - * distribution by Jean-loup Gailly and Mark Adler, with some additions
7   - * by Paul Mackerras to aid in implementing Deflate compression and
8   - * decompression for PPP packets.
9   - */
10   -
11   -/*
12   - * ==FILEVERSION 960122==
13   - *
14   - * This marker is used by the Linux installation script to determine
15   - * whether an up-to-date version of this file is already installed.
16   - */
17   -
18   -/* zlib.h -- interface of the 'zlib' general purpose compression library
19   - version 0.95, Aug 16th, 1995.
20   -
21   - Copyright (C) 1995 Jean-loup Gailly and Mark Adler
22   -
23   - This software is provided 'as-is', without any express or implied
24   - warranty. In no event will the authors be held liable for any damages
25   - arising from the use of this software.
26   -
27   - Permission is granted to anyone to use this software for any purpose,
28   - including commercial applications, and to alter it and redistribute it
29   - freely, subject to the following restrictions:
30   -
31   - 1. The origin of this software must not be misrepresented; you must not
32   - claim that you wrote the original software. If you use this software
33   - in a product, an acknowledgment in the product documentation would be
34   - appreciated but is not required.
35   - 2. Altered source versions must be plainly marked as such, and must not be
36   - misrepresented as being the original software.
37   - 3. This notice may not be removed or altered from any source distribution.
38   -
39   - Jean-loup Gailly Mark Adler
40   - gzip@prep.ai.mit.edu madler@alumni.caltech.edu
41   - */
42   -
43   -#ifndef _ZLIB_H
44   -#define _ZLIB_H
45   -
46   -/* #include "zconf.h" */ /* included directly here */
47   -
48   -/* zconf.h -- configuration of the zlib compression library
49   - * Copyright (C) 1995 Jean-loup Gailly.
50   - * For conditions of distribution and use, see copyright notice in zlib.h
51   - */
52   -
53   -/* From: zconf.h,v 1.12 1995/05/03 17:27:12 jloup Exp */
54   -
55   -/*
56   - The library does not install any signal handler. It is recommended to
57   - add at least a handler for SIGSEGV when decompressing; the library checks
58   - the consistency of the input data whenever possible but may go nuts
59   - for some forms of corrupted input.
60   - */
61   -
62   -/*
63   - * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
64   - * than 64k bytes at a time (needed on systems with 16-bit int).
65   - * Compile with -DUNALIGNED_OK if it is OK to access shorts or ints
66   - * at addresses which are not a multiple of their size.
67   - * Under DOS, -DFAR=far or -DFAR=__far may be needed.
68   - */
69   -
70   -#ifndef STDC
71   -# if defined(MSDOS) || defined(__STDC__) || defined(__cplusplus)
72   -# define STDC
73   -# endif
74   -#endif
75   -
76   -#ifdef __MWERKS__ /* Metrowerks CodeWarrior declares fileno() in unix.h */
77   -# include <unix.h>
78   -#endif
79   -
80   -/* Maximum value for memLevel in deflateInit2 */
81   -#ifndef MAX_MEM_LEVEL
82   -# ifdef MAXSEG_64K
83   -# define MAX_MEM_LEVEL 8
84   -# else
85   -# define MAX_MEM_LEVEL 9
86   -# endif
87   -#endif
88   -
89   -#ifndef FAR
90   -# define FAR
91   -#endif
92   -
93   -/* Maximum value for windowBits in deflateInit2 and inflateInit2 */
94   -#ifndef MAX_WBITS
95   -# define MAX_WBITS 15 /* 32K LZ77 window */
96   -#endif
97   -
98   -/* The memory requirements for deflate are (in bytes):
99   - 1 << (windowBits+2) + 1 << (memLevel+9)
100   - that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
101   - plus a few kilobytes for small objects. For example, if you want to reduce
102   - the default memory requirements from 256K to 128K, compile with
103   - make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
104   - Of course this will generally degrade compression (there's no free lunch).
105   -
106   - The memory requirements for inflate are (in bytes) 1 << windowBits
107   - that is, 32K for windowBits=15 (default value) plus a few kilobytes
108   - for small objects.
109   -*/
110   -
111   - /* Type declarations */
112   -
113   -#ifndef OF /* function prototypes */
114   -# ifdef STDC
115   -# define OF(args) args
116   -# else
117   -# define OF(args) ()
118   -# endif
119   -#endif
120   -
121   -typedef unsigned char Byte; /* 8 bits */
122   -typedef unsigned int uInt; /* 16 bits or more */
123   -typedef unsigned long uLong; /* 32 bits or more */
124   -
125   -typedef Byte FAR Bytef;
126   -typedef char FAR charf;
127   -typedef int FAR intf;
128   -typedef uInt FAR uIntf;
129   -typedef uLong FAR uLongf;
130   -
131   -#ifdef STDC
132   - typedef void FAR *voidpf;
133   - typedef void *voidp;
134   -#else
135   - typedef Byte FAR *voidpf;
136   - typedef Byte *voidp;
137   -#endif
138   -
139   -/* end of original zconf.h */
140   -
141   -#define ZLIB_VERSION "0.95P"
142   -
143   -/*
144   - The 'zlib' compression library provides in-memory compression and
145   - decompression functions, including integrity checks of the uncompressed
146   - data. This version of the library supports only one compression method
147   - (deflation) but other algorithms may be added later and will have the same
148   - stream interface.
149   -
150   - For compression the application must provide the output buffer and
151   - may optionally provide the input buffer for optimization. For decompression,
152   - the application must provide the input buffer and may optionally provide
153   - the output buffer for optimization.
154   -
155   - Compression can be done in a single step if the buffers are large
156   - enough (for example if an input file is mmap'ed), or can be done by
157   - repeated calls of the compression function. In the latter case, the
158   - application must provide more input and/or consume the output
159   - (providing more output space) before each call.
160   -*/
161   -
162   -typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
163   -typedef void (*free_func) OF((voidpf opaque, voidpf address, uInt nbytes));
164   -
165   -struct internal_state;
166   -
167   -typedef struct z_stream_s {
168   - Bytef *next_in; /* next input byte */
169   - uInt avail_in; /* number of bytes available at next_in */
170   - uLong total_in; /* total nb of input bytes read so far */
171   -
172   - Bytef *next_out; /* next output byte should be put there */
173   - uInt avail_out; /* remaining free space at next_out */
174   - uLong total_out; /* total nb of bytes output so far */
175   -
176   - char *msg; /* last error message, NULL if no error */
177   - struct internal_state FAR *state; /* not visible by applications */
178   -
179   - alloc_func zalloc; /* used to allocate the internal state */
180   - free_func zfree; /* used to free the internal state */
181   - voidp opaque; /* private data object passed to zalloc and zfree */
182   -
183   - Byte data_type; /* best guess about the data type: ascii or binary */
184   -
185   -} z_stream;
186   -
187   -/*
188   - The application must update next_in and avail_in when avail_in has
189   - dropped to zero. It must update next_out and avail_out when avail_out
190   - has dropped to zero. The application must initialize zalloc, zfree and
191   - opaque before calling the init function. All other fields are set by the
192   - compression library and must not be updated by the application.
193   -
194   - The opaque value provided by the application will be passed as the first
195   - parameter for calls of zalloc and zfree. This can be useful for custom
196   - memory management. The compression library attaches no meaning to the
197   - opaque value.
198   -
199   - zalloc must return Z_NULL if there is not enough memory for the object.
200   - On 16-bit systems, the functions zalloc and zfree must be able to allocate
201   - exactly 65536 bytes, but will not be required to allocate more than this
202   - if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
203   - pointers returned by zalloc for objects of exactly 65536 bytes *must*
204   - have their offset normalized to zero. The default allocation function
205   - provided by this library ensures this (see zutil.c). To reduce memory
206   - requirements and avoid any allocation of 64K objects, at the expense of
207   - compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
208   -
209   - The fields total_in and total_out can be used for statistics or
210   - progress reports. After compression, total_in holds the total size of
211   - the uncompressed data and may be saved for use in the decompressor
212   - (particularly if the decompressor wants to decompress everything in
213   - a single step).
214   -*/
215   -
216   - /* constants */
217   -
218   -#define Z_NO_FLUSH 0
219   -#define Z_PARTIAL_FLUSH 1
220   -#define Z_FULL_FLUSH 2
221   -#define Z_SYNC_FLUSH 3 /* experimental: partial_flush + byte align */
222   -#define Z_FINISH 4
223   -#define Z_PACKET_FLUSH 5
224   -/* See deflate() below for the usage of these constants */
225   -
226   -#define Z_OK 0
227   -#define Z_STREAM_END 1
228   -#define Z_ERRNO (-1)
229   -#define Z_STREAM_ERROR (-2)
230   -#define Z_DATA_ERROR (-3)
231   -#define Z_MEM_ERROR (-4)
232   -#define Z_BUF_ERROR (-5)
233   -/* error codes for the compression/decompression functions */
234   -
235   -#define Z_BEST_SPEED 1
236   -#define Z_BEST_COMPRESSION 9
237   -#define Z_DEFAULT_COMPRESSION (-1)
238   -/* compression levels */
239   -
240   -#define Z_FILTERED 1
241   -#define Z_HUFFMAN_ONLY 2
242   -#define Z_DEFAULT_STRATEGY 0
243   -
244   -#define Z_BINARY 0
245   -#define Z_ASCII 1
246   -#define Z_UNKNOWN 2
247   -/* Used to set the data_type field */
248   -
249   -#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */
250   -
251   -extern char *zlib_version;
252   -/* The application can compare zlib_version and ZLIB_VERSION for consistency.
253   - If the first character differs, the library code actually used is
254   - not compatible with the zlib.h header file used by the application.
255   - */
256   -
257   - /* basic functions */
258   -
259   -extern int inflateInit OF((z_stream *strm));
260   -/*
261   - Initializes the internal stream state for decompression. The fields
262   - zalloc and zfree must be initialized before by the caller. If zalloc and
263   - zfree are set to Z_NULL, inflateInit updates them to use default allocation
264   - functions.
265   -
266   - inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
267   - enough memory. msg is set to null if there is no error message.
268   - inflateInit does not perform any decompression: this will be done by
269   - inflate().
270   -*/
271   -
272   -
273   -extern int inflate OF((z_stream *strm, int flush));
274   -/*
275   - Performs one or both of the following actions:
276   -
277   - - Decompress more input starting at next_in and update next_in and avail_in
278   - accordingly. If not all input can be processed (because there is not
279   - enough room in the output buffer), next_in is updated and processing
280   - will resume at this point for the next call of inflate().
281   -
282   - - Provide more output starting at next_out and update next_out and avail_out
283   - accordingly. inflate() always provides as much output as possible
284   - (until there is no more input data or no more space in the output buffer).
285   -
286   - Before the call of inflate(), the application should ensure that at least
287   - one of the actions is possible, by providing more input and/or consuming
288   - more output, and updating the next_* and avail_* values accordingly.
289   - The application can consume the uncompressed output when it wants, for
290   - example when the output buffer is full (avail_out == 0), or after each
291   - call of inflate().
292   -
293   - If the parameter flush is set to Z_PARTIAL_FLUSH or Z_PACKET_FLUSH,
294   - inflate flushes as much output as possible to the output buffer. The
295   - flushing behavior of inflate is not specified for values of the flush
296   - parameter other than Z_PARTIAL_FLUSH, Z_PACKET_FLUSH or Z_FINISH, but the
297   - current implementation actually flushes as much output as possible
298   - anyway. For Z_PACKET_FLUSH, inflate checks that once all the input data
299   - has been consumed, it is expecting to see the length field of a stored
300   - block; if not, it returns Z_DATA_ERROR.
301   -
302   - inflate() should normally be called until it returns Z_STREAM_END or an
303   - error. However if all decompression is to be performed in a single step
304   - (a single call of inflate), the parameter flush should be set to
305   - Z_FINISH. In this case all pending input is processed and all pending
306   - output is flushed; avail_out must be large enough to hold all the
307   - uncompressed data. (The size of the uncompressed data may have been saved
308   - by the compressor for this purpose.) The next operation on this stream must
309   - be inflateEnd to deallocate the decompression state. The use of Z_FINISH
310   - is never required, but can be used to inform inflate that a faster routine
311   - may be used for the single inflate() call.
312   -
313   - inflate() returns Z_OK if some progress has been made (more input
314   - processed or more output produced), Z_STREAM_END if the end of the
315   - compressed data has been reached and all uncompressed output has been
316   - produced, Z_DATA_ERROR if the input data was corrupted, Z_STREAM_ERROR if
317   - the stream structure was inconsistent (for example if next_in or next_out
318   - was NULL), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if no
319   - progress is possible or if there was not enough room in the output buffer
320   - when Z_FINISH is used. In the Z_DATA_ERROR case, the application may then
321   - call inflateSync to look for a good compression block. */
322   -
323   -
324   -extern int inflateEnd OF((z_stream *strm));
325   -/*
326   - All dynamically allocated data structures for this stream are freed.
327   - This function discards any unprocessed input and does not flush any
328   - pending output.
329   -
330   - inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
331   - was inconsistent. In the error case, msg may be set but then points to a
332   - static string (which must not be deallocated).
333   -*/
334   -
335   - /* advanced functions */
336   -
337   -extern int inflateInit2 OF((z_stream *strm,
338   - int windowBits));
339   -/*
340   - This is another version of inflateInit with more compression options. The
341   - fields next_out, zalloc and zfree must be initialized before by the caller.
342   -
343   - The windowBits parameter is the base two logarithm of the maximum window
344   - size (the size of the history buffer). It should be in the range 8..15 for
345   - this version of the library (the value 16 will be allowed soon). The
346   - default value is 15 if inflateInit is used instead. If a compressed stream
347   - with a larger window size is given as input, inflate() will return with
348   - the error code Z_DATA_ERROR instead of trying to allocate a larger window.
349   -
350   - If next_out is not null, the library will use this buffer for the history
351   - buffer; the buffer must either be large enough to hold the entire output
352   - data, or have at least 1<<windowBits bytes. If next_out is null, the
353   - library will allocate its own buffer (and leave next_out null). next_in
354   - need not be provided here but must be provided by the application for the
355   - next call of inflate().
356   -
357   - If the history buffer is provided by the application, next_out must
358   - never be changed by the application since the decompressor maintains
359   - history information inside this buffer from call to call; the application
360   - can only reset next_out to the beginning of the history buffer when
361   - avail_out is zero and all output has been consumed.
362   -
363   - inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was
364   - not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as
365   - windowBits < 8). msg is set to null if there is no error message.
366   - inflateInit2 does not perform any decompression: this will be done by
367   - inflate().
368   -*/
369   -
370   -extern int inflateSync OF((z_stream *strm));
371   -/*
372   - Skips invalid compressed data until the special marker (see deflate()
373   - above) can be found, or until all available input is skipped. No output
374   - is provided.
375   -
376   - inflateSync returns Z_OK if the special marker has been found, Z_BUF_ERROR
377   - if no more input was provided, Z_DATA_ERROR if no marker has been found,
378   - or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
379   - case, the application may save the current current value of total_in which
380   - indicates where valid compressed data was found. In the error case, the
381   - application may repeatedly call inflateSync, providing more input each time,
382   - until success or end of the input data.
383   -*/
384   -
385   -extern int inflateReset OF((z_stream *strm));
386   -/*
387   - This function is equivalent to inflateEnd followed by inflateInit,
388   - but does not free and reallocate all the internal decompression state.
389   - The stream will keep attributes that may have been set by inflateInit2.
390   -
391   - inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
392   - stream state was inconsistent (such as zalloc or state being NULL).
393   -*/
394   -
395   -extern int inflateIncomp OF((z_stream *strm));
396   -/*
397   - This function adds the data at next_in (avail_in bytes) to the output
398   - history without performing any output. There must be no pending output,
399   - and the decompressor must be expecting to see the start of a block.
400   - Calling this function is equivalent to decompressing a stored block
401   - containing the data at next_in (except that the data is not output).
402   -*/
403   -
404   - /* checksum functions */
405   -
406   -/*
407   - This function is not related to compression but is exported
408   - anyway because it might be useful in applications using the
409   - compression library.
410   -*/
411   -
412   -extern uLong adler32 OF((uLong adler, Bytef *buf, uInt len));
413   -
414   -/*
415   - Update a running Adler-32 checksum with the bytes buf[0..len-1] and
416   - return the updated checksum. If buf is NULL, this function returns
417   - the required initial value for the checksum.
418   - An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
419   - much faster. Usage example:
420   -
421   - uLong adler = adler32(0L, Z_NULL, 0);
422   -
423   - while (read_buffer(buffer, length) != EOF) {
424   - adler = adler32(adler, buffer, length);
425   - }
426   - if (adler != original_adler) error();
427   -*/
428   -
429   -#ifndef _Z_UTIL_H
430   - struct internal_state {int dummy;}; /* hack for buggy compilers */
431   -#endif
432   -
433   -#endif /* _ZLIB_H */
arch/xtensa/boot/lib/Makefile
... ... @@ -2,6 +2,17 @@
2 2 # Makefile for some libs needed by zImage.
3 3 #
4 4  
  5 +zlib := infblock.c infcodes.c inffast.c inflate.c inftrees.c infutil.c
5 6  
6   -lib-y := zlib.o zmem.o
  7 +lib-y += $(zlib:.c=.o) zmem.o
  8 +
  9 +EXTRA_CFLAGS += -Ilib/zlib_inflate
  10 +
  11 +quiet_cmd_copy_zlib = COPY $@
  12 + cmd_copy_zlib = cat $< > $@
  13 +
  14 +$(addprefix $(obj)/,$(zlib)): $(obj)/%: $(srctree)/lib/zlib_inflate/%
  15 + $(call cmd,copy_zlib)
  16 +
  17 +clean-files := $(zlib)
arch/xtensa/boot/lib/memcpy.S
1   -/*
2   - * arch/xtensa/lib/memcpy.S
3   - *
4   - * ANSI C standard library function memcpy
5   - *
6   - * This file is subject to the terms and conditions of the GNU General
7   - * Public License. See the file "COPYING" in the main directory of
8   - * this archive for more details.
9   - *
10   - * Copyright (C) 2002 Tensilica Inc.
11   - */
12   -
13   -#define _ASMLANGUAGE
14   -#include <xtensa/config/core.h>
15   -
16   -.text
17   -.align 4
18   -.global bcopy
19   -.type bcopy,@function
20   -bcopy:
21   - movi a14, xthal_bcopy // a14 safe to use regardless of whether caller
22   - // used call4 or call8 (can't have used call12)
23   - jx a14 // let the Core HAL do the work
24   -
25   -.text
26   -.align 4
27   -.global memcpy
28   -.type memcpy,@function
29   -memcpy:
30   -.global memmove
31   -.type memmove,@function
32   -memmove:
33   - movi a14, xthal_memcpy // a14 safe to use regardless of whether caller
34   - // used call4 or call8 (can't have used call12)
35   - jx a14 // let the Core HAL do the work
arch/xtensa/boot/lib/zlib.c
Changes suppressed. Click to show
1   -/*
2   - * BK Id: SCCS/s.zlib.c 1.8 05/18/01 15:17:24 cort
3   - */
4   -/*
5   - * This file is derived from various .h and .c files from the zlib-0.95
6   - * distribution by Jean-loup Gailly and Mark Adler, with some additions
7   - * by Paul Mackerras to aid in implementing Deflate compression and
8   - * decompression for PPP packets. See zlib.h for conditions of
9   - * distribution and use.
10   - *
11   - * Changes that have been made include:
12   - * - changed functions not used outside this file to "local"
13   - * - added minCompression parameter to deflateInit2
14   - * - added Z_PACKET_FLUSH (see zlib.h for details)
15   - * - added inflateIncomp
16   - *
17   - */
18   -
19   -/*+++++*/
20   -/* zutil.h -- internal interface and configuration of the compression library
21   - * Copyright (C) 1995 Jean-loup Gailly.
22   - * For conditions of distribution and use, see copyright notice in zlib.h
23   - */
24   -
25   -/* WARNING: this file should *not* be used by applications. It is
26   - part of the implementation of the compression library and is
27   - subject to change. Applications should only use zlib.h.
28   - */
29   -
30   -/* From: zutil.h,v 1.9 1995/05/03 17:27:12 jloup Exp */
31   -
32   -#define _Z_UTIL_H
33   -
34   -#include "zlib.h"
35   -
36   -#ifndef local
37   -# define local static
38   -#endif
39   -/* compile with -Dlocal if your debugger can't find static symbols */
40   -
41   -#define FAR
42   -
43   -typedef unsigned char uch;
44   -typedef uch FAR uchf;
45   -typedef unsigned short ush;
46   -typedef ush FAR ushf;
47   -typedef unsigned long ulg;
48   -
49   -extern char *z_errmsg[]; /* indexed by 1-zlib_error */
50   -
51   -#define ERR_RETURN(strm,err) return (strm->msg=z_errmsg[1-err], err)
52   -/* To be used only when the state is known to be valid */
53   -
54   -#ifndef NULL
55   -#define NULL ((void *) 0)
56   -#endif
57   -
58   - /* common constants */
59   -
60   -#define DEFLATED 8
61   -
62   -#ifndef DEF_WBITS
63   -# define DEF_WBITS MAX_WBITS
64   -#endif
65   -/* default windowBits for decompression. MAX_WBITS is for compression only */
66   -
67   -#if MAX_MEM_LEVEL >= 8
68   -# define DEF_MEM_LEVEL 8
69   -#else
70   -# define DEF_MEM_LEVEL MAX_MEM_LEVEL
71   -#endif
72   -/* default memLevel */
73   -
74   -#define STORED_BLOCK 0
75   -#define STATIC_TREES 1
76   -#define DYN_TREES 2
77   -/* The three kinds of block type */
78   -
79   -#define MIN_MATCH 3
80   -#define MAX_MATCH 258
81   -/* The minimum and maximum match lengths */
82   -
83   - /* functions */
84   -
85   -#include <linux/string.h>
86   -#define zmemcpy memcpy
87   -#define zmemzero(dest, len) memset(dest, 0, len)
88   -
89   -/* Diagnostic functions */
90   -#ifdef DEBUG_ZLIB
91   -# include <stdio.h>
92   -# ifndef verbose
93   -# define verbose 0
94   -# endif
95   -# define Assert(cond,msg) {if(!(cond)) z_error(msg);}
96   -# define Trace(x) fprintf x
97   -# define Tracev(x) {if (verbose) fprintf x ;}
98   -# define Tracevv(x) {if (verbose>1) fprintf x ;}
99   -# define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
100   -# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
101   -#else
102   -# define Assert(cond,msg)
103   -# define Trace(x)
104   -# define Tracev(x)
105   -# define Tracevv(x)
106   -# define Tracec(c,x)
107   -# define Tracecv(c,x)
108   -#endif
109   -
110   -
111   -typedef uLong (*check_func) OF((uLong check, Bytef *buf, uInt len));
112   -
113   -/* voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); */
114   -/* void zcfree OF((voidpf opaque, voidpf ptr)); */
115   -
116   -#define ZALLOC(strm, items, size) \
117   - (*((strm)->zalloc))((strm)->opaque, (items), (size))
118   -#define ZFREE(strm, addr, size) \
119   - (*((strm)->zfree))((strm)->opaque, (voidpf)(addr), (size))
120   -#define TRY_FREE(s, p, n) {if (p) ZFREE(s, p, n);}
121   -
122   -/* deflate.h -- internal compression state
123   - * Copyright (C) 1995 Jean-loup Gailly
124   - * For conditions of distribution and use, see copyright notice in zlib.h
125   - */
126   -
127   -/* WARNING: this file should *not* be used by applications. It is
128   - part of the implementation of the compression library and is
129   - subject to change. Applications should only use zlib.h.
130   - */
131   -
132   -/*+++++*/
133   -/* infblock.h -- header to use infblock.c
134   - * Copyright (C) 1995 Mark Adler
135   - * For conditions of distribution and use, see copyright notice in zlib.h
136   - */
137   -
138   -/* WARNING: this file should *not* be used by applications. It is
139   - part of the implementation of the compression library and is
140   - subject to change. Applications should only use zlib.h.
141   - */
142   -
143   -struct inflate_blocks_state;
144   -typedef struct inflate_blocks_state FAR inflate_blocks_statef;
145   -
146   -local inflate_blocks_statef * inflate_blocks_new OF((
147   - z_stream *z,
148   - check_func c, /* check function */
149   - uInt w)); /* window size */
150   -
151   -local int inflate_blocks OF((
152   - inflate_blocks_statef *,
153   - z_stream *,
154   - int)); /* initial return code */
155   -
156   -local void inflate_blocks_reset OF((
157   - inflate_blocks_statef *,
158   - z_stream *,
159   - uLongf *)); /* check value on output */
160   -
161   -local int inflate_blocks_free OF((
162   - inflate_blocks_statef *,
163   - z_stream *,
164   - uLongf *)); /* check value on output */
165   -
166   -local int inflate_addhistory OF((
167   - inflate_blocks_statef *,
168   - z_stream *));
169   -
170   -local int inflate_packet_flush OF((
171   - inflate_blocks_statef *));
172   -
173   -/*+++++*/
174   -/* inftrees.h -- header to use inftrees.c
175   - * Copyright (C) 1995 Mark Adler
176   - * For conditions of distribution and use, see copyright notice in zlib.h
177   - */
178   -
179   -/* WARNING: this file should *not* be used by applications. It is
180   - part of the implementation of the compression library and is
181   - subject to change. Applications should only use zlib.h.
182   - */
183   -
184   -/* Huffman code lookup table entry--this entry is four bytes for machines
185   - that have 16-bit pointers (e.g. PC's in the small or medium model). */
186   -
187   -typedef struct inflate_huft_s FAR inflate_huft;
188   -
189   -struct inflate_huft_s {
190   - union {
191   - struct {
192   - Byte Exop; /* number of extra bits or operation */
193   - Byte Bits; /* number of bits in this code or subcode */
194   - } what;
195   - uInt Nalloc; /* number of these allocated here */
196   - Bytef *pad; /* pad structure to a power of 2 (4 bytes for */
197   - } word; /* 16-bit, 8 bytes for 32-bit machines) */
198   - union {
199   - uInt Base; /* literal, length base, or distance base */
200   - inflate_huft *Next; /* pointer to next level of table */
201   - } more;
202   -};
203   -
204   -#ifdef DEBUG_ZLIB
205   - local uInt inflate_hufts;
206   -#endif
207   -
208   -local int inflate_trees_bits OF((
209   - uIntf *, /* 19 code lengths */
210   - uIntf *, /* bits tree desired/actual depth */
211   - inflate_huft * FAR *, /* bits tree result */
212   - z_stream *)); /* for zalloc, zfree functions */
213   -
214   -local int inflate_trees_dynamic OF((
215   - uInt, /* number of literal/length codes */
216   - uInt, /* number of distance codes */
217   - uIntf *, /* that many (total) code lengths */
218   - uIntf *, /* literal desired/actual bit depth */
219   - uIntf *, /* distance desired/actual bit depth */
220   - inflate_huft * FAR *, /* literal/length tree result */
221   - inflate_huft * FAR *, /* distance tree result */
222   - z_stream *)); /* for zalloc, zfree functions */
223   -
224   -local int inflate_trees_fixed OF((
225   - uIntf *, /* literal desired/actual bit depth */
226   - uIntf *, /* distance desired/actual bit depth */
227   - inflate_huft * FAR *, /* literal/length tree result */
228   - inflate_huft * FAR *)); /* distance tree result */
229   -
230   -local int inflate_trees_free OF((
231   - inflate_huft *, /* tables to free */
232   - z_stream *)); /* for zfree function */
233   -
234   -
235   -/*+++++*/
236   -/* infcodes.h -- header to use infcodes.c
237   - * Copyright (C) 1995 Mark Adler
238   - * For conditions of distribution and use, see copyright notice in zlib.h
239   - */
240   -
241   -/* WARNING: this file should *not* be used by applications. It is
242   - part of the implementation of the compression library and is
243   - subject to change. Applications should only use zlib.h.
244   - */
245   -
246   -struct inflate_codes_state;
247   -typedef struct inflate_codes_state FAR inflate_codes_statef;
248   -
249   -local inflate_codes_statef *inflate_codes_new OF((
250   - uInt, uInt,
251   - inflate_huft *, inflate_huft *,
252   - z_stream *));
253   -
254   -local int inflate_codes OF((
255   - inflate_blocks_statef *,
256   - z_stream *,
257   - int));
258   -
259   -local void inflate_codes_free OF((
260   - inflate_codes_statef *,
261   - z_stream *));
262   -
263   -
264   -/*+++++*/
265   -/* inflate.c -- zlib interface to inflate modules
266   - * Copyright (C) 1995 Mark Adler
267   - * For conditions of distribution and use, see copyright notice in zlib.h
268   - */
269   -
270   -/* inflate private state */
271   -struct internal_state {
272   -
273   - /* mode */
274   - enum {
275   - METHOD, /* waiting for method byte */
276   - FLAG, /* waiting for flag byte */
277   - BLOCKS, /* decompressing blocks */
278   - CHECK4, /* four check bytes to go */
279   - CHECK3, /* three check bytes to go */
280   - CHECK2, /* two check bytes to go */
281   - CHECK1, /* one check byte to go */
282   - DONE, /* finished check, done */
283   - BAD} /* got an error--stay here */
284   - mode; /* current inflate mode */
285   -
286   - /* mode dependent information */
287   - union {
288   - uInt method; /* if FLAGS, method byte */
289   - struct {
290   - uLong was; /* computed check value */
291   - uLong need; /* stream check value */
292   - } check; /* if CHECK, check values to compare */
293   - uInt marker; /* if BAD, inflateSync's marker bytes count */
294   - } sub; /* submode */
295   -
296   - /* mode independent information */
297   - int nowrap; /* flag for no wrapper */
298   - uInt wbits; /* log2(window size) (8..15, defaults to 15) */
299   - inflate_blocks_statef
300   - *blocks; /* current inflate_blocks state */
301   -
302   -};
303   -
304   -
305   -int inflateReset(z)
306   -z_stream *z;
307   -{
308   - uLong c;
309   -
310   - if (z == Z_NULL || z->state == Z_NULL)
311   - return Z_STREAM_ERROR;
312   - z->total_in = z->total_out = 0;
313   - z->msg = Z_NULL;
314   - z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
315   - inflate_blocks_reset(z->state->blocks, z, &c);
316   - Trace((stderr, "inflate: reset\n"));
317   - return Z_OK;
318   -}
319   -
320   -
321   -int inflateEnd(z)
322   -z_stream *z;
323   -{
324   - uLong c;
325   -
326   - if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
327   - return Z_STREAM_ERROR;
328   - if (z->state->blocks != Z_NULL)
329   - inflate_blocks_free(z->state->blocks, z, &c);
330   - ZFREE(z, z->state, sizeof(struct internal_state));
331   - z->state = Z_NULL;
332   - Trace((stderr, "inflate: end\n"));
333   - return Z_OK;
334   -}
335   -
336   -
337   -int inflateInit2(z, w)
338   -z_stream *z;
339   -int w;
340   -{
341   - /* initialize state */
342   - if (z == Z_NULL)
343   - return Z_STREAM_ERROR;
344   -/* if (z->zalloc == Z_NULL) z->zalloc = zcalloc; */
345   -/* if (z->zfree == Z_NULL) z->zfree = zcfree; */
346   - if ((z->state = (struct internal_state FAR *)
347   - ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
348   - return Z_MEM_ERROR;
349   - z->state->blocks = Z_NULL;
350   -
351   - /* handle undocumented nowrap option (no zlib header or check) */
352   - z->state->nowrap = 0;
353   - if (w < 0)
354   - {
355   - w = - w;
356   - z->state->nowrap = 1;
357   - }
358   -
359   - /* set window size */
360   - if (w < 8 || w > 15)
361   - {
362   - inflateEnd(z);
363   - return Z_STREAM_ERROR;
364   - }
365   - z->state->wbits = (uInt)w;
366   -
367   - /* create inflate_blocks state */
368   - if ((z->state->blocks =
369   - inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, 1 << w))
370   - == Z_NULL)
371   - {
372   - inflateEnd(z);
373   - return Z_MEM_ERROR;
374   - }
375   - Trace((stderr, "inflate: allocated\n"));
376   -
377   - /* reset state */
378   - inflateReset(z);
379   - return Z_OK;
380   -}
381   -
382   -
383   -int inflateInit(z)
384   -z_stream *z;
385   -{
386   - return inflateInit2(z, DEF_WBITS);
387   -}
388   -
389   -
390   -#define NEEDBYTE {if(z->avail_in==0)goto empty;r=Z_OK;}
391   -#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
392   -
393   -int inflate(z, f)
394   -z_stream *z;
395   -int f;
396   -{
397   - int r;
398   - uInt b;
399   -
400   - if (z == Z_NULL || z->next_in == Z_NULL)
401   - return Z_STREAM_ERROR;
402   - r = Z_BUF_ERROR;
403   - while (1) switch (z->state->mode)
404   - {
405   - case METHOD:
406   - NEEDBYTE
407   - if (((z->state->sub.method = NEXTBYTE) & 0xf) != DEFLATED)
408   - {
409   - z->state->mode = BAD;
410   - z->msg = "unknown compression method";
411   - z->state->sub.marker = 5; /* can't try inflateSync */
412   - break;
413   - }
414   - if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
415   - {
416   - z->state->mode = BAD;
417   - z->msg = "invalid window size";
418   - z->state->sub.marker = 5; /* can't try inflateSync */
419   - break;
420   - }
421   - z->state->mode = FLAG;
422   - case FLAG:
423   - NEEDBYTE
424   - if ((b = NEXTBYTE) & 0x20)
425   - {
426   - z->state->mode = BAD;
427   - z->msg = "invalid reserved bit";
428   - z->state->sub.marker = 5; /* can't try inflateSync */
429   - break;
430   - }
431   - if (((z->state->sub.method << 8) + b) % 31)
432   - {
433   - z->state->mode = BAD;
434   - z->msg = "incorrect header check";
435   - z->state->sub.marker = 5; /* can't try inflateSync */
436   - break;
437   - }
438   - Trace((stderr, "inflate: zlib header ok\n"));
439   - z->state->mode = BLOCKS;
440   - case BLOCKS:
441   - r = inflate_blocks(z->state->blocks, z, r);
442   - if (f == Z_PACKET_FLUSH && z->avail_in == 0 && z->avail_out != 0)
443   - r = inflate_packet_flush(z->state->blocks);
444   - if (r == Z_DATA_ERROR)
445   - {
446   - z->state->mode = BAD;
447   - z->state->sub.marker = 0; /* can try inflateSync */
448   - break;
449   - }
450   - if (r != Z_STREAM_END)
451   - return r;
452   - r = Z_OK;
453   - inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
454   - if (z->state->nowrap)
455   - {
456   - z->state->mode = DONE;
457   - break;
458   - }
459   - z->state->mode = CHECK4;
460   - case CHECK4:
461   - NEEDBYTE
462   - z->state->sub.check.need = (uLong)NEXTBYTE << 24;
463   - z->state->mode = CHECK3;
464   - case CHECK3:
465   - NEEDBYTE
466   - z->state->sub.check.need += (uLong)NEXTBYTE << 16;
467   - z->state->mode = CHECK2;
468   - case CHECK2:
469   - NEEDBYTE
470   - z->state->sub.check.need += (uLong)NEXTBYTE << 8;
471   - z->state->mode = CHECK1;
472   - case CHECK1:
473   - NEEDBYTE
474   - z->state->sub.check.need += (uLong)NEXTBYTE;
475   -
476   - if (z->state->sub.check.was != z->state->sub.check.need)
477   - {
478   - z->state->mode = BAD;
479   - z->msg = "incorrect data check";
480   - z->state->sub.marker = 5; /* can't try inflateSync */
481   - break;
482   - }
483   - Trace((stderr, "inflate: zlib check ok\n"));
484   - z->state->mode = DONE;
485   - case DONE:
486   - return Z_STREAM_END;
487   - case BAD:
488   - return Z_DATA_ERROR;
489   - default:
490   - return Z_STREAM_ERROR;
491   - }
492   -
493   - empty:
494   - if (f != Z_PACKET_FLUSH)
495   - return r;
496   - z->state->mode = BAD;
497   - z->state->sub.marker = 0; /* can try inflateSync */
498   - return Z_DATA_ERROR;
499   -}
500   -
501   -/*
502   - * This subroutine adds the data at next_in/avail_in to the output history
503   - * without performing any output. The output buffer must be "caught up";
504   - * i.e. no pending output (hence s->read equals s->write), and the state must
505   - * be BLOCKS (i.e. we should be willing to see the start of a series of
506   - * BLOCKS). On exit, the output will also be caught up, and the checksum
507   - * will have been updated if need be.
508   - */
509   -
510   -int inflateIncomp(z)
511   -z_stream *z;
512   -{
513   - if (z->state->mode != BLOCKS)
514   - return Z_DATA_ERROR;
515   - return inflate_addhistory(z->state->blocks, z);
516   -}
517   -
518   -
519   -int inflateSync(z)
520   -z_stream *z;
521   -{
522   - uInt n; /* number of bytes to look at */
523   - Bytef *p; /* pointer to bytes */
524   - uInt m; /* number of marker bytes found in a row */
525   - uLong r, w; /* temporaries to save total_in and total_out */
526   -
527   - /* set up */
528   - if (z == Z_NULL || z->state == Z_NULL)
529   - return Z_STREAM_ERROR;
530   - if (z->state->mode != BAD)
531   - {
532   - z->state->mode = BAD;
533   - z->state->sub.marker = 0;
534   - }
535   - if ((n = z->avail_in) == 0)
536   - return Z_BUF_ERROR;
537   - p = z->next_in;
538   - m = z->state->sub.marker;
539   -
540   - /* search */
541   - while (n && m < 4)
542   - {
543   - if (*p == (Byte)(m < 2 ? 0 : 0xff))
544   - m++;
545   - else if (*p)
546   - m = 0;
547   - else
548   - m = 4 - m;
549   - p++, n--;
550   - }
551   -
552   - /* restore */
553   - z->total_in += p - z->next_in;
554   - z->next_in = p;
555   - z->avail_in = n;
556   - z->state->sub.marker = m;
557   -
558   - /* return no joy or set up to restart on a new block */
559   - if (m != 4)
560   - return Z_DATA_ERROR;
561   - r = z->total_in; w = z->total_out;
562   - inflateReset(z);
563   - z->total_in = r; z->total_out = w;
564   - z->state->mode = BLOCKS;
565   - return Z_OK;
566   -}
567   -
568   -#undef NEEDBYTE
569   -#undef NEXTBYTE
570   -
571   -/*+++++*/
572   -/* infutil.h -- types and macros common to blocks and codes
573   - * Copyright (C) 1995 Mark Adler
574   - * For conditions of distribution and use, see copyright notice in zlib.h
575   - */
576   -
577   -/* WARNING: this file should *not* be used by applications. It is
578   - part of the implementation of the compression library and is
579   - subject to change. Applications should only use zlib.h.
580   - */
581   -
582   -/* inflate blocks semi-private state */
583   -struct inflate_blocks_state {
584   -
585   - /* mode */
586   - enum {
587   - TYPE, /* get type bits (3, including end bit) */
588   - LENS, /* get lengths for stored */
589   - STORED, /* processing stored block */
590   - TABLE, /* get table lengths */
591   - BTREE, /* get bit lengths tree for a dynamic block */
592   - DTREE, /* get length, distance trees for a dynamic block */
593   - CODES, /* processing fixed or dynamic block */
594   - DRY, /* output remaining window bytes */
595   - DONEB, /* finished last block, done */
596   - BADB} /* got a data error--stuck here */
597   - mode; /* current inflate_block mode */
598   -
599   - /* mode dependent information */
600   - union {
601   - uInt left; /* if STORED, bytes left to copy */
602   - struct {
603   - uInt table; /* table lengths (14 bits) */
604   - uInt index; /* index into blens (or border) */
605   - uIntf *blens; /* bit lengths of codes */
606   - uInt bb; /* bit length tree depth */
607   - inflate_huft *tb; /* bit length decoding tree */
608   - int nblens; /* # elements allocated at blens */
609   - } trees; /* if DTREE, decoding info for trees */
610   - struct {
611   - inflate_huft *tl, *td; /* trees to free */
612   - inflate_codes_statef
613   - *codes;
614   - } decode; /* if CODES, current state */
615   - } sub; /* submode */
616   - uInt last; /* true if this block is the last block */
617   -
618   - /* mode independent information */
619   - uInt bitk; /* bits in bit buffer */
620   - uLong bitb; /* bit buffer */
621   - Bytef *window; /* sliding window */
622   - Bytef *end; /* one byte after sliding window */
623   - Bytef *read; /* window read pointer */
624   - Bytef *write; /* window write pointer */
625   - check_func checkfn; /* check function */
626   - uLong check; /* check on output */
627   -
628   -};
629   -
630   -
631   -/* defines for inflate input/output */
632   -/* update pointers and return */
633   -#define UPDBITS {s->bitb=b;s->bitk=k;}
634   -#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
635   -#define UPDOUT {s->write=q;}
636   -#define UPDATE {UPDBITS UPDIN UPDOUT}
637   -#define LEAVE {UPDATE return inflate_flush(s,z,r);}
638   -/* get bytes and bits */
639   -#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
640   -#define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
641   -#define NEXTBYTE (n--,*p++)
642   -#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
643   -#define DUMPBITS(j) {b>>=(j);k-=(j);}
644   -/* output bytes */
645   -#define WAVAIL (q<s->read?s->read-q-1:s->end-q)
646   -#define LOADOUT {q=s->write;m=WAVAIL;}
647   -#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=WAVAIL;}}
648   -#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
649   -#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
650   -#define OUTBYTE(a) {*q++=(Byte)(a);m--;}
651   -/* load local pointers */
652   -#define LOAD {LOADIN LOADOUT}
653   -
654   -/*
655   - * The IBM 150 firmware munges the data right after _etext[]. This
656   - * protects it. -- Cort
657   - */
658   -local uInt protect_mask[] = {0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0};
659   -/* And'ing with mask[n] masks the lower n bits */
660   -local uInt inflate_mask[] = {
661   - 0x0000,
662   - 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
663   - 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
664   -};
665   -
666   -/* copy as much as possible from the sliding window to the output area */
667   -local int inflate_flush OF((
668   - inflate_blocks_statef *,
669   - z_stream *,
670   - int));
671   -
672   -/*+++++*/
673   -/* inffast.h -- header to use inffast.c
674   - * Copyright (C) 1995 Mark Adler
675   - * For conditions of distribution and use, see copyright notice in zlib.h
676   - */
677   -
678   -/* WARNING: this file should *not* be used by applications. It is
679   - part of the implementation of the compression library and is
680   - subject to change. Applications should only use zlib.h.
681   - */
682   -
683   -local int inflate_fast OF((
684   - uInt,
685   - uInt,
686   - inflate_huft *,
687   - inflate_huft *,
688   - inflate_blocks_statef *,
689   - z_stream *));
690   -
691   -
692   -/*+++++*/
693   -/* infblock.c -- interpret and process block types to last block
694   - * Copyright (C) 1995 Mark Adler
695   - * For conditions of distribution and use, see copyright notice in zlib.h
696   - */
697   -
698   -/* Table for deflate from PKZIP's appnote.txt. */
699   -local uInt border[] = { /* Order of the bit length code lengths */
700   - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
701   -
702   -/*
703   - Notes beyond the 1.93a appnote.txt:
704   -
705   - 1. Distance pointers never point before the beginning of the output
706   - stream.
707   - 2. Distance pointers can point back across blocks, up to 32k away.
708   - 3. There is an implied maximum of 7 bits for the bit length table and
709   - 15 bits for the actual data.
710   - 4. If only one code exists, then it is encoded using one bit. (Zero
711   - would be more efficient, but perhaps a little confusing.) If two
712   - codes exist, they are coded using one bit each (0 and 1).
713   - 5. There is no way of sending zero distance codes--a dummy must be
714   - sent if there are none. (History: a pre 2.0 version of PKZIP would
715   - store blocks with no distance codes, but this was discovered to be
716   - too harsh a criterion.) Valid only for 1.93a. 2.04c does allow
717   - zero distance codes, which is sent as one code of zero bits in
718   - length.
719   - 6. There are up to 286 literal/length codes. Code 256 represents the
720   - end-of-block. Note however that the static length tree defines
721   - 288 codes just to fill out the Huffman codes. Codes 286 and 287
722   - cannot be used though, since there is no length base or extra bits
723   - defined for them. Similarily, there are up to 30 distance codes.
724   - However, static trees define 32 codes (all 5 bits) to fill out the
725   - Huffman codes, but the last two had better not show up in the data.
726   - 7. Unzip can check dynamic Huffman blocks for complete code sets.
727   - The exception is that a single code would not be complete (see #4).
728   - 8. The five bits following the block type is really the number of
729   - literal codes sent minus 257.
730   - 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
731   - (1+6+6). Therefore, to output three times the length, you output
732   - three codes (1+1+1), whereas to output four times the same length,
733   - you only need two codes (1+3). Hmm.
734   - 10. In the tree reconstruction algorithm, Code = Code + Increment
735   - only if BitLength(i) is not zero. (Pretty obvious.)
736   - 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19)
737   - 12. Note: length code 284 can represent 227-258, but length code 285
738   - really is 258. The last length deserves its own, short code
739   - since it gets used a lot in very redundant files. The length
740   - 258 is special since 258 - 3 (the min match length) is 255.
741   - 13. The literal/length and distance code bit lengths are read as a
742   - single stream of lengths. It is possible (and advantageous) for
743   - a repeat code (16, 17, or 18) to go across the boundary between
744   - the two sets of lengths.
745   - */
746   -
747   -
748   -local void inflate_blocks_reset(s, z, c)
749   -inflate_blocks_statef *s;
750   -z_stream *z;
751   -uLongf *c;
752   -{
753   - if (s->checkfn != Z_NULL)
754   - *c = s->check;
755   - if (s->mode == BTREE || s->mode == DTREE)
756   - ZFREE(z, s->sub.trees.blens, s->sub.trees.nblens * sizeof(uInt));
757   - if (s->mode == CODES)
758   - {
759   - inflate_codes_free(s->sub.decode.codes, z);
760   - inflate_trees_free(s->sub.decode.td, z);
761   - inflate_trees_free(s->sub.decode.tl, z);
762   - }
763   - s->mode = TYPE;
764   - s->bitk = 0;
765   - s->bitb = 0;
766   - s->read = s->write = s->window;
767   - if (s->checkfn != Z_NULL)
768   - s->check = (*s->checkfn)(0L, Z_NULL, 0);
769   - Trace((stderr, "inflate: blocks reset\n"));
770   -}
771   -
772   -
773   -local inflate_blocks_statef *inflate_blocks_new(z, c, w)
774   -z_stream *z;
775   -check_func c;
776   -uInt w;
777   -{
778   - inflate_blocks_statef *s;
779   -
780   - if ((s = (inflate_blocks_statef *)ZALLOC
781   - (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
782   - return s;
783   - if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL)
784   - {
785   - ZFREE(z, s, sizeof(struct inflate_blocks_state));
786   - return Z_NULL;
787   - }
788   - s->end = s->window + w;
789   - s->checkfn = c;
790   - s->mode = TYPE;
791   - Trace((stderr, "inflate: blocks allocated\n"));
792   - inflate_blocks_reset(s, z, &s->check);
793   - return s;
794   -}
795   -
796   -
797   -local int inflate_blocks(s, z, r)
798   -inflate_blocks_statef *s;
799   -z_stream *z;
800   -int r;
801   -{
802   - uInt t; /* temporary storage */
803   - uLong b; /* bit buffer */
804   - uInt k; /* bits in bit buffer */
805   - Bytef *p; /* input data pointer */
806   - uInt n; /* bytes available there */
807   - Bytef *q; /* output window write pointer */
808   - uInt m; /* bytes to end of window or read pointer */
809   -
810   - /* copy input/output information to locals (UPDATE macro restores) */
811   - LOAD
812   -
813   - /* process input based on current state */
814   - while (1) switch (s->mode)
815   - {
816   - case TYPE:
817   - NEEDBITS(3)
818   - t = (uInt)b & 7;
819   - s->last = t & 1;
820   - switch (t >> 1)
821   - {
822   - case 0: /* stored */
823   - Trace((stderr, "inflate: stored block%s\n",
824   - s->last ? " (last)" : ""));
825   - DUMPBITS(3)
826   - t = k & 7; /* go to byte boundary */
827   - DUMPBITS(t)
828   - s->mode = LENS; /* get length of stored block */
829   - break;
830   - case 1: /* fixed */
831   - Trace((stderr, "inflate: fixed codes block%s\n",
832   - s->last ? " (last)" : ""));
833   - {
834   - uInt bl, bd;
835   - inflate_huft *tl, *td;
836   -
837   - inflate_trees_fixed(&bl, &bd, &tl, &td);
838   - s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
839   - if (s->sub.decode.codes == Z_NULL)
840   - {
841   - r = Z_MEM_ERROR;
842   - LEAVE
843   - }
844   - s->sub.decode.tl = Z_NULL; /* don't try to free these */
845   - s->sub.decode.td = Z_NULL;
846   - }
847   - DUMPBITS(3)
848   - s->mode = CODES;
849   - break;
850   - case 2: /* dynamic */
851   - Trace((stderr, "inflate: dynamic codes block%s\n",
852   - s->last ? " (last)" : ""));
853   - DUMPBITS(3)
854   - s->mode = TABLE;
855   - break;
856   - case 3: /* illegal */
857   - DUMPBITS(3)
858   - s->mode = BADB;
859   - z->msg = "invalid block type";
860   - r = Z_DATA_ERROR;
861   - LEAVE
862   - }
863   - break;
864   - case LENS:
865   - NEEDBITS(32)
866   - if (((~b) >> 16) != (b & 0xffff))
867   - {
868   - s->mode = BADB;
869   - z->msg = "invalid stored block lengths";
870   - r = Z_DATA_ERROR;
871   - LEAVE
872   - }
873   - s->sub.left = (uInt)b & 0xffff;
874   - b = k = 0; /* dump bits */
875   - Tracev((stderr, "inflate: stored length %u\n", s->sub.left));
876   - s->mode = s->sub.left ? STORED : TYPE;
877   - break;
878   - case STORED:
879   - if (n == 0)
880   - LEAVE
881   - NEEDOUT
882   - t = s->sub.left;
883   - if (t > n) t = n;
884   - if (t > m) t = m;
885   - zmemcpy(q, p, t);
886   - p += t; n -= t;
887   - q += t; m -= t;
888   - if ((s->sub.left -= t) != 0)
889   - break;
890   - Tracev((stderr, "inflate: stored end, %lu total out\n",
891   - z->total_out + (q >= s->read ? q - s->read :
892   - (s->end - s->read) + (q - s->window))));
893   - s->mode = s->last ? DRY : TYPE;
894   - break;
895   - case TABLE:
896   - NEEDBITS(14)
897   - s->sub.trees.table = t = (uInt)b & 0x3fff;
898   -#ifndef PKZIP_BUG_WORKAROUND
899   - if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
900   - {
901   - s->mode = BADB;
902   - z->msg = "too many length or distance symbols";
903   - r = Z_DATA_ERROR;
904   - LEAVE
905   - }
906   -#endif
907   - t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
908   - if (t < 19)
909   - t = 19;
910   - if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
911   - {
912   - r = Z_MEM_ERROR;
913   - LEAVE
914   - }
915   - s->sub.trees.nblens = t;
916   - DUMPBITS(14)
917   - s->sub.trees.index = 0;
918   - Tracev((stderr, "inflate: table sizes ok\n"));
919   - s->mode = BTREE;
920   - case BTREE:
921   - while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
922   - {
923   - NEEDBITS(3)
924   - s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
925   - DUMPBITS(3)
926   - }
927   - while (s->sub.trees.index < 19)
928   - s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
929   - s->sub.trees.bb = 7;
930   - t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
931   - &s->sub.trees.tb, z);
932   - if (t != Z_OK)
933   - {
934   - r = t;
935   - if (r == Z_DATA_ERROR)
936   - s->mode = BADB;
937   - LEAVE
938   - }
939   - s->sub.trees.index = 0;
940   - Tracev((stderr, "inflate: bits tree ok\n"));
941   - s->mode = DTREE;
942   - case DTREE:
943   - while (t = s->sub.trees.table,
944   - s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
945   - {
946   - inflate_huft *h;
947   - uInt i, j, c;
948   -
949   - t = s->sub.trees.bb;
950   - NEEDBITS(t)
951   - h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
952   - t = h->word.what.Bits;
953   - c = h->more.Base;
954   - if (c < 16)
955   - {
956   - DUMPBITS(t)
957   - s->sub.trees.blens[s->sub.trees.index++] = c;
958   - }
959   - else /* c == 16..18 */
960   - {
961   - i = c == 18 ? 7 : c - 14;
962   - j = c == 18 ? 11 : 3;
963   - NEEDBITS(t + i)
964   - DUMPBITS(t)
965   - j += (uInt)b & inflate_mask[i];
966   - DUMPBITS(i)
967   - i = s->sub.trees.index;
968   - t = s->sub.trees.table;
969   - if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
970   - (c == 16 && i < 1))
971   - {
972   - s->mode = BADB;
973   - z->msg = "invalid bit length repeat";
974   - r = Z_DATA_ERROR;
975   - LEAVE
976   - }
977   - c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
978   - do {
979   - s->sub.trees.blens[i++] = c;
980   - } while (--j);
981   - s->sub.trees.index = i;
982   - }
983   - }
984   - inflate_trees_free(s->sub.trees.tb, z);
985   - s->sub.trees.tb = Z_NULL;
986   - {
987   - uInt bl, bd;
988   - inflate_huft *tl, *td;
989   - inflate_codes_statef *c;
990   -
991   - bl = 9; /* must be <= 9 for lookahead assumptions */
992   - bd = 6; /* must be <= 9 for lookahead assumptions */
993   - t = s->sub.trees.table;
994   - t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
995   - s->sub.trees.blens, &bl, &bd, &tl, &td, z);
996   - if (t != Z_OK)
997   - {
998   - if (t == (uInt)Z_DATA_ERROR)
999   - s->mode = BADB;
1000   - r = t;
1001   - LEAVE
1002   - }
1003   - Tracev((stderr, "inflate: trees ok\n"));
1004   - if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
1005   - {
1006   - inflate_trees_free(td, z);
1007   - inflate_trees_free(tl, z);
1008   - r = Z_MEM_ERROR;
1009   - LEAVE
1010   - }
1011   - ZFREE(z, s->sub.trees.blens, s->sub.trees.nblens * sizeof(uInt));
1012   - s->sub.decode.codes = c;
1013   - s->sub.decode.tl = tl;
1014   - s->sub.decode.td = td;
1015   - }
1016   - s->mode = CODES;
1017   - case CODES:
1018   - UPDATE
1019   - if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
1020   - return inflate_flush(s, z, r);
1021   - r = Z_OK;
1022   - inflate_codes_free(s->sub.decode.codes, z);
1023   - inflate_trees_free(s->sub.decode.td, z);
1024   - inflate_trees_free(s->sub.decode.tl, z);
1025   - LOAD
1026   - Tracev((stderr, "inflate: codes end, %lu total out\n",
1027   - z->total_out + (q >= s->read ? q - s->read :
1028   - (s->end - s->read) + (q - s->window))));
1029   - if (!s->last)
1030   - {
1031   - s->mode = TYPE;
1032   - break;
1033   - }
1034   - if (k > 7) /* return unused byte, if any */
1035   - {
1036   - Assert(k < 16, "inflate_codes grabbed too many bytes")
1037   - k -= 8;
1038   - n++;
1039   - p--; /* can always return one */
1040   - }
1041   - s->mode = DRY;
1042   - case DRY:
1043   - FLUSH
1044   - if (s->read != s->write)
1045   - LEAVE
1046   - s->mode = DONEB;
1047   - case DONEB:
1048   - r = Z_STREAM_END;
1049   - LEAVE
1050   - case BADB:
1051   - r = Z_DATA_ERROR;
1052   - LEAVE
1053   - default:
1054   - r = Z_STREAM_ERROR;
1055   - LEAVE
1056   - }
1057   -}
1058   -
1059   -
1060   -local int inflate_blocks_free(s, z, c)
1061   -inflate_blocks_statef *s;
1062   -z_stream *z;
1063   -uLongf *c;
1064   -{
1065   - inflate_blocks_reset(s, z, c);
1066   - ZFREE(z, s->window, s->end - s->window);
1067   - ZFREE(z, s, sizeof(struct inflate_blocks_state));
1068   - Trace((stderr, "inflate: blocks freed\n"));
1069   - return Z_OK;
1070   -}
1071   -
1072   -/*
1073   - * This subroutine adds the data at next_in/avail_in to the output history
1074   - * without performing any output. The output buffer must be "caught up";
1075   - * i.e. no pending output (hence s->read equals s->write), and the state must
1076   - * be BLOCKS (i.e. we should be willing to see the start of a series of
1077   - * BLOCKS). On exit, the output will also be caught up, and the checksum
1078   - * will have been updated if need be.
1079   - */
1080   -local int inflate_addhistory(s, z)
1081   -inflate_blocks_statef *s;
1082   -z_stream *z;
1083   -{
1084   - uLong b; /* bit buffer */ /* NOT USED HERE */
1085   - uInt k; /* bits in bit buffer */ /* NOT USED HERE */
1086   - uInt t; /* temporary storage */
1087   - Bytef *p; /* input data pointer */
1088   - uInt n; /* bytes available there */
1089   - Bytef *q; /* output window write pointer */
1090   - uInt m; /* bytes to end of window or read pointer */
1091   -
1092   - if (s->read != s->write)
1093   - return Z_STREAM_ERROR;
1094   - if (s->mode != TYPE)
1095   - return Z_DATA_ERROR;
1096   -
1097   - /* we're ready to rock */
1098   - LOAD
1099   - /* while there is input ready, copy to output buffer, moving
1100   - * pointers as needed.
1101   - */
1102   - while (n) {
1103   - t = n; /* how many to do */
1104   - /* is there room until end of buffer? */
1105   - if (t > m) t = m;
1106   - /* update check information */
1107   - if (s->checkfn != Z_NULL)
1108   - s->check = (*s->checkfn)(s->check, q, t);
1109   - zmemcpy(q, p, t);
1110   - q += t;
1111   - p += t;
1112   - n -= t;
1113   - z->total_out += t;
1114   - s->read = q; /* drag read pointer forward */
1115   -/* WRAP */ /* expand WRAP macro by hand to handle s->read */
1116   - if (q == s->end) {
1117   - s->read = q = s->window;
1118   - m = WAVAIL;
1119   - }
1120   - }
1121   - UPDATE
1122   - return Z_OK;
1123   -}
1124   -
1125   -
1126   -/*
1127   - * At the end of a Deflate-compressed PPP packet, we expect to have seen
1128   - * a `stored' block type value but not the (zero) length bytes.
1129   - */
1130   -local int inflate_packet_flush(s)
1131   - inflate_blocks_statef *s;
1132   -{
1133   - if (s->mode != LENS)
1134   - return Z_DATA_ERROR;
1135   - s->mode = TYPE;
1136   - return Z_OK;
1137   -}
1138   -
1139   -
1140   -/*+++++*/
1141   -/* inftrees.c -- generate Huffman trees for efficient decoding
1142   - * Copyright (C) 1995 Mark Adler
1143   - * For conditions of distribution and use, see copyright notice in zlib.h
1144   - */
1145   -
1146   -/* simplify the use of the inflate_huft type with some defines */
1147   -#define base more.Base
1148   -#define next more.Next
1149   -#define exop word.what.Exop
1150   -#define bits word.what.Bits
1151   -
1152   -
1153   -local int huft_build OF((
1154   - uIntf *, /* code lengths in bits */
1155   - uInt, /* number of codes */
1156   - uInt, /* number of "simple" codes */
1157   - uIntf *, /* list of base values for non-simple codes */
1158   - uIntf *, /* list of extra bits for non-simple codes */
1159   - inflate_huft * FAR*,/* result: starting table */
1160   - uIntf *, /* maximum lookup bits (returns actual) */
1161   - z_stream *)); /* for zalloc function */
1162   -
1163   -local voidpf falloc OF((
1164   - voidpf, /* opaque pointer (not used) */
1165   - uInt, /* number of items */
1166   - uInt)); /* size of item */
1167   -
1168   -local void ffree OF((
1169   - voidpf q, /* opaque pointer (not used) */
1170   - voidpf p, /* what to free (not used) */
1171   - uInt n)); /* number of bytes (not used) */
1172   -
1173   -/* Tables for deflate from PKZIP's appnote.txt. */
1174   -local uInt cplens[] = { /* Copy lengths for literal codes 257..285 */
1175   - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
1176   - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
1177   - /* actually lengths - 2; also see note #13 above about 258 */
1178   -local uInt cplext[] = { /* Extra bits for literal codes 257..285 */
1179   - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
1180   - 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 192, 192}; /* 192==invalid */
1181   -local uInt cpdist[] = { /* Copy offsets for distance codes 0..29 */
1182   - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
1183   - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
1184   - 8193, 12289, 16385, 24577};
1185   -local uInt cpdext[] = { /* Extra bits for distance codes */
1186   - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
1187   - 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
1188   - 12, 12, 13, 13};
1189   -
1190   -/*
1191   - Huffman code decoding is performed using a multi-level table lookup.
1192   - The fastest way to decode is to simply build a lookup table whose
1193   - size is determined by the longest code. However, the time it takes
1194   - to build this table can also be a factor if the data being decoded
1195   - is not very long. The most common codes are necessarily the
1196   - shortest codes, so those codes dominate the decoding time, and hence
1197   - the speed. The idea is you can have a shorter table that decodes the
1198   - shorter, more probable codes, and then point to subsidiary tables for
1199   - the longer codes. The time it costs to decode the longer codes is
1200   - then traded against the time it takes to make longer tables.
1201   -
1202   - This results of this trade are in the variables lbits and dbits
1203   - below. lbits is the number of bits the first level table for literal/
1204   - length codes can decode in one step, and dbits is the same thing for
1205   - the distance codes. Subsequent tables are also less than or equal to
1206   - those sizes. These values may be adjusted either when all of the
1207   - codes are shorter than that, in which case the longest code length in
1208   - bits is used, or when the shortest code is *longer* than the requested
1209   - table size, in which case the length of the shortest code in bits is
1210   - used.
1211   -
1212   - There are two different values for the two tables, since they code a
1213   - different number of possibilities each. The literal/length table
1214   - codes 286 possible values, or in a flat code, a little over eight
1215   - bits. The distance table codes 30 possible values, or a little less
1216   - than five bits, flat. The optimum values for speed end up being
1217   - about one bit more than those, so lbits is 8+1 and dbits is 5+1.
1218   - The optimum values may differ though from machine to machine, and
1219   - possibly even between compilers. Your mileage may vary.
1220   - */
1221   -
1222   -
1223   -/* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
1224   -#define BMAX 15 /* maximum bit length of any code */
1225   -#define N_MAX 288 /* maximum number of codes in any set */
1226   -
1227   -#ifdef DEBUG_ZLIB
1228   - uInt inflate_hufts;
1229   -#endif
1230   -
1231   -local int huft_build(b, n, s, d, e, t, m, zs)
1232   -uIntf *b; /* code lengths in bits (all assumed <= BMAX) */
1233   -uInt n; /* number of codes (assumed <= N_MAX) */
1234   -uInt s; /* number of simple-valued codes (0..s-1) */
1235   -uIntf *d; /* list of base values for non-simple codes */
1236   -uIntf *e; /* list of extra bits for non-simple codes */
1237   -inflate_huft * FAR *t; /* result: starting table */
1238   -uIntf *m; /* maximum lookup bits, returns actual */
1239   -z_stream *zs; /* for zalloc function */
1240   -/* Given a list of code lengths and a maximum table size, make a set of
1241   - tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR
1242   - if the given code set is incomplete (the tables are still built in this
1243   - case), Z_DATA_ERROR if the input is invalid (all zero length codes or an
1244   - over-subscribed set of lengths), or Z_MEM_ERROR if not enough memory. */
1245   -{
1246   -
1247   - uInt a; /* counter for codes of length k */
1248   - uInt c[BMAX+1]; /* bit length count table */
1249   - uInt f; /* i repeats in table every f entries */
1250   - int g; /* maximum code length */
1251   - int h; /* table level */
1252   - register uInt i; /* counter, current code */
1253   - register uInt j; /* counter */
1254   - register int k; /* number of bits in current code */
1255   - int l; /* bits per table (returned in m) */
1256   - register uIntf *p; /* pointer into c[], b[], or v[] */
1257   - inflate_huft *q; /* points to current table */
1258   - struct inflate_huft_s r; /* table entry for structure assignment */
1259   - inflate_huft *u[BMAX]; /* table stack */
1260   - uInt v[N_MAX]; /* values in order of bit length */
1261   - register int w; /* bits before this table == (l * h) */
1262   - uInt x[BMAX+1]; /* bit offsets, then code stack */
1263   - uIntf *xp; /* pointer into x */
1264   - int y; /* number of dummy codes added */
1265   - uInt z; /* number of entries in current table */
1266   -
1267   -
1268   - /* Generate counts for each bit length */
1269   - p = c;
1270   -#define C0 *p++ = 0;
1271   -#define C2 C0 C0 C0 C0
1272   -#define C4 C2 C2 C2 C2
1273   - C4 /* clear c[]--assume BMAX+1 is 16 */
1274   - p = b; i = n;
1275   - do {
1276   - c[*p++]++; /* assume all entries <= BMAX */
1277   - } while (--i);
1278   - if (c[0] == n) /* null input--all zero length codes */
1279   - {
1280   - *t = (inflate_huft *)Z_NULL;
1281   - *m = 0;
1282   - return Z_OK;
1283   - }
1284   -
1285   -
1286   - /* Find minimum and maximum length, bound *m by those */
1287   - l = *m;
1288   - for (j = 1; j <= BMAX; j++)
1289   - if (c[j])
1290   - break;
1291   - k = j; /* minimum code length */
1292   - if ((uInt)l < j)
1293   - l = j;
1294   - for (i = BMAX; i; i--)
1295   - if (c[i])
1296   - break;
1297   - g = i; /* maximum code length */
1298   - if ((uInt)l > i)
1299   - l = i;
1300   - *m = l;
1301   -
1302   -
1303   - /* Adjust last length count to fill out codes, if needed */
1304   - for (y = 1 << j; j < i; j++, y <<= 1)
1305   - if ((y -= c[j]) < 0)
1306   - return Z_DATA_ERROR;
1307   - if ((y -= c[i]) < 0)
1308   - return Z_DATA_ERROR;
1309   - c[i] += y;
1310   -
1311   -
1312   - /* Generate starting offsets into the value table for each length */
1313   - x[1] = j = 0;
1314   - p = c + 1; xp = x + 2;
1315   - while (--i) { /* note that i == g from above */
1316   - *xp++ = (j += *p++);
1317   - }
1318   -
1319   -
1320   - /* Make a table of values in order of bit lengths */
1321   - p = b; i = 0;
1322   - do {
1323   - if ((j = *p++) != 0)
1324   - v[x[j]++] = i;
1325   - } while (++i < n);
1326   -
1327   -
1328   - /* Generate the Huffman codes and for each, make the table entries */
1329   - x[0] = i = 0; /* first Huffman code is zero */
1330   - p = v; /* grab values in bit order */
1331   - h = -1; /* no tables yet--level -1 */
1332   - w = -l; /* bits decoded == (l * h) */
1333   - u[0] = (inflate_huft *)Z_NULL; /* just to keep compilers happy */
1334   - q = (inflate_huft *)Z_NULL; /* ditto */
1335   - z = 0; /* ditto */
1336   -
1337   - /* go through the bit lengths (k already is bits in shortest code) */
1338   - for (; k <= g; k++)
1339   - {
1340   - a = c[k];
1341   - while (a--)
1342   - {
1343   - /* here i is the Huffman code of length k bits for value *p */
1344   - /* make tables up to required level */
1345   - while (k > w + l)
1346   - {
1347   - h++;
1348   - w += l; /* previous table always l bits */
1349   -
1350   - /* compute minimum size table less than or equal to l bits */
1351   - z = (z = g - w) > (uInt)l ? l : z; /* table size upper limit */
1352   - if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */
1353   - { /* too few codes for k-w bit table */
1354   - f -= a + 1; /* deduct codes from patterns left */
1355   - xp = c + k;
1356   - if (j < z)
1357   - while (++j < z) /* try smaller tables up to z bits */
1358   - {
1359   - if ((f <<= 1) <= *++xp)
1360   - break; /* enough codes to use up j bits */
1361   - f -= *xp; /* else deduct codes from patterns */
1362   - }
1363   - }
1364   - z = 1 << j; /* table entries for j-bit table */
1365   -
1366   - /* allocate and link in new table */
1367   - if ((q = (inflate_huft *)ZALLOC
1368   - (zs,z + 1,sizeof(inflate_huft))) == Z_NULL)
1369   - {
1370   - if (h)
1371   - inflate_trees_free(u[0], zs);
1372   - return Z_MEM_ERROR; /* not enough memory */
1373   - }
1374   - q->word.Nalloc = z + 1;
1375   -#ifdef DEBUG_ZLIB
1376   - inflate_hufts += z + 1;
1377   -#endif
1378   - *t = q + 1; /* link to list for huft_free() */
1379   - *(t = &(q->next)) = Z_NULL;
1380   - u[h] = ++q; /* table starts after link */
1381   -
1382   - /* connect to last table, if there is one */
1383   - if (h)
1384   - {
1385   - x[h] = i; /* save pattern for backing up */
1386   - r.bits = (Byte)l; /* bits to dump before this table */
1387   - r.exop = (Byte)j; /* bits in this table */
1388   - r.next = q; /* pointer to this table */
1389   - j = i >> (w - l); /* (get around Turbo C bug) */
1390   - u[h-1][j] = r; /* connect to last table */
1391   - }
1392   - }
1393   -
1394   - /* set up table entry in r */
1395   - r.bits = (Byte)(k - w);
1396   - if (p >= v + n)
1397   - r.exop = 128 + 64; /* out of values--invalid code */
1398   - else if (*p < s)
1399   - {
1400   - r.exop = (Byte)(*p < 256 ? 0 : 32 + 64); /* 256 is end-of-block */
1401   - r.base = *p++; /* simple code is just the value */
1402   - }
1403   - else
1404   - {
1405   - r.exop = (Byte)e[*p - s] + 16 + 64; /* non-simple--look up in lists */
1406   - r.base = d[*p++ - s];
1407   - }
1408   -
1409   - /* fill code-like entries with r */
1410   - f = 1 << (k - w);
1411   - for (j = i >> w; j < z; j += f)
1412   - q[j] = r;
1413   -
1414   - /* backwards increment the k-bit code i */
1415   - for (j = 1 << (k - 1); i & j; j >>= 1)
1416   - i ^= j;
1417   - i ^= j;
1418   -
1419   - /* backup over finished tables */
1420   - while ((i & ((1 << w) - 1)) != x[h])
1421   - {
1422   - h--; /* don't need to update q */
1423   - w -= l;
1424   - }
1425   - }
1426   - }
1427   -
1428   -
1429   - /* Return Z_BUF_ERROR if we were given an incomplete table */
1430   - return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
1431   -}
1432   -
1433   -
1434   -local int inflate_trees_bits(c, bb, tb, z)
1435   -uIntf *c; /* 19 code lengths */
1436   -uIntf *bb; /* bits tree desired/actual depth */
1437   -inflate_huft * FAR *tb; /* bits tree result */
1438   -z_stream *z; /* for zfree function */
1439   -{
1440   - int r;
1441   -
1442   - r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL, tb, bb, z);
1443   - if (r == Z_DATA_ERROR)
1444   - z->msg = "oversubscribed dynamic bit lengths tree";
1445   - else if (r == Z_BUF_ERROR)
1446   - {
1447   - inflate_trees_free(*tb, z);
1448   - z->msg = "incomplete dynamic bit lengths tree";
1449   - r = Z_DATA_ERROR;
1450   - }
1451   - return r;
1452   -}
1453   -
1454   -
1455   -local int inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, z)
1456   -uInt nl; /* number of literal/length codes */
1457   -uInt nd; /* number of distance codes */
1458   -uIntf *c; /* that many (total) code lengths */
1459   -uIntf *bl; /* literal desired/actual bit depth */
1460   -uIntf *bd; /* distance desired/actual bit depth */
1461   -inflate_huft * FAR *tl; /* literal/length tree result */
1462   -inflate_huft * FAR *td; /* distance tree result */
1463   -z_stream *z; /* for zfree function */
1464   -{
1465   - int r;
1466   -
1467   - /* build literal/length tree */
1468   - if ((r = huft_build(c, nl, 257, cplens, cplext, tl, bl, z)) != Z_OK)
1469   - {
1470   - if (r == Z_DATA_ERROR)
1471   - z->msg = "oversubscribed literal/length tree";
1472   - else if (r == Z_BUF_ERROR)
1473   - {
1474   - inflate_trees_free(*tl, z);
1475   - z->msg = "incomplete literal/length tree";
1476   - r = Z_DATA_ERROR;
1477   - }
1478   - return r;
1479   - }
1480   -
1481   - /* build distance tree */
1482   - if ((r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, z)) != Z_OK)
1483   - {
1484   - if (r == Z_DATA_ERROR)
1485   - z->msg = "oversubscribed literal/length tree";
1486   - else if (r == Z_BUF_ERROR) {
1487   -#ifdef PKZIP_BUG_WORKAROUND
1488   - r = Z_OK;
1489   - }
1490   -#else
1491   - inflate_trees_free(*td, z);
1492   - z->msg = "incomplete literal/length tree";
1493   - r = Z_DATA_ERROR;
1494   - }
1495   - inflate_trees_free(*tl, z);
1496   - return r;
1497   -#endif
1498   - }
1499   -
1500   - /* done */
1501   - return Z_OK;
1502   -}
1503   -
1504   -
1505   -/* build fixed tables only once--keep them here */
1506   -local int fixed_lock = 0;
1507   -local int fixed_built = 0;
1508   -#define FIXEDH 530 /* number of hufts used by fixed tables */
1509   -local uInt fixed_left = FIXEDH;
1510   -local inflate_huft fixed_mem[FIXEDH];
1511   -local uInt fixed_bl;
1512   -local uInt fixed_bd;
1513   -local inflate_huft *fixed_tl;
1514   -local inflate_huft *fixed_td;
1515   -
1516   -
1517   -local voidpf falloc(q, n, s)
1518   -voidpf q; /* opaque pointer (not used) */
1519   -uInt n; /* number of items */
1520   -uInt s; /* size of item */
1521   -{
1522   - Assert(s == sizeof(inflate_huft) && n <= fixed_left,
1523   - "inflate_trees falloc overflow");
1524   - if (q) s++; /* to make some compilers happy */
1525   - fixed_left -= n;
1526   - return (voidpf)(fixed_mem + fixed_left);
1527   -}
1528   -
1529   -
1530   -local void ffree(q, p, n)
1531   -voidpf q;
1532   -voidpf p;
1533   -uInt n;
1534   -{
1535   - Assert(0, "inflate_trees ffree called!");
1536   - if (q) q = p; /* to make some compilers happy */
1537   -}
1538   -
1539   -
1540   -local int inflate_trees_fixed(bl, bd, tl, td)
1541   -uIntf *bl; /* literal desired/actual bit depth */
1542   -uIntf *bd; /* distance desired/actual bit depth */
1543   -inflate_huft * FAR *tl; /* literal/length tree result */
1544   -inflate_huft * FAR *td; /* distance tree result */
1545   -{
1546   - /* build fixed tables if not built already--lock out other instances */
1547   - while (++fixed_lock > 1)
1548   - fixed_lock--;
1549   - if (!fixed_built)
1550   - {
1551   - int k; /* temporary variable */
1552   - unsigned c[288]; /* length list for huft_build */
1553   - z_stream z; /* for falloc function */
1554   -
1555   - /* set up fake z_stream for memory routines */
1556   - z.zalloc = falloc;
1557   - z.zfree = ffree;
1558   - z.opaque = Z_NULL;
1559   -
1560   - /* literal table */
1561   - for (k = 0; k < 144; k++)
1562   - c[k] = 8;
1563   - for (; k < 256; k++)
1564   - c[k] = 9;
1565   - for (; k < 280; k++)
1566   - c[k] = 7;
1567   - for (; k < 288; k++)
1568   - c[k] = 8;
1569   - fixed_bl = 7;
1570   - huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl, &z);
1571   -
1572   - /* distance table */
1573   - for (k = 0; k < 30; k++)
1574   - c[k] = 5;
1575   - fixed_bd = 5;
1576   - huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd, &z);
1577   -
1578   - /* done */
1579   - fixed_built = 1;
1580   - }
1581   - fixed_lock--;
1582   - *bl = fixed_bl;
1583   - *bd = fixed_bd;
1584   - *tl = fixed_tl;
1585   - *td = fixed_td;
1586   - return Z_OK;
1587   -}
1588   -
1589   -
1590   -local int inflate_trees_free(t, z)
1591   -inflate_huft *t; /* table to free */
1592   -z_stream *z; /* for zfree function */
1593   -/* Free the malloc'ed tables built by huft_build(), which makes a linked
1594   - list of the tables it made, with the links in a dummy first entry of
1595   - each table. */
1596   -{
1597   - register inflate_huft *p, *q;
1598   -
1599   - /* Go through linked list, freeing from the malloced (t[-1]) address. */
1600   - p = t;
1601   - while (p != Z_NULL)
1602   - {
1603   - q = (--p)->next;
1604   - ZFREE(z, p, p->word.Nalloc * sizeof(inflate_huft));
1605   - p = q;
1606   - }
1607   - return Z_OK;
1608   -}
1609   -
1610   -/*+++++*/
1611   -/* infcodes.c -- process literals and length/distance pairs
1612   - * Copyright (C) 1995 Mark Adler
1613   - * For conditions of distribution and use, see copyright notice in zlib.h
1614   - */
1615   -
1616   -/* simplify the use of the inflate_huft type with some defines */
1617   -#define base more.Base
1618   -#define next more.Next
1619   -#define exop word.what.Exop
1620   -#define bits word.what.Bits
1621   -
1622   -/* inflate codes private state */
1623   -struct inflate_codes_state {
1624   -
1625   - /* mode */
1626   - enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
1627   - START, /* x: set up for LEN */
1628   - LEN, /* i: get length/literal/eob next */
1629   - LENEXT, /* i: getting length extra (have base) */
1630   - DIST, /* i: get distance next */
1631   - DISTEXT, /* i: getting distance extra */
1632   - COPY, /* o: copying bytes in window, waiting for space */
1633   - LIT, /* o: got literal, waiting for output space */
1634   - WASH, /* o: got eob, possibly still output waiting */
1635   - END, /* x: got eob and all data flushed */
1636   - BADCODE} /* x: got error */
1637   - mode; /* current inflate_codes mode */
1638   -
1639   - /* mode dependent information */
1640   - uInt len;
1641   - union {
1642   - struct {
1643   - inflate_huft *tree; /* pointer into tree */
1644   - uInt need; /* bits needed */
1645   - } code; /* if LEN or DIST, where in tree */
1646   - uInt lit; /* if LIT, literal */
1647   - struct {
1648   - uInt get; /* bits to get for extra */
1649   - uInt dist; /* distance back to copy from */
1650   - } copy; /* if EXT or COPY, where and how much */
1651   - } sub; /* submode */
1652   -
1653   - /* mode independent information */
1654   - Byte lbits; /* ltree bits decoded per branch */
1655   - Byte dbits; /* dtree bits decoder per branch */
1656   - inflate_huft *ltree; /* literal/length/eob tree */
1657   - inflate_huft *dtree; /* distance tree */
1658   -
1659   -};
1660   -
1661   -
1662   -local inflate_codes_statef *inflate_codes_new(bl, bd, tl, td, z)
1663   -uInt bl, bd;
1664   -inflate_huft *tl, *td;
1665   -z_stream *z;
1666   -{
1667   - inflate_codes_statef *c;
1668   -
1669   - if ((c = (inflate_codes_statef *)
1670   - ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
1671   - {
1672   - c->mode = START;
1673   - c->lbits = (Byte)bl;
1674   - c->dbits = (Byte)bd;
1675   - c->ltree = tl;
1676   - c->dtree = td;
1677   - Tracev((stderr, "inflate: codes new\n"));
1678   - }
1679   - return c;
1680   -}
1681   -
1682   -
1683   -local int inflate_codes(s, z, r)
1684   -inflate_blocks_statef *s;
1685   -z_stream *z;
1686   -int r;
1687   -{
1688   - uInt j; /* temporary storage */
1689   - inflate_huft *t; /* temporary pointer */
1690   - uInt e; /* extra bits or operation */
1691   - uLong b; /* bit buffer */
1692   - uInt k; /* bits in bit buffer */
1693   - Bytef *p; /* input data pointer */
1694   - uInt n; /* bytes available there */
1695   - Bytef *q; /* output window write pointer */
1696   - uInt m; /* bytes to end of window or read pointer */
1697   - Bytef *f; /* pointer to copy strings from */
1698   - inflate_codes_statef *c = s->sub.decode.codes; /* codes state */
1699   -
1700   - /* copy input/output information to locals (UPDATE macro restores) */
1701   - LOAD
1702   -
1703   - /* process input and output based on current state */
1704   - while (1) switch (c->mode)
1705   - { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
1706   - case START: /* x: set up for LEN */
1707   -#ifndef SLOW
1708   - if (m >= 258 && n >= 10)
1709   - {
1710   - UPDATE
1711   - r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
1712   - LOAD
1713   - if (r != Z_OK)
1714   - {
1715   - c->mode = r == Z_STREAM_END ? WASH : BADCODE;
1716   - break;
1717   - }
1718   - }
1719   -#endif /* !SLOW */
1720   - c->sub.code.need = c->lbits;
1721   - c->sub.code.tree = c->ltree;
1722   - c->mode = LEN;
1723   - case LEN: /* i: get length/literal/eob next */
1724   - j = c->sub.code.need;
1725   - NEEDBITS(j)
1726   - t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
1727   - DUMPBITS(t->bits)
1728   - e = (uInt)(t->exop);
1729   - if (e == 0) /* literal */
1730   - {
1731   - c->sub.lit = t->base;
1732   - Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
1733   - "inflate: literal '%c'\n" :
1734   - "inflate: literal 0x%02x\n", t->base));
1735   - c->mode = LIT;
1736   - break;
1737   - }
1738   - if (e & 16) /* length */
1739   - {
1740   - c->sub.copy.get = e & 15;
1741   - c->len = t->base;
1742   - c->mode = LENEXT;
1743   - break;
1744   - }
1745   - if ((e & 64) == 0) /* next table */
1746   - {
1747   - c->sub.code.need = e;
1748   - c->sub.code.tree = t->next;
1749   - break;
1750   - }
1751   - if (e & 32) /* end of block */
1752   - {
1753   - Tracevv((stderr, "inflate: end of block\n"));
1754   - c->mode = WASH;
1755   - break;
1756   - }
1757   - c->mode = BADCODE; /* invalid code */
1758   - z->msg = "invalid literal/length code";
1759   - r = Z_DATA_ERROR;
1760   - LEAVE
1761   - case LENEXT: /* i: getting length extra (have base) */
1762   - j = c->sub.copy.get;
1763   - NEEDBITS(j)
1764   - c->len += (uInt)b & inflate_mask[j];
1765   - DUMPBITS(j)
1766   - c->sub.code.need = c->dbits;
1767   - c->sub.code.tree = c->dtree;
1768   - Tracevv((stderr, "inflate: length %u\n", c->len));
1769   - c->mode = DIST;
1770   - case DIST: /* i: get distance next */
1771   - j = c->sub.code.need;
1772   - NEEDBITS(j)
1773   - t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
1774   - DUMPBITS(t->bits)
1775   - e = (uInt)(t->exop);
1776   - if (e & 16) /* distance */
1777   - {
1778   - c->sub.copy.get = e & 15;
1779   - c->sub.copy.dist = t->base;
1780   - c->mode = DISTEXT;
1781   - break;
1782   - }
1783   - if ((e & 64) == 0) /* next table */
1784   - {
1785   - c->sub.code.need = e;
1786   - c->sub.code.tree = t->next;
1787   - break;
1788   - }
1789   - c->mode = BADCODE; /* invalid code */
1790   - z->msg = "invalid distance code";
1791   - r = Z_DATA_ERROR;
1792   - LEAVE
1793   - case DISTEXT: /* i: getting distance extra */
1794   - j = c->sub.copy.get;
1795   - NEEDBITS(j)
1796   - c->sub.copy.dist += (uInt)b & inflate_mask[j];
1797   - DUMPBITS(j)
1798   - Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist));
1799   - c->mode = COPY;
1800   - case COPY: /* o: copying bytes in window, waiting for space */
1801   -#ifndef __TURBOC__ /* Turbo C bug for following expression */
1802   - f = (uInt)(q - s->window) < c->sub.copy.dist ?
1803   - s->end - (c->sub.copy.dist - (q - s->window)) :
1804   - q - c->sub.copy.dist;
1805   -#else
1806   - f = q - c->sub.copy.dist;
1807   - if ((uInt)(q - s->window) < c->sub.copy.dist)
1808   - f = s->end - (c->sub.copy.dist - (q - s->window));
1809   -#endif
1810   - while (c->len)
1811   - {
1812   - NEEDOUT
1813   - OUTBYTE(*f++)
1814   - if (f == s->end)
1815   - f = s->window;
1816   - c->len--;
1817   - }
1818   - c->mode = START;
1819   - break;
1820   - case LIT: /* o: got literal, waiting for output space */
1821   - NEEDOUT
1822   - OUTBYTE(c->sub.lit)
1823   - c->mode = START;
1824   - break;
1825   - case WASH: /* o: got eob, possibly more output */
1826   - FLUSH
1827   - if (s->read != s->write)
1828   - LEAVE
1829   - c->mode = END;
1830   - case END:
1831   - r = Z_STREAM_END;
1832   - LEAVE
1833   - case BADCODE: /* x: got error */
1834   - r = Z_DATA_ERROR;
1835   - LEAVE
1836   - default:
1837   - r = Z_STREAM_ERROR;
1838   - LEAVE
1839   - }
1840   -}
1841   -
1842   -
1843   -local void inflate_codes_free(c, z)
1844   -inflate_codes_statef *c;
1845   -z_stream *z;
1846   -{
1847   - ZFREE(z, c, sizeof(struct inflate_codes_state));
1848   - Tracev((stderr, "inflate: codes free\n"));
1849   -}
1850   -
1851   -/*+++++*/
1852   -/* inflate_util.c -- data and routines common to blocks and codes
1853   - * Copyright (C) 1995 Mark Adler
1854   - * For conditions of distribution and use, see copyright notice in zlib.h
1855   - */
1856   -
1857   -/* copy as much as possible from the sliding window to the output area */
1858   -local int inflate_flush(s, z, r)
1859   -inflate_blocks_statef *s;
1860   -z_stream *z;
1861   -int r;
1862   -{
1863   - uInt n;
1864   - Bytef *p, *q;
1865   -
1866   - /* local copies of source and destination pointers */
1867   - p = z->next_out;
1868   - q = s->read;
1869   -
1870   - /* compute number of bytes to copy as far as end of window */
1871   - n = (uInt)((q <= s->write ? s->write : s->end) - q);
1872   - if (n > z->avail_out) n = z->avail_out;
1873   - if (n && r == Z_BUF_ERROR) r = Z_OK;
1874   -
1875   - /* update counters */
1876   - z->avail_out -= n;
1877   - z->total_out += n;
1878   -
1879   - /* update check information */
1880   - if (s->checkfn != Z_NULL)
1881   - s->check = (*s->checkfn)(s->check, q, n);
1882   -
1883   - /* copy as far as end of window */
1884   - zmemcpy(p, q, n);
1885   - p += n;
1886   - q += n;
1887   -
1888   - /* see if more to copy at beginning of window */
1889   - if (q == s->end)
1890   - {
1891   - /* wrap pointers */
1892   - q = s->window;
1893   - if (s->write == s->end)
1894   - s->write = s->window;
1895   -
1896   - /* compute bytes to copy */
1897   - n = (uInt)(s->write - q);
1898   - if (n > z->avail_out) n = z->avail_out;
1899   - if (n && r == Z_BUF_ERROR) r = Z_OK;
1900   -
1901   - /* update counters */
1902   - z->avail_out -= n;
1903   - z->total_out += n;
1904   -
1905   - /* update check information */
1906   - if (s->checkfn != Z_NULL)
1907   - s->check = (*s->checkfn)(s->check, q, n);
1908   -
1909   - /* copy */
1910   - zmemcpy(p, q, n);
1911   - p += n;
1912   - q += n;
1913   - }
1914   -
1915   - /* update pointers */
1916   - z->next_out = p;
1917   - s->read = q;
1918   -
1919   - /* done */
1920   - return r;
1921   -}
1922   -
1923   -
1924   -/*+++++*/
1925   -/* inffast.c -- process literals and length/distance pairs fast
1926   - * Copyright (C) 1995 Mark Adler
1927   - * For conditions of distribution and use, see copyright notice in zlib.h
1928   - */
1929   -
1930   -/* simplify the use of the inflate_huft type with some defines */
1931   -#define base more.Base
1932   -#define next more.Next
1933   -#define exop word.what.Exop
1934   -#define bits word.what.Bits
1935   -
1936   -/* macros for bit input with no checking and for returning unused bytes */
1937   -#define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<<k;k+=8;}}
1938   -#define UNGRAB {n+=(c=k>>3);p-=c;k&=7;}
1939   -
1940   -/* Called with number of bytes left to write in window at least 258
1941   - (the maximum string length) and number of input bytes available
1942   - at least ten. The ten bytes are six bytes for the longest length/
1943   - distance pair plus four bytes for overloading the bit buffer. */
1944   -
1945   -local int inflate_fast(bl, bd, tl, td, s, z)
1946   -uInt bl, bd;
1947   -inflate_huft *tl, *td;
1948   -inflate_blocks_statef *s;
1949   -z_stream *z;
1950   -{
1951   - inflate_huft *t; /* temporary pointer */
1952   - uInt e; /* extra bits or operation */
1953   - uLong b; /* bit buffer */
1954   - uInt k; /* bits in bit buffer */
1955   - Bytef *p; /* input data pointer */
1956   - uInt n; /* bytes available there */
1957   - Bytef *q; /* output window write pointer */
1958   - uInt m; /* bytes to end of window or read pointer */
1959   - uInt ml; /* mask for literal/length tree */
1960   - uInt md; /* mask for distance tree */
1961   - uInt c; /* bytes to copy */
1962   - uInt d; /* distance back to copy from */
1963   - Bytef *r; /* copy source pointer */
1964   -
1965   - /* load input, output, bit values */
1966   - LOAD
1967   -
1968   - /* initialize masks */
1969   - ml = inflate_mask[bl];
1970   - md = inflate_mask[bd];
1971   -
1972   - /* do until not enough input or output space for fast loop */
1973   - do { /* assume called with m >= 258 && n >= 10 */
1974   - /* get literal/length code */
1975   - GRABBITS(20) /* max bits for literal/length code */
1976   - if ((e = (t = tl + ((uInt)b & ml))->exop) == 0)
1977   - {
1978   - DUMPBITS(t->bits)
1979   - Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
1980   - "inflate: * literal '%c'\n" :
1981   - "inflate: * literal 0x%02x\n", t->base));
1982   - *q++ = (Byte)t->base;
1983   - m--;
1984   - continue;
1985   - }
1986   - do {
1987   - DUMPBITS(t->bits)
1988   - if (e & 16)
1989   - {
1990   - /* get extra bits for length */
1991   - e &= 15;
1992   - c = t->base + ((uInt)b & inflate_mask[e]);
1993   - DUMPBITS(e)
1994   - Tracevv((stderr, "inflate: * length %u\n", c));
1995   -
1996   - /* decode distance base of block to copy */
1997   - GRABBITS(15); /* max bits for distance code */
1998   - e = (t = td + ((uInt)b & md))->exop;
1999   - do {
2000   - DUMPBITS(t->bits)
2001   - if (e & 16)
2002   - {
2003   - /* get extra bits to add to distance base */
2004   - e &= 15;
2005   - GRABBITS(e) /* get extra bits (up to 13) */
2006   - d = t->base + ((uInt)b & inflate_mask[e]);
2007   - DUMPBITS(e)
2008   - Tracevv((stderr, "inflate: * distance %u\n", d));
2009   -
2010   - /* do the copy */
2011   - m -= c;
2012   - if ((uInt)(q - s->window) >= d) /* offset before dest */
2013   - { /* just copy */
2014   - r = q - d;
2015   - *q++ = *r++; c--; /* minimum count is three, */
2016   - *q++ = *r++; c--; /* so unroll loop a little */
2017   - }
2018   - else /* else offset after destination */
2019   - {
2020   - e = d - (q - s->window); /* bytes from offset to end */
2021   - r = s->end - e; /* pointer to offset */
2022   - if (c > e) /* if source crosses, */
2023   - {
2024   - c -= e; /* copy to end of window */
2025   - do {
2026   - *q++ = *r++;
2027   - } while (--e);
2028   - r = s->window; /* copy rest from start of window */
2029   - }
2030   - }
2031   - do { /* copy all or what's left */
2032   - *q++ = *r++;
2033   - } while (--c);
2034   - break;
2035   - }
2036   - else if ((e & 64) == 0)
2037   - e = (t = t->next + ((uInt)b & inflate_mask[e]))->exop;
2038   - else
2039   - {
2040   - z->msg = "invalid distance code";
2041   - UNGRAB
2042   - UPDATE
2043   - return Z_DATA_ERROR;
2044   - }
2045   - } while (1);
2046   - break;
2047   - }
2048   - if ((e & 64) == 0)
2049   - {
2050   - if ((e = (t = t->next + ((uInt)b & inflate_mask[e]))->exop) == 0)
2051   - {
2052   - DUMPBITS(t->bits)
2053   - Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
2054   - "inflate: * literal '%c'\n" :
2055   - "inflate: * literal 0x%02x\n", t->base));
2056   - *q++ = (Byte)t->base;
2057   - m--;
2058   - break;
2059   - }
2060   - }
2061   - else if (e & 32)
2062   - {
2063   - Tracevv((stderr, "inflate: * end of block\n"));
2064   - UNGRAB
2065   - UPDATE
2066   - return Z_STREAM_END;
2067   - }
2068   - else
2069   - {
2070   - z->msg = "invalid literal/length code";
2071   - UNGRAB
2072   - UPDATE
2073   - return Z_DATA_ERROR;
2074   - }
2075   - } while (1);
2076   - } while (m >= 258 && n >= 10);
2077   -
2078   - /* not enough input or output--restore pointers and return */
2079   - UNGRAB
2080   - UPDATE
2081   - return Z_OK;
2082   -}
2083   -
2084   -
2085   -/*+++++*/
2086   -/* zutil.c -- target dependent utility functions for the compression library
2087   - * Copyright (C) 1995 Jean-loup Gailly.
2088   - * For conditions of distribution and use, see copyright notice in zlib.h
2089   - */
2090   -
2091   -/* From: zutil.c,v 1.8 1995/05/03 17:27:12 jloup Exp */
2092   -
2093   -char *zlib_version = ZLIB_VERSION;
2094   -
2095   -char *z_errmsg[] = {
2096   -"stream end", /* Z_STREAM_END 1 */
2097   -"", /* Z_OK 0 */
2098   -"file error", /* Z_ERRNO (-1) */
2099   -"stream error", /* Z_STREAM_ERROR (-2) */
2100   -"data error", /* Z_DATA_ERROR (-3) */
2101   -"insufficient memory", /* Z_MEM_ERROR (-4) */
2102   -"buffer error", /* Z_BUF_ERROR (-5) */
2103   -""};
2104   -
2105   -
2106   -/*+++++*/
2107   -/* adler32.c -- compute the Adler-32 checksum of a data stream
2108   - * Copyright (C) 1995 Mark Adler
2109   - * For conditions of distribution and use, see copyright notice in zlib.h
2110   - */
2111   -
2112   -/* From: adler32.c,v 1.6 1995/05/03 17:27:08 jloup Exp */
2113   -
2114   -#define BASE 65521L /* largest prime smaller than 65536 */
2115   -#define NMAX 5552
2116   -/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
2117   -
2118   -#define DO1(buf) {s1 += *buf++; s2 += s1;}
2119   -#define DO2(buf) DO1(buf); DO1(buf);
2120   -#define DO4(buf) DO2(buf); DO2(buf);
2121   -#define DO8(buf) DO4(buf); DO4(buf);
2122   -#define DO16(buf) DO8(buf); DO8(buf);
2123   -
2124   -/* ========================================================================= */
2125   -uLong adler32(adler, buf, len)
2126   - uLong adler;
2127   - Bytef *buf;
2128   - uInt len;
2129   -{
2130   - unsigned long s1 = adler & 0xffff;
2131   - unsigned long s2 = (adler >> 16) & 0xffff;
2132   - int k;
2133   -
2134   - if (buf == Z_NULL) return 1L;
2135   -
2136   - while (len > 0) {
2137   - k = len < NMAX ? len : NMAX;
2138   - len -= k;
2139   - while (k >= 16) {
2140   - DO16(buf);
2141   - k -= 16;
2142   - }
2143   - if (k != 0) do {
2144   - DO1(buf);
2145   - } while (--k);
2146   - s1 %= BASE;
2147   - s2 %= BASE;
2148   - }
2149   - return (s2 << 16) | s1;
2150   -}
arch/xtensa/boot/lib/zmem.c
1   -#include "zlib.h"
  1 +#include <linux/zlib.h>
2 2  
3 3 /* bits taken from ppc */
4 4  
5 5  
... ... @@ -9,11 +9,10 @@
9 9 for (;;);
10 10 }
11 11  
12   -void *zalloc(void *x, unsigned items, unsigned size)
  12 +void *zalloc(unsigned size)
13 13 {
14 14 void *p = avail_ram;
15 15  
16   - size *= items;
17 16 size = (size + 7) & -8;
18 17 avail_ram += size;
19 18 if (avail_ram > end_avail) {
... ... @@ -24,11 +23,6 @@
24 23 return p;
25 24 }
26 25  
27   -void zfree(void *x, void *addr, unsigned nb)
28   -{
29   -}
30   -
31   -
32 26 #define HEAD_CRC 2
33 27 #define EXTRA_FIELD 4
34 28 #define ORIG_NAME 8
... ... @@ -43,7 +37,6 @@
43 37 int r, i, flags;
44 38  
45 39 /* skip header */
46   -
47 40 i = 10;
48 41 flags = src[3];
49 42 if (src[2] != DEFLATED || (flags & RESERVED) != 0) {
... ... @@ -65,9 +58,8 @@
65 58 exit();
66 59 }
67 60  
68   - s.zalloc = zalloc;
69   - s.zfree = zfree;
70   - r = inflateInit2(&s, -MAX_WBITS);
  61 + s.workspace = zalloc(zlib_inflate_workspacesize());
  62 + r = zlib_inflateInit2(&s, -MAX_WBITS);
71 63 if (r != Z_OK) {
72 64 //puts("inflateInit2 returned "); puthex(r); puts("\n");
73 65 exit();
74 66  
... ... @@ -76,12 +68,12 @@
76 68 s.avail_in = *lenp - i;
77 69 s.next_out = dst;
78 70 s.avail_out = dstlen;
79   - r = inflate(&s, Z_FINISH);
  71 + r = zlib_inflate(&s, Z_FINISH);
80 72 if (r != Z_OK && r != Z_STREAM_END) {
81 73 //puts("inflate returned "); puthex(r); puts("\n");
82 74 exit();
83 75 }
84 76 *lenp = s.next_out - (unsigned char *) dst;
85   - inflateEnd(&s);
  77 + zlib_inflateEnd(&s);
86 78 }