summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Lioncash2018-07-19 11:01:05 -0400
committerGravatar Lioncash2018-07-19 11:01:07 -0400
commit6c1ba02e0cacfd66cf36d40a4b0f9794bc2ca26e (patch)
tree63998475a888bfdfb0a0c1f1aabcc903fd8b6f95
parentfsp_srv: Remove unnecessary std::vector construction in IDirectory's Read() f... (diff)
downloadyuzu-6c1ba02e0cacfd66cf36d40a4b0f9794bc2ca26e.tar.gz
yuzu-6c1ba02e0cacfd66cf36d40a4b0f9794bc2ca26e.tar.xz
yuzu-6c1ba02e0cacfd66cf36d40a4b0f9794bc2ca26e.zip
fsp_srv: Remove unnecessary vector construction in IFile's Write() function
We can avoid constructing a std::vector here by simply passing a pointer to the original data and the size of the copy we wish to perform to the backend's Write() function instead, avoiding copying the data where it's otherwise not needed.
-rw-r--r--src/core/hle/service/filesystem/fsp_srv.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/core/hle/service/filesystem/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp_srv.cpp
index 673eaabf0..e7ffb6bd1 100644
--- a/src/core/hle/service/filesystem/fsp_srv.cpp
+++ b/src/core/hle/service/filesystem/fsp_srv.cpp
@@ -149,8 +149,9 @@ private:
149 length, data.size()); 149 length, data.size());
150 150
151 // Write the data to the Storage backend 151 // Write the data to the Storage backend
152 std::vector<u8> actual_data(data.begin(), data.begin() + length); 152 const auto write_size =
153 const std::size_t written = backend->WriteBytes(std::move(actual_data), offset); 153 static_cast<std::size_t>(std::distance(data.begin(), data.begin() + length));
154 const std::size_t written = backend->Write(data.data(), write_size, offset);
154 155
155 ASSERT_MSG(static_cast<s64>(written) == length, 156 ASSERT_MSG(static_cast<s64>(written) == length,
156 "Could not write all bytes to file (requested={:016X}, actual={:016X}).", length, 157 "Could not write all bytes to file (requested={:016X}, actual={:016X}).", length,