From 6da1ce616686ad1dc03021aead77a048971279d3 Mon Sep 17 00:00:00 2001
From: Julian Smart <julian@anthemion.co.uk>
Date: Thu, 11 Dec 2003 08:43:28 +0000
Subject: [PATCH] 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
---
 docs/latex/wx/gzstream.tex |  7 +++----
 include/wx/gzstream.h      |  3 +++
 src/common/gzstream.cpp    | 38 ++++++++++++++++++--------------------
 3 files changed, 24 insertions(+), 24 deletions(-)

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
-- 
2.45.2

