diff options
| author | bunnei <bunneidev@gmail.com> | 2018-08-09 19:29:36 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-08-09 19:29:36 -0400 | 
| commit | 69cd213fac6b60dd044ec5598336c5b6cb201440 (patch) | |
| tree | 121dadb00f25d4bea8f7c04c79b8aef4bc411b7b | |
| parent | 05c33d89a14a56cb47aec13d85697646533f8299 (diff) | |
| parent | 7353cfc7813c960e7fdb0b33829865c606f98c84 (diff) | |
Merge pull request #990 from lioncash/entry
 fsp_srv: Emplace entries first when building index instead of emplacing last
| -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 @@  #pragma once -#include <array>  #include <cstddef> +#include <iterator> +#include <string_view>  #include "common/common_funcs.h"  #include "common/common_types.h" @@ -21,9 +22,14 @@ enum EntryType : u8 {  // Structure of a directory entry, from  // http://switchbrew.org/index.php?title=Filesystem_services#DirectoryEntry -const size_t FILENAME_LENGTH = 0x300;  struct Entry { -    char filename[FILENAME_LENGTH]; +    Entry(std::string_view view, EntryType entry_type, u64 entry_size) +        : type{entry_type}, file_size{entry_size} { +        const size_t copy_size = view.copy(filename, std::size(filename) - 1); +        filename[copy_size] = '\0'; +    } + +    char filename[0x300];      INSERT_PADDING_BYTES(4);      EntryType type;      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:  template <typename T>  static void BuildEntryIndex(std::vector<FileSys::Entry>& entries, const std::vector<T>& new_data,                              FileSys::EntryType type) { +    entries.reserve(entries.size() + new_data.size()); +      for (const auto& new_entry : new_data) { -        FileSys::Entry entry; -        entry.filename[0] = '\0'; -        std::strncat(entry.filename, new_entry->GetName().c_str(), FileSys::FILENAME_LENGTH - 1); -        entry.type = type; -        entry.file_size = new_entry->GetSize(); -        entries.emplace_back(std::move(entry)); +        entries.emplace_back(new_entry->GetName(), type, new_entry->GetSize());      }  } | 
