FileSys: w->rw permission lift only happens in SDMC archive
This commit is contained in:
parent
0987783699
commit
0647f86649
|
@ -19,6 +19,17 @@ namespace FileSys {
|
||||||
|
|
||||||
ResultVal<std::unique_ptr<FileBackend>> SDMCArchive::OpenFile(const Path& path,
|
ResultVal<std::unique_ptr<FileBackend>> SDMCArchive::OpenFile(const Path& path,
|
||||||
const Mode& mode) const {
|
const Mode& mode) const {
|
||||||
|
Mode modified_mode;
|
||||||
|
modified_mode.hex = mode.hex;
|
||||||
|
|
||||||
|
// SDMC archive always opens a file with at least read permission
|
||||||
|
modified_mode.read_flag.Assign(1);
|
||||||
|
|
||||||
|
return OpenFileBase(path, modified_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
ResultVal<std::unique_ptr<FileBackend>> SDMCArchive::OpenFileBase(const Path& path,
|
||||||
|
const Mode& mode) const {
|
||||||
LOG_DEBUG(Service_FS, "called path=%s mode=%01X", path.DebugStr().c_str(), mode.hex);
|
LOG_DEBUG(Service_FS, "called path=%s mode=%01X", path.DebugStr().c_str(), mode.hex);
|
||||||
|
|
||||||
const PathParser path_parser(path);
|
const PathParser path_parser(path);
|
||||||
|
|
|
@ -36,6 +36,7 @@ public:
|
||||||
u64 GetFreeBytes() const override;
|
u64 GetFreeBytes() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
ResultVal<std::unique_ptr<FileBackend>> OpenFileBase(const Path& path, const Mode& mode) const;
|
||||||
std::string mount_point;
|
std::string mount_point;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ ResultVal<std::unique_ptr<FileBackend>> SDMCWriteOnlyArchive::OpenFile(const Pat
|
||||||
LOG_ERROR(Service_FS, "Read flag is not supported");
|
LOG_ERROR(Service_FS, "Read flag is not supported");
|
||||||
return ERROR_INVALID_READ_FLAG;
|
return ERROR_INVALID_READ_FLAG;
|
||||||
}
|
}
|
||||||
return SDMCArchive::OpenFile(path, mode);
|
return SDMCArchive::OpenFileBase(path, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
ResultVal<std::unique_ptr<DirectoryBackend>> SDMCWriteOnlyArchive::OpenDirectory(
|
ResultVal<std::unique_ptr<DirectoryBackend>> SDMCWriteOnlyArchive::OpenDirectory(
|
||||||
|
|
|
@ -163,7 +163,7 @@ u64 DiskArchive::GetFreeBytes() const {
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ResultVal<size_t> DiskFile::Read(const u64 offset, const size_t length, u8* buffer) const {
|
ResultVal<size_t> DiskFile::Read(const u64 offset, const size_t length, u8* buffer) const {
|
||||||
if (!mode.read_flag && !mode.write_flag)
|
if (!mode.read_flag)
|
||||||
return ResultCode(ErrorDescription::FS_InvalidOpenFlags, ErrorModule::FS,
|
return ResultCode(ErrorDescription::FS_InvalidOpenFlags, ErrorModule::FS,
|
||||||
ErrorSummary::Canceled, ErrorLevel::Status);
|
ErrorSummary::Canceled, ErrorLevel::Status);
|
||||||
|
|
||||||
|
|
Reference in New Issue