diff options
-rw-r--r-- | src/mkhelp.pl | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/mkhelp.pl b/src/mkhelp.pl index 871aabcb3..7fb37db58 100644 --- a/src/mkhelp.pl +++ b/src/mkhelp.pl @@ -120,6 +120,7 @@ HEAD ; if($c) { print <<HEAD +#include <stdlib.h> #include <zlib.h> static const unsigned char hugehelpgz[] = { /* This mumbo-jumbo is the huge help text compressed with gzip. @@ -144,10 +145,11 @@ HEAD print "\n};\n"; print <<EOF +#define BUF_SIZE 0x10000 /* Decompress and send to stdout a gzip-compressed buffer */ void hugehelp(void) { - unsigned char buf[0x10000]; + unsigned char* buf; int status,headerlen; z_stream z; @@ -165,17 +167,21 @@ void hugehelp(void) if (inflateInit2(&z, -MAX_WBITS) != Z_OK) return; - while(1) { - z.avail_out = (int)sizeof(buf); - z.next_out = buf; - status = inflate(&z, Z_SYNC_FLUSH); - if (status == Z_OK || status == Z_STREAM_END) { - fwrite(buf, sizeof(buf) - z.avail_out, 1, stdout); - if (status == Z_STREAM_END) - break; + buf = malloc(BUF_SIZE); + if (buf) { + while(1) { + z.avail_out = BUF_SIZE; + z.next_out = buf; + status = inflate(&z, Z_SYNC_FLUSH); + if (status == Z_OK || status == Z_STREAM_END) { + fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout); + if (status == Z_STREAM_END) + break; + } + else + break; /* Error */ } - else - break; /* Error */ + free(buf); } inflateEnd(&z); } |