|
@@ -16,33 +16,33 @@
|
|
|
|
|
|
|
|
// User directory indices for GetUserPath
|
|
// User directory indices for GetUserPath
|
|
|
enum {
|
|
enum {
|
|
|
- D_USER_IDX,
|
|
|
|
|
- D_ROOT_IDX,
|
|
|
|
|
- D_CONFIG_IDX,
|
|
|
|
|
- D_GAMECONFIG_IDX,
|
|
|
|
|
- D_MAPS_IDX,
|
|
|
|
|
- D_CACHE_IDX,
|
|
|
|
|
- D_SHADERCACHE_IDX,
|
|
|
|
|
- D_SHADERS_IDX,
|
|
|
|
|
- D_STATESAVES_IDX,
|
|
|
|
|
- D_SCREENSHOTS_IDX,
|
|
|
|
|
- D_SDMC_IDX,
|
|
|
|
|
- D_HIRESTEXTURES_IDX,
|
|
|
|
|
- D_DUMP_IDX,
|
|
|
|
|
- D_DUMPFRAMES_IDX,
|
|
|
|
|
- D_DUMPAUDIO_IDX,
|
|
|
|
|
- D_DUMPTEXTURES_IDX,
|
|
|
|
|
- D_DUMPDSP_IDX,
|
|
|
|
|
- D_LOGS_IDX,
|
|
|
|
|
- D_SYSCONF_IDX,
|
|
|
|
|
- F_EMUCONFIG_IDX,
|
|
|
|
|
- F_DEBUGGERCONFIG_IDX,
|
|
|
|
|
- F_LOGGERCONFIG_IDX,
|
|
|
|
|
- F_MAINLOG_IDX,
|
|
|
|
|
- F_RAMDUMP_IDX,
|
|
|
|
|
- F_ARAMDUMP_IDX,
|
|
|
|
|
- F_SYSCONF_IDX,
|
|
|
|
|
- NUM_PATH_INDICES
|
|
|
|
|
|
|
+ D_USER_IDX,
|
|
|
|
|
+ D_ROOT_IDX,
|
|
|
|
|
+ D_CONFIG_IDX,
|
|
|
|
|
+ D_GAMECONFIG_IDX,
|
|
|
|
|
+ D_MAPS_IDX,
|
|
|
|
|
+ D_CACHE_IDX,
|
|
|
|
|
+ D_SHADERCACHE_IDX,
|
|
|
|
|
+ D_SHADERS_IDX,
|
|
|
|
|
+ D_STATESAVES_IDX,
|
|
|
|
|
+ D_SCREENSHOTS_IDX,
|
|
|
|
|
+ D_SDMC_IDX,
|
|
|
|
|
+ D_HIRESTEXTURES_IDX,
|
|
|
|
|
+ D_DUMP_IDX,
|
|
|
|
|
+ D_DUMPFRAMES_IDX,
|
|
|
|
|
+ D_DUMPAUDIO_IDX,
|
|
|
|
|
+ D_DUMPTEXTURES_IDX,
|
|
|
|
|
+ D_DUMPDSP_IDX,
|
|
|
|
|
+ D_LOGS_IDX,
|
|
|
|
|
+ D_SYSCONF_IDX,
|
|
|
|
|
+ F_EMUCONFIG_IDX,
|
|
|
|
|
+ F_DEBUGGERCONFIG_IDX,
|
|
|
|
|
+ F_LOGGERCONFIG_IDX,
|
|
|
|
|
+ F_MAINLOG_IDX,
|
|
|
|
|
+ F_RAMDUMP_IDX,
|
|
|
|
|
+ F_ARAMDUMP_IDX,
|
|
|
|
|
+ F_SYSCONF_IDX,
|
|
|
|
|
+ NUM_PATH_INDICES
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
namespace FileUtil
|
|
namespace FileUtil
|
|
@@ -51,11 +51,11 @@ namespace FileUtil
|
|
|
// FileSystem tree node/
|
|
// FileSystem tree node/
|
|
|
struct FSTEntry
|
|
struct FSTEntry
|
|
|
{
|
|
{
|
|
|
- bool isDirectory;
|
|
|
|
|
- u64 size; // file length or number of entries from children
|
|
|
|
|
- std::string physicalName; // name on disk
|
|
|
|
|
- std::string virtualName; // name in FST names table
|
|
|
|
|
- std::vector<FSTEntry> children;
|
|
|
|
|
|
|
+ bool isDirectory;
|
|
|
|
|
+ u64 size; // file length or number of entries from children
|
|
|
|
|
+ std::string physicalName; // name on disk
|
|
|
|
|
+ std::string virtualName; // name in FST names table
|
|
|
|
|
+ std::vector<FSTEntry> children;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// Returns true if file filename exists
|
|
// Returns true if file filename exists
|
|
@@ -148,86 +148,86 @@ void SplitFilename83(const std::string& filename, std::array<char, 9>& short_nam
|
|
|
class IOFile : public NonCopyable
|
|
class IOFile : public NonCopyable
|
|
|
{
|
|
{
|
|
|
public:
|
|
public:
|
|
|
- IOFile();
|
|
|
|
|
- IOFile(std::FILE* file);
|
|
|
|
|
- IOFile(const std::string& filename, const char openmode[]);
|
|
|
|
|
|
|
+ IOFile();
|
|
|
|
|
+ IOFile(std::FILE* file);
|
|
|
|
|
+ IOFile(const std::string& filename, const char openmode[]);
|
|
|
|
|
|
|
|
- ~IOFile();
|
|
|
|
|
|
|
+ ~IOFile();
|
|
|
|
|
|
|
|
- IOFile(IOFile&& other);
|
|
|
|
|
- IOFile& operator=(IOFile&& other);
|
|
|
|
|
|
|
+ IOFile(IOFile&& other);
|
|
|
|
|
+ IOFile& operator=(IOFile&& other);
|
|
|
|
|
|
|
|
- void Swap(IOFile& other);
|
|
|
|
|
|
|
+ void Swap(IOFile& other);
|
|
|
|
|
|
|
|
- bool Open(const std::string& filename, const char openmode[]);
|
|
|
|
|
- bool Close();
|
|
|
|
|
|
|
+ bool Open(const std::string& filename, const char openmode[]);
|
|
|
|
|
+ bool Close();
|
|
|
|
|
|
|
|
- template <typename T>
|
|
|
|
|
- size_t ReadArray(T* data, size_t length)
|
|
|
|
|
- {
|
|
|
|
|
- if (!IsOpen()) {
|
|
|
|
|
- m_good = false;
|
|
|
|
|
- return -1;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ template <typename T>
|
|
|
|
|
+ size_t ReadArray(T* data, size_t length)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (!IsOpen()) {
|
|
|
|
|
+ m_good = false;
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- size_t items_read = std::fread(data, sizeof(T), length, m_file);
|
|
|
|
|
- if (items_read != length)
|
|
|
|
|
- m_good = false;
|
|
|
|
|
|
|
+ size_t items_read = std::fread(data, sizeof(T), length, m_file);
|
|
|
|
|
+ if (items_read != length)
|
|
|
|
|
+ m_good = false;
|
|
|
|
|
|
|
|
- return items_read;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return items_read;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- template <typename T>
|
|
|
|
|
- size_t WriteArray(const T* data, size_t length)
|
|
|
|
|
- {
|
|
|
|
|
- if (!IsOpen()) {
|
|
|
|
|
- m_good = false;
|
|
|
|
|
- return -1;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ template <typename T>
|
|
|
|
|
+ size_t WriteArray(const T* data, size_t length)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (!IsOpen()) {
|
|
|
|
|
+ m_good = false;
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- size_t items_written = std::fwrite(data, sizeof(T), length, m_file);
|
|
|
|
|
- if (items_written != length)
|
|
|
|
|
- m_good = false;
|
|
|
|
|
|
|
+ size_t items_written = std::fwrite(data, sizeof(T), length, m_file);
|
|
|
|
|
+ if (items_written != length)
|
|
|
|
|
+ m_good = false;
|
|
|
|
|
|
|
|
- return items_written;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return items_written;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- size_t ReadBytes(void* data, size_t length)
|
|
|
|
|
- {
|
|
|
|
|
- return ReadArray(reinterpret_cast<char*>(data), length);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ size_t ReadBytes(void* data, size_t length)
|
|
|
|
|
+ {
|
|
|
|
|
+ return ReadArray(reinterpret_cast<char*>(data), length);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- size_t WriteBytes(const void* data, size_t length)
|
|
|
|
|
- {
|
|
|
|
|
- return WriteArray(reinterpret_cast<const char*>(data), length);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ size_t WriteBytes(const void* data, size_t length)
|
|
|
|
|
+ {
|
|
|
|
|
+ return WriteArray(reinterpret_cast<const char*>(data), length);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- bool IsOpen() { return NULL != m_file; }
|
|
|
|
|
|
|
+ bool IsOpen() { return NULL != m_file; }
|
|
|
|
|
|
|
|
- // m_good is set to false when a read, write or other function fails
|
|
|
|
|
- bool IsGood() { return m_good; }
|
|
|
|
|
- operator void*() { return m_good ? m_file : NULL; }
|
|
|
|
|
|
|
+ // m_good is set to false when a read, write or other function fails
|
|
|
|
|
+ bool IsGood() { return m_good; }
|
|
|
|
|
+ operator void*() { return m_good ? m_file : NULL; }
|
|
|
|
|
|
|
|
- std::FILE* ReleaseHandle();
|
|
|
|
|
|
|
+ std::FILE* ReleaseHandle();
|
|
|
|
|
|
|
|
- std::FILE* GetHandle() { return m_file; }
|
|
|
|
|
|
|
+ std::FILE* GetHandle() { return m_file; }
|
|
|
|
|
|
|
|
- void SetHandle(std::FILE* file);
|
|
|
|
|
|
|
+ void SetHandle(std::FILE* file);
|
|
|
|
|
|
|
|
- bool Seek(s64 off, int origin);
|
|
|
|
|
- u64 Tell();
|
|
|
|
|
- u64 GetSize();
|
|
|
|
|
- bool Resize(u64 size);
|
|
|
|
|
- bool Flush();
|
|
|
|
|
|
|
+ bool Seek(s64 off, int origin);
|
|
|
|
|
+ u64 Tell();
|
|
|
|
|
+ u64 GetSize();
|
|
|
|
|
+ bool Resize(u64 size);
|
|
|
|
|
+ bool Flush();
|
|
|
|
|
|
|
|
- // clear error state
|
|
|
|
|
- void Clear() { m_good = true; std::clearerr(m_file); }
|
|
|
|
|
|
|
+ // clear error state
|
|
|
|
|
+ void Clear() { m_good = true; std::clearerr(m_file); }
|
|
|
|
|
|
|
|
- std::FILE* m_file;
|
|
|
|
|
- bool m_good;
|
|
|
|
|
|
|
+ std::FILE* m_file;
|
|
|
|
|
+ bool m_good;
|
|
|
private:
|
|
private:
|
|
|
- IOFile(IOFile&);
|
|
|
|
|
- IOFile& operator=(IOFile& other);
|
|
|
|
|
|
|
+ IOFile(IOFile&);
|
|
|
|
|
+ IOFile& operator=(IOFile& other);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
} // namespace
|
|
} // namespace
|
|
@@ -237,8 +237,8 @@ template <typename T>
|
|
|
void OpenFStream(T& fstream, const std::string& filename, std::ios_base::openmode openmode)
|
|
void OpenFStream(T& fstream, const std::string& filename, std::ios_base::openmode openmode)
|
|
|
{
|
|
{
|
|
|
#ifdef _WIN32
|
|
#ifdef _WIN32
|
|
|
- fstream.open(Common::UTF8ToTStr(filename).c_str(), openmode);
|
|
|
|
|
|
|
+ fstream.open(Common::UTF8ToTStr(filename).c_str(), openmode);
|
|
|
#else
|
|
#else
|
|
|
- fstream.open(filename.c_str(), openmode);
|
|
|
|
|
|
|
+ fstream.open(filename.c_str(), openmode);
|
|
|
#endif
|
|
#endif
|
|
|
}
|
|
}
|