diff options
Diffstat (limited to 'src/common/file_util.cpp')
| -rw-r--r-- | src/common/file_util.cpp | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/common/file_util.cpp b/src/common/file_util.cpp index 35eee0096..45b750e1e 100644 --- a/src/common/file_util.cpp +++ b/src/common/file_util.cpp | |||
| @@ -888,7 +888,14 @@ std::string SanitizePath(std::string_view path_, DirectorySeparator directory_se | |||
| 888 | } | 888 | } |
| 889 | 889 | ||
| 890 | std::replace(path.begin(), path.end(), type1, type2); | 890 | std::replace(path.begin(), path.end(), type1, type2); |
| 891 | path.erase(std::unique(path.begin(), path.end(), | 891 | |
| 892 | auto start = path.begin(); | ||
| 893 | #ifdef _WIN32 | ||
| 894 | // allow network paths which start with a double backslash (e.g. \\server\share) | ||
| 895 | if (start != path.end()) | ||
| 896 | ++start; | ||
| 897 | #endif | ||
| 898 | path.erase(std::unique(start, path.end(), | ||
| 892 | [type2](char c1, char c2) { return c1 == type2 && c2 == type2; }), | 899 | [type2](char c1, char c2) { return c1 == type2 && c2 == type2; }), |
| 893 | path.end()); | 900 | path.end()); |
| 894 | return std::string(RemoveTrailingSlash(path)); | 901 | return std::string(RemoveTrailingSlash(path)); |
| @@ -967,6 +974,34 @@ bool IOFile::Flush() { | |||
| 967 | return IsOpen() && 0 == std::fflush(m_file); | 974 | return IsOpen() && 0 == std::fflush(m_file); |
| 968 | } | 975 | } |
| 969 | 976 | ||
| 977 | std::size_t IOFile::ReadImpl(void* data, std::size_t length, std::size_t data_size) const { | ||
| 978 | if (!IsOpen()) { | ||
| 979 | return std::numeric_limits<std::size_t>::max(); | ||
| 980 | } | ||
| 981 | |||
| 982 | if (length == 0) { | ||
| 983 | return 0; | ||
| 984 | } | ||
| 985 | |||
| 986 | DEBUG_ASSERT(data != nullptr); | ||
| 987 | |||
| 988 | return std::fread(data, data_size, length, m_file); | ||
| 989 | } | ||
| 990 | |||
| 991 | std::size_t IOFile::WriteImpl(const void* data, std::size_t length, std::size_t data_size) { | ||
| 992 | if (!IsOpen()) { | ||
| 993 | return std::numeric_limits<std::size_t>::max(); | ||
| 994 | } | ||
| 995 | |||
| 996 | if (length == 0) { | ||
| 997 | return 0; | ||
| 998 | } | ||
| 999 | |||
| 1000 | DEBUG_ASSERT(data != nullptr); | ||
| 1001 | |||
| 1002 | return std::fwrite(data, data_size, length, m_file); | ||
| 1003 | } | ||
| 1004 | |||
| 970 | bool IOFile::Resize(u64 size) { | 1005 | bool IOFile::Resize(u64 size) { |
| 971 | return IsOpen() && 0 == | 1006 | return IsOpen() && 0 == |
| 972 | #ifdef _WIN32 | 1007 | #ifdef _WIN32 |