X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c1dc9f8394c1488ad8e7d945e6f943f7b34554ce..76015a6bb79156d8af1b5e8b4b8e46b4e192d18f:/src/common/zstream.cpp?ds=sidebyside diff --git a/src/common/zstream.cpp b/src/common/zstream.cpp index 44c26f2703..ce63c07dc9 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" @@ -31,7 +32,7 @@ // apparently not the case for all MSW makefiles and so, unless we use // configure (which defines __WX_SETUP_H__) or it is explicitly overridden by // the user (who can define wxUSE_ZLIB_H_IN_PATH), we hardcode the path here -#if defined(__WXMSW__) && !defined(__WX_SETUP_H__) && !defined(wxUSE_ZLIB_H_IN_PATH) +#if defined(__WINDOWS__) && !defined(__WX_SETUP_H__) && !defined(wxUSE_ZLIB_H_IN_PATH) #include "../zlib/zlib.h" #else #include "zlib.h" @@ -44,6 +45,22 @@ enum { }; +wxVersionInfo wxGetZlibVersionInfo() +{ + int major, + minor, + build; + + if ( sscanf(zlibVersion(), "%d.%d.%d", &major, &minor, &build) != 3 ) + { + major = + minor = + build = 0; + } + + return wxVersionInfo("zlib", major, minor, build); +} + ///////////////////////////////////////////////////////////////////////////// // Zlib Class factory @@ -60,8 +77,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,14 +105,14 @@ 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 }; @@ -224,7 +241,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()) + { wxLogError(_("Can't read inflate stream: unexpected EOF in underlying stream.")); + } break; default: @@ -248,6 +267,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 @@ -323,11 +352,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(); } @@ -412,5 +438,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