]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/fs_zip.cpp
don't crash on weird line endings like \r\r\n
[wxWidgets.git] / src / common / fs_zip.cpp
index d2b6100cc2086cc76b4910cf39b340375015d1e5..b8ef9b69f9abecca8f7595c3117465f4445843ce 100644 (file)
@@ -7,12 +7,6 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-
-
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "fs_zip.h"
-#endif
-
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
@@ -71,13 +65,17 @@ wxZipFSHandler::wxZipFSHandler() : wxFileSystemHandler()
 
 wxZipFSHandler::~wxZipFSHandler()
 {
-    if (m_Archive)
-        delete m_Archive;
-    if (m_DirsFound)
-        delete m_DirsFound;
+    Cleanup();
 }
 
 
+void wxZipFSHandler::Cleanup()
+{
+    wxDELETE(m_Archive);
+    wxDELETE(m_DirsFound);
+}
+
 
 bool wxZipFSHandler::CanOpen(const wxString& location)
 {
@@ -110,25 +108,36 @@ wxFSFile* wxZipFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& l
     s = new wxZipFSInputStream(leftFile);
     if (s && s->IsOk())
     {
+#if wxUSE_DATETIME
+       wxDateTime dtMod;
+#endif // wxUSE_DATETIME
+
        bool found = false;
        while (!found)
        {
            wxZipEntry *ent = s->GetNextEntry();
            if (!ent)
                break;
+
            if (ent->GetInternalName() == right)
+           {
                found = true;
+               dtMod = ent->GetDateTime();
+           }
+
            delete ent;
        }
        if (found)
+       {
            return new wxFSFile(s,
                             left + wxT("#zip:") + right,
                             GetMimeTypeFromExt(location),
                             GetAnchor(location)
 #if wxUSE_DATETIME
-                            , wxDateTime(wxFileModificationTime(left))
+                            , dtMod
 #endif // wxUSE_DATETIME
                             );
+       }
     }
 
     delete s;