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: 27043 $
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/fs/fs_Parameters.h>
22 #include <nn/util/util_Result.h>
23
24 #ifdef NN_PLATFORM_CTR
25 #include <nn/fs/CTR/fs_FileSystemBase.h>
26 #endif
27
28 namespace nn { namespace fs { namespace detail {
29
30 class FileSystemBase
31 {
32 public:
FileSystemBase()33 FileSystemBase() : m_pImpl(NULL) {};
~FileSystemBase()34 ~FileSystemBase() {};
35
36 void Initialize(FileSystemBaseImpl& impl);
37 void Finalize();
38
39 void DeleteFile( const wchar_t* pathName );
40 void DeleteFile( const char* pathName );
41 Result TryDeleteFile( const wchar_t* pathName );
42 Result TryDeleteFile( const char* pathName );
43 void RenameFile( const wchar_t* currentPath, const wchar_t* newPath);
44 void RenameFile( const char* currentPath, const char* newPath);
45 Result TryRenameFile( const wchar_t* currentPath, const wchar_t* newPath);
46 Result TryRenameFile( const char* currentPath, const char* newPath);
47 void DeleteDirectory( const wchar_t* pathName );
48 void DeleteDirectory( const char* pathName );
49 Result TryDeleteDirectory( const wchar_t* pathName );
50 Result TryDeleteDirectory( const char* pathName );
51 void DeleteDirectoryRecursively( const wchar_t* pathName );
52 void DeleteDirectoryRecursively( const char* pathName );
53 Result TryDeleteDirectoryRecursively( const wchar_t* pathName );
54 Result TryDeleteDirectoryRecursively( const char* pathName );
55 void CreateFile( const wchar_t* pathName, s64 size );
56 void CreateFile( const char* pathName, s64 size );
57 Result TryCreateFile( const wchar_t* pathName, s64 size );
58 Result TryCreateFile( const char* pathName, s64 size );
59 void CreateDirectory( const wchar_t* pathName );
60 void CreateDirectory( const char* pathName );
61 Result TryCreateDirectory( const wchar_t* pathName );
62 Result TryCreateDirectory( const char* pathName );
63 void RenameDirectory( const wchar_t* currentPath, const wchar_t* newPath);
64 void RenameDirectory( const char* currentPath, const char* newPath);
65 Result TryRenameDirectory( const wchar_t* currentPath, const wchar_t* newPath);
66 Result TryRenameDirectory( const char* currentPath, const char* newPath);
67
68 private:
69 FileSystemBaseImpl* m_pImpl;
70 };
71
72 class WPathBuffer
73 {
74 public:
WPathBuffer(const char * pathName)75 WPathBuffer(const char* pathName)
76 {
77 ::std::mbstowcs(m_pBuffer, pathName, sizeof(m_pBuffer) / sizeof(*m_pBuffer));
78 }
~WPathBuffer()79 ~WPathBuffer() {}
80
GetBuffer()81 const wchar_t* GetBuffer() const { return m_pBuffer; }
82
83 private:
84 wchar_t m_pBuffer[MAX_FILE_PATH_LENGTH + 1 + 8];
85 };
86
Initialize(FileSystemBaseImpl & impl)87 inline void FileSystemBase::Initialize(FileSystemBaseImpl& impl)
88 {
89 NN_TASSERT_(!m_pImpl);
90
91 m_pImpl = &impl;
92 }
93
Finalize()94 inline void FileSystemBase::Finalize()
95 {
96 m_pImpl->Finalize();
97 }
98
DeleteFile(const wchar_t * pathName)99 inline void FileSystemBase::DeleteFile(const wchar_t* pathName)
100 {
101 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryDeleteFile(pathName));
102 }
103
DeleteFile(const char * pathName)104 inline void FileSystemBase::DeleteFile(const char* pathName)
105 {
106 WPathBuffer wpath(pathName);
107 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryDeleteFile(wpath.GetBuffer()));
108 }
109
TryDeleteFile(const wchar_t * pathName)110 inline Result FileSystemBase::TryDeleteFile(const wchar_t* pathName)
111 {
112 return m_pImpl->TryDeleteFile(pathName);
113 }
114
TryDeleteFile(const char * pathName)115 inline Result FileSystemBase::TryDeleteFile(const char* pathName)
116 {
117 WPathBuffer wpath(pathName);
118 return m_pImpl->TryDeleteFile(wpath.GetBuffer());
119 }
120
RenameFile(const wchar_t * currentPath,const wchar_t * newPath)121 inline void FileSystemBase::RenameFile( const wchar_t* currentPath, const wchar_t* newPath)
122 {
123 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryRenameFile(currentPath, newPath));
124 }
125
RenameFile(const char * currentPath,const char * newPath)126 inline void FileSystemBase::RenameFile( const char* currentPath, const char* newPath)
127 {
128 WPathBuffer wcurStr(currentPath);
129 WPathBuffer wnewStr(newPath);
130 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryRenameFile(wcurStr.GetBuffer(), wnewStr.GetBuffer()));
131 }
132
TryRenameFile(const wchar_t * currentPath,const wchar_t * newPath)133 inline Result FileSystemBase::TryRenameFile( const wchar_t* currentPath, const wchar_t* newPath)
134 {
135 return m_pImpl->TryRenameFile(currentPath, newPath);
136 }
137
TryRenameFile(const char * currentPath,const char * newPath)138 inline Result FileSystemBase::TryRenameFile( const char* currentPath, const char* newPath)
139 {
140 WPathBuffer wcurStr(currentPath);
141 WPathBuffer wnewStr(newPath);
142 return m_pImpl->TryRenameFile(wcurStr.GetBuffer(), wnewStr.GetBuffer());
143 }
144
DeleteDirectory(const wchar_t * pathName)145 inline void FileSystemBase::DeleteDirectory(const wchar_t* pathName)
146 {
147 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryDeleteDirectory(pathName));
148 }
149
DeleteDirectory(const char * pathName)150 inline void FileSystemBase::DeleteDirectory(const char* pathName)
151 {
152 WPathBuffer wpath(pathName);
153 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryDeleteDirectory(wpath.GetBuffer()));
154 }
155
DeleteDirectoryRecursively(const wchar_t * pathName)156 inline void FileSystemBase::DeleteDirectoryRecursively(const wchar_t* pathName)
157 {
158 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryDeleteDirectoryRecursively(pathName));
159 }
160
DeleteDirectoryRecursively(const char * pathName)161 inline void FileSystemBase::DeleteDirectoryRecursively(const char* pathName)
162 {
163 WPathBuffer wpath(pathName);
164 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryDeleteDirectoryRecursively(wpath.GetBuffer()));
165 }
166
TryDeleteDirectory(const wchar_t * pathName)167 inline Result FileSystemBase::TryDeleteDirectory(const wchar_t* pathName)
168 {
169 return m_pImpl->TryDeleteDirectory(pathName);
170 }
171
TryDeleteDirectory(const char * pathName)172 inline Result FileSystemBase::TryDeleteDirectory(const char* pathName)
173 {
174 WPathBuffer wpath(pathName);
175 return m_pImpl->TryDeleteDirectory(wpath.GetBuffer());
176 }
177
TryDeleteDirectoryRecursively(const wchar_t * pathName)178 inline Result FileSystemBase::TryDeleteDirectoryRecursively(const wchar_t* pathName)
179 {
180 return m_pImpl->TryDeleteDirectoryRecursively(pathName);
181 }
182
TryDeleteDirectoryRecursively(const char * pathName)183 inline Result FileSystemBase::TryDeleteDirectoryRecursively(const char* pathName)
184 {
185 WPathBuffer wpath(pathName);
186 return m_pImpl->TryDeleteDirectoryRecursively(wpath.GetBuffer());
187 }
188
CreateFile(const wchar_t * pathName,s64 size)189 inline void FileSystemBase::CreateFile(const wchar_t* pathName, s64 size)
190 {
191 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryCreateFile(pathName, size));
192 }
193
CreateFile(const char * pathName,s64 size)194 inline void FileSystemBase::CreateFile(const char* pathName, s64 size)
195 {
196 WPathBuffer wpath(pathName);
197 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryCreateFile(wpath.GetBuffer(), size));
198 }
199
TryCreateFile(const wchar_t * pathName,s64 size)200 inline Result FileSystemBase::TryCreateFile(const wchar_t* pathName, s64 size)
201 {
202 return m_pImpl->TryCreateFile(pathName, size);
203 }
204
TryCreateFile(const char * pathName,s64 size)205 inline Result FileSystemBase::TryCreateFile(const char* pathName, s64 size)
206 {
207 WPathBuffer wpath(pathName);
208 return m_pImpl->TryCreateFile(wpath.GetBuffer(), size);
209 }
210
CreateDirectory(const wchar_t * pathName)211 inline void FileSystemBase::CreateDirectory(const wchar_t* pathName)
212 {
213 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryCreateDirectory(pathName));
214 }
215
CreateDirectory(const char * pathName)216 inline void FileSystemBase::CreateDirectory(const char* pathName)
217 {
218 WPathBuffer wpath(pathName);
219 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryCreateDirectory(wpath.GetBuffer()));
220 }
221
TryCreateDirectory(const wchar_t * pathName)222 inline Result FileSystemBase::TryCreateDirectory(const wchar_t* pathName)
223 {
224 return m_pImpl->TryCreateDirectory(pathName);
225 }
226
TryCreateDirectory(const char * pathName)227 inline Result FileSystemBase::TryCreateDirectory(const char* pathName)
228 {
229 WPathBuffer wpath(pathName);
230 return m_pImpl->TryCreateDirectory(wpath.GetBuffer());
231 }
232
RenameDirectory(const wchar_t * currentPath,const wchar_t * newPath)233 inline void FileSystemBase::RenameDirectory( const wchar_t* currentPath, const wchar_t* newPath)
234 {
235 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryRenameDirectory(currentPath, newPath));
236 }
237
RenameDirectory(const char * currentPath,const char * newPath)238 inline void FileSystemBase::RenameDirectory( const char* currentPath, const char* newPath)
239 {
240 WPathBuffer wcurStr(currentPath);
241 WPathBuffer wnewStr(newPath);
242 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryRenameDirectory(wcurStr.GetBuffer(), wnewStr.GetBuffer()));
243 }
244
TryRenameDirectory(const wchar_t * currentPath,const wchar_t * newPath)245 inline Result FileSystemBase::TryRenameDirectory( const wchar_t* currentPath, const wchar_t* newPath)
246 {
247 return m_pImpl->TryRenameDirectory(currentPath, newPath);
248 }
249
TryRenameDirectory(const char * currentPath,const char * newPath)250 inline Result FileSystemBase::TryRenameDirectory( const char* currentPath, const char* newPath)
251 {
252 WPathBuffer wcurStr(currentPath);
253 WPathBuffer wnewStr(newPath);
254 return m_pImpl->TryRenameDirectory(wcurStr.GetBuffer(), wnewStr.GetBuffer());
255 }
256
257 void RegisterGlobalFileSystemBase(FileSystemBase& base);
258 FileSystemBase& GetGlobalFileSystemBase();
259
260 }}}
261 #endif
262