diff options
| author | 2018-08-09 19:29:36 -0400 | |
|---|---|---|
| committer | 2018-08-09 19:29:36 -0400 | |
| commit | 69cd213fac6b60dd044ec5598336c5b6cb201440 (patch) | |
| tree | 121dadb00f25d4bea8f7c04c79b8aef4bc411b7b /src | |
| parent | Merge pull request #1001 from lioncash/reserve (diff) | |
| parent | fsp_srv: Use std::string_view's copy() function instead of strncpy() (diff) | |
| download | yuzu-69cd213fac6b60dd044ec5598336c5b6cb201440.tar.gz yuzu-69cd213fac6b60dd044ec5598336c5b6cb201440.tar.xz yuzu-69cd213fac6b60dd044ec5598336c5b6cb201440.zip | |
Merge pull request #990 from lioncash/entry
fsp_srv: Emplace entries first when building index instead of emplacing last
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/file_sys/directory.h | 12 | ||||
| -rw-r--r-- | src/core/hle/service/filesystem/fsp_srv.cpp | 9 |
2 files changed, 12 insertions, 9 deletions
diff --git a/src/core/file_sys/directory.h b/src/core/file_sys/directory.h index 213ce1826..3759e743a 100644 --- a/src/core/file_sys/directory.h +++ b/src/core/file_sys/directory.h | |||
| @@ -4,8 +4,9 @@ | |||
| 4 | 4 | ||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <array> | ||
| 8 | #include <cstddef> | 7 | #include <cstddef> |
| 8 | #include <iterator> | ||
| 9 | #include <string_view> | ||
| 9 | #include "common/common_funcs.h" | 10 | #include "common/common_funcs.h" |
| 10 | #include "common/common_types.h" | 11 | #include "common/common_types.h" |
| 11 | 12 | ||
| @@ -21,9 +22,14 @@ enum EntryType : u8 { | |||
| 21 | 22 | ||
| 22 | // Structure of a directory entry, from | 23 | // Structure of a directory entry, from |
| 23 | // http://switchbrew.org/index.php?title=Filesystem_services#DirectoryEntry | 24 | // http://switchbrew.org/index.php?title=Filesystem_services#DirectoryEntry |
| 24 | const size_t FILENAME_LENGTH = 0x300; | ||
| 25 | struct Entry { | 25 | struct Entry { |
| 26 | char filename[FILENAME_LENGTH]; | 26 | Entry(std::string_view view, EntryType entry_type, u64 entry_size) |
| 27 | : type{entry_type}, file_size{entry_size} { | ||
| 28 | const size_t copy_size = view.copy(filename, std::size(filename) - 1); | ||
| 29 | filename[copy_size] = '\0'; | ||
| 30 | } | ||
| 31 | |||
| 32 | char filename[0x300]; | ||
| 27 | INSERT_PADDING_BYTES(4); | 33 | INSERT_PADDING_BYTES(4); |
| 28 | EntryType type; | 34 | EntryType type; |
| 29 | INSERT_PADDING_BYTES(3); | 35 | INSERT_PADDING_BYTES(3); |
diff --git a/src/core/hle/service/filesystem/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp_srv.cpp index e7ffb6bd1..1470f9017 100644 --- a/src/core/hle/service/filesystem/fsp_srv.cpp +++ b/src/core/hle/service/filesystem/fsp_srv.cpp | |||
| @@ -193,13 +193,10 @@ private: | |||
| 193 | template <typename T> | 193 | template <typename T> |
| 194 | static void BuildEntryIndex(std::vector<FileSys::Entry>& entries, const std::vector<T>& new_data, | 194 | static void BuildEntryIndex(std::vector<FileSys::Entry>& entries, const std::vector<T>& new_data, |
| 195 | FileSys::EntryType type) { | 195 | FileSys::EntryType type) { |
| 196 | entries.reserve(entries.size() + new_data.size()); | ||
| 197 | |||
| 196 | for (const auto& new_entry : new_data) { | 198 | for (const auto& new_entry : new_data) { |
| 197 | FileSys::Entry entry; | 199 | entries.emplace_back(new_entry->GetName(), type, new_entry->GetSize()); |
| 198 | entry.filename[0] = '\0'; | ||
| 199 | std::strncat(entry.filename, new_entry->GetName().c_str(), FileSys::FILENAME_LENGTH - 1); | ||
| 200 | entry.type = type; | ||
| 201 | entry.file_size = new_entry->GetSize(); | ||
| 202 | entries.emplace_back(std::move(entry)); | ||
| 203 | } | 200 | } |
| 204 | } | 201 | } |
| 205 | 202 | ||