mirror of
https://github.com/RPCSX/rpcsx.git
synced 2025-12-06 07:12:14 +01:00
ps3/virtual device: fix windows support
iso: avoid usage of std::filesystem
This commit is contained in:
parent
ccde87c17f
commit
6374f92100
|
|
@ -837,7 +837,7 @@ namespace fs
|
|||
|
||||
shared_ptr<fs::device_base> fs::device_manager::get_device(const std::string& path, std::string_view *device_path)
|
||||
{
|
||||
auto prefix = path.substr(0, path.find_first_of('/', 1));
|
||||
auto prefix = path.substr(0, path.find_first_of("/\\", 1));
|
||||
|
||||
reader_lock lock(m_mutex);
|
||||
|
||||
|
|
@ -888,7 +888,7 @@ shared_ptr<fs::device_base> fs::device_manager::set_device(const std::string& na
|
|||
shared_ptr<fs::device_base> fs::get_virtual_device(const std::string& path, std::string_view *device_path)
|
||||
{
|
||||
// Every virtual device path must have specific name at the beginning
|
||||
if (path.starts_with("/vfsv0_") && path.size() >= 8 + 22 && path[29] == '_' && path.find_first_of('/', 1) > 29)
|
||||
if ((path.starts_with("/vfsv0_") || path.starts_with("\\vfsv0_")) && path.size() >= 8 + 22 && path[29] == '_' && path.find_first_of("/\\", 1) > 29)
|
||||
{
|
||||
return get_device_manager().get_device(path, device_path);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
#include <cstdint>
|
||||
#include <cstdio>
|
||||
#include <ctime>
|
||||
#include <filesystem>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
|
|
@ -198,17 +197,14 @@ std::unique_ptr<fs::dir_base> iso_dev::open_dir(const std::string& path)
|
|||
}
|
||||
|
||||
std::optional<iso::DirEntry>
|
||||
iso_dev::open_entry(const std::filesystem::path& path)
|
||||
iso_dev::open_entry(std::string_view path)
|
||||
{
|
||||
auto pathString = std::filesystem::weakly_canonical(path).string();
|
||||
|
||||
if (pathString == "/" || pathString == "\\" || pathString.empty())
|
||||
if (path == "/" || path == "\\" || path.empty())
|
||||
{
|
||||
return m_root_dir;
|
||||
}
|
||||
|
||||
auto item = m_root_dir;
|
||||
auto pathView = std::string_view(pathString);
|
||||
|
||||
auto isStringEqNoCase = [](std::string_view lhs, std::string_view rhs)
|
||||
{
|
||||
|
|
@ -228,12 +224,12 @@ iso_dev::open_entry(const std::filesystem::path& path)
|
|||
return true;
|
||||
};
|
||||
|
||||
while (!pathView.empty())
|
||||
while (!path.empty())
|
||||
{
|
||||
auto sepPos = pathView.find_first_of("/\\");
|
||||
auto sepPos = path.find_first_of("/\\");
|
||||
if (sepPos == 0)
|
||||
{
|
||||
pathView.remove_prefix(1);
|
||||
path.remove_prefix(1);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -243,14 +239,14 @@ iso_dev::open_entry(const std::filesystem::path& path)
|
|||
return {};
|
||||
}
|
||||
|
||||
auto dirName = pathView.substr(0, sepPos);
|
||||
auto dirName = path.substr(0, sepPos);
|
||||
if (sepPos == std::string_view::npos)
|
||||
{
|
||||
pathView = {};
|
||||
path = {};
|
||||
}
|
||||
else
|
||||
{
|
||||
pathView.remove_prefix(sepPos);
|
||||
path.remove_prefix(sepPos);
|
||||
}
|
||||
|
||||
auto items = read_dir(item);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
#include "util/types.hpp"
|
||||
#include <bit>
|
||||
#include <optional>
|
||||
#include <filesystem>
|
||||
#include <string_view>
|
||||
|
||||
namespace iso
|
||||
{
|
||||
|
|
@ -236,7 +236,7 @@ public:
|
|||
private:
|
||||
bool initialize();
|
||||
|
||||
std::optional<iso::DirEntry> open_entry(const std::filesystem::path& path);
|
||||
std::optional<iso::DirEntry> open_entry(std::string_view path);
|
||||
std::pair<std::vector<iso::DirEntry>, std::vector<std::string>> read_dir(const iso::DirEntry& entry);
|
||||
fs::file read_file(const iso::DirEntry& entry);
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue