mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-09 08:21:29 +12:00
cellFsStat fix and other fixes
This commit is contained in:
parent
1bde52623b
commit
0cd3cd3e05
5 changed files with 27 additions and 73 deletions
|
@ -82,15 +82,13 @@ void addSaveDataEntry(std::vector<SaveDataEntry>& saveEntries, const std::string
|
||||||
|
|
||||||
cellSysutil->Error("Running _stat in cellSaveData. Please report this to a RPCS3 developer!");
|
cellSysutil->Error("Running _stat in cellSaveData. Please report this to a RPCS3 developer!");
|
||||||
|
|
||||||
std::string pathy;
|
std::string real_path;
|
||||||
|
|
||||||
Emu.GetVFS().GetDevice("dev_hdd0", pathy);
|
|
||||||
|
|
||||||
struct stat buf;
|
struct stat buf;
|
||||||
int result = stat((pathy.substr(0, pathy.length() - 9) + f.GetPath()).c_str(), &buf);
|
|
||||||
|
|
||||||
if (result != 0)
|
Emu.GetVFS().GetDevice(f.GetPath(), real_path);
|
||||||
cellSysutil->Error("_stat failed! (%s)", (pathy.substr(0, pathy.length() - 9) + f.GetPath()).c_str());
|
|
||||||
|
if (stat(real_path.c_str(), &buf) != 0)
|
||||||
|
cellSysutil->Error("stat failed! (%s)", real_path.c_str());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
atime = buf.st_atime;
|
atime = buf.st_atime;
|
||||||
|
|
|
@ -251,34 +251,13 @@ s32 cellFsStat(vm::ptr<const char> path, vm::ptr<CellFsStat> sb)
|
||||||
u64 ctime = 0;
|
u64 ctime = 0;
|
||||||
u64 size = 0;
|
u64 size = 0;
|
||||||
|
|
||||||
int device = -1;
|
std::string real_path;
|
||||||
|
|
||||||
if (_path.substr(1, 8) == "dev_hdd0")
|
|
||||||
device = 0;
|
|
||||||
else if (_path.substr(1, 8) == "dev_hdd1")
|
|
||||||
device = 1;
|
|
||||||
else if (_path.substr(1, 8) == "dev_bdvd")
|
|
||||||
device = 2;
|
|
||||||
|
|
||||||
std::string pathy;
|
|
||||||
|
|
||||||
if (device == 0)
|
|
||||||
Emu.GetVFS().GetDevice("dev_hdd0", pathy);
|
|
||||||
else if (device == 1)
|
|
||||||
Emu.GetVFS().GetDevice("dev_hdd1", pathy);
|
|
||||||
else if (device == 2)
|
|
||||||
Emu.GetVFS().GetDevice("dev_bdvd", pathy);
|
|
||||||
|
|
||||||
struct stat buf;
|
struct stat buf;
|
||||||
int result = 1;
|
|
||||||
|
|
||||||
if (device == 2)
|
Emu.GetVFS().GetDevice(_path, real_path);
|
||||||
result = stat((pathy + _path.substr(9, _path.length())).c_str(), &buf);
|
|
||||||
else
|
|
||||||
result = stat((pathy.substr(0, pathy.length() - 9) + _path).c_str(), &buf);
|
|
||||||
|
|
||||||
if (result != 0)
|
if (stat(real_path.c_str(), &buf) != 0)
|
||||||
sys_fs->Error("_stat failed! (%s)", (pathy.substr(0, pathy.length() - 9) + _path).c_str());
|
sys_fs->Error("stat failed! (%s)", real_path.c_str());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mode = buf.st_mode;
|
mode = buf.st_mode;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
#include "Emu/FS/VFS.h"
|
||||||
#include "Emu/Memory/Memory.h"
|
#include "Emu/Memory/Memory.h"
|
||||||
#include "Emu/System.h"
|
#include "Emu/System.h"
|
||||||
#include "Emu/SysCalls/SysCalls.h"
|
#include "Emu/SysCalls/SysCalls.h"
|
||||||
|
@ -103,17 +104,11 @@ void sys_game_process_exitspawn(vm::ptr<const char> path, u32 argv_addr, u32 env
|
||||||
Emu.Stop();
|
Emu.Stop();
|
||||||
});
|
});
|
||||||
|
|
||||||
int device = -1;
|
std::string real_path;
|
||||||
|
|
||||||
if (_path.substr(1, 8) == "dev_hdd0")
|
Emu.GetVFS().GetDevice(_path.c_str(), real_path);
|
||||||
device = 0;
|
|
||||||
else if (_path.substr(1, 8) == "dev_hdd1")
|
|
||||||
device = 1;
|
|
||||||
else if (_path.substr(1, 8) == "dev_bdvd")
|
|
||||||
device = 2;
|
|
||||||
|
|
||||||
if (device != 0)
|
Emu.BootGame(real_path, true);
|
||||||
Emu.BootGame(_path.c_str(), true, device);
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -185,16 +180,11 @@ void sys_game_process_exitspawn2(vm::ptr<const char> path, u32 argv_addr, u32 en
|
||||||
Emu.Stop();
|
Emu.Stop();
|
||||||
});
|
});
|
||||||
|
|
||||||
int device = -1;
|
std::string real_path;
|
||||||
|
|
||||||
if (_path.substr(1, 8) == "dev_hdd0")
|
Emu.GetVFS().GetDevice(_path.c_str(), real_path);
|
||||||
device = 0;
|
|
||||||
else if (_path.substr(1, 8) == "dev_hdd1")
|
|
||||||
device = 1;
|
|
||||||
else if (_path.substr(1, 8) == "dev_bdvd")
|
|
||||||
device = 2;
|
|
||||||
|
|
||||||
Emu.BootGame(_path.c_str(), true, device);
|
Emu.BootGame(real_path, true);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,7 +145,7 @@ void Emulator::CheckStatus()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Emulator::BootGame(const std::string& path, bool direct, int device)
|
bool Emulator::BootGame(const std::string& path, bool direct)
|
||||||
{
|
{
|
||||||
static const char* elf_path[6] =
|
static const char* elf_path[6] =
|
||||||
{
|
{
|
||||||
|
@ -158,12 +158,8 @@ bool Emulator::BootGame(const std::string& path, bool direct, int device)
|
||||||
};
|
};
|
||||||
auto curpath = path;
|
auto curpath = path;
|
||||||
|
|
||||||
if (!direct)
|
if (direct)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < sizeof(elf_path) / sizeof(*elf_path); i++)
|
|
||||||
{
|
|
||||||
curpath = path + elf_path[i];
|
|
||||||
|
|
||||||
if (rFile::Access(curpath, rFile::read))
|
if (rFile::Access(curpath, rFile::read))
|
||||||
{
|
{
|
||||||
SetPath(curpath);
|
SetPath(curpath);
|
||||||
|
@ -172,19 +168,10 @@ bool Emulator::BootGame(const std::string& path, bool direct, int device)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
for (int i = 0; i < sizeof(elf_path) / sizeof(*elf_path); i++)
|
||||||
{
|
{
|
||||||
std::string pathy;
|
curpath = path + elf_path[i];
|
||||||
|
|
||||||
if (device == 0)
|
|
||||||
Emu.GetVFS().GetDevice("dev_hdd0", pathy);
|
|
||||||
else if (device == 1)
|
|
||||||
Emu.GetVFS().GetDevice("dev_hdd1", pathy);
|
|
||||||
else if (device == 2)
|
|
||||||
Emu.GetVFS().GetDevice("dev_bdvd", pathy);
|
|
||||||
|
|
||||||
curpath = pathy.substr(0, pathy.length() - 9) + path;
|
|
||||||
|
|
||||||
if (rFile::Access(curpath, rFile::read))
|
if (rFile::Access(curpath, rFile::read))
|
||||||
{
|
{
|
||||||
|
|
|
@ -207,7 +207,7 @@ public:
|
||||||
u32 GetCPUThreadStop() const { return m_cpu_thr_stop; }
|
u32 GetCPUThreadStop() const { return m_cpu_thr_stop; }
|
||||||
|
|
||||||
void CheckStatus();
|
void CheckStatus();
|
||||||
bool BootGame(const std::string& path, bool direct = false, int device = 0);
|
bool BootGame(const std::string& path, bool direct = false);
|
||||||
|
|
||||||
void Load();
|
void Load();
|
||||||
void Run();
|
void Run();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue