23#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
26# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
28# define SET_BINARY_MODE(file)
51 return m >
size ? m : (size_t)(-1);
90 int ret, put = 0,
fail = 0;
93 unsigned char *source =
NULL, *dest;
95 unsigned long sourcelen, destlen;
100 if (arg[1] ==
'w' && arg[2] == 0)
102 else if (arg[1] ==
'f' && arg[2] == 0)
104 else if (arg[1] >=
'0' && arg[1] <=
'9')
105 skip = (unsigned)atoi(arg + 1);
107 fprintf(stderr,
"invalid option %s\n", arg);
112 fprintf(stderr,
"only one file name allowed\n");
118 if (source ==
NULL) {
119 fprintf(stderr,
"memory allocation failure\n");
123 fprintf(stderr,
"could not read %s, or it was empty\n",
129 fprintf(stderr,
"skip request of %d leaves no input\n",
skip);
136 sourcelen = (
unsigned long)
len;
137 ret =
puff(
NIL, &destlen, source +
skip, &sourcelen);
139 fprintf(stderr,
"puff() failed with return code %d\n", ret);
141 fprintf(stderr,
"puff() succeeded uncompressing %lu bytes\n", destlen);
142 if (sourcelen <
len) fprintf(stderr,
"%lu compressed bytes unused\n",
147 if (put && ret == 0) {
152 fprintf(stderr,
"memory allocation failure\n");
156 puff(dest, &destlen, source +
skip, &sourcelen);
158 fwrite(dest, 1, destlen, stdout);
unsigned in(void *in_desc, z_const unsigned char **buf)
void skip(file *in, unsigned n)
typedef long(ZCALLBACK *tell_file_func) OF((voidpf opaque
int puff(unsigned char *dest, unsigned long *destlen, const unsigned char *source, unsigned long *sourcelen)
#define SET_BINARY_MODE(file)
size_t bythirds(size_t size)
void * load(const char *name, size_t *len)