X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..78e37b46a4c1581822bab8d99486bc35c0f360ea:/src/common/fs_inet.cpp diff --git a/src/common/fs_inet.cpp b/src/common/fs_inet.cpp index 79fe5b3662..835cf15a7e 100644 --- a/src/common/fs_inet.cpp +++ b/src/common/fs_inet.cpp @@ -1,19 +1,16 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: fs_inet.cpp +// Name: src/common/fs_inet.cpp // Purpose: HTTP and FTP file system // Author: Vaclav Slavik // Copyright: (c) 1999 Vaclav Slavik +// RCS-ID: $Id$ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "fs_inet.h" -#endif - #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #if !wxUSE_SOCKETS @@ -23,14 +20,14 @@ #if wxUSE_FILESYSTEM && wxUSE_FS_INET -#ifndef WXPRECOMP +#ifndef WX_PRECOMP + #include "wx/module.h" #endif #include "wx/wfstream.h" #include "wx/url.h" #include "wx/filesys.h" #include "wx/fs_inet.h" -#include "wx/module.h" // ---------------------------------------------------------------------------- // Helper classes @@ -42,8 +39,8 @@ class wxTemporaryFileInputStream : public wxFileInputStream public: wxTemporaryFileInputStream(const wxString& filename) : wxFileInputStream(filename), m_filename(filename) {} - - ~wxTemporaryFileInputStream() + + virtual ~wxTemporaryFileInputStream() { // NB: copied from wxFileInputStream dtor, we need to do it before // wxRemoveFile @@ -52,7 +49,7 @@ public: delete m_file; m_file_destroy = false; } - wxRemoveFile(m_filename); + wxRemoveFile(m_filename); } protected: @@ -67,11 +64,11 @@ protected: static wxString StripProtocolAnchor(const wxString& location) { wxString myloc(location.BeforeLast(wxT('#'))); - if (myloc.IsEmpty()) myloc = location.AfterFirst(wxT(':')); + if (myloc.empty()) myloc = location.AfterFirst(wxT(':')); else myloc = myloc.AfterFirst(wxT(':')); // fix malformed url: - if (myloc.Left(2) != wxT("//")) + if (!myloc.Left(2).IsSameAs(wxT("//"))) { if (myloc.GetChar(0) != wxT('/')) myloc = wxT("//") + myloc; else myloc = wxT("/") + myloc; @@ -84,20 +81,24 @@ static wxString StripProtocolAnchor(const wxString& location) bool wxInternetFSHandler::CanOpen(const wxString& location) { +#if wxUSE_URL wxString p = GetProtocol(location); if ((p == wxT("http")) || (p == wxT("ftp"))) { wxURL url(p + wxT(":") + StripProtocolAnchor(location)); return (url.GetError() == wxURL_NOERR); } - - return FALSE; +#endif + return false; } wxFSFile* wxInternetFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& location) { +#if !wxUSE_URL + return NULL; +#else wxString right = GetProtocol(location) + wxT(":") + StripProtocolAnchor(location); @@ -106,7 +107,6 @@ wxFSFile* wxInternetFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), { wxInputStream *s = url.GetInputStream(); wxString content = url.GetProtocol().GetContentType(); - if (content == wxEmptyString) content = GetMimeTypeFromExt(location); if (s) { wxString tmpfile = @@ -117,7 +117,7 @@ wxFSFile* wxInternetFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), s->Read(sout); } delete s; - + return new wxFSFile(new wxTemporaryFileInputStream(tmpfile), right, content, @@ -130,6 +130,7 @@ wxFSFile* wxInternetFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), } return (wxFSFile*) NULL; // incorrect URL +#endif } @@ -138,12 +139,26 @@ class wxFileSystemInternetModule : public wxModule DECLARE_DYNAMIC_CLASS(wxFileSystemInternetModule) public: + wxFileSystemInternetModule() : + wxModule(), + m_handler(NULL) + { + } + virtual bool OnInit() { - wxFileSystem::AddHandler(new wxInternetFSHandler); - return TRUE; + m_handler = new wxInternetFSHandler; + wxFileSystem::AddHandler(m_handler); + return true; } - virtual void OnExit() {} + + virtual void OnExit() + { + delete wxFileSystem::RemoveHandler(m_handler); + } + + private: + wxFileSystemHandler* m_handler; }; IMPLEMENT_DYNAMIC_CLASS(wxFileSystemInternetModule, wxModule)