#include #include #include "zutil.h" void main __P((void)); /* This test is in honor of Ed Hamrick who suggested that the interface to inflate be a byte at a time--this implements that, and is, of course, monumentally slow. It has the virtue though of stressing the push-pull interface for testing purposes. */ void main() { int a, r; char c; z_stream z; z.zalloc = Z_NULL; z.zfree = Z_NULL; r = inflateInit(&z); if (r != Z_OK) fprintf(stderr, "init error: %s\n", z_errmsg[1 - r]); while ((a = getchar()) != EOF) { /* feed one byte of input */ z.avail_out = 0; c = (char)a; z.next_in = (Byte*)&c; z.avail_in = 1; r = inflate(&z, 0); if (r == Z_STREAM_END) break; if (r != Z_OK) { fprintf(stderr, "inflate error: %s\n", z_errmsg[1 - r]); break; } if (z.avail_in != 0) { fprintf(stderr, "inflate didn't eat byte and didn't say buf err!\n"); break; } /* empty output one byte at a time */ while (1) { z.next_out = (Byte*)&c; z.avail_out = 1; r = inflate(&z, 0); if (r == Z_STREAM_END) break; if (r != Z_OK && r != Z_BUF_ERROR) { fprintf(stderr, "inflate error: %s\n", z_errmsg[1 - r]); break; } if (z.avail_out == 0) putchar(c); else break; } if (r != Z_OK && r != Z_BUF_ERROR) break; } inflateEnd(&z); fprintf(stderr, "%ld bytes in, %ld bytes out\n", z.total_in, z.total_out); if (z.msg != NULL) fprintf(stderr, "msg is <%s>\n", z.msg); }