DiscIO: Fix recursive directory extraction
https://bugs.dolphin-emu.org/issues/12331
This commit is contained in:
parent
5abae61a8c
commit
b43f7c85cc
|
@ -130,8 +130,10 @@ void ExportDirectory(const Volume& volume, const Partition& partition, const Fil
|
||||||
const std::string& export_folder,
|
const std::string& export_folder,
|
||||||
const std::function<bool(const std::string& path)>& update_progress)
|
const std::function<bool(const std::string& path)>& update_progress)
|
||||||
{
|
{
|
||||||
const std::string export_root =
|
std::string export_root = export_folder + '/';
|
||||||
export_folder + (directory.IsDirectory() ? "/" + directory.GetName() + "/" : "/");
|
if (directory.IsDirectory() && !directory.IsRoot())
|
||||||
|
export_root += directory.GetName() + '/';
|
||||||
|
|
||||||
File::CreateFullPath(export_root);
|
File::CreateFullPath(export_root);
|
||||||
|
|
||||||
for (const FileInfo& file_info : directory)
|
for (const FileInfo& file_info : directory)
|
||||||
|
@ -154,7 +156,8 @@ void ExportDirectory(const Volume& volume, const Partition& partition, const Fil
|
||||||
}
|
}
|
||||||
else if (recursive)
|
else if (recursive)
|
||||||
{
|
{
|
||||||
ExportDirectory(volume, partition, file_info, recursive, path, export_path, update_progress);
|
ExportDirectory(volume, partition, file_info, recursive, filesystem_path, export_root,
|
||||||
|
update_progress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,6 +96,11 @@ u64 FileInfoGCWii::GetOffset() const
|
||||||
return static_cast<u64>(Get(EntryProperty::FILE_OFFSET)) << m_offset_shift;
|
return static_cast<u64>(Get(EntryProperty::FILE_OFFSET)) << m_offset_shift;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FileInfoGCWii::IsRoot() const
|
||||||
|
{
|
||||||
|
return m_index == 0;
|
||||||
|
}
|
||||||
|
|
||||||
bool FileInfoGCWii::IsDirectory() const
|
bool FileInfoGCWii::IsDirectory() const
|
||||||
{
|
{
|
||||||
return (Get(EntryProperty::NAME_OFFSET) & 0xFF000000) != 0;
|
return (Get(EntryProperty::NAME_OFFSET) & 0xFF000000) != 0;
|
||||||
|
|
|
@ -42,6 +42,7 @@ public:
|
||||||
|
|
||||||
u64 GetOffset() const override;
|
u64 GetOffset() const override;
|
||||||
u32 GetSize() const override;
|
u32 GetSize() const override;
|
||||||
|
bool IsRoot() const override;
|
||||||
bool IsDirectory() const override;
|
bool IsDirectory() const override;
|
||||||
u32 GetTotalChildren() const override;
|
u32 GetTotalChildren() const override;
|
||||||
std::string GetName() const override;
|
std::string GetName() const override;
|
||||||
|
|
|
@ -89,6 +89,7 @@ public:
|
||||||
virtual u32 GetSize() const = 0;
|
virtual u32 GetSize() const = 0;
|
||||||
// For a file, returns its size. For a directory, returns the total size of its contents.
|
// For a file, returns its size. For a directory, returns the total size of its contents.
|
||||||
u64 GetTotalSize() const;
|
u64 GetTotalSize() const;
|
||||||
|
virtual bool IsRoot() const = 0;
|
||||||
virtual bool IsDirectory() const = 0;
|
virtual bool IsDirectory() const = 0;
|
||||||
// The number of files and directories in a directory, including those in subdirectories.
|
// The number of files and directories in a directory, including those in subdirectories.
|
||||||
// Not guaranteed to return a meaningful value for files.
|
// Not guaranteed to return a meaningful value for files.
|
||||||
|
|
Loading…
Reference in New Issue