示例#1
0
void KBzip2Filter::terminate()
{
    if ( m_mode == IO_ReadOnly )
    {
        int result = bzDecompressEnd(&d->zStream);
        kdDebug(7118) << "bzDecompressEnd returned " << result << endl;
    } else if ( m_mode == IO_WriteOnly )
    {
        int result = bzCompressEnd(&d->zStream);
        kdDebug(7118) << "bzCompressEnd returned " << result << endl;
    } else
        kdWarning(7118) << "Unsupported mode " << m_mode << ". Only IO_ReadOnly and IO_WriteOnly supported" << endl;
}
Compressor::~Compressor()
   // The deconstructor
{
   if(isinitialized)
      // We finish compression, if there has been some data in the queue
   {
#ifdef USE_BZIP
      bzCompressEnd(&state);
#else
      deflateEnd(&state);
#endif

//      deflateReset(&state);
      isinitialized=0;
   }
}
示例#3
0
bool KBzip2Filter::terminate()
{
    if (d->mode == QIODevice::ReadOnly) {
        const int result = bzDecompressEnd(&d->zStream);
        if (result != BZ_OK) {
            //qDebug() << "bzDecompressEnd returned " << result;
            return false;
        }
    } else if (d->mode == QIODevice::WriteOnly) {
        const int result = bzCompressEnd(&d->zStream);
        if (result != BZ_OK) {
            //qDebug() << "bzCompressEnd returned " << result;
            return false;
        }
    } else {
        //qWarning() << "Unsupported mode " << d->mode << ". Only QIODevice::ReadOnly and QIODevice::WriteOnly supported";
        return false;
    }
    d->isInitialized = false;
    return true;
}
void Compressor::FinishCompress(unsigned long *uncompressedsize,unsigned long *compressedsize)
   // Finishes the compression and stores the input data size and
   // the output data size in 'uncompressedsize' and 'compressedsize'
{
   char err;
   int   saveavail;

   do
   {
      // Let's get more space in the output buffer
#ifdef USE_BZIP
      state.next_out=output->GetBufPtr((int *)&state.avail_out);
#else
      state.next_out=(unsigned char *)output->GetBufPtr((int *)&state.avail_out);
#endif

      saveavail=state.avail_out;

#ifdef USE_BZIP
      err=bzCompress(&state,BZ_FINISH);
#else
      err=deflate(&state,Z_FINISH);
#endif

      output->SaveBytes(saveavail-state.avail_out);

#ifdef USE_BZIP
      if(err==BZ_STREAM_END)
         break;
      if(err!=BZ_FINISH_OK)
#else
      if(err==Z_STREAM_END)
         break;
      if(err!=Z_OK)
#endif
      {
         Error("Error while compressing container!");
         Exit();
      }

      // Z_OK means that the output buffer is full ! ==> We flush
      output->Flush();
   }
   while(1);

   // Let's store the input and output size
   if(uncompressedsize!=NULL) *uncompressedsize =state.total_in;
   if(compressedsize!=NULL)   *compressedsize   =state.total_out;

   state.total_out=0;
   state.total_in=0;

   // Finally, we release the internal memory
#ifdef USE_BZIP
   if(bzCompressEnd(&state)!=BZ_OK)
#else
   if(deflateReset(&state)!=Z_OK)
#endif
   {  
      Error("Error while compressing container!");
      Exit();
   }
#ifdef USE_BZIP
   // bzip must be reinitialized
   isinitialized=0;
#endif
}