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: 25433 $
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 CreateDirectory( const wchar_t* pathName );
56 void CreateDirectory( const char* pathName );
57 Result TryCreateDirectory( const wchar_t* pathName );
58 Result TryCreateDirectory( const char* pathName );
59 void RenameDirectory( const wchar_t* currentPath, const wchar_t* newPath);
60 void RenameDirectory( const char* currentPath, const char* newPath);
61 Result TryRenameDirectory( const wchar_t* currentPath, const wchar_t* newPath);
62 Result TryRenameDirectory( const char* currentPath, const char* newPath);
63
64 private:
65 FileSystemBaseImpl* m_pImpl;
66 };
67
68 class WPathBuffer
69 {
70 public:
WPathBuffer(const char * pathName)71 WPathBuffer(const char* pathName)
72 {
73 ::std::mbstowcs(m_pBuffer, pathName, sizeof(m_pBuffer) / sizeof(*m_pBuffer));
74 }
~WPathBuffer()75 ~WPathBuffer() {}
76
GetBuffer()77 const wchar_t* GetBuffer() const { return m_pBuffer; }
78
79 private:
80 wchar_t m_pBuffer[MAX_FILE_PATH_LENGTH + 1 + 8];
81 };
82
Initialize(FileSystemBaseImpl & impl)83 inline void FileSystemBase::Initialize(FileSystemBaseImpl& impl)
84 {
85 NN_TASSERT_(!m_pImpl);
86
87 m_pImpl = &impl;
88 }
89
Finalize()90 inline void FileSystemBase::Finalize()
91 {
92 m_pImpl->Finalize();
93 }
94
DeleteFile(const wchar_t * pathName)95 inline void FileSystemBase::DeleteFile(const wchar_t* pathName)
96 {
97 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryDeleteFile(pathName));
98 }
99
DeleteFile(const char * pathName)100 inline void FileSystemBase::DeleteFile(const char* pathName)
101 {
102 WPathBuffer wpath(pathName);
103 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryDeleteFile(wpath.GetBuffer()));
104 }
105
TryDeleteFile(const wchar_t * pathName)106 inline Result FileSystemBase::TryDeleteFile(const wchar_t* pathName)
107 {
108 return m_pImpl->TryDeleteFile(pathName);
109 }
110
TryDeleteFile(const char * pathName)111 inline Result FileSystemBase::TryDeleteFile(const char* pathName)
112 {
113 WPathBuffer wpath(pathName);
114 return m_pImpl->TryDeleteFile(wpath.GetBuffer());
115 }
116
RenameFile(const wchar_t * currentPath,const wchar_t * newPath)117 inline void FileSystemBase::RenameFile( const wchar_t* currentPath, const wchar_t* newPath)
118 {
119 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryRenameFile(currentPath, newPath));
120 }
121
RenameFile(const char * currentPath,const char * newPath)122 inline void FileSystemBase::RenameFile( const char* currentPath, const char* newPath)
123 {
124 WPathBuffer wcurStr(currentPath);
125 WPathBuffer wnewStr(newPath);
126 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryRenameFile(wcurStr.GetBuffer(), wnewStr.GetBuffer()));
127 }
128
TryRenameFile(const wchar_t * currentPath,const wchar_t * newPath)129 inline Result FileSystemBase::TryRenameFile( const wchar_t* currentPath, const wchar_t* newPath)
130 {
131 return m_pImpl->TryRenameFile(currentPath, newPath);
132 }
133
TryRenameFile(const char * currentPath,const char * newPath)134 inline Result FileSystemBase::TryRenameFile( const char* currentPath, const char* newPath)
135 {
136 WPathBuffer wcurStr(currentPath);
137 WPathBuffer wnewStr(newPath);
138 return m_pImpl->TryRenameFile(wcurStr.GetBuffer(), wnewStr.GetBuffer());
139 }
140
DeleteDirectory(const wchar_t * pathName)141 inline void FileSystemBase::DeleteDirectory(const wchar_t* pathName)
142 {
143 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryDeleteDirectory(pathName));
144 }
145
DeleteDirectory(const char * pathName)146 inline void FileSystemBase::DeleteDirectory(const char* pathName)
147 {
148 WPathBuffer wpath(pathName);
149 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryDeleteDirectory(wpath.GetBuffer()));
150 }
151
DeleteDirectoryRecursively(const wchar_t * pathName)152 inline void FileSystemBase::DeleteDirectoryRecursively(const wchar_t* pathName)
153 {
154 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryDeleteDirectoryRecursively(pathName));
155 }
156
DeleteDirectoryRecursively(const char * pathName)157 inline void FileSystemBase::DeleteDirectoryRecursively(const char* pathName)
158 {
159 WPathBuffer wpath(pathName);
160 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryDeleteDirectoryRecursively(wpath.GetBuffer()));
161 }
162
TryDeleteDirectory(const wchar_t * pathName)163 inline Result FileSystemBase::TryDeleteDirectory(const wchar_t* pathName)
164 {
165 return m_pImpl->TryDeleteDirectory(pathName);
166 }
167
TryDeleteDirectory(const char * pathName)168 inline Result FileSystemBase::TryDeleteDirectory(const char* pathName)
169 {
170 WPathBuffer wpath(pathName);
171 return m_pImpl->TryDeleteDirectory(wpath.GetBuffer());
172 }
173
TryDeleteDirectoryRecursively(const wchar_t * pathName)174 inline Result FileSystemBase::TryDeleteDirectoryRecursively(const wchar_t* pathName)
175 {
176 return m_pImpl->TryDeleteDirectoryRecursively(pathName);
177 }
178
TryDeleteDirectoryRecursively(const char * pathName)179 inline Result FileSystemBase::TryDeleteDirectoryRecursively(const char* pathName)
180 {
181 WPathBuffer wpath(pathName);
182 return m_pImpl->TryDeleteDirectoryRecursively(wpath.GetBuffer());
183 }
184
CreateDirectory(const wchar_t * pathName)185 inline void FileSystemBase::CreateDirectory(const wchar_t* pathName)
186 {
187 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryCreateDirectory(pathName));
188 }
189
CreateDirectory(const char * pathName)190 inline void FileSystemBase::CreateDirectory(const char* pathName)
191 {
192 WPathBuffer wpath(pathName);
193 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryCreateDirectory(wpath.GetBuffer()));
194 }
195
TryCreateDirectory(const wchar_t * pathName)196 inline Result FileSystemBase::TryCreateDirectory(const wchar_t* pathName)
197 {
198 return m_pImpl->TryCreateDirectory(pathName);
199 }
200
TryCreateDirectory(const char * pathName)201 inline Result FileSystemBase::TryCreateDirectory(const char* pathName)
202 {
203 WPathBuffer wpath(pathName);
204 return m_pImpl->TryCreateDirectory(wpath.GetBuffer());
205 }
206
RenameDirectory(const wchar_t * currentPath,const wchar_t * newPath)207 inline void FileSystemBase::RenameDirectory( const wchar_t* currentPath, const wchar_t* newPath)
208 {
209 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryRenameDirectory(currentPath, newPath));
210 }
211
RenameDirectory(const char * currentPath,const char * newPath)212 inline void FileSystemBase::RenameDirectory( const char* currentPath, const char* newPath)
213 {
214 WPathBuffer wcurStr(currentPath);
215 WPathBuffer wnewStr(newPath);
216 NN_UTIL_PANIC_IF_FAILED(m_pImpl->TryRenameDirectory(wcurStr.GetBuffer(), wnewStr.GetBuffer()));
217 }
218
TryRenameDirectory(const wchar_t * currentPath,const wchar_t * newPath)219 inline Result FileSystemBase::TryRenameDirectory( const wchar_t* currentPath, const wchar_t* newPath)
220 {
221 return m_pImpl->TryRenameDirectory(currentPath, newPath);
222 }
223
TryRenameDirectory(const char * currentPath,const char * newPath)224 inline Result FileSystemBase::TryRenameDirectory( const char* currentPath, const char* newPath)
225 {
226 WPathBuffer wcurStr(currentPath);
227 WPathBuffer wnewStr(newPath);
228 return m_pImpl->TryRenameDirectory(wcurStr.GetBuffer(), wnewStr.GetBuffer());
229 }
230
231 void RegisterGlobalFileSystemBase(FileSystemBase& base);
232 FileSystemBase& GetGlobalFileSystemBase();
233
234 }}}
235 #endif
236