diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index 8765908b71..9b75ed13a7 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -696,15 +696,20 @@ s32 cellFsStReadStop(u32 fd) s32 cellFsStRead(u32 fd, u32 buf_addr, u64 size, vm::ptr> rsize) { - sys_fs->Todo("cellFsStRead(fd=%d, buf_addr=0x%x, size=0x%llx, rsize_addr = 0x%x)", fd, buf_addr, size, rsize.addr()); + sys_fs->Warning("cellFsStRead(fd=%d, buf_addr=0x%x, size=0x%llx, rsize_addr=0x%x)", fd, buf_addr, size, rsize.addr()); LV2_LOCK(0); vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; + // TODO: use ringbuffer (fs_config) fs_config.m_regid += size; - *rsize = fs_config.m_regid; + + if (file->Eof()) + return CELL_FS_ERANGE; + + *rsize = file->Read(vm::get_ptr(buf_addr), size); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.h b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h index 841a7b994b..c7cf8814fe 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.h +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h @@ -70,6 +70,10 @@ enum cellFsStStatus CELL_FS_ST_PROGRESS = 0x0200, }; +enum cellFsErrors +{ + CELL_FS_ERANGE = 34 +}; #pragma pack(push, 4)