1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: fs_FileSystemBase.h
4
5 Copyright (C)2009 Nintendo Co., Ltd. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Rev: 31978 $
14 *---------------------------------------------------------------------------*/
15
16 #ifndef NN_FS_FS_FILESYSTEMBASE_H_
17 #define NN_FS_FS_FILESYSTEMBASE_H_
18
19 #include <cstdlib>
20 #include <cwchar>
21 #include <nn/err.h>
22 #include <nn/fs/fs_Parameters.h>
23 #include <nn/util/util_Result.h>
24
25 #ifdef NN_PLATFORM_CTR
26 #include <nn/fs/CTR/fs_FileSystemBase.h>
27 #endif
28
29 namespace nn { namespace fs { namespace detail {
30
31 class FileSystemBase
32 {
33 public:
FileSystemBase()34 FileSystemBase() : m_pImpl(NULL) {};
~FileSystemBase()35 ~FileSystemBase() {};
36
37 void Initialize(FileSystemBaseImpl& impl);
38 void Finalize();
39
40 void DeleteFile( const wchar_t* pathName );
41 void DeleteFile( const char* pathName );
42 Result TryDeleteFile( const wchar_t* pathName );
43 Result TryDeleteFile( const char* pathName );
44 void RenameFile( const wchar_t* currentPath, const wchar_t* newPath);
45 void RenameFile( const char* currentPath, const char* newPath);
46 Result TryRenameFile( const wchar_t* currentPath, const wchar_t* newPath);
47 Result TryRenameFile( const char* currentPath, const char* newPath);
48 void DeleteDirectory( const wchar_t* pathName );
49 void DeleteDirectory( const char* pathName );
50 Result TryDeleteDirectory( const wchar_t* pathName );
51 Result TryDeleteDirectory( const char* pathName );
52 void DeleteDirectoryRecursively( const wchar_t* pathName );
53 void DeleteDirectoryRecursively( const char* pathName );
54 Result TryDeleteDirectoryRecursively( const wchar_t* pathName );
55 Result TryDeleteDirectoryRecursively( const char* pathName );
56 void CreateFile( const wchar_t* pathName, s64 size );
57 void CreateFile( const char* pathName, s64 size );
58 Result TryCreateFile( const wchar_t* pathName, s64 size );
59 Result TryCreateFile( const char* pathName, s64 size );
60 void CreateDirectory( const wchar_t* pathName );
61 void CreateDirectory( const char* pathName );
62 Result TryCreateDirectory( const wchar_t* pathName );
63 Result TryCreateDirectory( const char* pathName );
64 void RenameDirectory( const wchar_t* currentPath, const wchar_t* newPath);
65 void RenameDirectory( const char* currentPath, const char* newPath);
66 Result TryRenameDirectory( const wchar_t* currentPath, const wchar_t* newPath);
67 Result TryRenameDirectory( const char* currentPath, const char* newPath);
68
69 private:
70 FileSystemBaseImpl* m_pImpl;
71 };
72
73 class WPathBuffer
74 {
75 public:
WPathBuffer(const char * pathName)76 WPathBuffer(const char* pathName)
77 {
78 ::std::mbstowcs(m_pBuffer, pathName, sizeof(m_pBuffer) / sizeof(*m_pBuffer));
79 }
~WPathBuffer()80 ~WPathBuffer() {}
81
GetBuffer()82 const wchar_t* GetBuffer() const { return m_pBuffer; }
83
84 private:
85 wchar_t m_pBuffer[MAX_FILE_PATH_LENGTH + 1 + 8];
86 };
87
Initialize(FileSystemBaseImpl & impl)88 inline void FileSystemBase::Initialize(FileSystemBaseImpl& impl)
89 {
90 NN_TASSERT_(!m_pImpl);
91
92 m_pImpl = &impl;
93 }
94
Finalize()95 inline void FileSystemBase::Finalize()
96 {
97 m_pImpl->Finalize();
98 m_pImpl = NULL;
99 }
100
DeleteFile(const wchar_t * pathName)101 inline void FileSystemBase::DeleteFile(const wchar_t* pathName)
102 {
103 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryDeleteFile(pathName));
104 }
105
DeleteFile(const char * pathName)106 inline void FileSystemBase::DeleteFile(const char* pathName)
107 {
108 WPathBuffer wpath(pathName);
109 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryDeleteFile(wpath.GetBuffer()));
110 }
111
TryDeleteFile(const wchar_t * pathName)112 inline Result FileSystemBase::TryDeleteFile(const wchar_t* pathName)
113 {
114 return m_pImpl->TryDeleteFile(pathName);
115 }
116
TryDeleteFile(const char * pathName)117 inline Result FileSystemBase::TryDeleteFile(const char* pathName)
118 {
119 WPathBuffer wpath(pathName);
120 return m_pImpl->TryDeleteFile(wpath.GetBuffer());
121 }
122
RenameFile(const wchar_t * currentPath,const wchar_t * newPath)123 inline void FileSystemBase::RenameFile( const wchar_t* currentPath, const wchar_t* newPath)
124 {
125 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryRenameFile(currentPath, newPath));
126 }
127
RenameFile(const char * currentPath,const char * newPath)128 inline void FileSystemBase::RenameFile( const char* currentPath, const char* newPath)
129 {
130 WPathBuffer wcurStr(currentPath);
131 WPathBuffer wnewStr(newPath);
132 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryRenameFile(wcurStr.GetBuffer(), wnewStr.GetBuffer()));
133 }
134
TryRenameFile(const wchar_t * currentPath,const wchar_t * newPath)135 inline Result FileSystemBase::TryRenameFile( const wchar_t* currentPath, const wchar_t* newPath)
136 {
137 return m_pImpl->TryRenameFile(currentPath, newPath);
138 }
139
TryRenameFile(const char * currentPath,const char * newPath)140 inline Result FileSystemBase::TryRenameFile( const char* currentPath, const char* newPath)
141 {
142 WPathBuffer wcurStr(currentPath);
143 WPathBuffer wnewStr(newPath);
144 return m_pImpl->TryRenameFile(wcurStr.GetBuffer(), wnewStr.GetBuffer());
145 }
146
DeleteDirectory(const wchar_t * pathName)147 inline void FileSystemBase::DeleteDirectory(const wchar_t* pathName)
148 {
149 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryDeleteDirectory(pathName));
150 }
151
DeleteDirectory(const char * pathName)152 inline void FileSystemBase::DeleteDirectory(const char* pathName)
153 {
154 WPathBuffer wpath(pathName);
155 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryDeleteDirectory(wpath.GetBuffer()));
156 }
157
DeleteDirectoryRecursively(const wchar_t * pathName)158 inline void FileSystemBase::DeleteDirectoryRecursively(const wchar_t* pathName)
159 {
160 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryDeleteDirectoryRecursively(pathName));
161 }
162
DeleteDirectoryRecursively(const char * pathName)163 inline void FileSystemBase::DeleteDirectoryRecursively(const char* pathName)
164 {
165 WPathBuffer wpath(pathName);
166 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryDeleteDirectoryRecursively(wpath.GetBuffer()));
167 }
168
TryDeleteDirectory(const wchar_t * pathName)169 inline Result FileSystemBase::TryDeleteDirectory(const wchar_t* pathName)
170 {
171 return m_pImpl->TryDeleteDirectory(pathName);
172 }
173
TryDeleteDirectory(const char * pathName)174 inline Result FileSystemBase::TryDeleteDirectory(const char* pathName)
175 {
176 WPathBuffer wpath(pathName);
177 return m_pImpl->TryDeleteDirectory(wpath.GetBuffer());
178 }
179
TryDeleteDirectoryRecursively(const wchar_t * pathName)180 inline Result FileSystemBase::TryDeleteDirectoryRecursively(const wchar_t* pathName)
181 {
182 return m_pImpl->TryDeleteDirectoryRecursively(pathName);
183 }
184
TryDeleteDirectoryRecursively(const char * pathName)185 inline Result FileSystemBase::TryDeleteDirectoryRecursively(const char* pathName)
186 {
187 WPathBuffer wpath(pathName);
188 return m_pImpl->TryDeleteDirectoryRecursively(wpath.GetBuffer());
189 }
190
CreateFile(const wchar_t * pathName,s64 size)191 inline void FileSystemBase::CreateFile(const wchar_t* pathName, s64 size)
192 {
193 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryCreateFile(pathName, size));
194 }
195
CreateFile(const char * pathName,s64 size)196 inline void FileSystemBase::CreateFile(const char* pathName, s64 size)
197 {
198 WPathBuffer wpath(pathName);
199 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryCreateFile(wpath.GetBuffer(), size));
200 }
201
TryCreateFile(const wchar_t * pathName,s64 size)202 inline Result FileSystemBase::TryCreateFile(const wchar_t* pathName, s64 size)
203 {
204 return m_pImpl->TryCreateFile(pathName, size);
205 }
206
TryCreateFile(const char * pathName,s64 size)207 inline Result FileSystemBase::TryCreateFile(const char* pathName, s64 size)
208 {
209 WPathBuffer wpath(pathName);
210 return m_pImpl->TryCreateFile(wpath.GetBuffer(), size);
211 }
212
CreateDirectory(const wchar_t * pathName)213 inline void FileSystemBase::CreateDirectory(const wchar_t* pathName)
214 {
215 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryCreateDirectory(pathName));
216 }
217
CreateDirectory(const char * pathName)218 inline void FileSystemBase::CreateDirectory(const char* pathName)
219 {
220 WPathBuffer wpath(pathName);
221 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryCreateDirectory(wpath.GetBuffer()));
222 }
223
TryCreateDirectory(const wchar_t * pathName)224 inline Result FileSystemBase::TryCreateDirectory(const wchar_t* pathName)
225 {
226 return m_pImpl->TryCreateDirectory(pathName);
227 }
228
TryCreateDirectory(const char * pathName)229 inline Result FileSystemBase::TryCreateDirectory(const char* pathName)
230 {
231 WPathBuffer wpath(pathName);
232 return m_pImpl->TryCreateDirectory(wpath.GetBuffer());
233 }
234
RenameDirectory(const wchar_t * currentPath,const wchar_t * newPath)235 inline void FileSystemBase::RenameDirectory( const wchar_t* currentPath, const wchar_t* newPath)
236 {
237 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryRenameDirectory(currentPath, newPath));
238 }
239
RenameDirectory(const char * currentPath,const char * newPath)240 inline void FileSystemBase::RenameDirectory( const char* currentPath, const char* newPath)
241 {
242 WPathBuffer wcurStr(currentPath);
243 WPathBuffer wnewStr(newPath);
244 NN_ERR_THROW_FATAL_ALL(m_pImpl->TryRenameDirectory(wcurStr.GetBuffer(), wnewStr.GetBuffer()));
245 }
246
TryRenameDirectory(const wchar_t * currentPath,const wchar_t * newPath)247 inline Result FileSystemBase::TryRenameDirectory( const wchar_t* currentPath, const wchar_t* newPath)
248 {
249 return m_pImpl->TryRenameDirectory(currentPath, newPath);
250 }
251
TryRenameDirectory(const char * currentPath,const char * newPath)252 inline Result FileSystemBase::TryRenameDirectory( const char* currentPath, const char* newPath)
253 {
254 WPathBuffer wcurStr(currentPath);
255 WPathBuffer wnewStr(newPath);
256 return m_pImpl->TryRenameDirectory(wcurStr.GetBuffer(), wnewStr.GetBuffer());
257 }
258
259 void RegisterGlobalFileSystemBase(FileSystemBase& base);
260 FileSystemBase& GetGlobalFileSystemBase();
261
262 }}}
263 #endif
264