X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/55420742a101b2963c40694cb879ea3de4fb6bb2..2e14066008229145e2da7b9f05a478ce38631f83:/src/common/zstream.cpp?ds=sidebyside diff --git a/src/common/zstream.cpp b/src/common/zstream.cpp index 3ba96cf3cb..739a58e836 100644 --- a/src/common/zstream.cpp +++ b/src/common/zstream.cpp @@ -19,6 +19,7 @@ #if wxUSE_ZLIB && wxUSE_STREAMS #include "wx/zstream.h" +#include "wx/versioninfo.h" #ifndef WX_PRECOMP #include "wx/intl.h" @@ -44,6 +45,14 @@ enum { }; +wxVersionInfo wxGetZlibVersionInfo() +{ + return wxVersionInfo("zlib", + ZLIB_VERNUM >> 12, + (ZLIB_VERNUM >> 8) & 0x0F, + (ZLIB_VERNUM & 0xFF) / 0x10); +} + ///////////////////////////////////////////////////////////////////////////// // Zlib Class factory @@ -60,8 +69,8 @@ wxZlibClassFactory::wxZlibClassFactory() const wxChar * const * wxZlibClassFactory::GetProtocols(wxStreamProtocolType type) const { - static const wxChar *mimes[] = { _T("application/x-deflate"), NULL }; - static const wxChar *encs[] = { _T("deflate"), NULL }; + static const wxChar *mimes[] = { wxT("application/x-deflate"), NULL }; + static const wxChar *encs[] = { wxT("deflate"), NULL }; static const wxChar *empty[] = { NULL }; switch (type) { @@ -88,23 +97,23 @@ wxGzipClassFactory::wxGzipClassFactory() const wxChar * const * wxGzipClassFactory::GetProtocols(wxStreamProtocolType type) const { - static const wxChar *protos[] = - { _T("gzip"), NULL }; - static const wxChar *mimes[] = - { _T("application/gzip"), _T("application/x-gzip"), NULL }; - static const wxChar *encs[] = - { _T("gzip"), NULL }; - static const wxChar *exts[] = - { _T(".gz"), _T(".gzip"), NULL }; + static const wxChar *protos[] = + { wxT("gzip"), NULL }; + static const wxChar *mimes[] = + { wxT("application/gzip"), wxT("application/x-gzip"), NULL }; + static const wxChar *encs[] = + { wxT("gzip"), NULL }; + static const wxChar *exts[] = + { wxT(".gz"), wxT(".gzip"), NULL }; static const wxChar *empty[] = { NULL }; switch (type) { - case wxSTREAM_PROTOCOL: return protos; - case wxSTREAM_MIMETYPE: return mimes; - case wxSTREAM_ENCODING: return encs; - case wxSTREAM_FILEEXTENSION: return exts; - default: return empty; + case wxSTREAM_PROTOCOL: return protos; + case wxSTREAM_MIMETYPE: return mimes; + case wxSTREAM_ENCODING: return encs; + case wxSTREAM_FILEEXT: return exts; + default: return empty; } } @@ -132,13 +141,6 @@ void wxZlibInputStream::Init(int flags) m_z_size = ZSTREAM_BUFFER_SIZE; m_pos = 0; -#if WXWIN_COMPATIBILITY_2_4 - // treat compatibility mode as auto - m_24compatibilty = flags == wxZLIB_24COMPATIBLE; - if (m_24compatibilty) - flags = wxZLIB_AUTO; -#endif - // if gzip is asked for but not supported... if ((flags == wxZLIB_GZIP || flags == wxZLIB_AUTO) && !CanHandleGZip()) { if (flags == wxZLIB_AUTO) { @@ -231,12 +233,9 @@ size_t wxZlibInputStream::OnSysRead(void *buffer, size_t size) // by the parent strean, m_lasterror = wxSTREAM_READ_ERROR; if (m_parent_i_stream->Eof()) -#if WXWIN_COMPATIBILITY_2_4 - if (m_24compatibilty) - m_lasterror = wxSTREAM_EOF; - else -#endif + { wxLogError(_("Can't read inflate stream: unexpected EOF in underlying stream.")); + } break; default: @@ -260,6 +259,16 @@ size_t wxZlibInputStream::OnSysRead(void *buffer, size_t size) return major > 1 || (major == 1 && minor >= 2); } +bool wxZlibInputStream::SetDictionary(const char *data, const size_t datalen) +{ + return (inflateSetDictionary(m_inflate, (Bytef*)data, datalen) == Z_OK); +} + +bool wxZlibInputStream::SetDictionary(const wxMemoryBuffer &buf) +{ + return SetDictionary((char*)buf.GetData(), buf.GetDataLen()); +} + ////////////////////// // wxZlibOutputStream @@ -335,11 +344,8 @@ bool wxZlibOutputStream::Close() { DoFlush(true); deflateEnd(m_deflate); - delete m_deflate; - - m_deflate = NULL; - delete[] m_z_buffer; - m_z_buffer = NULL; + wxDELETE(m_deflate); + wxDELETEA(m_z_buffer); return wxFilterOutputStream::Close() && IsOk(); } @@ -424,5 +430,15 @@ size_t wxZlibOutputStream::OnSysWrite(const void *buffer, size_t size) return wxZlibInputStream::CanHandleGZip(); } +bool wxZlibOutputStream::SetDictionary(const char *data, const size_t datalen) +{ + return (deflateSetDictionary(m_deflate, (Bytef*)data, datalen) == Z_OK); +} + +bool wxZlibOutputStream::SetDictionary(const wxMemoryBuffer &buf) +{ + return SetDictionary((char*)buf.GetData(), buf.GetDataLen()); +} + #endif // wxUSE_ZLIB && wxUSE_STREAMS