Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//
// infinput.c
//
// Bitwise inputting for inflate (decompressor)
//
#include <stdio.h>
#include <crtdbg.h>
#include "inflate.h"
#include "infmacro.h"
void dumpBits(t_decoder_context *context, int n) { context->bitbuf >>= n; context->bitcount -= n; }
// retrieve n bits from the bit buffer, and dump them when done
// n can be up to 16
int getBits(t_decoder_context *context, int n) { int result;
context->bitcount -= n; result = (context->bitbuf & g_BitMask[n]); context->bitbuf >>= n;
return result; }
//
// Ensure that <num_bits> bits are in the bit buffer
//
// Returns FALSE if there are not and there was insufficient input to make this true
//
BOOL ensureBitsContext(t_decoder_context *context, int num_bits) { if (context->bitcount + 16 < num_bits) { if (INPUT_EOF()) return FALSE;
context->bitbuf |= ((*context->input_curpos++) << (context->bitcount+16)); context->bitcount += 8; if (context->bitcount + 16 < num_bits) { if (INPUT_EOF()) return FALSE;
context->bitbuf |= ((*context->input_curpos++) << (context->bitcount+16)); context->bitcount += 8; } }
return TRUE; }
// initialise the bit buffer
BOOL initBitBuffer(t_decoder_context *context) { if (context->input_curpos < context->end_input_buffer) { context->bitbuf = *context->input_curpos++; context->bitcount = -8; context->state = STATE_READING_BFINAL; return TRUE; } else { context->bitcount = -16; context->bitbuf = 0; return FALSE; } }
|