X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6f02a879ed7efc5fcf6328ff47a1352ec82812b7..6dbf7a375093d1e94aadb61f8d6759e820a9256d:/include/wx/zipstrm.h diff --git a/include/wx/zipstrm.h b/include/wx/zipstrm.h index 3dbab08dc0..5d3d67530d 100644 --- a/include/wx/zipstrm.h +++ b/include/wx/zipstrm.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: zipstrm.h +// Name: wx/zipstrm.h // Purpose: Streams for Zip files // Author: Mike Wetherell // RCS-ID: $Id$ @@ -12,10 +12,9 @@ #include "wx/defs.h" -#if wxUSE_ZLIB && wxUSE_STREAMS && wxUSE_ZIPSTREAM +#if wxUSE_ZIPSTREAM #include "wx/archive.h" -#include "wx/hashmap.h" #include "wx/filename.h" // some methods from wxZipInputStream and wxZipOutputStream stream do not get @@ -26,7 +25,7 @@ || !defined __GNUC_MINOR__ \ || !defined __GNUC_PATCHLEVEL__ \ || __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ < 30402) -#define WXZIPFIX WXDLLIMPEXP_BASE +#define WXZIPFIX WXDLLIMPEXP_BASE #else #define WXZIPFIX #endif @@ -53,7 +52,7 @@ enum wxZipMethod }; // Originating File-System. -// +// // These are Pkware's values. Note that Info-zip disagree on some of them, // most notably NTFS. // @@ -113,8 +112,8 @@ enum wxZipFlags // Forward decls // -class WXDLLIMPEXP_BASE wxZipEntry; -class WXDLLIMPEXP_BASE wxZipInputStream; +class WXDLLIMPEXP_FWD_BASE wxZipEntry; +class WXDLLIMPEXP_FWD_BASE wxZipInputStream; ///////////////////////////////////////////////////////////////////////////// @@ -222,9 +221,9 @@ protected: void Notify(); +private: wxArchiveEntry* DoClone() const { return ZipClone(); } -private: size_t ReadLocal(wxInputStream& stream, wxMBConv& conv); size_t WriteLocal(wxOutputStream& stream, wxMBConv& conv) const; @@ -268,9 +267,9 @@ private: ///////////////////////////////////////////////////////////////////////////// -// wxZipOutputStream +// wxZipOutputStream -WX_DECLARE_LIST_WITH_DECL(wxZipEntry, wx__ZipEntryList, class WXDLLIMPEXP_BASE); +WX_DECLARE_LIST_WITH_DECL(wxZipEntry, wxZipEntryList_, class WXDLLIMPEXP_BASE); class WXDLLIMPEXP_BASE wxZipOutputStream : public wxArchiveOutputStream { @@ -278,6 +277,9 @@ public: wxZipOutputStream(wxOutputStream& stream, int level = -1, wxMBConv& conv = wxConvLocal); + wxZipOutputStream(wxOutputStream *stream, + int level = -1, + wxMBConv& conv = wxConvLocal); virtual WXZIPFIX ~wxZipOutputStream(); bool PutNextEntry(wxZipEntry *entry) { return DoCreate(entry); } @@ -301,10 +303,6 @@ public: int GetLevel() const { return m_level; } void WXZIPFIX SetLevel(int level); - bool WXZIPFIX PutNextEntry(wxArchiveEntry *entry); - bool WXZIPFIX CopyEntry(wxArchiveEntry *entry, wxArchiveInputStream& stream); - bool WXZIPFIX CopyArchiveMetaData(wxArchiveInputStream& stream); - protected: virtual size_t WXZIPFIX OnSysWrite(const void *buffer, size_t size); virtual wxFileOffset OnSysTell() const { return m_entrySize; } @@ -320,6 +318,12 @@ protected: { return m_offsetAdjustment != wxInvalidOffset; } private: + void Init(int level); + + bool WXZIPFIX PutNextEntry(wxArchiveEntry *entry); + bool WXZIPFIX CopyEntry(wxArchiveEntry *entry, wxArchiveInputStream& stream); + bool WXZIPFIX CopyArchiveMetaData(wxArchiveInputStream& stream); + bool IsOpened() const { return m_comp || m_pending; } bool DoCreate(wxZipEntry *entry, bool raw = false); @@ -329,7 +333,7 @@ private: class wxStoredOutputStream *m_store; class wxZlibOutputStream2 *m_deflate; class wxZipStreamLink *m_backlink; - wx__ZipEntryList m_entries; + wxZipEntryList_ m_entries; char *m_initialData; size_t m_initialSize; wxZipEntry *m_pending; @@ -342,13 +346,14 @@ private: int m_level; wxFileOffset m_offsetAdjustment; wxString m_Comment; + bool m_endrecWritten; DECLARE_NO_COPY_CLASS(wxZipOutputStream) }; ///////////////////////////////////////////////////////////////////////////// -// wxZipInputStream +// wxZipInputStream class WXDLLIMPEXP_BASE wxZipInputStream : public wxArchiveInputStream { @@ -356,15 +361,15 @@ public: typedef wxZipEntry entry_type; wxZipInputStream(wxInputStream& stream, wxMBConv& conv = wxConvLocal); + wxZipInputStream(wxInputStream *stream, wxMBConv& conv = wxConvLocal); -#if 1 //WXWIN_COMPATIBILITY_2_6 +#if WXWIN_COMPATIBILITY_2_6 && wxUSE_FFILE wxZipInputStream(const wxString& archive, const wxString& file) : wxArchiveInputStream(OpenFile(archive), wxConvLocal) { Init(file); } #endif virtual WXZIPFIX ~wxZipInputStream(); - bool WXZIPFIX OpenEntry(wxArchiveEntry& entry); bool OpenEntry(wxZipEntry& entry) { return DoOpen(&entry); } bool WXZIPFIX CloseEntry(); @@ -379,7 +384,7 @@ protected: size_t WXZIPFIX OnSysRead(void *buffer, size_t size); wxFileOffset OnSysTell() const { return m_decomp ? m_decomp->TellI() : 0; } -#if 1 //WXWIN_COMPATIBILITY_2_6 +#if WXWIN_COMPATIBILITY_2_6 wxFileOffset WXZIPFIX OnSysSeek(wxFileOffset seek, wxSeekMode mode); #endif @@ -387,12 +392,16 @@ protected: virtual wxInputStream* WXZIPFIX OpenDecompressor(wxInputStream& stream); virtual bool WXZIPFIX CloseDecompressor(wxInputStream *decomp); - wxArchiveEntry *DoGetNextEntry() { return GetNextEntry(); } - private: void Init(); void Init(const wxString& file); - wxInputStream& OpenFile(const wxString& archive); +#if WXWIN_COMPATIBILITY_2_6 && wxUSE_FFILE + static wxInputStream *OpenFile(const wxString& archive); +#endif + + wxArchiveEntry *DoGetNextEntry() { return GetNextEntry(); } + + bool WXZIPFIX OpenEntry(wxArchiveEntry& entry); wxStreamError ReadLocal(bool readEndRec = false); wxStreamError ReadCentral(); @@ -400,7 +409,7 @@ private: wxUint32 ReadSignature(); bool FindEndRecord(); bool LoadEndRecord(); - + bool AtHeader() const { return m_headerSize == 0; } bool AfterHeader() const { return m_headerSize > 0 && !m_decomp; } bool IsOpened() const { return m_decomp != NULL; } @@ -413,7 +422,6 @@ private: class wxStoredInputStream *m_store; class wxZlibInputStream2 *m_inflate; class wxRawInputStream *m_rawin; - class wxFFileInputStream *m_ffile; wxZipEntry m_entry; bool m_raw; size_t m_headerSize; @@ -433,9 +441,9 @@ private: friend bool wxZipOutputStream::CopyArchiveMetaData( wxZipInputStream& inputStream); -#if 1 //WXWIN_COMPATIBILITY_2_6 +#if WXWIN_COMPATIBILITY_2_6 bool m_allowSeeking; - friend class wxZipFSInputStream; + friend class wxArchiveFSHandler; #endif DECLARE_NO_COPY_CLASS(wxZipInputStream) @@ -467,17 +475,26 @@ public: typedef wxZipPairIter pairiter_type; #endif + wxZipClassFactory(); + wxZipEntry *NewEntry() const { return new wxZipEntry; } wxZipInputStream *NewStream(wxInputStream& stream) const { return new wxZipInputStream(stream, GetConv()); } wxZipOutputStream *NewStream(wxOutputStream& stream) const { return new wxZipOutputStream(stream, -1, GetConv()); } + wxZipInputStream *NewStream(wxInputStream *stream) const + { return new wxZipInputStream(stream, GetConv()); } + wxZipOutputStream *NewStream(wxOutputStream *stream) const + { return new wxZipOutputStream(stream, -1, GetConv()); } wxString GetInternalName(const wxString& name, wxPathFormat format = wxPATH_NATIVE) const { return wxZipEntry::GetInternalName(name, format); } + const wxChar * const *GetProtocols(wxStreamProtocolType type + = wxSTREAM_PROTOCOL) const; + protected: wxArchiveEntry *DoNewEntry() const { return NewEntry(); } @@ -485,6 +502,10 @@ protected: { return NewStream(stream); } wxArchiveOutputStream *DoNewStream(wxOutputStream& stream) const { return NewStream(stream); } + wxArchiveInputStream *DoNewStream(wxInputStream *stream) const + { return NewStream(stream); } + wxArchiveOutputStream *DoNewStream(wxOutputStream *stream) const + { return NewStream(stream); } private: DECLARE_DYNAMIC_CLASS(wxZipClassFactory) @@ -549,6 +570,6 @@ inline void wxZipEntry::SetName(const wxString& name, } -#endif // wxUSE_ZLIB && wxUSE_STREAMS && wxUSE_ZIPSTREAM +#endif // wxUSE_ZIPSTREAM #endif // _WX_WXZIPSTREAM_H__