libclamunrar/getbits.cpp
d39cb658
 #include "rar.hpp"
 
 BitInput::BitInput(bool AllocBuffer)
 {
   ExternalBuffer=false;
   if (AllocBuffer)
   {
     // getbits32 attempts to read data from InAddr, ... InAddr+3 positions.
     // So let's allocate 3 additional bytes for situation, when we need to
     // read only 1 byte from the last position of buffer and avoid a crash
     // from access to next 3 bytes, which contents we do not need.
     size_t BufSize=MAX_SIZE+3;
     InBuf=new byte[BufSize];
 
     // Ensure that we get predictable results when accessing bytes in area
     // not filled with read data.
     memset(InBuf,0,BufSize);
   }
   else
     InBuf=NULL;
 }
 
 
 BitInput::~BitInput()
 {
   if (!ExternalBuffer)
     delete[] InBuf;
 }
 
 
 void BitInput::faddbits(uint Bits)
 {
   // Function wrapped version of inline addbits to save code size.
   addbits(Bits);
 }
 
 
 uint BitInput::fgetbits()
 {
   // Function wrapped version of inline getbits to save code size.
   return getbits();
 }
 
 
 void BitInput::SetExternalBuffer(byte *Buf)
 {
   if (InBuf!=NULL && !ExternalBuffer)
     delete[] InBuf;
   InBuf=Buf;
   ExternalBuffer=true;
 }