Open for reading data the current file in the zipfile. If there is no error and the file is opened, the return value is UNZ_OK.
| 3369 | // Open for reading data the current file in the zipfile. |
| 3370 | // If there is no error and the file is opened, the return value is UNZ_OK. |
| 3371 | int unzOpenCurrentFile (unzFile file, const char *password) |
| 3372 | { |
| 3373 | int err; |
| 3374 | int Store; |
| 3375 | uInt iSizeVar; |
| 3376 | unz_s* s; |
| 3377 | file_in_zip_read_info_s* pfile_in_zip_read_info; |
| 3378 | uLong offset_local_extrafield; // offset of the local extra field |
| 3379 | uInt size_local_extrafield; // size of the local extra field |
| 3380 | |
| 3381 | if (file==NULL) |
| 3382 | return UNZ_PARAMERROR; |
| 3383 | s=(unz_s*)file; |
| 3384 | if (!s->current_file_ok) |
| 3385 | return UNZ_PARAMERROR; |
| 3386 | |
| 3387 | if (s->pfile_in_zip_read != NULL) |
| 3388 | unzCloseCurrentFile(file); |
| 3389 | |
| 3390 | if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar, |
| 3391 | &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) |
| 3392 | return UNZ_BADZIPFILE; |
| 3393 | |
| 3394 | pfile_in_zip_read_info = (file_in_zip_read_info_s*)zmalloc(sizeof(file_in_zip_read_info_s)); |
| 3395 | if (pfile_in_zip_read_info==NULL) |
| 3396 | return UNZ_INTERNALERROR; |
| 3397 | |
| 3398 | pfile_in_zip_read_info->read_buffer=(char*)zmalloc(UNZ_BUFSIZE); |
| 3399 | pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; |
| 3400 | pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; |
| 3401 | pfile_in_zip_read_info->pos_local_extrafield=0; |
| 3402 | |
| 3403 | if (pfile_in_zip_read_info->read_buffer==NULL) |
| 3404 | { |
| 3405 | if (pfile_in_zip_read_info!=0) zfree(pfile_in_zip_read_info); //unused pfile_in_zip_read_info=0; |
| 3406 | return UNZ_INTERNALERROR; |
| 3407 | } |
| 3408 | |
| 3409 | pfile_in_zip_read_info->stream_initialised=0; |
| 3410 | |
| 3411 | if ((s->cur_file_info.compression_method!=0) && (s->cur_file_info.compression_method!=Z_DEFLATED)) |
| 3412 | { // unused err=UNZ_BADZIPFILE; |
| 3413 | } |
| 3414 | Store = s->cur_file_info.compression_method==0; |
| 3415 | |
| 3416 | pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; |
| 3417 | pfile_in_zip_read_info->crc32=0; |
| 3418 | pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method; |
| 3419 | pfile_in_zip_read_info->file=s->file; |
| 3420 | pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; |
| 3421 | |
| 3422 | pfile_in_zip_read_info->stream.total_out = 0; |
| 3423 | |
| 3424 | if (!Store) |
| 3425 | { |
| 3426 | pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; |
| 3427 | pfile_in_zip_read_info->stream.zfree = (free_func)0; |
| 3428 | pfile_in_zip_read_info->stream.opaque = (voidpf)0; |
no test coverage detected