]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix wxZipInputStream::SeekI (returns wxInvalidOffset before first read)
authorMichael Wetherell <mike.wetherell@ntlworld.com>
Thu, 24 Mar 2005 23:48:06 +0000 (23:48 +0000)
committerMichael Wetherell <mike.wetherell@ntlworld.com>
Thu, 24 Mar 2005 23:48:06 +0000 (23:48 +0000)
patch 1169934 by Artur Kornacki

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33040 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/zipstrm.cpp

index 1c10609715cc014d6fdc790afa46be4636624c88..eacd2b1d9c4d6de8dca192dd1d1c8ccb29a0a5df 100644 (file)
@@ -1746,7 +1746,12 @@ size_t wxZipInputStream::OnSysRead(void *buffer, size_t size)
 //
 wxFileOffset wxZipInputStream::OnSysSeek(wxFileOffset seek, wxSeekMode mode)
 {
 //
 wxFileOffset wxZipInputStream::OnSysSeek(wxFileOffset seek, wxSeekMode mode)
 {
-    if (!m_ffile || AtHeader())
+    if (!m_ffile)
+        return wxInvalidOffset;
+    if (!IsOpened())
+        if ((AtHeader() && !DoOpen()) || !OpenDecompressor())
+            m_lasterror = wxSTREAM_READ_ERROR;
+    if (!IsOk())
         return wxInvalidOffset;
 
     // NB: since ZIP files don't natively support seeking, we have to
         return wxInvalidOffset;
 
     // NB: since ZIP files don't natively support seeking, we have to
@@ -1761,7 +1766,7 @@ wxFileOffset wxZipInputStream::OnSysSeek(wxFileOffset seek, wxSeekMode mode)
     {
         case wxFromCurrent : nextpos = seek + pos; break;
         case wxFromStart : nextpos = seek; break;
     {
         case wxFromCurrent : nextpos = seek + pos; break;
         case wxFromStart : nextpos = seek; break;
-        case wxFromEnd : nextpos = GetLength() - 1 + seek; break;
+        case wxFromEnd : nextpos = GetLength() + seek; break;
         default : nextpos = pos; break; /* just to fool compiler, never happens */
     }
 
         default : nextpos = pos; break; /* just to fool compiler, never happens */
     }