19e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project(* example.c -- usage example of the zlib compression library 29e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Copyright (C) 1995-2003 Jean-loup Gailly. 39e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * For conditions of distribution and use, see copyright notice in zlib.h 49e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 59e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Pascal translation 69e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Copyright (C) 1998 by Jacques Nomssi Nzali. 79e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * For conditions of distribution and use, see copyright notice in readme.txt 89e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 99e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Adaptation to the zlibpas interface 109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Copyright (C) 2003 by Cosmin Truta. 119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * For conditions of distribution and use, see copyright notice in readme.txt 129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprogram example; 159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$DEFINE TEST_COMPRESS} 179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{DO NOT $DEFINE TEST_GZIO} 189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$DEFINE TEST_DEFLATE} 199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$DEFINE TEST_INFLATE} 209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$DEFINE TEST_FLUSH} 219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$DEFINE TEST_SYNC} 229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$DEFINE TEST_DICT} 239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectuses SysUtils, zlibpas; 259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectconst TESTFILE = 'foo.gz'; 279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project(* "hello world" would be more standard, but the repeated "hello" 299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * stresses the compression code better, sorry... 309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectconst hello: PChar = 'hello, hello!'; 329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectconst dictionary: PChar = 'hello'; 349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvar dictId: LongInt; (* Adler32 value of the dictionary *) 369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprocedure CHECK_ERR(err: Integer; msg: String); 389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if err <> Z_OK then 409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn(msg, ' error: ', err); 429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend; 459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprocedure EXIT_ERR(const msg: String); 479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('Error: ', msg); 499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend; 519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project(* =========================================================================== 539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Test compress and uncompress 549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$IFDEF TEST_COMPRESS} 569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprocedure test_compress(compr: Pointer; comprLen: LongInt; 579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uncompr: Pointer; uncomprLen: LongInt); 589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvar err: Integer; 599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project len: LongInt; 609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project len := StrLen(hello)+1; 629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := compress(compr, comprLen, hello, len); 649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'compress'); 659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project StrCopy(PChar(uncompr), 'garbage'); 679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := uncompress(uncompr, uncomprLen, compr, comprLen); 699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'uncompress'); 709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if StrComp(PChar(uncompr), hello) <> 0 then 729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project EXIT_ERR('bad uncompress') 739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project else 749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('uncompress(): ', PChar(uncompr)); 759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend; 769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$ENDIF} 779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project(* =========================================================================== 799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Test read/write of .gz files 809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$IFDEF TEST_GZIO} 829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprocedure test_gzio(const fname: PChar; (* compressed file name *) 839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uncompr: Pointer; 849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uncomprLen: LongInt); 859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvar err: Integer; 869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project len: Integer; 879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project zfile: gzFile; 889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project pos: LongInt; 899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project len := StrLen(hello)+1; 919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project zfile := gzopen(fname, 'wb'); 939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if zfile = NIL then 949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('gzopen error'); 969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project gzputc(zfile, 'h'); 999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if gzputs(zfile, 'ello') <> 4 then 1009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 1019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('gzputs err: ', gzerror(zfile, err)); 1029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 1039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 1049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$IFDEF GZ_FORMAT_STRING} 1059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if gzprintf(zfile, ', %s!', 'hello') <> 8 then 1069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 1079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('gzprintf err: ', gzerror(zfile, err)); 1089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 1099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 1109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$ELSE} 1119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if gzputs(zfile, ', hello!') <> 8 then 1129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 1139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('gzputs err: ', gzerror(zfile, err)); 1149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 1159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 1169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$ENDIF} 1179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project gzseek(zfile, 1, SEEK_CUR); (* add one zero byte *) 1189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project gzclose(zfile); 1199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project zfile := gzopen(fname, 'rb'); 1219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if zfile = NIL then 1229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 1239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('gzopen error'); 1249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 1259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 1269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project StrCopy(PChar(uncompr), 'garbage'); 1289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if gzread(zfile, uncompr, uncomprLen) <> len then 1309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 1319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('gzread err: ', gzerror(zfile, err)); 1329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 1339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 1349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if StrComp(PChar(uncompr), hello) <> 0 then 1359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 1369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('bad gzread: ', PChar(uncompr)); 1379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 1389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end 1399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project else 1409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('gzread(): ', PChar(uncompr)); 1419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project pos := gzseek(zfile, -8, SEEK_CUR); 1439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if (pos <> 6) or (gztell(zfile) <> pos) then 1449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 1459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('gzseek error, pos=', pos, ', gztell=', gztell(zfile)); 1469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 1479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 1489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if gzgetc(zfile) <> ' ' then 1509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 1519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('gzgetc error'); 1529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 1539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 1549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if gzungetc(' ', zfile) <> ' ' then 1569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 1579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('gzungetc error'); 1589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 1599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 1609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project gzgets(zfile, PChar(uncompr), uncomprLen); 1629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uncomprLen := StrLen(PChar(uncompr)); 1639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if uncomprLen <> 7 then (* " hello!" *) 1649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 1659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('gzgets err after gzseek: ', gzerror(zfile, err)); 1669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 1679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 1689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if StrComp(PChar(uncompr), hello + 6) <> 0 then 1699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 1709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('bad gzgets after gzseek'); 1719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 1729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end 1739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project else 1749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('gzgets() after gzseek: ', PChar(uncompr)); 1759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project gzclose(zfile); 1779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend; 1789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$ENDIF} 1799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project(* =========================================================================== 1819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Test deflate with small buffers 1829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 1839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$IFDEF TEST_DEFLATE} 1849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprocedure test_deflate(compr: Pointer; comprLen: LongInt); 1859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvar c_stream: z_stream; (* compression stream *) 1869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err: Integer; 1879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project len: LongInt; 1889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 1899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project len := StrLen(hello)+1; 1909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.zalloc := NIL; 1929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.zfree := NIL; 1939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.opaque := NIL; 1949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION); 1969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflateInit'); 1979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.next_in := hello; 1999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.next_out := compr; 2009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project while (c_stream.total_in <> len) and 2029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project (c_stream.total_out < comprLen) do 2039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 2049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.avail_out := 1; { force small buffers } 2059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.avail_in := 1; 2069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflate(c_stream, Z_NO_FLUSH); 2079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflate'); 2089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 2099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project (* Finish the stream, still forcing small buffers: *) 2119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project while TRUE do 2129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 2139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.avail_out := 1; 2149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflate(c_stream, Z_FINISH); 2159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if err = Z_STREAM_END then 2169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project break; 2179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflate'); 2189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 2199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflateEnd(c_stream); 2219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflateEnd'); 2229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend; 2239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$ENDIF} 2249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project(* =========================================================================== 2269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Test inflate with small buffers 2279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 2289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$IFDEF TEST_INFLATE} 2299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprocedure test_inflate(compr: Pointer; comprLen : LongInt; 2309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uncompr: Pointer; uncomprLen : LongInt); 2319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvar err: Integer; 2329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream: z_stream; (* decompression stream *) 2339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 2349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project StrCopy(PChar(uncompr), 'garbage'); 2359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.zalloc := NIL; 2379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.zfree := NIL; 2389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.opaque := NIL; 2399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.next_in := compr; 2419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.avail_in := 0; 2429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.next_out := uncompr; 2439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflateInit(d_stream); 2459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'inflateInit'); 2469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project while (d_stream.total_out < uncomprLen) and 2489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project (d_stream.total_in < comprLen) do 2499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 2509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.avail_out := 1; (* force small buffers *) 2519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.avail_in := 1; 2529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflate(d_stream, Z_NO_FLUSH); 2539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if err = Z_STREAM_END then 2549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project break; 2559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'inflate'); 2569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 2579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflateEnd(d_stream); 2599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'inflateEnd'); 2609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if StrComp(PChar(uncompr), hello) <> 0 then 2629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project EXIT_ERR('bad inflate') 2639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project else 2649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('inflate(): ', PChar(uncompr)); 2659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend; 2669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$ENDIF} 2679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project(* =========================================================================== 2699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Test deflate with large buffers and dynamic change of compression level 2709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 2719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$IFDEF TEST_DEFLATE} 2729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprocedure test_large_deflate(compr: Pointer; comprLen: LongInt; 2739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uncompr: Pointer; uncomprLen: LongInt); 2749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvar c_stream: z_stream; (* compression stream *) 2759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err: Integer; 2769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 2779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.zalloc := NIL; 2789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.zfree := NIL; 2799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.opaque := NIL; 2809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflateInit(c_stream, Z_BEST_SPEED); 2829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflateInit'); 2839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.next_out := compr; 2859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.avail_out := Integer(comprLen); 2869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project (* At this point, uncompr is still mostly zeroes, so it should compress 2889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * very well: 2899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 2909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.next_in := uncompr; 2919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.avail_in := Integer(uncomprLen); 2929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflate(c_stream, Z_NO_FLUSH); 2939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflate'); 2949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if c_stream.avail_in <> 0 then 2959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project EXIT_ERR('deflate not greedy'); 2969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project (* Feed in already compressed data and switch to no compression: *) 2989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project deflateParams(c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY); 2999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.next_in := compr; 3009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.avail_in := Integer(comprLen div 2); 3019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflate(c_stream, Z_NO_FLUSH); 3029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflate'); 3039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project (* Switch back to compressing mode: *) 3059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project deflateParams(c_stream, Z_BEST_COMPRESSION, Z_FILTERED); 3069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.next_in := uncompr; 3079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.avail_in := Integer(uncomprLen); 3089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflate(c_stream, Z_NO_FLUSH); 3099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflate'); 3109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflate(c_stream, Z_FINISH); 3129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if err <> Z_STREAM_END then 3139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project EXIT_ERR('deflate should report Z_STREAM_END'); 3149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflateEnd(c_stream); 3169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflateEnd'); 3179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend; 3189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$ENDIF} 3199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project(* =========================================================================== 3219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Test inflate with large buffers 3229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 3239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$IFDEF TEST_INFLATE} 3249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprocedure test_large_inflate(compr: Pointer; comprLen: LongInt; 3259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uncompr: Pointer; uncomprLen: LongInt); 3269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvar err: Integer; 3279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream: z_stream; (* decompression stream *) 3289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 3299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project StrCopy(PChar(uncompr), 'garbage'); 3309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.zalloc := NIL; 3329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.zfree := NIL; 3339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.opaque := NIL; 3349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.next_in := compr; 3369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.avail_in := Integer(comprLen); 3379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflateInit(d_stream); 3399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'inflateInit'); 3409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project while TRUE do 3429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 3439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.next_out := uncompr; (* discard the output *) 3449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.avail_out := Integer(uncomprLen); 3459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflate(d_stream, Z_NO_FLUSH); 3469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if err = Z_STREAM_END then 3479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project break; 3489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'large inflate'); 3499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 3509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflateEnd(d_stream); 3529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'inflateEnd'); 3539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if d_stream.total_out <> 2 * uncomprLen + comprLen div 2 then 3559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 3569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('bad large inflate: ', d_stream.total_out); 3579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Halt(1); 3589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end 3599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project else 3609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('large_inflate(): OK'); 3619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend; 3629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$ENDIF} 3639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project(* =========================================================================== 3659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Test deflate with full flush 3669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 3679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$IFDEF TEST_FLUSH} 3689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprocedure test_flush(compr: Pointer; var comprLen : LongInt); 3699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvar c_stream: z_stream; (* compression stream *) 3709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err: Integer; 3719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project len: Integer; 3729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 3739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project len := StrLen(hello)+1; 3749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.zalloc := NIL; 3769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.zfree := NIL; 3779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.opaque := NIL; 3789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION); 3809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflateInit'); 3819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.next_in := hello; 3839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.next_out := compr; 3849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.avail_in := 3; 3859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.avail_out := Integer(comprLen); 3869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflate(c_stream, Z_FULL_FLUSH); 3879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflate'); 3889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Inc(PByteArray(compr)^[3]); (* force an error in first compressed block *) 3909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.avail_in := len - 3; 3919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflate(c_stream, Z_FINISH); 3939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if err <> Z_STREAM_END then 3949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflate'); 3959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflateEnd(c_stream); 3979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflateEnd'); 3989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project comprLen := c_stream.total_out; 4009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend; 4019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$ENDIF} 4029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project(* =========================================================================== 4049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Test inflateSync() 4059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 4069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$IFDEF TEST_SYNC} 4079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprocedure test_sync(compr: Pointer; comprLen: LongInt; 4089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uncompr: Pointer; uncomprLen : LongInt); 4099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvar err: Integer; 4109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream: z_stream; (* decompression stream *) 4119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 4129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project StrCopy(PChar(uncompr), 'garbage'); 4139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.zalloc := NIL; 4159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.zfree := NIL; 4169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.opaque := NIL; 4179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.next_in := compr; 4199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.avail_in := 2; (* just read the zlib header *) 4209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflateInit(d_stream); 4229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'inflateInit'); 4239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.next_out := uncompr; 4259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.avail_out := Integer(uncomprLen); 4269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project inflate(d_stream, Z_NO_FLUSH); 4289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'inflate'); 4299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.avail_in := Integer(comprLen-2); (* read all compressed data *) 4319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflateSync(d_stream); (* but skip the damaged part *) 4329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'inflateSync'); 4339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflate(d_stream, Z_FINISH); 4359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if err <> Z_DATA_ERROR then 4369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project EXIT_ERR('inflate should report DATA_ERROR'); 4379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project (* Because of incorrect adler32 *) 4389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflateEnd(d_stream); 4409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'inflateEnd'); 4419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('after inflateSync(): hel', PChar(uncompr)); 4439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend; 4449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$ENDIF} 4459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project(* =========================================================================== 4479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Test deflate with preset dictionary 4489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 4499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$IFDEF TEST_DICT} 4509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprocedure test_dict_deflate(compr: Pointer; comprLen: LongInt); 4519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvar c_stream: z_stream; (* compression stream *) 4529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err: Integer; 4539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 4549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.zalloc := NIL; 4559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.zfree := NIL; 4569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.opaque := NIL; 4579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflateInit(c_stream, Z_BEST_COMPRESSION); 4599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflateInit'); 4609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflateSetDictionary(c_stream, dictionary, StrLen(dictionary)); 4629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflateSetDictionary'); 4639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project dictId := c_stream.adler; 4659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.next_out := compr; 4669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.avail_out := Integer(comprLen); 4679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.next_in := hello; 4699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project c_stream.avail_in := StrLen(hello)+1; 4709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflate(c_stream, Z_FINISH); 4729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if err <> Z_STREAM_END then 4739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project EXIT_ERR('deflate should report Z_STREAM_END'); 4749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := deflateEnd(c_stream); 4769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'deflateEnd'); 4779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend; 4789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$ENDIF} 4799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project(* =========================================================================== 4819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Test inflate with a preset dictionary 4829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 4839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$IFDEF TEST_DICT} 4849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectprocedure test_dict_inflate(compr: Pointer; comprLen: LongInt; 4859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uncompr: Pointer; uncomprLen: LongInt); 4869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvar err: Integer; 4879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream: z_stream; (* decompression stream *) 4889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 4899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project StrCopy(PChar(uncompr), 'garbage'); 4909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.zalloc := NIL; 4929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.zfree := NIL; 4939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.opaque := NIL; 4949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.next_in := compr; 4969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.avail_in := Integer(comprLen); 4979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 4989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflateInit(d_stream); 4999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'inflateInit'); 5009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.next_out := uncompr; 5029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project d_stream.avail_out := Integer(uncomprLen); 5039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project while TRUE do 5059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 5069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflate(d_stream, Z_NO_FLUSH); 5079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if err = Z_STREAM_END then 5089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project break; 5099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if err = Z_NEED_DICT then 5109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project begin 5119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if d_stream.adler <> dictId then 5129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project EXIT_ERR('unexpected dictionary'); 5139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflateSetDictionary(d_stream, dictionary, StrLen(dictionary)); 5149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 5159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'inflate with dict'); 5169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project end; 5179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project err := inflateEnd(d_stream); 5199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project CHECK_ERR(err, 'inflateEnd'); 5209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if StrComp(PChar(uncompr), hello) <> 0 then 5229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project EXIT_ERR('bad inflate with dict') 5239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project else 5249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('inflate with dictionary: ', PChar(uncompr)); 5259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend; 5269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{$ENDIF} 5279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvar compr, uncompr: Pointer; 5299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project comprLen, uncomprLen: LongInt; 5309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectbegin 5329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if zlibVersion^ <> ZLIB_VERSION[1] then 5339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project EXIT_ERR('Incompatible zlib version'); 5349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('zlib version: ', zlibVersion); 5369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('zlib compile flags: ', Format('0x%x', [zlibCompileFlags])); 5379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project comprLen := 10000 * SizeOf(Integer); (* don't overflow on MSDOS *) 5399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uncomprLen := comprLen; 5409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project GetMem(compr, comprLen); 5419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project GetMem(uncompr, uncomprLen); 5429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if (compr = NIL) or (uncompr = NIL) then 5439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project EXIT_ERR('Out of memory'); 5449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project (* compr and uncompr are cleared to avoid reading uninitialized 5459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * data and to ensure that uncompr compresses well. 5469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project *) 5479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project FillChar(compr^, comprLen, 0); 5489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project FillChar(uncompr^, uncomprLen, 0); 5499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$IFDEF TEST_COMPRESS} 5519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('** Testing compress'); 5529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project test_compress(compr, comprLen, uncompr, uncomprLen); 5539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$ENDIF} 5549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$IFDEF TEST_GZIO} 5569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('** Testing gzio'); 5579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if ParamCount >= 1 then 5589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project test_gzio(ParamStr(1), uncompr, uncomprLen) 5599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project else 5609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project test_gzio(TESTFILE, uncompr, uncomprLen); 5619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$ENDIF} 5629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$IFDEF TEST_DEFLATE} 5649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('** Testing deflate with small buffers'); 5659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project test_deflate(compr, comprLen); 5669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$ENDIF} 5679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$IFDEF TEST_INFLATE} 5689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('** Testing inflate with small buffers'); 5699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project test_inflate(compr, comprLen, uncompr, uncomprLen); 5709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$ENDIF} 5719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$IFDEF TEST_DEFLATE} 5739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('** Testing deflate with large buffers'); 5749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project test_large_deflate(compr, comprLen, uncompr, uncomprLen); 5759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$ENDIF} 5769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$IFDEF TEST_INFLATE} 5779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('** Testing inflate with large buffers'); 5789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project test_large_inflate(compr, comprLen, uncompr, uncomprLen); 5799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$ENDIF} 5809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$IFDEF TEST_FLUSH} 5829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('** Testing deflate with full flush'); 5839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project test_flush(compr, comprLen); 5849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$ENDIF} 5859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$IFDEF TEST_SYNC} 5869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('** Testing inflateSync'); 5879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project test_sync(compr, comprLen, uncompr, uncomprLen); 5889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$ENDIF} 5899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project comprLen := uncomprLen; 5909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$IFDEF TEST_DICT} 5929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WriteLn('** Testing deflate and inflate with preset dictionary'); 5939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project test_dict_deflate(compr, comprLen); 5949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project test_dict_inflate(compr, comprLen, uncompr, uncomprLen); 5959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project {$ENDIF} 5969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 5979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project FreeMem(compr, comprLen); 5989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project FreeMem(uncompr, uncomprLen); 5999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectend. 600