Я делаю следующее, чтобы распаковать блок сжатых данных:
z_stream stream;
int err;
int nExtraChunks;
uInt destlen;
stream.next_in = (Bytef*)pSrc;
stream.avail_in = (uInt)nSrcLen;
destlen = (uInt)*pnDestLen;
stream.zalloc = Z_NULL;
stream.zfree = Z_NULL;
stream.opaque = Z_NULL;
err = inflateInit(&stream);
if (err != Z_OK)
return err;
nExtraChunks = 0;
do {
stream.next_out = pDest;
stream.avail_out = destlen;
err = inflate(&stream, Z_FINISH);
if (err == Z_STREAM_END )
break;
if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
{
err = Z_DATA_ERROR;
}
if (err != Z_BUF_ERROR)
{
inflateEnd(&stream);
return err;
}
nExtraChunks += 1;
} while (stream.avail_out == 0);
*pnDestLen = stream.total_out;
err = inflateEnd(&stream);
if (err != Z_OK) return err;
return nExtraChunks ? Z_BUF_ERROR : Z_OK;
, где pSrc и nSrcLen, pDest и destLen - заданные блоки памяти и их соответствующие длины.pSrc содержит содержимое действительного zip-файла.
(Эта подпрограмма адаптирована из функции драйвера easyzlib, но я напрямую использую zlib, предоставляемый NDK.)
При первом вызове инфляции возвращается -3 (Z_DATA_ERROR) для каждого сделанного мной вызова,Я подтвердил, что zip действителен, записав блок памяти на диск, выполнив команду «adb pull», чтобы загрузить ее на мой Mac и распаковать ее.Я не очень хорошо знаю zlib ... что я могу сделать, чтобы отладить это?