From f93cd82a9a7094ad90fd19bbc6ccf6f4627f8060 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Sat, 4 Sep 1999 22:13:13 +0200 Subject: bzip2-0.9.5d --- bzlib.c | 138 +++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 67 insertions(+), 71 deletions(-) (limited to 'bzlib.c') diff --git a/bzlib.c b/bzlib.c index 362e8ff..24e8bd5 100644 --- a/bzlib.c +++ b/bzlib.c @@ -8,7 +8,7 @@ This file is a part of bzip2 and/or libbzip2, a program and library for lossless, block-sorting data compression. - Copyright (C) 1996-1998 Julian R Seward. All rights reserved. + Copyright (C) 1996-1999 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -41,9 +41,9 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - Julian Seward, Guildford, Surrey, UK. + Julian Seward, Cambridge, UK. jseward@acm.org - bzip2/libbzip2 version 0.9.0c of 18 October 1998 + bzip2/libbzip2 version 0.9.5 of 24 May 1999 This program is based on (at least) the work of: Mike Burrows @@ -86,14 +86,14 @@ void bz__AssertH__fail ( int errcode ) { fprintf(stderr, - "\n\nbzip2/libbzip2, v0.9.0c: internal error number %d.\n" - "This is a bug in bzip2/libbzip2, v0.9.0c. Please report\n" + "\n\nbzip2/libbzip2, v0.9.5d: internal error number %d.\n" + "This is a bug in bzip2/libbzip2, v0.9.5d. Please report\n" "it to me at: jseward@acm.org. If this happened when\n" "you were using some program which uses libbzip2 as a\n" "component, you should also report this bug to the author(s)\n" "of that program. Please make an effort to report this bug;\n" "timely and accurate bug reports eventually lead to higher\n" - "quality software. Thx. Julian Seward, 18 October 1998.\n\n", + "quality software. Thanks. Julian Seward, 4 Sept 1999.\n\n", errcode ); exit(3); @@ -171,29 +171,23 @@ int BZ_API(bzCompressInit) if (s == NULL) return BZ_MEM_ERROR; s->strm = strm; - s->block = NULL; - s->quadrant = NULL; - s->zptr = NULL; - s->ftab = NULL; - - n = 100000 * blockSize100k; - s->block = BZALLOC( (n + BZ_NUM_OVERSHOOT_BYTES) * sizeof(UChar) ); - s->quadrant = BZALLOC( (n + BZ_NUM_OVERSHOOT_BYTES) * sizeof(Int16) ); - s->zptr = BZALLOC( n * sizeof(Int32) ); - s->ftab = BZALLOC( 65537 * sizeof(Int32) ); - - if (s->block == NULL || s->quadrant == NULL || - s->zptr == NULL || s->ftab == NULL) { - if (s->block != NULL) BZFREE(s->block); - if (s->quadrant != NULL) BZFREE(s->quadrant); - if (s->zptr != NULL) BZFREE(s->zptr); - if (s->ftab != NULL) BZFREE(s->ftab); - if (s != NULL) BZFREE(s); + s->arr1 = NULL; + s->arr2 = NULL; + s->ftab = NULL; + + n = 100000 * blockSize100k; + s->arr1 = BZALLOC( n * sizeof(UInt32) ); + s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) ); + s->ftab = BZALLOC( 65537 * sizeof(UInt32) ); + + if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) { + if (s->arr1 != NULL) BZFREE(s->arr1); + if (s->arr2 != NULL) BZFREE(s->arr2); + if (s->ftab != NULL) BZFREE(s->ftab); + if (s != NULL) BZFREE(s); return BZ_MEM_ERROR; } - s->szptr = (UInt16*)(s->zptr); - s->blockNo = 0; s->state = BZ_S_INPUT; s->mode = BZ_M_RUNNING; @@ -202,7 +196,12 @@ int BZ_API(bzCompressInit) s->nblockMAX = 100000 * blockSize100k - 19; s->verbosity = verbosity; s->workFactor = workFactor; - s->nBlocksRandomised = 0; + + s->block = (UInt16*)s->arr2; + s->mtfv = (UInt16*)s->arr1; + s->zbits = NULL; + s->ptr = (UInt32*)s->arr1; + strm->state = s; strm->total_in = 0; strm->total_out = 0; @@ -224,24 +223,24 @@ void add_pair_to_block ( EState* s ) s->inUse[s->state_in_ch] = True; switch (s->state_in_len) { case 1: - s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UInt16)ch; s->nblock++; break; case 2: - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UInt16)ch; s->nblock++; + s->block[s->nblock] = (UInt16)ch; s->nblock++; break; case 3: - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)ch; s->nblock++; + s->block[s->nblock] = (UInt16)ch; s->nblock++; + s->block[s->nblock] = (UInt16)ch; s->nblock++; + s->block[s->nblock] = (UInt16)ch; s->nblock++; break; default: s->inUse[s->state_in_len-4] = True; - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)ch; s->nblock++; - s->block[s->nblock] = (UChar)(s->state_in_len-4); + s->block[s->nblock] = (UInt16)ch; s->nblock++; + s->block[s->nblock] = (UInt16)ch; s->nblock++; + s->block[s->nblock] = (UInt16)ch; s->nblock++; + s->block[s->nblock] = (UInt16)ch; s->nblock++; + s->block[s->nblock] = ((UInt16)(s->state_in_len-4)); s->nblock++; break; } @@ -267,7 +266,7 @@ void flush_RL ( EState* s ) UChar ch = (UChar)(zs->state_in_ch); \ BZ_UPDATE_CRC( zs->blockCRC, ch ); \ zs->inUse[zs->state_in_ch] = True; \ - zs->block[zs->nblock] = (UChar)ch; \ + zs->block[zs->nblock] = (UInt16)ch; \ zs->nblock++; \ zs->state_in_ch = zchh; \ } \ @@ -343,7 +342,7 @@ Bool copy_output_until_stop ( EState* s ) if (s->state_out_pos >= s->numZ) break; progress_out = True; - *(s->strm->next_out) = ((UChar*)(s->quadrant))[s->state_out_pos]; + *(s->strm->next_out) = s->zbits[s->state_out_pos]; s->state_out_pos++; s->strm->avail_out--; s->strm->next_out++; @@ -382,7 +381,7 @@ Bool handle_compress ( bz_stream* strm ) progress_in |= copy_input_until_stop ( s ); if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) { flush_RL ( s ); - compressBlock ( s, s->mode == BZ_M_FINISHING ); + compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) ); s->state = BZ_S_OUTPUT; } else @@ -470,10 +469,9 @@ int BZ_API(bzCompressEnd) ( bz_stream *strm ) if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; - if (s->block != NULL) BZFREE(s->block); - if (s->quadrant != NULL) BZFREE(s->quadrant); - if (s->zptr != NULL) BZFREE(s->zptr); - if (s->ftab != NULL) BZFREE(s->ftab); + if (s->arr1 != NULL) BZFREE(s->arr1); + if (s->arr2 != NULL) BZFREE(s->arr2); + if (s->ftab != NULL) BZFREE(s->ftab); BZFREE(strm->state); strm->state = NULL; @@ -816,7 +814,8 @@ int BZ_API(bzDecompress) ( bz_stream *strm ) } AssertH ( 0, 6001 ); - /*notreached*/ + + return 0; /*NOTREACHED*/ } @@ -1284,7 +1283,7 @@ int BZ_API(bzBuffToBuffDecompress) errhandler: bzDecompressEnd ( &strm ); - return BZ_SEQUENCE_ERROR; + return ret; } @@ -1339,24 +1338,18 @@ BZFILE * bzopen_or_bzdopen int smallMode = 0; int nUnused = 0; - if(mode==NULL){return NULL;} - while(*mode){ - switch(*mode){ + if (mode == NULL) return NULL; + while (*mode) { + switch (*mode) { case 'r': - writing = 0;break; + writing = 0; break; case 'w': - writing = 1;break; + writing = 1; break; case 's': - smallMode = 1;break; + smallMode = 1; break; default: - if(isdigit(*mode)){ - blockSize100k = 0; - while(isdigit(*mode)){ - blockSize100k = blockSize100k*10 + *mode-'0'; - mode++; - } - }else{ - /* ignore */ + if (isdigit((int)(*mode))) { + blockSize100k = *mode-'0'; } } mode++; @@ -1364,29 +1357,32 @@ BZFILE * bzopen_or_bzdopen strcat(mode2, writing ? "w" : "r" ); strcat(mode2,"b"); /* binary mode */ - if(open_mode==0){ - if(path==NULL || strcmp(path,"")==0){ + if (open_mode==0) { + if (path==NULL || strcmp(path,"")==0) { fp = (writing ? stdout : stdin); SET_BINARY_MODE(fp); - }else{ + } else { fp = fopen(path,mode2); } - }else{ + } else { #ifdef BZ_STRICT_ANSI fp = NULL; #else fp = fdopen(fd,mode2); #endif } - if(fp==NULL){return NULL;} + if (fp == NULL) return NULL; - if(writing){ + if (writing) { + /* Guard against total chaos and anarchy -- JRS */ + if (blockSize100k < 1) blockSize100k = 1; + if (blockSize100k > 9) blockSize100k = 9; bzfp = bzWriteOpen(&bzerr,fp,blockSize100k,verbosity,workFactor); - }else{ + } else { bzfp = bzReadOpen(&bzerr,fp,verbosity,smallMode,unused,nUnused); } - if(bzfp==NULL){ - if(fp!=stdin && fp!=stdout) fclose(fp); + if (bzfp == NULL) { + if (fp != stdin && fp != stdout) fclose(fp); return NULL; } return bzfp; @@ -1458,7 +1454,7 @@ void BZ_API(bzclose) (BZFILE* b) int bzerr; FILE *fp = ((bzFile *)b)->handle; - if(b==NULL){return;} + if (b==NULL) {return;} if(((bzFile*)b)->writing){ bzWriteClose(&bzerr,b,0,NULL,NULL); if(bzerr != BZ_OK){ -- cgit v1.2.3-55-g6feb