X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b5f62a0b2db198609b45dec622a018dae37008e..878711c01c1b9ad5b97d35f379a048b8ce1bfb49:/src/common/fs_zip.cpp diff --git a/src/common/fs_zip.cpp b/src/common/fs_zip.cpp index 18d421b7be..4d9d3aa3c5 100644 --- a/src/common/fs_zip.cpp +++ b/src/common/fs_zip.cpp @@ -39,9 +39,9 @@ #endif -//-------------------------------------------------------------------------------- +//---------------------------------------------------------------------------- // wxZipFSHandler -//-------------------------------------------------------------------------------- +//---------------------------------------------------------------------------- @@ -87,18 +87,29 @@ wxFSFile* wxZipFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& l return NULL; } + if (right.Contains(wxT("./"))) + { + if (right.GetChar(0) != wxT('/')) right = wxT('/') + right; + wxFileName rightPart(right, wxPATH_UNIX); + rightPart.Normalize(wxPATH_NORM_DOTS, wxT("/"), wxPATH_UNIX); + right = rightPart.GetFullPath(wxPATH_UNIX); + } + if (right.GetChar(0) == wxT('/')) right = right.Mid(1); - wxString leftFilename = wxFileSystem::URLToNativePath(left); + wxFileName leftFilename = wxFileSystem::URLToFileName(left); - s = new wxZipInputStream(leftFilename, right); + s = new wxZipInputStream(leftFilename.GetFullPath(), right); if (s && s->IsOk() ) { return new wxFSFile(s, left + wxT("#zip:") + right, GetMimeTypeFromExt(location), - GetAnchor(location), - wxDateTime(wxFileModificationTime(left))); + GetAnchor(location) +#if wxUSE_DATETIME + , wxDateTime(wxFileModificationTime(left)) +#endif // wxUSE_DATETIME + ); } delete s; @@ -137,7 +148,8 @@ wxString wxZipFSHandler::FindFirst(const wxString& spec, int flags) } m_ZipFile = left; - m_Archive = (void*) unzOpen(m_ZipFile.mb_str()); + wxString nativename = wxFileSystem::URLToFileName(m_ZipFile).GetFullPath(); + m_Archive = (void*) unzOpen(nativename.mb_str()); m_Pattern = right.AfterLast(wxT('/')); m_BaseDir = right.BeforeLast(wxT('/'));