Merge pull request #1430 from DarkLordZach/remove-promote-dir

vfs: Remove InterpretAsDirectory and related functions
This commit is contained in:
bunnei 2018-10-26 00:15:34 -04:00 committed by GitHub
commit 72e6b31a07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 1 additions and 95 deletions

View File

@ -168,10 +168,6 @@ VirtualDir XCI::GetParentDirectory() const {
return file->GetContainingDirectory(); return file->GetContainingDirectory();
} }
bool XCI::ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) {
return false;
}
Loader::ResultStatus XCI::AddNCAFromPartition(XCIPartition part) { Loader::ResultStatus XCI::AddNCAFromPartition(XCIPartition part) {
if (partitions[static_cast<std::size_t>(part)] == nullptr) { if (partitions[static_cast<std::size_t>(part)] == nullptr) {
return Loader::ResultStatus::ErrorXCIMissingPartition; return Loader::ResultStatus::ErrorXCIMissingPartition;

View File

@ -94,9 +94,6 @@ public:
VirtualDir GetParentDirectory() const override; VirtualDir GetParentDirectory() const override;
protected:
bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) override;
private: private:
Loader::ResultStatus AddNCAFromPartition(XCIPartition part); Loader::ResultStatus AddNCAFromPartition(XCIPartition part);

View File

@ -546,7 +546,4 @@ u64 NCA::GetBaseIVFCOffset() const {
return ivfc_offset; return ivfc_offset;
} }
bool NCA::ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) {
return false;
}
} // namespace FileSys } // namespace FileSys

View File

@ -100,9 +100,6 @@ public:
// Returns the base ivfc offset used in BKTR patching. // Returns the base ivfc offset used in BKTR patching.
u64 GetBaseIVFCOffset() const; u64 GetBaseIVFCOffset() const;
protected:
bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) override;
private: private:
bool CheckSupportedNCA(const NCAHeader& header); bool CheckSupportedNCA(const NCAHeader& header);
bool HandlePotentialHeaderDecryption(); bool HandlePotentialHeaderDecryption();

View File

@ -83,7 +83,7 @@ std::vector<std::shared_ptr<VfsFile>> PartitionFilesystem::GetFiles() const {
} }
std::vector<std::shared_ptr<VfsDirectory>> PartitionFilesystem::GetSubdirectories() const { std::vector<std::shared_ptr<VfsDirectory>> PartitionFilesystem::GetSubdirectories() const {
return pfs_dirs; return {};
} }
std::string PartitionFilesystem::GetName() const { std::string PartitionFilesystem::GetName() const {
@ -103,18 +103,4 @@ void PartitionFilesystem::PrintDebugInfo() const {
pfs_files[i]->GetName(), pfs_files[i]->GetSize()); pfs_files[i]->GetName(), pfs_files[i]->GetSize());
} }
} }
bool PartitionFilesystem::ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) {
const auto iter = std::find(pfs_files.begin(), pfs_files.end(), file);
if (iter == pfs_files.end())
return false;
const std::ptrdiff_t offset = std::distance(pfs_files.begin(), iter);
pfs_files[offset] = std::move(pfs_files.back());
pfs_files.pop_back();
pfs_dirs.emplace_back(std::move(dir));
return true;
}
} // namespace FileSys } // namespace FileSys

View File

@ -35,9 +35,6 @@ public:
std::shared_ptr<VfsDirectory> GetParentDirectory() const override; std::shared_ptr<VfsDirectory> GetParentDirectory() const override;
void PrintDebugInfo() const; void PrintDebugInfo() const;
protected:
bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) override;
private: private:
struct Header { struct Header {
u32_le magic; u32_le magic;
@ -84,7 +81,6 @@ private:
std::size_t content_offset = 0; std::size_t content_offset = 0;
std::vector<VirtualFile> pfs_files; std::vector<VirtualFile> pfs_files;
std::vector<VirtualDir> pfs_dirs;
}; };
} // namespace FileSys } // namespace FileSys

View File

