From 9548c49a6a1e4533976450205de136d9edbe91b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Sun, 8 Dec 2002 20:28:12 +0000 Subject: [PATCH] modifications to URL<->filename conversion: take wxFileName, rename git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18116 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/filesys.h | 5 +++-- src/common/filesys.cpp | 50 ++++++++++++++++++++++-------------------- src/common/fs_zip.cpp | 7 +++--- 3 files changed, 33 insertions(+), 29 deletions(-) diff --git a/include/wx/filesys.h b/include/wx/filesys.h index b819282152..814a41a314 100644 --- a/include/wx/filesys.h +++ b/include/wx/filesys.h @@ -29,6 +29,7 @@ #include "wx/stream.h" #include "wx/url.h" #include "wx/datetime.h" +#include "wx/filename.h" class wxFSFile; class wxFileSystemHandler; @@ -181,10 +182,10 @@ public: static void CleanUpHandlers(); // Returns the native path for a file URL - static wxString URLToNativePath( const wxString& url ); + static wxFileName URLToFileName(const wxString& url); // Returns the file URL for a native path - static wxString NativePathToURL( const wxString& path ); + static wxString FileNameToURL(const wxFileName& filename); protected: diff --git a/src/common/filesys.cpp b/src/common/filesys.cpp index d335bf7e7a..5ed5a520d0 100644 --- a/src/common/filesys.cpp +++ b/src/common/filesys.cpp @@ -173,8 +173,7 @@ wxFSFile* wxLocalFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& { // location has Unix path separators wxString right = ms_root + GetRightLocation(location); - wxString nativePath = wxFileSystem::URLToNativePath(right); - wxFileName fn(nativePath, wxPATH_UNIX); + wxFileName fn = wxFileSystem::URLToFileName(right); if (!wxFileExists(fn.GetFullPath())) return (wxFSFile*) NULL; @@ -190,7 +189,8 @@ wxFSFile* wxLocalFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& wxString wxLocalFSHandler::FindFirst(const wxString& spec, int flags) { wxString right = ms_root + GetRightLocation(spec); - return wxFindFirstFile(right, flags); + return wxFindFirstFile(wxFileSystem::URLToFileName(right).GetFullPath(), + flags); } wxString wxLocalFSHandler::FindNext() @@ -422,13 +422,13 @@ const static wxString g_unixPathString(wxT("/")); const static wxString g_nativePathString(wxFILE_SEP_PATH); // Returns the native path for a file URL -wxString wxFileSystem::URLToNativePath( const wxString& url ) +wxFileName wxFileSystem::URLToFileName(const wxString& url) { - wxString path = url ; + wxString path = url; if ( path.Find(wxT("file://")) == 0 ) { - path = path.Mid(7) ; + path = path.Mid(7); } #ifndef __UNIX__ @@ -437,41 +437,43 @@ wxString wxFileSystem::URLToNativePath( const wxString& url ) // which only exists on msw and corresponds to a unc if ( path[0u] == wxT('/') && path [1u] != wxT('/')) { - path = path.Mid(1) ; + path = path.Mid(1); } else if ( (url.Find(wxT("file://")) == 0) && (path.Find(wxT('/')) != wxNOT_FOUND) && (path.Length() > 1) && (path[1u] != wxT(':')) ) { - path = wxT("//") + path ; + path = wxT("//") + path; } #endif - path.Replace(g_unixPathString, g_nativePathString) ; + path.Replace(g_unixPathString, g_nativePathString); - return path ; + return wxFileName(path, wxPATH_NATIVE); } // Returns the file URL for a native path -wxString wxFileSystem::NativePathToURL( const wxString& path ) +wxString wxFileSystem::FileNameToURL(const wxFileName& filename) { - wxString url = path ; + wxFileName fn = filename; + fn.Normalize(wxPATH_NORM_DOTS | wxPATH_NORM_TILDE | wxPATH_NORM_ABSOLUTE); + wxString url = fn.GetFullPath(wxPATH_NATIVE); #ifdef __WXMSW__ - // unc notation - if ( url.Find(wxT("\\\\")) == 0 ) - { - url = url.Mid(2) ; - } - else + // unc notation + if ( url.Find(wxT("\\\\")) == 0 ) + { + url = url.Mid(2); + } + else + { + url = wxT("/") + url; + } #endif - { - url = wxT("/") + url ; - } - url.Replace(g_nativePathString, g_unixPathString) ; - url = wxT("file://") + url ; - return url ; + url.Replace(g_nativePathString, g_unixPathString); + url = wxT("file://") + url; + return url; } diff --git a/src/common/fs_zip.cpp b/src/common/fs_zip.cpp index 18d421b7be..27ed0b6a55 100644 --- a/src/common/fs_zip.cpp +++ b/src/common/fs_zip.cpp @@ -89,9 +89,9 @@ wxFSFile* wxZipFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& l 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, @@ -137,7 +137,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('/'));