]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied patch [ 818336 ] Add timestamp to gzip out stream
authorJulian Smart <julian@anthemion.co.uk>
Thu, 11 Dec 2003 08:43:28 +0000 (08:43 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Thu, 11 Dec 2003 08:43:28 +0000 (08:43 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24739 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/gzstream.tex
include/wx/gzstream.h
src/common/gzstream.cpp

index cf4a0b35ad3fcd8f13306ba4b548f95d20af4b1a..e83ee487a5ce70074817bb59cabb2af5a3bf407d 100644 (file)
@@ -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
index 9a340fec20ebe338c7b7719f63de87f342dc6c68..7eb7cc39be00cb6a69aad58722f88f29c1ee49bb 100644 (file)
@@ -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();
index 6e1098a16524e8f468eab48f16a855e2e8b259a3..dc04147bbc585d4b98f0c8a718b70ebce637b32b 100644 (file)
@@ -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