see changelog 20000531-23:20 GMT -3
This commit is contained in:
113
harbour/contrib/hbzlib/doc/zip.txt
Normal file
113
harbour/contrib/hbzlib/doc/zip.txt
Normal file
@@ -0,0 +1,113 @@
|
||||
/*
|
||||
* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_ZIPFILE()
|
||||
* $CATEGORY$
|
||||
* ZIP FUNCTION
|
||||
* $ONELINER$
|
||||
* Create a zip file
|
||||
* $SYNTAX$
|
||||
* HB_ZIPFILE( <cFile> , <cFileToCompress> | <aFiles>, <nLevel> ,
|
||||
* <bBlock>,<lOverWrite> ) ---> lCompress
|
||||
* $ARGUMENTS$
|
||||
* <cFile> Name of the zip file
|
||||
*
|
||||
* <cFileToCompress> Name of a file to Compress ,Drive and/or path
|
||||
* can be used
|
||||
*
|
||||
* <aFiles> An array containing files to compress,Drive and/or path
|
||||
* can be used
|
||||
*
|
||||
* <nLevel> Compression level ranging from 0 to 9
|
||||
*
|
||||
* <bBlock> Code block to execute while compressing
|
||||
*
|
||||
* <lOverWrite> Toggle to overwite the file if exists
|
||||
* $RETURNS$
|
||||
* <lCompress> .T. if file was create,otherwise .f.
|
||||
* $DESCRIPTION$
|
||||
* This function create a zip file named <cFile>. If the extension
|
||||
* is ommited , .ZIP will be assumed. If the second parameter is a
|
||||
* character string, this file will be added to the zip file.If the
|
||||
* second parameter is an array,all files names contained in <aFiles>
|
||||
* will be compressed.
|
||||
*
|
||||
* If <nLevel> is used, it detemines the compression type where 0 means
|
||||
* No compression and 9 means best compression.
|
||||
*
|
||||
* If <bBlock> is used, every time the file is opened to compress it
|
||||
* will do the action specified.
|
||||
*
|
||||
* If <lOverWrite> is used , it toggles to overwrite or not the existing
|
||||
* file.Default is to overwrite the file.
|
||||
* $EXAMPLES$
|
||||
* FUNCTION MAIN()
|
||||
* IF HB_ZIPFILE( "TEST.ZIP","TEST.PRG")
|
||||
* qout("File was successly create")
|
||||
* ENDIF
|
||||
* IF HB_ZIPFILE( "TEST1.ZIP",{"TEST.PRG","c:\windows\win.ini"})
|
||||
* qout("File was successly create")
|
||||
* ENDIF
|
||||
* IF HB_ZIPFILE( "TEST2.ZIP",{"TEST.PRG","c:\windows\win.ini"},8,{|cFile|,qout(cFile)})
|
||||
* qout("File was successly create")
|
||||
* ENDIF
|
||||
*
|
||||
* Return Nil
|
||||
* $STATUS$
|
||||
* R
|
||||
* $COMPLIANCE$
|
||||
* This function is a Harbour extension
|
||||
* $PLATFORMS$
|
||||
* Win32
|
||||
* $FILES$
|
||||
* Library is zlib.lib and zlib_bor.lib For Borland Compilers
|
||||
* Library is zlib.lib zlib_ms.lib for MSVC compilers
|
||||
* $END$
|
||||
*/
|
||||
|
||||
/*
|
||||
* $DOC$
|
||||
* $FUNCNAME$
|
||||
* HB_UNZIPFILE()
|
||||
* $CATEGORY$
|
||||
* ZIP FUNCTION
|
||||
* $ONELINER$
|
||||
* Unzip a compressed file
|
||||
* $SYNTAX$
|
||||
* HB_UNZIPFILE( <cFile> , <bBlock> ) ---> lCompress
|
||||
* $ARGUMENTS$
|
||||
* <cFile> Name of the zip file
|
||||
*
|
||||
* <bBlock> Code block to execute while compressing
|
||||
*
|
||||
* $RETURNS$
|
||||
* <lCompress> .T. if all file was successfuly restored,otherwise .f.
|
||||
* $DESCRIPTION$
|
||||
* This function restores all files contained inside the <cFile>.
|
||||
* If the extension is ommited ,.ZIP will be assumed. If a file already
|
||||
* exists, it wlllbe overwriten.
|
||||
*
|
||||
* If <bBlock> is used, every time the file is opened to compress it
|
||||
* will do the action specified.
|
||||
* $EXAMPLES$
|
||||
* FUNCTION MAIN()
|
||||
* IF HB_UNZIPFILE( "TEST.ZIP")
|
||||
* qout("File was successly create")
|
||||
* ENDIF
|
||||
* IF HB_ZIPFILE( "TEST2.ZIP",{|cFile|,qout(cFile)})
|
||||
* qout("File was successly create")
|
||||
* ENDIF
|
||||
*
|
||||
* Return Nil
|
||||
* $STATUS$
|
||||
* S
|
||||
* $COMPLIANCE$
|
||||
* This function is a Harbour extension
|
||||
* $PLATFORMS$
|
||||
* Win32
|
||||
* $FILES$
|
||||
* Library is zlib.lib and zlib_bor.lib For Borland Compilers
|
||||
* Library is zlib.lib zlib_ms.lib for MSVC compilers
|
||||
* $END$
|
||||
*/
|
||||
|
||||
@@ -54,8 +54,8 @@ extern uLong hb___filetime(char *f, tm_zip *tmzip, uLong *dt);
|
||||
extern char *hb___CheckFile( char * szFile);
|
||||
extern int hb___CompressOneFile(char *szFile,char *szFiletoCompress,int iCompLevel,PHB_ITEM pBlock,BOOL iOverWrite);
|
||||
extern int hb___CompressMultipleFile(char *szFile,PHB_ITEM pArray,int iCompLevel,PHB_ITEM pBlock,BOOL iOverWrite);
|
||||
extern int hb___unZipFiles(char *szFile);
|
||||
extern int hb___ExtractCurrentFile(unzFile uf,const int* popt_extract_without_path,int* popt_overwrite);
|
||||
extern int hb___unZipFiles(char *szFile,PHB_ITEM pBlock);
|
||||
extern int hb___ExtractCurrentFile(unzFile uf,const int* popt_extract_without_path,int* popt_overwrite,PHB_ITEM pBlock);
|
||||
extern void hb____ChangeFileDate(const char *filename,uLong dosdate,tm_unz tmu_date);
|
||||
extern int hb___MyMkdir(const char *DirectoryName);
|
||||
extern int hb___MakeDir(char *NewDirectory);
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
Function Main()
|
||||
/*
|
||||
HB_ZIPFILE('test.zip','zip.h',,{|cFile| qout(cFile)})
|
||||
HB_ZIPFILE('test2.zip','zip.h')
|
||||
*/
|
||||
Hb_ZIPFILE('test12.zip',{'.\test.prg','.\zlib.h','.\zip.h','..\..\obj\b32\test.obj'},8,{|cfile| qout(cfile)})
|
||||
/*
|
||||
erase zip.h
|
||||
? 'unzipping file'
|
||||
hb_unzipfile('test.zip')
|
||||
hb_unzipfile('test12.zip')
|
||||
*/
|
||||
hb_unzipfile('test12.zip',{|cFile| qout(cFile)})
|
||||
|
||||
return nil
|
||||
|
||||
274
harbour/contrib/hbzlib/unzip.h
Normal file
274
harbour/contrib/hbzlib/unzip.h
Normal file
@@ -0,0 +1,274 @@
|
||||
/* unzip.h -- IO for uncompress .zip files using zlib
|
||||
Version 0.15 beta, Mar 19th, 1998,
|
||||
|
||||
Copyright (C) 1998 Gilles Vollant
|
||||
|
||||
This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g
|
||||
WinZip, InfoZip tools and compatible.
|
||||
Encryption and multi volume ZipFile (span) are not supported.
|
||||
Old compressions used by old PKZip 1.x are not supported
|
||||
|
||||
THIS IS AN ALPHA VERSION. AT THIS STAGE OF DEVELOPPEMENT, SOMES API OR STRUCTURE
|
||||
CAN CHANGE IN FUTURE VERSION !!
|
||||
I WAIT FEEDBACK at mail info@winimage.com
|
||||
Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution
|
||||
|
||||
Condition of use and distribution are the same than zlib :
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
|
||||
*/
|
||||
/* for more info about .ZIP format, see
|
||||
ftp://ftp.cdrom.com/pub/infozip/doc/appnote-970311-iz.zip
|
||||
PkWare has also a specification at :
|
||||
ftp://ftp.pkware.com/probdesc.zip */
|
||||
|
||||
#ifndef _unz_H
|
||||
#define _unz_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _ZLIB_H
|
||||
#include "zlib.h"
|
||||
#endif
|
||||
|
||||
#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
|
||||
/* like the STRICT of WIN32, we define a pointer that cannot be converted
|
||||
from (void*) without cast */
|
||||
typedef struct TagunzFile__ { int unused; } unzFile__;
|
||||
typedef unzFile__ *unzFile;
|
||||
#else
|
||||
typedef voidp unzFile;
|
||||
#endif
|
||||
|
||||
|
||||
#define UNZ_OK (0)
|
||||
#define UNZ_END_OF_LIST_OF_FILE (-100)
|
||||
#define UNZ_ERRNO (Z_ERRNO)
|
||||
#define UNZ_EOF (0)
|
||||
#define UNZ_PARAMERROR (-102)
|
||||
#define UNZ_BADZIPFILE (-103)
|
||||
#define UNZ_INTERNALERROR (-104)
|
||||
#define UNZ_CRCERROR (-105)
|
||||
|
||||
/* tm_unz contain date/time info */
|
||||
typedef struct tm_unz_s
|
||||
{
|
||||
uInt tm_sec; /* seconds after the minute - [0,59] */
|
||||
uInt tm_min; /* minutes after the hour - [0,59] */
|
||||
uInt tm_hour; /* hours since midnight - [0,23] */
|
||||
uInt tm_mday; /* day of the month - [1,31] */
|
||||
uInt tm_mon; /* months since January - [0,11] */
|
||||
uInt tm_year; /* years - [1980..2044] */
|
||||
} tm_unz;
|
||||
|
||||
/* unz_global_info structure contain global data about the ZIPfile
|
||||
These data comes from the end of central dir */
|
||||
typedef struct unz_global_info_s
|
||||
{
|
||||
uLong number_entry; /* total number of entries in
|
||||
the central dir on this disk */
|
||||
uLong size_comment; /* size of the global comment of the zipfile */
|
||||
} unz_global_info;
|
||||
|
||||
|
||||
/* unz_file_info contain information about a file in the zipfile */
|
||||
typedef struct unz_file_info_s
|
||||
{
|
||||
uLong version; /* version made by 2 bytes */
|
||||
uLong version_needed; /* version needed to extract 2 bytes */
|
||||
uLong flag; /* general purpose bit flag 2 bytes */
|
||||
uLong compression_method; /* compression method 2 bytes */
|
||||
uLong dosDate; /* last mod file date in Dos fmt 4 bytes */
|
||||
uLong crc; /* crc-32 4 bytes */
|
||||
uLong compressed_size; /* compressed size 4 bytes */
|
||||
uLong uncompressed_size; /* uncompressed size 4 bytes */
|
||||
uLong size_filename; /* filename length 2 bytes */
|
||||
uLong size_file_extra; /* extra field length 2 bytes */
|
||||
uLong size_file_comment; /* file comment length 2 bytes */
|
||||
|
||||
uLong disk_num_start; /* disk number start 2 bytes */
|
||||
uLong internal_fa; /* internal file attributes 2 bytes */
|
||||
uLong external_fa; /* external file attributes 4 bytes */
|
||||
|
||||
tm_unz tmu_date;
|
||||
} unz_file_info;
|
||||
|
||||
extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
|
||||
const char* fileName2,
|
||||
int iCaseSensitivity));
|
||||
/*
|
||||
Compare two filename (fileName1,fileName2).
|
||||
If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
|
||||
If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
|
||||
or strcasecmp)
|
||||
If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
|
||||
(like 1 on Unix, 2 on Windows)
|
||||
*/
|
||||
|
||||
|
||||
extern unzFile ZEXPORT unzOpen OF((const char *path));
|
||||
/*
|
||||
Open a Zip file. path contain the full pathname (by example,
|
||||
on a Windows NT computer "c:\\zlib\\zlib111.zip" or on an Unix computer
|
||||
"zlib/zlib111.zip".
|
||||
If the zipfile cannot be opened (file don't exist or in not valid), the
|
||||
return value is NULL.
|
||||
Else, the return value is a unzFile Handle, usable with other function
|
||||
of this unzip package.
|
||||
*/
|
||||
|
||||
extern int ZEXPORT unzClose OF((unzFile file));
|
||||
/*
|
||||
Close a ZipFile opened with unzipOpen.
|
||||
If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
|
||||
these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
|
||||
return UNZ_OK if there is no problem. */
|
||||
|
||||
extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
|
||||
unz_global_info *pglobal_info));
|
||||
/*
|
||||
Write info about the ZipFile in the *pglobal_info structure.
|
||||
No preparation of the structure is needed
|
||||
return UNZ_OK if there is no problem. */
|
||||
|
||||
|
||||
extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
|
||||
char *szComment, uLong uSizeBuf));
|
||||
/*
|
||||
Get the global comment string of the ZipFile, in the szComment buffer.
|
||||
uSizeBuf is the size of the szComment buffer.
|
||||
return the number of byte copied or an error code <0
|
||||
*/
|
||||
|
||||
|
||||
/***************************************************************************/
|
||||
/* Unzip package allow you browse the directory of the zipfile */
|
||||
|
||||
extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
|
||||
/*
|
||||
Set the current file of the zipfile to the first file.
|
||||
return UNZ_OK if there is no problem
|
||||
*/
|
||||
|
||||
extern int ZEXPORT unzGoToNextFile OF((unzFile file));
|
||||
/*
|
||||
Set the current file of the zipfile to the next file.
|
||||
return UNZ_OK if there is no problem
|
||||
return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
|
||||
*/
|
||||
|
||||
extern int ZEXPORT unzLocateFile OF((unzFile file,
|
||||
const char *szFileName,
|
||||
int iCaseSensitivity));
|
||||
/*
|
||||
Try locate the file szFileName in the zipfile.
|
||||
For the iCaseSensitivity signification, see unzStringFileNameCompare
|
||||
|
||||
return value :
|
||||
UNZ_OK if the file is found. It becomes the current file.
|
||||
UNZ_END_OF_LIST_OF_FILE if the file is not found
|
||||
*/
|
||||
|
||||
|
||||
extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
|
||||
unz_file_info *pfile_info,
|
||||
char *szFileName,
|
||||
uLong fileNameBufferSize,
|
||||
void *extraField,
|
||||
uLong extraFieldBufferSize,
|
||||
char *szComment,
|
||||
uLong commentBufferSize));
|
||||
/*
|
||||
Get Info about the current file
|
||||
if pfile_info!=NULL, the *pfile_info structure will contain somes info about
|
||||
the current file
|
||||
if szFileName!=NULL, the filemane string will be copied in szFileName
|
||||
(fileNameBufferSize is the size of the buffer)
|
||||
if extraField!=NULL, the extra field information will be copied in extraField
|
||||
(extraFieldBufferSize is the size of the buffer).
|
||||
This is the Central-header version of the extra field
|
||||
if szComment!=NULL, the comment string of the file will be copied in szComment
|
||||
(commentBufferSize is the size of the buffer)
|
||||
*/
|
||||
|
||||
/***************************************************************************/
|
||||
/* for reading the content of the current zipfile, you can open it, read data
|
||||
from it, and close it (you can close it before reading all the file)
|
||||
*/
|
||||
|
||||
extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
|
||||
/*
|
||||
Open for reading data the current file in the zipfile.
|
||||
If there is no error, the return value is UNZ_OK.
|
||||
*/
|
||||
|
||||
extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
|
||||
/*
|
||||
Close the file in zip opened with unzOpenCurrentFile
|
||||
Return UNZ_CRCERROR if all the file was read but the CRC is not good
|
||||
*/
|
||||
|
||||
|
||||
extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
|
||||
voidp buf,
|
||||
unsigned len));
|
||||
/*
|
||||
Read bytes from the current file (opened by unzOpenCurrentFile)
|
||||
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)
|
||||
*/
|
||||
|
||||
extern z_off_t ZEXPORT unztell OF((unzFile file));
|
||||
/*
|
||||
Give the current position in uncompressed data
|
||||
*/
|
||||
|
||||
extern int ZEXPORT unzeof OF((unzFile file));
|
||||
/*
|
||||
return 1 if the end of file was reached, 0 elsewhere
|
||||
*/
|
||||
|
||||
extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
|
||||
voidp buf,
|
||||
unsigned len));
|
||||
/*
|
||||
Read extra field from the current file (opened by unzOpenCurrentFile)
|
||||
This is the local-header version of the extra field (sometimes, there is
|
||||
more info in the local-header version than in the central-header)
|
||||
|
||||
if buf==NULL, it return the size of the local extra field
|
||||
|
||||
if buf!=NULL, len is the size of the buffer, the extra header is copied in
|
||||
buf.
|
||||
the return value is the number of bytes copied in buf, or (if <0)
|
||||
the error code
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _unz_H */
|
||||
@@ -118,7 +118,7 @@ int hb___MakeDir(char *NewDirectory)
|
||||
return 1;
|
||||
}
|
||||
|
||||
int hb___ExtractOneFile(unzFile uf,const char* filename,int opt_extract_without_path,int opt_overwrite)
|
||||
int hb___ExtractOneFile(unzFile uf,const char* filename,int opt_extract_without_path,int opt_overwrite,PHB_ITEM pBlock)
|
||||
{
|
||||
err = UNZ_OK;
|
||||
if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
|
||||
@@ -127,13 +127,13 @@ int hb___ExtractOneFile(unzFile uf,const char* filename,int opt_extract_without_
|
||||
}
|
||||
|
||||
if (hb___ExtractCurrentFile(uf,&opt_extract_without_path,
|
||||
&opt_overwrite) == UNZ_OK)
|
||||
&opt_overwrite,pBlock) == UNZ_OK)
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
int hb___Extract(unzFile uf,int opt_extract_without_path,int opt_overwrite)
|
||||
int hb___Extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,PHB_ITEM pBlock)
|
||||
{
|
||||
uLong uiCount;
|
||||
unz_global_info szGlobalUnzipInfo;
|
||||
@@ -146,10 +146,10 @@ int hb___Extract(unzFile uf,int opt_extract_without_path,int opt_overwrite)
|
||||
for (uiCount=1;uiCount<=szGlobalUnzipInfo.number_entry;uiCount++)
|
||||
{
|
||||
if (hb___ExtractCurrentFile(uf,&opt_extract_without_path,
|
||||
&opt_overwrite) != UNZ_OK)
|
||||
&opt_overwrite, pBlock) != UNZ_OK)
|
||||
break;
|
||||
|
||||
if ((uiCount+1)<szGlobalUnzipInfo.number_entry)
|
||||
if ((uiCount+1)<=szGlobalUnzipInfo.number_entry)
|
||||
{
|
||||
err = unzGoToNextFile(uf);
|
||||
if (err!=UNZ_OK)
|
||||
@@ -165,14 +165,14 @@ int hb___Extract(unzFile uf,int opt_extract_without_path,int opt_overwrite)
|
||||
|
||||
|
||||
|
||||
int hb___unZipFiles(char *szFile)
|
||||
int hb___unZipFiles(char *szFile,PHB_ITEM pBlock)
|
||||
{
|
||||
const char *szZipFileName=NULL;
|
||||
const char *filename_to_extract=NULL;
|
||||
int i;
|
||||
int opt_do_list=0;
|
||||
int opt_do_extract=1;
|
||||
int opt_do_extract_withoutpath=0;
|
||||
int opt_do_extract_withoutpath=0;
|
||||
int opt_overwrite=0;
|
||||
char filename_try[512];
|
||||
unzFile uf=NULL;
|
||||
@@ -181,8 +181,6 @@ int hb___unZipFiles(char *szFile)
|
||||
{
|
||||
szZipFileName = szFile;
|
||||
}
|
||||
/* else if (filename_to_extract==NULL)
|
||||
filename_to_extract = argv[i] ;*/
|
||||
|
||||
if (szZipFileName!=NULL)
|
||||
{
|
||||
@@ -204,17 +202,17 @@ int hb___unZipFiles(char *szFile)
|
||||
if (opt_do_extract==1)
|
||||
{
|
||||
if (filename_to_extract == NULL)
|
||||
return hb___Extract(uf,opt_do_extract_withoutpath,opt_overwrite);
|
||||
return hb___Extract(uf,opt_do_extract_withoutpath,opt_overwrite,pBlock);
|
||||
else
|
||||
return hb___ExtractOneFile(uf,filename_to_extract,
|
||||
opt_do_extract_withoutpath,opt_overwrite);
|
||||
opt_do_extract_withoutpath,opt_overwrite,pBlock);
|
||||
}
|
||||
unzCloseCurrentFile(uf);
|
||||
|
||||
return 0; /* to avoid warning */
|
||||
}
|
||||
|
||||
int hb___ExtractCurrentFile(unzFile uf,const int* popt_extract_without_path,int* popt_overwrite)
|
||||
int hb___ExtractCurrentFile(unzFile uf,const int* popt_extract_without_path,int* popt_overwrite,PHB_ITEM pBlock)
|
||||
{
|
||||
char filename_inzip[256];
|
||||
char* filename_withoutpath;
|
||||
@@ -266,6 +264,13 @@ int hb___ExtractCurrentFile(unzFile uf,const int* popt_extract_without_path,int*
|
||||
else
|
||||
write_filename = filename_withoutpath;
|
||||
|
||||
if(pBlock !=NULL){
|
||||
PHB_ITEM pFileName=hb_itemPutC(NULL, (char *)write_filename);
|
||||
hb_vmEvalBlockV( pBlock, 1, pFileName );
|
||||
hb_itemRelease(pFileName);
|
||||
}
|
||||
|
||||
|
||||
err = unzOpenCurrentFile(uf);
|
||||
if (err!=UNZ_OK)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user