mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-08-05 15:49:20 +00:00
sys_fs: adjust permissions for /dev_bdvd
Remove write permissions returned by stat, fstat, etc. Also make sys_fs_open return CELL_EPERM on write attempt.
This commit is contained in:
parent
8447d75dda
commit
aeed349a99
1 changed files with 26 additions and 0 deletions
|
@ -251,6 +251,14 @@ error_code sys_fs_open(ppu_thread& ppu, vm::cptr<char> path, s32 flags, vm::ptr<
|
||||||
case CELL_FS_O_RDWR: open_mode += fs::read + fs::write; break;
|
case CELL_FS_O_RDWR: open_mode += fs::read + fs::write; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mp->flags & lv2_mp_flag::read_only)
|
||||||
|
{
|
||||||
|
if (flags & CELL_FS_O_ACCMODE || flags & (CELL_FS_O_CREAT | CELL_FS_O_TRUNC))
|
||||||
|
{
|
||||||
|
return {CELL_EPERM, path};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & CELL_FS_O_CREAT)
|
if (flags & CELL_FS_O_CREAT)
|
||||||
{
|
{
|
||||||
open_mode += fs::create;
|
open_mode += fs::create;
|
||||||
|
@ -771,6 +779,12 @@ error_code sys_fs_stat(ppu_thread& ppu, vm::cptr<char> path, vm::ptr<CellFsStat>
|
||||||
sb->size = info.size;
|
sb->size = info.size;
|
||||||
sb->blksize = mp->block_size;
|
sb->blksize = mp->block_size;
|
||||||
|
|
||||||
|
if (mp->flags & lv2_mp_flag::read_only)
|
||||||
|
{
|
||||||
|
// Remove write permissions
|
||||||
|
sb->mode &= ~0222;
|
||||||
|
}
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -805,6 +819,12 @@ error_code sys_fs_fstat(ppu_thread& ppu, u32 fd, vm::ptr<CellFsStat> sb)
|
||||||
sb->size = info.size;
|
sb->size = info.size;
|
||||||
sb->blksize = file->mp->block_size;
|
sb->blksize = file->mp->block_size;
|
||||||
|
|
||||||
|
if (file->mp->flags & lv2_mp_flag::read_only)
|
||||||
|
{
|
||||||
|
// Remove write permissions
|
||||||
|
sb->mode &= ~0222;
|
||||||
|
}
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1339,6 +1359,12 @@ error_code sys_fs_fcntl(ppu_thread& ppu, u32 fd, u32 op, vm::ptr<void> _arg, u32
|
||||||
entry.attribute.size = info->size;
|
entry.attribute.size = info->size;
|
||||||
entry.attribute.blksize = directory->mp->block_size;
|
entry.attribute.blksize = directory->mp->block_size;
|
||||||
|
|
||||||
|
if (directory->mp->flags & lv2_mp_flag::read_only)
|
||||||
|
{
|
||||||
|
// Remove write permissions
|
||||||
|
entry.attribute.mode &= ~0222;
|
||||||
|
}
|
||||||
|
|
||||||
entry.entry_name.d_type = info->is_directory ? CELL_FS_TYPE_DIRECTORY : CELL_FS_TYPE_REGULAR;
|
entry.entry_name.d_type = info->is_directory ? CELL_FS_TYPE_DIRECTORY : CELL_FS_TYPE_REGULAR;
|
||||||
entry.entry_name.d_namlen = u8(std::min<size_t>(info->name.size(), CELL_FS_MAX_FS_FILE_NAME_LENGTH));
|
entry.entry_name.d_namlen = u8(std::min<size_t>(info->name.size(), CELL_FS_MAX_FS_FILE_NAME_LENGTH));
|
||||||
strcpy_trunc(entry.entry_name.d_name, info->name);
|
strcpy_trunc(entry.entry_name.d_name, info->name);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue