63#define kInputBufSize ((size_t)1 << 18)
65 static const ISzAlloc g_Alloc = { SzAlloc, SzFree };
66 ISzAlloc allocImp = g_Alloc;
67 ISzAlloc allocTempImp = g_Alloc;
68 CFileInStream archiveStream;
69 CLookToRead2 lookStream;
72 UInt32 blockIndex = 0xFFFFFFFF;
73 Byte *outBuffer = NULL;
74 size_t outBufferSize = 0;
76 size_t outSizeProcessed = 0;
78 if (InFile_Open(&archiveStream.file, filename))
81 FileInStream_CreateVTable(&archiveStream);
82 LookToRead2_CreateVTable(&lookStream, False);
83 lookStream.buf = ISzAlloc_Alloc(&allocImp, kInputBufSize);
84 lookStream.bufSize = kInputBufSize;
85 lookStream.realStream = &archiveStream.vt;
86 LookToRead2_INIT(&lookStream);
90 res = SzArEx_Open(&db, &lookStream.vt, &allocImp, &allocTempImp);
94 res = SzArEx_Extract(&db, &lookStream.vt, 0, &blockIndex, &outBuffer,
95 &outBufferSize, &offset, &outSizeProcessed, &allocImp,
100 *out_len = outBufferSize;
102 memcpy(out_buf, outBuffer, outBufferSize);
105 ISzAlloc_Free(&allocImp, outBuffer);
106 SzArEx_Free(&db, &allocImp);
107 ISzAlloc_Free(&allocImp, lookStream.buf);
109 File_Close(&archiveStream.file);