1 2Overview 3======== 4 5This directory contains an update to the ZLib interface unit, 6distributed by Borland as a Delphi supplemental component. 7 8The original ZLib unit is Copyright (c) 1997,99 Borland Corp., 9and is based on zlib version 1.0.4. There are a series of bugs 10and security problems associated with that old zlib version, and 11we recommend the users to update their ZLib unit. 12 13 14Summary of modifications 15======================== 16 17- Improved makefile, adapted to zlib version 1.2.1. 18 19- Some field types from TZStreamRec are changed from Integer to 20 Longint, for consistency with the zlib.h header, and for 64-bit 21 readiness. 22 23- The zlib_version constant is updated. 24 25- The new Z_RLE strategy has its corresponding symbolic constant. 26 27- The allocation and deallocation functions and function types 28 (TAlloc, TFree, zlibAllocMem and zlibFreeMem) are now cdecl, 29 and _malloc and _free are added as C RTL stubs. As a result, 30 the original C sources of zlib can be compiled out of the box, 31 and linked to the ZLib unit. 32 33 34Suggestions for improvements 35============================ 36 37Currently, the ZLib unit provides only a limited wrapper around 38the zlib library, and much of the original zlib functionality is 39missing. Handling compressed file formats like ZIP/GZIP or PNG 40cannot be implemented without having this functionality. 41Applications that handle these formats are either using their own, 42duplicated code, or not using the ZLib unit at all. 43 44Here are a few suggestions: 45 46- Checksum class wrappers around adler32() and crc32(), similar 47 to the Java classes that implement the java.util.zip.Checksum 48 interface. 49 50- The ability to read and write raw deflate streams, without the 51 zlib stream header and trailer. Raw deflate streams are used 52 in the ZIP file format. 53 54- The ability to read and write gzip streams, used in the GZIP 55 file format, and normally produced by the gzip program. 56 57- The ability to select a different compression strategy, useful 58 to PNG and MNG image compression, and to multimedia compression 59 in general. Besides the compression level 60 61 TCompressionLevel = (clNone, clFastest, clDefault, clMax); 62 63 which, in fact, could have used the 'z' prefix and avoided 64 TColor-like symbols 65 66 TCompressionLevel = (zcNone, zcFastest, zcDefault, zcMax); 67 68 there could be a compression strategy 69 70 TCompressionStrategy = (zsDefault, zsFiltered, zsHuffmanOnly, zsRle); 71 72- ZIP and GZIP stream handling via TStreams. 73 74 75-- 76Cosmin Truta <cosmint@cs.ubbcluj.ro> 77