mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-24 19:14:40 +00:00
implemented sceKernelMkdir
This commit is contained in:
parent
b1d0833011
commit
85c27ad8a0
@ -12,7 +12,7 @@
|
|||||||
namespace Libraries::Kernel {
|
namespace Libraries::Kernel {
|
||||||
|
|
||||||
int PS4_SYSV_ABI sceKernelOpen(const char* path, int flags, u16 mode) {
|
int PS4_SYSV_ABI sceKernelOpen(const char* path, int flags, u16 mode) {
|
||||||
LOG_INFO(Kernel_Fs, "path = {} flags = {:#x} mode = {:#x}", path, flags, mode);
|
LOG_INFO(Kernel_Fs, "path = {} flags = {:#x} mode = {}", path, flags, mode);
|
||||||
ASSERT_MSG(flags == 0, "flags!=0 not supported yet");
|
ASSERT_MSG(flags == 0, "flags!=0 not supported yet");
|
||||||
ASSERT_MSG(mode == 0, "mode!=0 not supported yet");
|
ASSERT_MSG(mode == 0, "mode!=0 not supported yet");
|
||||||
auto* h = Common::Singleton<Core::FileSys::HandleTable>::Instance();
|
auto* h = Common::Singleton<Core::FileSys::HandleTable>::Instance();
|
||||||
@ -73,18 +73,19 @@ s64 PS4_SYSV_ABI sceKernelLseek(int d, s64 offset, int whence) {
|
|||||||
auto* file = h->GetFile(d);
|
auto* file = h->GetFile(d);
|
||||||
|
|
||||||
file->m_mutex.lock();
|
file->m_mutex.lock();
|
||||||
|
Common::FS::SeekOrigin origin;
|
||||||
|
if (whence == 0) {
|
||||||
|
origin = Common::FS::SeekOrigin::SetOrigin;
|
||||||
|
}
|
||||||
|
|
||||||
if (whence == 1) {
|
if (whence == 1) {
|
||||||
offset = static_cast<int64_t>(file->f.Tell()) + offset;
|
origin = Common::FS::SeekOrigin::CurrentPosition;
|
||||||
whence = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (whence == 2) {
|
if (whence == 2) {
|
||||||
offset = static_cast<int64_t>(file->f.GetSize()) + offset;
|
origin = Common::FS::SeekOrigin::End;
|
||||||
whence = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
file->f.Seek(offset);
|
file->f.Seek(offset, origin);
|
||||||
auto pos = static_cast<int64_t>(file->f.Tell());
|
auto pos = static_cast<int64_t>(file->f.Tell());
|
||||||
|
|
||||||
file->m_mutex.unlock();
|
file->m_mutex.unlock();
|
||||||
@ -112,7 +113,23 @@ s64 PS4_SYSV_ABI sceKernelRead(int d, void* buf, size_t nbytes) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int PS4_SYSV_ABI sceKernelMkdir(const char* path, u16 mode) {
|
int PS4_SYSV_ABI sceKernelMkdir(const char* path, u16 mode) {
|
||||||
LOG_INFO(Kernel_Fs, "path = {} mode = {:#x}", path, mode);
|
LOG_INFO(Kernel_Fs, "path = {} mode = {}", path, mode);
|
||||||
|
if (path == nullptr) {
|
||||||
|
return SCE_KERNEL_ERROR_EINVAL;
|
||||||
|
}
|
||||||
|
auto* mnt = Common::Singleton<Core::FileSys::MntPoints>::Instance();
|
||||||
|
std::string dir_name = mnt->GetHostFile(path);
|
||||||
|
if (std::filesystem::is_directory(dir_name)) {
|
||||||
|
return SCE_KERNEL_ERROR_EEXIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!std::filesystem::create_directory(dir_name)) {
|
||||||
|
return SCE_KERNEL_ERROR_EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!std::filesystem::is_directory(dir_name)) {
|
||||||
|
return SCE_KERNEL_ERROR_ENOENT;
|
||||||
|
}
|
||||||
return ORBIS_OK;
|
return ORBIS_OK;
|
||||||
}
|
}
|
||||||
void fileSystemSymbolsRegister(Core::Loader::SymbolsResolver* sym) {
|
void fileSystemSymbolsRegister(Core::Loader::SymbolsResolver* sym) {
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <common/singleton.h>
|
#include <common/singleton.h>
|
||||||
#include <core/file_sys/fs.h>
|
#include <core/file_sys/fs.h>
|
||||||
|
#include <string.h>
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "common/path_util.h"
|
#include "common/path_util.h"
|
||||||
|
Loading…
Reference in New Issue
Block a user