[wx] Unreviewed build fix. Add stub for new method.
[WebKit-https.git] / Source / WebCore / platform / wx / FileSystemWx.cpp
1 /*
2  * Copyright (C) 2007 Kevin Ollivier
3  * Copyright (C) 2008 Collabora, Ltd.
4  * Copyright (C) 2009 Peter Laufenberg @ Inhance Digital Corp
5  *
6  * All rights reserved.
7  * 
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
25  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
28  */
29
30 #include "config.h"
31 #include "FileSystem.h"
32
33 #include "NotImplemented.h"
34 #include "PlatformString.h"
35 #include <wtf/text/CString.h>
36
37 #include <wx/wx.h>
38 #include <wx/datetime.h>
39 #include <wx/dir.h>
40 #include <wx/dynlib.h>
41 #include <wx/file.h>
42 #include <wx/filefn.h>
43 #include <wx/filename.h>
44
45 #if OS(DARWIN)
46 #include <CoreFoundation/CoreFoundation.h>
47 #endif
48
49 namespace WebCore {
50
51 bool fileExists(const String& path)
52 {
53     // NOTE: This is called for directory paths too so we need to check both.
54     return wxFileName::FileExists(path) || wxFileName::DirExists(path);
55 }
56
57 bool deleteFile(const String& path)
58 {
59     return wxRemoveFile(path);
60 }
61
62 bool deleteEmptyDirectory(const String& path)
63 {
64     return wxFileName::Rmdir(path);
65 }
66
67 bool getFileSize(const String& path, long long& resultSize)
68 {
69     wxULongLong size = wxFileName::GetSize(path);
70     if (wxInvalidSize != size) {
71         // TODO: why is FileSystem::getFileSize signed?
72         resultSize = (long long)size.GetValue();
73         return true;
74     }
75
76     return false;
77 }
78
79 bool getFileModificationTime(const String& path, time_t& t)
80 {
81     if (wxFileExists(path)) {
82         t = wxFileName(path).GetModificationTime().GetTicks();
83         return true;
84     }
85     return false;
86 }
87
88 bool makeAllDirectories(const String& path)
89 {
90     return wxFileName::Mkdir(path, 0777, wxPATH_MKDIR_FULL);
91 }
92
93 String pathByAppendingComponent(const String& path, const String& component)
94 {
95     return wxFileName(path, component).GetFullPath();
96 }
97
98 String homeDirectoryPath()
99 {
100     return wxFileName::GetHomeDir();
101 }
102
103 String pathGetFileName(const String& path)
104 {
105     return wxFileName(path).GetFullName();
106 }
107
108 String directoryName(const String& path)
109 {
110     return wxFileName(path).GetPath();
111 }
112
113 String openTemporaryFile(const String& prefix, PlatformFileHandle& handle)
114 {
115     wxString sFilename = wxFileName::CreateTempFileName(prefix);
116     wxFile* temp = new wxFile();
117     temp->Open(sFilename.c_str(), wxFile::read_write);
118     handle = temp;
119     return String(sFilename);
120 }
121     
122 PlatformFileHandle openFile(const String& path, FileOpenMode mode)
123 {
124     notImplemented();
125 }
126     
127 void closeFile(PlatformFileHandle& handle)
128 {
129     if (handle && handle != invalidPlatformFileHandle)
130         delete handle;
131 }
132
133 int writeToFile(PlatformFileHandle handle, const char* data, int length)
134 {
135     if (handle)
136         return static_cast<wxFile*>(handle)->Write(data, length);
137     return -1;
138 }
139
140 bool unloadModule(PlatformModule mod)
141 {
142 #if OS(WINDOWS)
143     return ::FreeLibrary(mod);
144 #elif OS(DARWIN)
145     CFRelease(mod);
146     return true;
147 #else
148     wxASSERT(mod);
149     delete mod;
150     return true;
151 #endif
152 }
153
154
155 class wxDirTraverserNonRecursive : public wxDirTraverser {
156 public:
157     wxDirTraverserNonRecursive(wxString basePath, wxArrayString& files) : m_basePath(basePath), m_files(files) { }
158
159     virtual wxDirTraverseResult OnFile(const wxString& filename)
160     {
161         wxFileName afile(filename);
162         afile.MakeRelativeTo(m_basePath);
163         if (afile.GetFullPath().Find(afile.GetPathSeparator()) == wxNOT_FOUND)
164             m_files.push_back(filename);
165
166         return wxDIR_CONTINUE;
167     }
168
169     virtual wxDirTraverseResult OnDir(const wxString& dirname)
170     {
171         wxFileName dirfile(dirname);
172         dirfile.MakeRelativeTo(m_basePath);
173         if (dirfile.GetFullPath().Find(dirfile.GetPathSeparator()) == wxNOT_FOUND)
174             m_files.push_back(dirname);
175
176         return wxDIR_CONTINUE;
177     }
178
179 private:
180     wxString m_basePath;
181     wxArrayString& m_files;
182
183     DECLARE_NO_COPY_CLASS(wxDirTraverserNonRecursive)
184 };
185
186 Vector<String> listDirectory(const String& path, const String& filter)
187 {
188     wxArrayString   file_paths;
189     // wxDir::GetAllFiles recurses and for platforms like Mac where
190     // a .plugin or .bundle can be a dir wx will recurse into the bundle
191     // and list the files rather than just returning the plugin name, so
192     // we write a special traverser that works around that issue.
193     wxDirTraverserNonRecursive traverser(path, file_paths);
194     
195     wxDir dir(path);
196     dir.Traverse(traverser, _T(""), wxDIR_FILES | wxDIR_DIRS);
197
198     Vector<String> entries;
199     
200     for (int i = 0; i < file_paths.GetCount(); i++)
201     {
202         entries.append(file_paths[i]);
203     }   
204     
205     return entries;
206 }
207
208 }