diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/file_util.cpp | 28 | ||||
| -rw-r--r-- | src/common/file_util.h | 14 |
2 files changed, 33 insertions, 9 deletions
diff --git a/src/common/file_util.cpp b/src/common/file_util.cpp index 35eee0096..7f613891b 100644 --- a/src/common/file_util.cpp +++ b/src/common/file_util.cpp | |||
| @@ -967,6 +967,34 @@ bool IOFile::Flush() { | |||
| 967 | return IsOpen() && 0 == std::fflush(m_file); | 967 | return IsOpen() && 0 == std::fflush(m_file); |
| 968 | } | 968 | } |
| 969 | 969 | ||
| 970 | std::size_t IOFile::ReadImpl(void* data, std::size_t length, std::size_t data_size) const { | ||
| 971 | if (!IsOpen()) { | ||
| 972 | return std::numeric_limits<std::size_t>::max(); | ||
| 973 | } | ||
| 974 | |||
| 975 | if (length == 0) { | ||
| 976 | return 0; | ||
| 977 | } | ||
| 978 | |||
| 979 | DEBUG_ASSERT(data != nullptr); | ||
| 980 | |||
| 981 | return std::fread(data, data_size, length, m_file); | ||
| 982 | } | ||
| 983 | |||
| 984 | std::size_t IOFile::WriteImpl(const void* data, std::size_t length, std::size_t data_size) { | ||
| 985 | if (!IsOpen()) { | ||
| 986 | return std::numeric_limits<std::size_t>::max(); | ||
| 987 | } | ||
| 988 | |||
| 989 | if (length == 0) { | ||
| 990 | return 0; | ||
| 991 | } | ||
| 992 | |||
| 993 | DEBUG_ASSERT(data != nullptr); | ||
| 994 | |||
| 995 | return std::fwrite(data, data_size, length, m_file); | ||
| 996 | } | ||
| 997 | |||
| 970 | bool IOFile::Resize(u64 size) { | 998 | bool IOFile::Resize(u64 size) { |
| 971 | return IsOpen() && 0 == | 999 | return IsOpen() && 0 == |
| 972 | #ifdef _WIN32 | 1000 | #ifdef _WIN32 |
diff --git a/src/common/file_util.h b/src/common/file_util.h index cde7ddf2d..f7a0c33fa 100644 --- a/src/common/file_util.h +++ b/src/common/file_util.h | |||
| @@ -222,22 +222,15 @@ public: | |||
| 222 | static_assert(std::is_trivially_copyable_v<T>, | 222 | static_assert(std::is_trivially_copyable_v<T>, |
| 223 | "Given array does not consist of trivially copyable objects"); | 223 | "Given array does not consist of trivially copyable objects"); |
| 224 | 224 | ||
| 225 | if (!IsOpen()) { | 225 | return ReadImpl(data, length, sizeof(T)); |
| 226 | return std::numeric_limits<std::size_t>::max(); | ||
| 227 | } | ||
| 228 | |||
| 229 | return std::fread(data, sizeof(T), length, m_file); | ||
| 230 | } | 226 | } |
| 231 | 227 | ||
| 232 | template <typename T> | 228 | template <typename T> |
| 233 | std::size_t WriteArray(const T* data, std::size_t length) { | 229 | std::size_t WriteArray(const T* data, std::size_t length) { |
| 234 | static_assert(std::is_trivially_copyable_v<T>, | 230 | static_assert(std::is_trivially_copyable_v<T>, |
| 235 | "Given array does not consist of trivially copyable objects"); | 231 | "Given array does not consist of trivially copyable objects"); |
| 236 | if (!IsOpen()) { | ||
| 237 | return std::numeric_limits<std::size_t>::max(); | ||
| 238 | } | ||
| 239 | 232 | ||
| 240 | return std::fwrite(data, sizeof(T), length, m_file); | 233 | return WriteImpl(data, length, sizeof(T)); |
| 241 | } | 234 | } |
| 242 | 235 | ||
| 243 | template <typename T> | 236 | template <typename T> |
| @@ -278,6 +271,9 @@ public: | |||
| 278 | } | 271 | } |
| 279 | 272 | ||
| 280 | private: | 273 | private: |
| 274 | std::size_t ReadImpl(void* data, std::size_t length, std::size_t data_size) const; | ||
| 275 | std::size_t WriteImpl(const void* data, std::size_t length, std::size_t data_size); | ||
| 276 | |||
| 281 | std::FILE* m_file = nullptr; | 277 | std::FILE* m_file = nullptr; |
| 282 | }; | 278 | }; |
| 283 | 279 | ||