MCPcopy Create free account
hub / github.com/cinience/RedisStudio / unzReadCurrentFile

Function unzReadCurrentFile

DuiLib/Utils/XUnzip.cpp:3677–3752  ·  view source on GitHub ↗

Read bytes from the current file. buf contain buffer where data must be copied len the size of buf. return the number of byte copied if somes bytes are copied return 0 if the end of file was reached return <0 with error code if there is an error (UNZ_ERRNO for IO error, or zLib error for uncompress error)

Source from the content-addressed store, hash-verified

3675// return <0 with error code if there is an error
3676// (UNZ_ERRNO for IO error, or zLib error for uncompress error)
3677int unzReadCurrentFile (unzFile file, voidp buf, unsigned len)
3678{ int err=UNZ_OK;
3679 uInt iRead = 0;
3680
3681 unz_s *s = (unz_s*)file;
3682 if (s==NULL) return UNZ_PARAMERROR;
3683
3684 file_in_zip_read_info_s* pfile_in_zip_read_info = s->pfile_in_zip_read;
3685 if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR;
3686 if ((pfile_in_zip_read_info->read_buffer == NULL)) return UNZ_END_OF_LIST_OF_FILE;
3687 if (len==0) return 0;
3688
3689 pfile_in_zip_read_info->stream.next_out = (Byte*)buf;
3690 pfile_in_zip_read_info->stream.avail_out = (uInt)len;
3691
3692 if (len>pfile_in_zip_read_info->rest_read_uncompressed)
3693 { pfile_in_zip_read_info->stream.avail_out = (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
3694 }
3695
3696 while (pfile_in_zip_read_info->stream.avail_out>0)
3697 { if ((pfile_in_zip_read_info->stream.avail_in==0) && (pfile_in_zip_read_info->rest_read_compressed>0))
3698 { uInt uReadThis = UNZ_BUFSIZE;
3699 if (pfile_in_zip_read_info->rest_read_compressed<uReadThis) uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;
3700 if (uReadThis == 0) return UNZ_EOF;
3701 if (lufseek(pfile_in_zip_read_info->file, pfile_in_zip_read_info->pos_in_zipfile + pfile_in_zip_read_info->byte_before_the_zipfile,SEEK_SET)!=0) return UNZ_ERRNO;
3702 if (lufread(pfile_in_zip_read_info->read_buffer,uReadThis,1,pfile_in_zip_read_info->file)!=1) return UNZ_ERRNO;
3703 pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
3704 pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
3705 pfile_in_zip_read_info->stream.next_in = (Byte*)pfile_in_zip_read_info->read_buffer;
3706 pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
3707 }
3708
3709 if (pfile_in_zip_read_info->compression_method==0)
3710 { uInt uDoCopy,i ;
3711 if (pfile_in_zip_read_info->stream.avail_out < pfile_in_zip_read_info->stream.avail_in)
3712 { uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
3713 }
3714 else
3715 { uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
3716 }
3717 for (i=0;i<uDoCopy;i++)
3718 { *(pfile_in_zip_read_info->stream.next_out+i) = *(pfile_in_zip_read_info->stream.next_in+i);
3719 }
3720 pfile_in_zip_read_info->crc32 = ucrc32(pfile_in_zip_read_info->crc32,pfile_in_zip_read_info->stream.next_out,uDoCopy);
3721 pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
3722 pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
3723 pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
3724 pfile_in_zip_read_info->stream.next_out += uDoCopy;
3725 pfile_in_zip_read_info->stream.next_in += uDoCopy;
3726 pfile_in_zip_read_info->stream.total_out += uDoCopy;
3727 iRead += uDoCopy;
3728 }
3729 else
3730 { uLong uTotalOutBefore,uTotalOutAfter;
3731 const Byte *bufBefore;
3732 uLong uOutThis;
3733 int flush=Z_SYNC_FLUSH;
3734 uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;

Callers 1

UnzipMethod · 0.85

Calls 4

lufseekFunction · 0.85
lufreadFunction · 0.85
ucrc32Function · 0.85
inflateFunction · 0.85

Tested by

no test coverage detected