mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	
						commit
						aff35d3e58
					
				
					 3 changed files with 38 additions and 48 deletions
				
			
		|  | @ -824,13 +824,12 @@ size_t WriteStringToFile(bool text_file, const std::string &str, const char *fil | |||
| 
 | ||||
| size_t ReadFileToString(bool text_file, const char *filename, std::string &str) | ||||
| { | ||||
|     FileUtil::IOFile file(filename, text_file ? "r" : "rb"); | ||||
|     auto const f = file.GetHandle(); | ||||
|     IOFile file(filename, text_file ? "r" : "rb"); | ||||
| 
 | ||||
|     if (!f) | ||||
|     if (!file) | ||||
|         return false; | ||||
| 
 | ||||
|     str.resize(static_cast<u32>(GetSize(f))); | ||||
|     str.resize(static_cast<u32>(file.GetSize())); | ||||
|     return file.ReadArray(&str[0], str.size()); | ||||
| } | ||||
| 
 | ||||
|  | @ -877,15 +876,10 @@ void SplitFilename83(const std::string& filename, std::array<char, 9>& short_nam | |||
| } | ||||
| 
 | ||||
| IOFile::IOFile() | ||||
|     : m_file(nullptr), m_good(true) | ||||
| {} | ||||
| 
 | ||||
| IOFile::IOFile(std::FILE* file) | ||||
|     : m_file(file), m_good(true) | ||||
| {} | ||||
| { | ||||
| } | ||||
| 
 | ||||
| IOFile::IOFile(const std::string& filename, const char openmode[]) | ||||
|     : m_file(nullptr), m_good(true) | ||||
| { | ||||
|     Open(filename, openmode); | ||||
| } | ||||
|  | @ -896,7 +890,6 @@ IOFile::~IOFile() | |||
| } | ||||
| 
 | ||||
| IOFile::IOFile(IOFile&& other) | ||||
|     : m_file(nullptr), m_good(true) | ||||
| { | ||||
|     Swap(other); | ||||
| } | ||||
|  | @ -935,26 +928,12 @@ bool IOFile::Close() | |||
|     return m_good; | ||||
| } | ||||
| 
 | ||||
| std::FILE* IOFile::ReleaseHandle() | ||||
| { | ||||
|     std::FILE* const ret = m_file; | ||||
|     m_file = nullptr; | ||||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| void IOFile::SetHandle(std::FILE* file) | ||||
| { | ||||
|     Close(); | ||||
|     Clear(); | ||||
|     m_file = file; | ||||
| } | ||||
| 
 | ||||
| u64 IOFile::GetSize() | ||||
| u64 IOFile::GetSize() const | ||||
| { | ||||
|     if (IsOpen()) | ||||
|         return FileUtil::GetSize(m_file); | ||||
|     else | ||||
|         return 0; | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| bool IOFile::Seek(s64 off, int origin) | ||||
|  | @ -965,12 +944,12 @@ bool IOFile::Seek(s64 off, int origin) | |||
|     return m_good; | ||||
| } | ||||
| 
 | ||||
| u64 IOFile::Tell() | ||||
| u64 IOFile::Tell() const | ||||
| { | ||||
|     if (IsOpen()) | ||||
|         return ftello(m_file); | ||||
|     else | ||||
|         return -1; | ||||
| 
 | ||||
|     return -1; | ||||
| } | ||||
| 
 | ||||
| bool IOFile::Flush() | ||||
|  |  | |||
|  | @ -176,7 +176,6 @@ class IOFile : public NonCopyable | |||
| { | ||||
| public: | ||||
|     IOFile(); | ||||
|     explicit IOFile(std::FILE* file); | ||||
|     IOFile(const std::string& filename, const char openmode[]); | ||||
| 
 | ||||
|     ~IOFile(); | ||||
|  | @ -192,6 +191,9 @@ public: | |||
|     template <typename T> | ||||
|     size_t ReadArray(T* data, size_t length) | ||||
|     { | ||||
|         static_assert(std::is_standard_layout<T>(), "Given array does not consist of standard layout objects"); | ||||
|         static_assert(std::is_trivially_copyable<T>(), "Given array does not consist of trivially copyable objects"); | ||||
| 
 | ||||
|         if (!IsOpen()) { | ||||
|             m_good = false; | ||||
|             return -1; | ||||
|  | @ -207,9 +209,8 @@ public: | |||
|     template <typename T> | ||||
|     size_t WriteArray(const T* data, size_t length) | ||||
|     { | ||||
|         static_assert(std::is_standard_layout<T>::value, "Given array does not consist of standard layout objects"); | ||||
|         // TODO: gcc 4.8 does not support is_trivially_copyable, but we really should check for it here.
 | ||||
|         //static_assert(std::is_trivially_copyable<T>::value, "Given array does not consist of trivially copyable objects");
 | ||||
|         static_assert(std::is_standard_layout<T>(), "Given array does not consist of standard layout objects"); | ||||
|         static_assert(std::is_trivially_copyable<T>(), "Given array does not consist of trivially copyable objects"); | ||||
| 
 | ||||
|         if (!IsOpen()) { | ||||
|             m_good = false; | ||||
|  | @ -243,25 +244,20 @@ public: | |||
| 
 | ||||
|     // m_good is set to false when a read, write or other function fails
 | ||||
|     bool IsGood() const { return m_good; } | ||||
|     operator void*() { return m_good ? m_file : nullptr; } | ||||
| 
 | ||||
|     std::FILE* ReleaseHandle(); | ||||
| 
 | ||||
|     std::FILE* GetHandle() { return m_file; } | ||||
| 
 | ||||
|     void SetHandle(std::FILE* file); | ||||
|     explicit operator bool() const { return IsGood(); } | ||||
| 
 | ||||
|     bool Seek(s64 off, int origin); | ||||
|     u64 Tell(); | ||||
|     u64 GetSize(); | ||||
|     u64 Tell() const; | ||||
|     u64 GetSize() const; | ||||
|     bool Resize(u64 size); | ||||
|     bool Flush(); | ||||
| 
 | ||||
|     // clear error state
 | ||||
|     void Clear() { m_good = true; std::clearerr(m_file); } | ||||
| 
 | ||||
|     std::FILE* m_file; | ||||
|     bool m_good; | ||||
| private: | ||||
|     std::FILE* m_file = nullptr; | ||||
|     bool m_good = true; | ||||
| }; | ||||
| 
 | ||||
| }  // namespace
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue