Lines Matching refs:bd

116 static unsigned int INIT get_bits(struct bunzip_data *bd, char bits_wanted)
123 while (bd->inbufBitCount < bits_wanted) {
126 if (bd->inbufPos == bd->inbufCount) {
127 if (bd->io_error)
129 bd->inbufCount = bd->fill(bd->inbuf, BZIP2_IOBUF_SIZE);
130 if (bd->inbufCount <= 0) {
131 bd->io_error = RETVAL_UNEXPECTED_INPUT_EOF;
134 bd->inbufPos = 0;
137 if (bd->inbufBitCount >= 24) {
138 bits = bd->inbufBits&((1 << bd->inbufBitCount)-1);
139 bits_wanted -= bd->inbufBitCount;
141 bd->inbufBitCount = 0;
144 bd->inbufBits = (bd->inbufBits << 8)|bd->inbuf[bd->inbufPos++];
145 bd->inbufBitCount += 8;
148 bd->inbufBitCount -= bits_wanted;
149 bits |= (bd->inbufBits >> bd->inbufBitCount)&((1 << bits_wanted)-1);
156 static int INIT get_next_block(struct bunzip_data *bd)
166 dbuf = bd->dbuf;
167 dbufSize = bd->dbufSize;
168 selectors = bd->selectors;
169 byteCount = bd->byteCount;
170 symToByte = bd->symToByte;
171 mtfSymbol = bd->mtfSymbol;
175 i = get_bits(bd, 24);
176 j = get_bits(bd, 24);
177 bd->headerCRC = get_bits(bd, 32);
185 if (get_bits(bd, 1))
187 origPtr = get_bits(bd, 24);
195 t = get_bits(bd, 16);
199 k = get_bits(bd, 16);
206 groupCount = get_bits(bd, 3);
214 nSelectors = get_bits(bd, 15);
221 for (j = 0; get_bits(bd, 1); j++)
246 t = get_bits(bd, 5)-1;
258 k = get_bits(bd, 2);
260 bd->inbufBitCount++;
296 hufGroup = bd->groups+j;
364 hufGroup = bd->groups+selectors[selector++];
378 equivalent to j = get_bits(bd, hufGroup->maxLen);
380 while (bd->inbufBitCount < hufGroup->maxLen) {
381 if (bd->inbufPos == bd->inbufCount) {
382 j = get_bits(bd, hufGroup->maxLen);
385 bd->inbufBits =
386 (bd->inbufBits << 8)|bd->inbuf[bd->inbufPos++];
387 bd->inbufBitCount += 8;
389 bd->inbufBitCount -= hufGroup->maxLen;
390 j = (bd->inbufBits >> bd->inbufBitCount)&
398 bd->inbufBitCount += (hufGroup->maxLen - i);
506 bd->writePos = dbuf[origPtr];
507 bd->writeCurrent = (unsigned char)(bd->writePos&0xff);
508 bd->writePos >>= 8;
509 bd->writeRunCountdown = 5;
511 bd->writeCount = dbufCount;
523 static int INIT read_bunzip(struct bunzip_data *bd, char *outbuf, int len)
529 if (bd->writeCount < 0)
530 return bd->writeCount;
533 dbuf = bd->dbuf;
534 pos = bd->writePos;
535 xcurrent = bd->writeCurrent;
541 if (bd->writeCopies) {
543 --bd->writeCopies;
549 bd->writePos = pos;
550 bd->writeCurrent = xcurrent;
551 bd->writeCopies++;
556 bd->writeCRC = (((bd->writeCRC) << 8)
557 ^bd->crc32Table[((bd->writeCRC) >> 24)
561 if (bd->writeCopies) {
562 --bd->writeCopies;
566 if (!bd->writeCount--)
578 if (--bd->writeRunCountdown) {
580 bd->writeRunCountdown = 4;
584 bd->writeCopies = xcurrent;
586 bd->writeRunCountdown = 5;
589 if (!bd->writeCopies)
593 --bd->writeCopies;
597 bd->writeCRC = ~bd->writeCRC;
598 bd->totalCRC = ((bd->totalCRC << 1) |
599 (bd->totalCRC >> 31)) ^ bd->writeCRC;
601 if (bd->writeCRC != bd->headerCRC) {
602 bd->totalCRC = bd->headerCRC+1;
610 previous = get_next_block(bd);
612 bd->writeCount = previous;
615 bd->writeCRC = 0xffffffffUL;
616 pos = bd->writePos;
617 xcurrent = bd->writeCurrent;
632 struct bunzip_data *bd;
642 bd = *bdp = malloc(i);
643 if (!bd)
645 memset(bd, 0, sizeof(struct bunzip_data));
647 bd->inbuf = inbuf;
648 bd->inbufCount = len;
650 bd->fill = fill;
652 bd->fill = nofill;
659 bd->crc32Table[i] = c;
663 i = get_bits(bd, 32);
669 bd->dbufSize = 100000*(i-BZh0);
671 bd->dbuf = large_malloc(bd->dbufSize * sizeof(int));
672 if (!bd->dbuf)
686 struct bunzip_data *bd;
706 i = start_bunzip(&bd, inbuf, len, fill);
709 i = read_bunzip(bd, outbuf, BZIP2_IOBUF_SIZE);
723 if (bd->headerCRC != bd->totalCRC)
730 if (!bd)
732 if (bd->dbuf)
733 large_free(bd->dbuf);
735 *pos = bd->inbufPos;
736 free(bd);