From: Julian Smart Date: Thu, 11 Dec 2003 08:43:28 +0000 (+0000) Subject: Applied patch [ 818336 ] Add timestamp to gzip out stream X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/6da1ce616686ad1dc03021aead77a048971279d3 Applied patch [ 818336 ] Add timestamp to gzip out stream git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24739 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/latex/wx/gzstream.tex b/docs/latex/wx/gzstream.tex index cf4a0b35ad..e83ee487a5 100644 --- a/docs/latex/wx/gzstream.tex +++ b/docs/latex/wx/gzstream.tex @@ -134,7 +134,7 @@ The stream is not seekable, \helpref{SeekO()}{wxoutputstreamseeko} returns \membersection{wxGzipOutputStream::wxGzipOutputStream}\label{wxgzipoutputstreamwxgzipoutputstream} -\func{}{wxGzipOutputStream}{\param{wxOutputStream\& }{stream}, \param{const wxString\& }{originalName = wxEmptyString}, \param{int }{level = -1}, \param{wxMBConv\& }{conv = wxConvFile}} +\func{}{wxGzipOutputStream}{\param{wxOutputStream\& }{stream}, \param{const wxString\& }{originalName = wxEmptyString}, \param{const wxDateTime\& }{originalTime = wxDateTime::Now()}, \param{int }{level = -1}, \param{wxMBConv\& }{conv = wxConvFile}} If the {\it originalName} is given, then it is written to the gzip header with any directory components removed. On a Unicode build it is first @@ -144,9 +144,8 @@ use {\it wxConvFile} which more closely matches the behaviour of the gzip program. In a non-Unicode build {\it conv} is ignored. {\it conv} has no effect on the stream data. -If {\it originalName} specifies a file that exists then it's current -modification time is also written to the gzip header as the timestamp. -Otherwise the current time is used for the timestamp. +If {\it originalTime} is given then it is also written to the gzip header +as the timestamp. If omitted the current time is used. {\it level} is the compression level. It can be an integer between $0$ (no compression) and $9$ (most compression). $-1$ specifies that the default diff --git a/include/wx/gzstream.h b/include/wx/gzstream.h index 9a340fec20..7eb7cc39be 100644 --- a/include/wx/gzstream.h +++ b/include/wx/gzstream.h @@ -64,6 +64,9 @@ class WXDLLIMPEXP_BASE wxGzipOutputStream : public wxFilterOutputStream public: wxGzipOutputStream(wxOutputStream& stream, const wxString& originalName = wxEmptyString, +#if wxUSE_DATETIME + const wxDateTime& originalTime = wxDateTime::Now(), +#endif int level = -1, wxMBConv& conv = wxConvFile); virtual ~wxGzipOutputStream(); diff --git a/src/common/gzstream.cpp b/src/common/gzstream.cpp index 6e1098a165..dc04147bbc 100644 --- a/src/common/gzstream.cpp +++ b/src/common/gzstream.cpp @@ -175,12 +175,14 @@ size_t wxGzipInputStream::OnSysRead(void *buffer, size_t size) wxDataInputStream ds(*m_parent_i_stream); m_lasterror = wxSTREAM_READ_ERROR; - if (m_parent_i_stream->IsOk() && ds.Read32() != m_crc) - wxLogError(_("reading Gzip stream: bad crc")); - else if (m_parent_i_stream->IsOk() && ds.Read32() != (wxUint32)TellI()) - wxLogError(_("reading Gzip stream: incorrect length")); - else if (m_parent_i_stream->IsOk()) - m_lasterror = wxSTREAM_EOF; + if (m_parent_i_stream->IsOk()) { + if (ds.Read32() != m_crc) + wxLogError(_("reading Gzip stream: bad crc")); + else if (ds.Read32() != (wxUint32)TellI()) + wxLogError(_("reading Gzip stream: incorrect length")); + else + m_lasterror = wxSTREAM_EOF; + } } else if (!*m_decomp) { m_lasterror = wxSTREAM_READ_ERROR; @@ -194,10 +196,13 @@ size_t wxGzipInputStream::OnSysRead(void *buffer, size_t size) // Output stream wxGzipOutputStream::wxGzipOutputStream( - wxOutputStream& stream, - const wxString& originalName /*=wxEmptyString*/, - int level /*=-1*/, - wxMBConv& conv /*=wxConvFile*/) + wxOutputStream& stream, + const wxString& originalName /*=wxEmptyString*/, +#if wxUSE_DATETIME + const wxDateTime& originalTime /*=wxDateTime::Now()*/, +#endif + int level /*=-1*/, + wxMBConv& conv /*=wxConvFile*/) : wxFilterOutputStream(stream) { m_comp = NULL; @@ -205,17 +210,10 @@ wxGzipOutputStream::wxGzipOutputStream( wxFileName filename(originalName); -#if wxUSE_DATETIME - wxDateTime datetime; - - if (filename.FileExists()) - datetime = filename.GetModificationTime(); - else - datetime = wxDateTime::Now(); - - wxUint32 timestamp = (datetime.GetValue() / 1000L).GetLo(); -#else wxUint32 timestamp = 0; +#if wxUSE_DATETIME + if (originalTime.IsValid()) + timestamp = (originalTime.GetValue() / 1000L).GetLo(); #endif // RFC-1952 specifies ISO-8859-1 for the name. Also it should be just the