@ -205,10 +205,6 @@ VirtualDir NSP::GetParentDirectory() const {
return file->GetContainingDirectory(); return file->GetContainingDirectory();
} }
bool NSP::ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) {
return false;
}
void NSP::InitializeExeFSAndRomFS(const std::vector<VirtualFile>& files) { void NSP::InitializeExeFSAndRomFS(const std::vector<VirtualFile>& files) {
exefs = pfs; exefs = pfs;

View File

@ -55,9 +55,6 @@ public:
VirtualDir GetParentDirectory() const override; VirtualDir GetParentDirectory() const override;
protected:
bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) override;
private: private:
void InitializeExeFSAndRomFS(const std::vector<VirtualFile>& files); void InitializeExeFSAndRomFS(const std::vector<VirtualFile>& files);
void ReadNCAs(const std::vector<VirtualFile>& files); void ReadNCAs(const std::vector<VirtualFile>& files);

View File

@ -262,36 +262,8 @@ public:
// item name -> type. // item name -> type.
virtual std::map<std::string, VfsEntryType, std::less<>> GetEntries() const; virtual std::map<std::string, VfsEntryType, std::less<>> GetEntries() const;
// Interprets the file with name file instead as a directory of type directory.
// The directory must have a constructor that takes a single argument of type
// std::shared_ptr<VfsFile>. Allows to reinterpret container files (i.e NCA, zip, XCI, etc) as a
// subdirectory in one call.
template <typename Directory>
bool InterpretAsDirectory(std::string_view file) {
auto file_p = GetFile(file);
if (file_p == nullptr) {
return false;
}
return ReplaceFileWithSubdirectory(file_p, std::make_shared<Directory>(file_p));
}
bool InterpretAsDirectory(const std::function<VirtualDir(VirtualFile)>& function,
const std::string& file) {
auto file_p = GetFile(file);
if (file_p == nullptr)
return false;
return ReplaceFileWithSubdirectory(file_p, function(file_p));
}
// Returns the full path of this directory as a string, recursively // Returns the full path of this directory as a string, recursively
virtual std::string GetFullPath() const; virtual std::string GetFullPath() const;
protected:
// Backend for InterpretAsDirectory.
// Removes all references to file and adds a reference to dir in the directory's implementation.
virtual bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) = 0;
}; };
// A convenience partial-implementation of VfsDirectory that stubs out methods that should only work // A convenience partial-implementation of VfsDirectory that stubs out methods that should only work

View File

@ -126,7 +126,4 @@ bool LayeredVfsDirectory::Rename(std::string_view name_) {
return true; return true;
} }
bool LayeredVfsDirectory::ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) {
return false;
}
} // namespace FileSys } // namespace FileSys

View File

@ -39,9 +39,6 @@ public:
bool DeleteFile(std::string_view name) override; bool DeleteFile(std::string_view name) override;
bool Rename(std::string_view name) override; bool Rename(std::string_view name) override;
protected:
bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) override;
private: private:
std::vector<VirtualDir> dirs; std::vector<VirtualDir> dirs;
std::string name; std::string name;

View File

@ -430,7 +430,4 @@ std::map<std::string, VfsEntryType, std::less<>> RealVfsDirectory::GetEntries()
return out; return out;
} }
bool RealVfsDirectory::ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) {
return false;
}
} // namespace FileSys } // namespace FileSys

View File

@ -100,9 +100,6 @@ public:
std::string GetFullPath() const override; std::string GetFullPath() const override;
std::map<std::string, VfsEntryType, std::less<>> GetEntries() const override; std::map<std::string, VfsEntryType, std::less<>> GetEntries() const override;
protected:
bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) override;
private: private:
RealVfsDirectory(RealVfsFilesystem& base, const std::string& path, Mode perms = Mode::Read); RealVfsDirectory(RealVfsFilesystem& base, const std::string& path, Mode perms = Mode::Read);

View File

@ -132,11 +132,4 @@ void VectorVfsDirectory::AddFile(VirtualFile file) {
void VectorVfsDirectory::AddDirectory(VirtualDir dir) { void VectorVfsDirectory::AddDirectory(VirtualDir dir) {
dirs.push_back(std::move(dir)); dirs.push_back(std::move(dir));
} }
bool VectorVfsDirectory::ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) {
if (!DeleteFile(file->GetName()))
return false;
dirs.emplace_back(std::move(dir));
return true;
}
} // namespace FileSys } // namespace FileSys

View File

@ -57,9 +57,6 @@ public:
virtual void AddFile(VirtualFile file); virtual void AddFile(VirtualFile file);
virtual void AddDirectory(VirtualDir dir); virtual void AddDirectory(VirtualDir dir);
protected:
bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) override;
private: private:
std::vector<VirtualFile> files; std::vector<VirtualFile> files;
std::vector<VirtualDir> dirs; std::vector<VirtualDir> dirs;

View File

@ -163,7 +163,4 @@ std::shared_ptr<VfsDirectory> NAX::GetParentDirectory() const {
return file->GetContainingDirectory(); return file->GetContainingDirectory();
} }
bool NAX::ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) {
return false;
}
} // namespace FileSys } // namespace FileSys

View File

@ -51,9 +51,6 @@ public:
std::shared_ptr<VfsDirectory> GetParentDirectory() const override; std::shared_ptr<VfsDirectory> GetParentDirectory() const override;
protected:
bool ReplaceFileWithSubdirectory(VirtualFile file, VirtualDir dir) override;
private: private:
Loader::ResultStatus Parse(std::string_view path); Loader::ResultStatus Parse(std::string_view path);