Demonstrates low level ZIP read functionality as needed by the high level opcContainer API.
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <zlib.h>
#ifdef WIN32
#include <crtdbg.h>
#endif
void *userctx,
printf(
"%i: %s%s(%i%s) %i/%i %i/%i...", (
int)info->
stream_ofs,
(info->
rels_segment?
"(.rels)":
""),
(info->
last_segment?
".last":
""),
info->
compressed_size, info->
uncompressed_size,
info->
min_header_size, info->
header_size);
if (!verify_crc) {
printf("skipped\n");
} else {
if (0==open(iocontext)) {
int ret=0;
while((ret=read(iocontext, buf, sizeof(buf)))>0) {
crc=crc32(crc, (const Bytef*)buf, ret);
}
ok=(info->
data_crc==crc);
}
if (ok) {
printf("ok\n");
} else {
printf("failure\n");
}
}
return OPC_ERROR_NONE;
}
int main( int argc, const char* argv[] )
{
#ifdef WIN32
_CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
#endif
time_t start_time=time(NULL);
for(int i=1;OPC_ERROR_NONE==err && i<argc;i++) {
if (xmlStrcasecmp(_X(argv[i]), _X("--verify"))==0) {
} else if (xmlStrcasecmp(_X(argv[i]), _X("--skip"))==0) {
} else {
}
}
}
}
time_t end_time=time(NULL);
fprintf(stderr, "time %.2lfsec\n", difftime(end_time, start_time));
#ifdef WIN32
#endif
return (OPC_ERROR_NONE==err?0:3);
}