|
|
@ -40,19 +40,13 @@ union Mode { |
|
|
class Path { |
|
|
class Path { |
|
|
public: |
|
|
public: |
|
|
|
|
|
|
|
|
Path(): |
|
|
|
|
|
type(Invalid) |
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
Path() : type(Invalid) { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Path(const char* path): |
|
|
|
|
|
type(Char), string(path) |
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
Path(const char* path) : type(Char), string(path) { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Path(LowPathType type, u32 size, u32 pointer): |
|
|
|
|
|
type(type) |
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
Path(LowPathType type, u32 size, u32 pointer) : type(type) { |
|
|
switch (type) { |
|
|
switch (type) { |
|
|
case Binary: |
|
|
case Binary: |
|
|
{ |
|
|
{ |
|
|
@ -60,18 +54,21 @@ public: |
|
|
binary = std::vector<u8>(data, data + size); |
|
|
binary = std::vector<u8>(data, data + size); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
case Char: |
|
|
case Char: |
|
|
{ |
|
|
{ |
|
|
const char* data = reinterpret_cast<const char*>(Memory::GetPointer(pointer)); |
|
|
const char* data = reinterpret_cast<const char*>(Memory::GetPointer(pointer)); |
|
|
string = std::string(data, size - 1); // Data is always null-terminated. |
|
|
string = std::string(data, size - 1); // Data is always null-terminated. |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
case Wchar: |
|
|
case Wchar: |
|
|
{ |
|
|
{ |
|
|
const char16_t* data = reinterpret_cast<const char16_t*>(Memory::GetPointer(pointer)); |
|
|
const char16_t* data = reinterpret_cast<const char16_t*>(Memory::GetPointer(pointer)); |
|
|
u16str = std::u16string(data, size/2 - 1); // Data is always null-terminated. |
|
|
u16str = std::u16string(data, size/2 - 1); // Data is always null-terminated. |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
default: |
|
|
default: |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
@ -104,10 +101,6 @@ public: |
|
|
return "[Char: " + AsString() + ']'; |
|
|
return "[Char: " + AsString() + ']'; |
|
|
case Wchar: |
|
|
case Wchar: |
|
|
return "[Wchar: " + AsString() + ']'; |
|
|
return "[Wchar: " + AsString() + ']'; |
|
|
default: |
|
|
|
|
|
// TODO(yuriks): Add assert |
|
|
|
|
|
LOG_ERROR(Service_FS, "LowPathType cannot be converted to string!"); |
|
|
|
|
|
return {}; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -119,7 +112,8 @@ public: |
|
|
return Common::UTF16ToUTF8(u16str); |
|
|
return Common::UTF16ToUTF8(u16str); |
|
|
case Empty: |
|
|
case Empty: |
|
|
return {}; |
|
|
return {}; |
|
|
default: |
|
|
|
|
|
|
|
|
case Invalid: |
|
|
|
|
|
case Binary: |
|
|
// TODO(yuriks): Add assert |
|
|
// TODO(yuriks): Add assert |
|
|
LOG_ERROR(Service_FS, "LowPathType cannot be converted to string!"); |
|
|
LOG_ERROR(Service_FS, "LowPathType cannot be converted to string!"); |
|
|
return {}; |
|
|
return {}; |
|
|
@ -134,7 +128,8 @@ public: |
|
|
return u16str; |
|
|
return u16str; |
|
|
case Empty: |
|
|
case Empty: |
|
|
return {}; |
|
|
return {}; |
|
|
default: |
|
|
|
|
|
|
|
|
case Invalid: |
|
|
|
|
|
case Binary: |
|
|
// TODO(yuriks): Add assert |
|
|
// TODO(yuriks): Add assert |
|
|
LOG_ERROR(Service_FS, "LowPathType cannot be converted to u16string!"); |
|
|
LOG_ERROR(Service_FS, "LowPathType cannot be converted to u16string!"); |
|
|
return {}; |
|
|
return {}; |
|
|
@ -160,7 +155,7 @@ public: |
|
|
} |
|
|
} |
|
|
case Empty: |
|
|
case Empty: |
|
|
return {}; |
|
|
return {}; |
|
|
default: |
|
|
|
|
|
|
|
|
case Invalid: |
|
|
// TODO(yuriks): Add assert |
|
|
// TODO(yuriks): Add assert |
|
|
LOG_ERROR(Service_FS, "LowPathType cannot be converted to binary!"); |
|
|
LOG_ERROR(Service_FS, "LowPathType cannot be converted to binary!"); |
|
|
return {}; |
|
|
return {}; |
|
|
@ -176,7 +171,8 @@ private: |
|
|
|
|
|
|
|
|
class ArchiveBackend : NonCopyable { |
|
|
class ArchiveBackend : NonCopyable { |
|
|
public: |
|
|
public: |
|
|
virtual ~ArchiveBackend() { } |
|
|
|
|
|
|
|
|
virtual ~ArchiveBackend() { |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* Get a descriptive name for the archive (e.g. "RomFS", "SaveData", etc.) |
|
|
* Get a descriptive name for the archive (e.g. "RomFS", "SaveData", etc.) |
|
|
@ -196,7 +192,7 @@ public: |
|
|
* @param path Path relative to the archive |
|
|
* @param path Path relative to the archive |
|
|
* @return Whether the file could be deleted |
|
|
* @return Whether the file could be deleted |
|
|
*/ |
|
|
*/ |
|
|
virtual bool DeleteFile(const FileSys::Path& path) const = 0; |
|
|
|
|
|
|
|
|
virtual bool DeleteFile(const Path& path) const = 0; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* Rename a File specified by its path |
|
|
* Rename a File specified by its path |
|
|
@ -204,14 +200,14 @@ public: |
|
|
* @param dest_path Destination path relative to the archive |
|
|
* @param dest_path Destination path relative to the archive |
|
|
* @return Whether rename succeeded |
|
|
* @return Whether rename succeeded |
|
|
*/ |
|
|
*/ |
|
|
virtual bool RenameFile(const FileSys::Path& src_path, const FileSys::Path& dest_path) const = 0; |
|
|
|
|
|
|
|
|
virtual bool RenameFile(const Path& src_path, const Path& dest_path) const = 0; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* Delete a directory specified by its path |
|
|
* Delete a directory specified by its path |
|
|
* @param path Path relative to the archive |
|
|
* @param path Path relative to the archive |
|
|
* @return Whether the directory could be deleted |
|
|
* @return Whether the directory could be deleted |
|
|
*/ |
|
|
*/ |
|
|
virtual bool DeleteDirectory(const FileSys::Path& path) const = 0; |
|
|
|
|
|
|
|
|
virtual bool DeleteDirectory(const Path& path) const = 0; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* Create a file specified by its path |
|
|
* Create a file specified by its path |
|
|
@ -234,7 +230,7 @@ public: |
|
|
* @param dest_path Destination path relative to the archive |
|
|
* @param dest_path Destination path relative to the archive |
|
|
* @return Whether rename succeeded |
|
|
* @return Whether rename succeeded |
|
|
*/ |
|
|
*/ |
|
|
virtual bool RenameDirectory(const FileSys::Path& src_path, const FileSys::Path& dest_path) const = 0; |
|
|
|
|
|
|
|
|
virtual bool RenameDirectory(const Path& src_path, const Path& dest_path) const = 0; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* Open a directory specified by its path |
|
|
* Open a directory specified by its path |
|
|
|