LINUX.ORG.RU

Сообщения otvertochnic

 

Декомпрессия bz2 потока

Доброго дня!

Столкнулся с проблемой декомпрессией потока.

Суть такая, в документации описано что мы должны подсовывать функции BZ2_bzDecompress() два буфера, в первом содержатся сжатые данные во втором разжатые. Все работает, доколе поток целиком умещается во входящий буфер, но если поток больше размера буфера, и требуется несколько проходов, мы имеем BZ_DATA_ERROR. Я грешу на то что в буфер не влезает MAGIC от блока, и данные каки-то образом крешаться, но в описании библиотеки ничего не сказано о потребности в контроле.

Ниже привожу пример «грязного», очень «грязного» кода:

#define CHUNK 64
int res = 0;

unsigned char in[CHUNK];
unsigned char out[CHUNK*1000];

FILE *f_in = fopen("/test.bz2","rb");
bz_stream strm;

strm.opaque = NULL;
strm.bzfree = NULL;
strm.bzalloc = NULL;

res = BZ2_bzDecompressInit(&strm,0,0);

strm.next_in = in;
strm.avail_out = CHUNK*1000;
strm.next_out = out;

res = BZ_OK;
while(  res != BZ_STREAM_END ){

     strm.avail_in = fread(in,1,CHUNK,f_in);
     res = BZ2_bzDecompress(&strm);
 
     if(res != BZ_OK && res != BZ_STREAM_END)
        exit(1);

     strm.avail_out = CHUNK*1000;
};

BZ2_bzDecompressEnd(&strm);
Заранее благодарен

 

otvertochnic
()

RSS подписка на новые темы