Browse Source
Merge pull request #990 from lioncash/entry
fsp_srv: Emplace entries first when building index instead of emplacing last
pull/15/merge
bunnei
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
12 additions and
9 deletions
-
src/core/file_sys/directory.h
-
src/core/hle/service/filesystem/fsp_srv.cpp
|
|
|
@ -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); |
|
|
|
|
|
|
|
@ -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()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|