diff -r 000000000000 -r e4d67989cc36 compressionlibs/ziplib/inc/zipfile.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/compressionlibs/ziplib/inc/zipfile.h Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,169 @@ +// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + +#ifndef _ZIP_FILE_H_ +#define _ZIP_FILE_H_ + +#include +#include +#include + +#include +#include +#include +#include +#include + +// Forward Class Declaration(s) + +class CFileInputStream; +class CZipFileMemberIterator; +class CZipFileMember; +namespace ContentAccess + { + class CData; + } + +// End of Forward Class Declaration(s) + + +/** +A CZipFile represents a ZIP archive contained in a single file. +Multi file zip archives are not supported. + +@publishedAll +@released +*/ +class CZipFile : public CZipArchive + { + friend class RZipFileMemberReaderStream; + friend class CZipFileMemberIterator; + + public: + /** ZipFile error enumeration. + */ + enum + { + /** Cannot read file directory in the archive file*/ + KZipFileError = KZipArchiveMinError - 1, + + /** File not found error. It is not used in current implemenation*/ + KZipFileNotFound = KZipFileError - 1, + + /** File IO error.Any error occurs during a archive file is readed. + For examples, any error about reading number of disk, + an offset of signature, or the content of file is non-readable. + */ + KZipFileIOError = KZipFileError - 2 + }; + + public: + IMPORT_C static CZipFile* NewL(RFs& aFs, RFile& aFile); + IMPORT_C static CZipFile* NewL(RFs& aFs, const TDesC& aFileName); + IMPORT_C CZipFile(RFs& aFs, const TDesC& aFileName); + IMPORT_C TInt OpenL(void); + IMPORT_C void Close(void); + IMPORT_C virtual ~CZipFile(); + + protected: + IMPORT_C void ConstructL(const TDesC& aFileName); + + IMPORT_C void ConstructL(RFile& aFile); + + public: + IMPORT_C TInt Size(TInt& aSize) const; + + IMPORT_C CZipFileMember* MemberL(const TDesC& aName); + IMPORT_C CZipFileMember* CaseInsensitiveMemberL(const TDesC& aName); + IMPORT_C CZipFileMember* CaseSensitiveOrCaseInsensitiveMemberL(const TDesC& aName); + IMPORT_C TInt GetInputStreamL(const CZipFileMember* aMember, RZipFileMemberReaderStream*& aStream); + + IMPORT_C CZipFileMemberIterator* GetMembersL(void); + + +protected: + + /** + Internal representation of a compressed file in a zipfile + @publishedAll + @released + */ + struct TMemberPointer + { + /** the name of a compressed file*/ + TFileName* iName; + + /** Not used in current implementation*/ + TUint32 iCentralHeaderOffset; + + /** The local offset of header in a compressed file*/ + TUint32 iLocalHeaderOffset; + + /** CRC with 32 bits length in a compressed file*/ + TUint32 iCRC32; + + /** The size of compressed file */ + TUint32 iCompressedSize; + + /** The size of file without compressed*/ + TUint32 iUncompressedSize; + }; + +protected: + TInt FindCentralDirectoryTrailer(TUint32& offset); + TInt ReadCentralDirectoryTrailer(TUint32 offset, TCentralDirectoryTrailer&); + TInt ReadCentralDirectoryHeaderL(TCentralDirectoryHeader&, TMemberPointer&, + CCnvCharacterSetConverter* aConverter, TInt aConverterState); + + TInt ReadLocalHeader(TUint32, TLocalHeader&); + + const TMemberPointer* FindMemberPointer(const TDesC&, TBool); + + TInt LoadMemberPointersL(void); + + RZipFileMemberReaderStream* MakeInputStreamL(TUint32, TUint32, TUint32, TUint32); + CZipFileMember* MakeMemberL(TInt); + CZipFileMember* MakeMemberL(const TMemberPointer&, const TLocalHeader&); + + // File I/O Support + void OpenFileL(const TDesC& aFileName); + + TInt Read(TByte*, TUint32); + TInt Read(TUint16&); + TInt Read(TUint32&); + + TInt Seek(TInt); + + // Misc + void DeleteMemberPointers(void); + +private: + const TDesC& iFileName; + TUint32 iFileLength; + + /** The central directory of ZIP File Trailer*/ + TCentralDirectoryTrailer iTrailer; + + /** The pointer to a a compressed file in a zipfile*/ + TMemberPointer* iMemberPointers; + + RFs& iFs; + + /** The pointer to CData object created from a zip file*/ + ContentAccess::CData* iData; + }; + +#endif /* !_ZIP_FILE_H_ */