Merge pull request #3672 from lioncash/null
file_util: Early-exit in WriteArray and ReadArray if specified lengths are zero
This commit is contained in:
		
						commit
						775ecc7d05
					
				| @ -967,6 +967,34 @@ bool IOFile::Flush() { | ||||
|     return IsOpen() && 0 == std::fflush(m_file); | ||||
| } | ||||
| 
 | ||||
| std::size_t IOFile::ReadImpl(void* data, std::size_t length, std::size_t data_size) const { | ||||
|     if (!IsOpen()) { | ||||
|         return std::numeric_limits<std::size_t>::max(); | ||||
|     } | ||||
| 
 | ||||
|     if (length == 0) { | ||||
|         return 0; | ||||
|     } | ||||
| 
 | ||||
|     DEBUG_ASSERT(data != nullptr); | ||||
| 
 | ||||
|     return std::fread(data, data_size, length, m_file); | ||||
| } | ||||
| 
 | ||||
| std::size_t IOFile::WriteImpl(const void* data, std::size_t length, std::size_t data_size) { | ||||
|     if (!IsOpen()) { | ||||
|         return std::numeric_limits<std::size_t>::max(); | ||||
|     } | ||||
| 
 | ||||
|     if (length == 0) { | ||||
|         return 0; | ||||
|     } | ||||
| 
 | ||||
|     DEBUG_ASSERT(data != nullptr); | ||||
| 
 | ||||
|     return std::fwrite(data, data_size, length, m_file); | ||||
| } | ||||
| 
 | ||||
| bool IOFile::Resize(u64 size) { | ||||
|     return IsOpen() && 0 == | ||||
| #ifdef _WIN32 | ||||
|  | ||||
| @ -222,22 +222,15 @@ public: | ||||
|         static_assert(std::is_trivially_copyable_v<T>, | ||||
|                       "Given array does not consist of trivially copyable objects"); | ||||
| 
 | ||||
|         if (!IsOpen()) { | ||||
|             return std::numeric_limits<std::size_t>::max(); | ||||
|         } | ||||
| 
 | ||||
|         return std::fread(data, sizeof(T), length, m_file); | ||||
|         return ReadImpl(data, length, sizeof(T)); | ||||
|     } | ||||
| 
 | ||||
|     template <typename T> | ||||
|     std::size_t WriteArray(const T* data, std::size_t length) { | ||||
|         static_assert(std::is_trivially_copyable_v<T>, | ||||
|                       "Given array does not consist of trivially copyable objects"); | ||||
|         if (!IsOpen()) { | ||||
|             return std::numeric_limits<std::size_t>::max(); | ||||
|         } | ||||
| 
 | ||||
|         return std::fwrite(data, sizeof(T), length, m_file); | ||||
|         return WriteImpl(data, length, sizeof(T)); | ||||
|     } | ||||
| 
 | ||||
|     template <typename T> | ||||
| @ -278,6 +271,9 @@ public: | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     std::size_t ReadImpl(void* data, std::size_t length, std::size_t data_size) const; | ||||
|     std::size_t WriteImpl(const void* data, std::size_t length, std::size_t data_size); | ||||
| 
 | ||||
|     std::FILE* m_file = nullptr; | ||||
| }; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Fernando Sahmkow
						Fernando Sahmkow