fs: improve UnsupportedOperation results

This commit is contained in:
Michael Scire 2020-03-06 09:50:59 -08:00
parent 4f4a54abda
commit 7004ad3d7f
7 changed files with 58 additions and 30 deletions

View File

@ -26,21 +26,15 @@ namespace ams::fs {
virtual Result Read(s64 offset, void *buffer, size_t size) = 0; virtual Result Read(s64 offset, void *buffer, size_t size) = 0;
virtual Result Write(s64 offset, const void *buffer, size_t size) { virtual Result Write(s64 offset, const void *buffer, size_t size) = 0;
return fs::ResultUnsupportedOperation();
}
virtual Result Flush() = 0; virtual Result Flush() = 0;
virtual Result SetSize(s64 size) { virtual Result SetSize(s64 size) = 0;
return fs::ResultUnsupportedOperation();
}
virtual Result GetSize(s64 *out) = 0; virtual Result GetSize(s64 *out) = 0;
virtual Result OperateRange(void *dst, size_t dst_size, OperationId op_id, s64 offset, s64 size, const void *src, size_t src_size) { virtual Result OperateRange(void *dst, size_t dst_size, OperationId op_id, s64 offset, s64 size, const void *src, size_t src_size) = 0;
return fs::ResultUnsupportedOperation();
}
virtual Result OperateRange(OperationId op_id, s64 offset, s64 size) { virtual Result OperateRange(OperationId op_id, s64 offset, s64 size) {
return this->OperateRange(nullptr, 0, op_id, offset, size, nullptr, 0); return this->OperateRange(nullptr, 0, op_id, offset, size, nullptr, 0);
@ -86,21 +80,31 @@ namespace ams::fs {
virtual ~ReadOnlyStorageAdapter() { /* ... */ } virtual ~ReadOnlyStorageAdapter() { /* ... */ }
public: public:
virtual Result Read(s64 offset, void *buffer, size_t size) { virtual Result Read(s64 offset, void *buffer, size_t size) override {
return this->storage->Read(offset, buffer, size); return this->storage->Read(offset, buffer, size);
} }
virtual Result Flush() { virtual Result Flush() override {
return this->storage->Flush(); return this->storage->Flush();
} }
virtual Result GetSize(s64 *out) { virtual Result GetSize(s64 *out) override {
return this->storage->GetSize(out); return this->storage->GetSize(out);
} }
virtual Result OperateRange(void *dst, size_t dst_size, OperationId op_id, s64 offset, s64 size, const void *src, size_t src_size) override { virtual Result OperateRange(void *dst, size_t dst_size, OperationId op_id, s64 offset, s64 size, const void *src, size_t src_size) override {
return this->storage->OperateRange(dst, dst_size, op_id, offset, size, src, src_size); return this->storage->OperateRange(dst, dst_size, op_id, offset, size, src, src_size);
} }
virtual Result Write(s64 offset, const void *buffer, size_t size) override {
/* TODO: Better result? Is it possible to get a more specific one? */
return fs::ResultUnsupportedOperation();
}
virtual Result SetSize(s64 size) override {
/* TODO: Better result? Is it possible to get a more specific one? */
return fs::ResultUnsupportedOperation();
}
}; };
} }

View File

@ -62,6 +62,10 @@ namespace ams::fs {
return ResultSuccess(); return ResultSuccess();
} }
virtual Result SetSize(s64 size) override {
return fs::ResultUnsupportedMemoryStorageSetSize();
}
virtual Result OperateRange(void *dst, size_t dst_size, OperationId op_id, s64 offset, s64 size, const void *src, size_t src_size) override { virtual Result OperateRange(void *dst, size_t dst_size, OperationId op_id, s64 offset, s64 size, const void *src, size_t src_size) override {
switch (op_id) { switch (op_id) {
case OperationId::InvalidateCache: case OperationId::InvalidateCache:
@ -72,7 +76,7 @@ namespace ams::fs {
reinterpret_cast<QueryRangeInfo *>(dst)->Clear(); reinterpret_cast<QueryRangeInfo *>(dst)->Clear();
return ResultSuccess(); return ResultSuccess();
default: default:
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedMemoryStorageOperateRange();
} }
} }
}; };

View File

@ -103,13 +103,13 @@ namespace ams::fs {
virtual Result SetSize(s64 size) override { virtual Result SetSize(s64 size) override {
/* Ensure we're initialized and validate arguments. */ /* Ensure we're initialized and validate arguments. */
R_UNLESS(this->IsValid(), fs::ResultNotInitialized()); R_UNLESS(this->IsValid(), fs::ResultNotInitialized());
R_UNLESS(this->resizable, fs::ResultUnsupportedOperation()); R_UNLESS(this->resizable, fs::ResultUnsupportedSubStorageSetSizeA());
R_UNLESS(IStorage::IsOffsetAndSizeValid(this->offset, size), fs::ResultInvalidSize()); R_UNLESS(IStorage::IsOffsetAndSizeValid(this->offset, size), fs::ResultInvalidSize());
/* Ensure that we're allowed to set size. */ /* Ensure that we're allowed to set size. */
s64 cur_size; s64 cur_size;
R_TRY(this->base_storage->GetSize(std::addressof(cur_size))); R_TRY(this->base_storage->GetSize(std::addressof(cur_size)));
R_UNLESS(cur_size == this->offset + this->size, fs::ResultUnsupportedOperation()); R_UNLESS(cur_size == this->offset + this->size, fs::ResultUnsupportedSubStorageSetSizeB());
/* Set the size. */ /* Set the size. */
R_TRY(this->base_storage->SetSize(this->offset + size)); R_TRY(this->base_storage->SetSize(this->offset + size));

View File

@ -86,7 +86,7 @@ namespace ams::fs {
R_UNLESS(IStorage::IsOffsetAndSizeValid(offset, size), fs::ResultOutOfRange()); R_UNLESS(IStorage::IsOffsetAndSizeValid(offset, size), fs::ResultOutOfRange());
return this->base_file->OperateRange(dst, dst_size, op_id, offset, size, src, src_size); return this->base_file->OperateRange(dst, dst_size, op_id, offset, size, src, src_size);
default: default:
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedFileStorageOperateRange();
} }
} }

View File

@ -223,11 +223,11 @@ namespace ams::fs {
} }
virtual Result WriteImpl(s64 offset, const void *buffer, size_t size, const fs::WriteOption &option) override { virtual Result WriteImpl(s64 offset, const void *buffer, size_t size, const fs::WriteOption &option) override {
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileWrite();
} }
virtual Result SetSizeImpl(s64 size) override { virtual Result SetSizeImpl(s64 size) override {
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileWrite();
} }
virtual Result OperateRangeImpl(void *dst, size_t dst_size, fs::OperationId op_id, s64 offset, s64 size, const void *src, size_t src_size) override { virtual Result OperateRangeImpl(void *dst, size_t dst_size, fs::OperationId op_id, s64 offset, s64 size, const void *src, size_t src_size) override {
@ -239,7 +239,7 @@ namespace ams::fs {
R_UNLESS(this->GetSize() >= 0, fs::ResultOutOfRange()); R_UNLESS(this->GetSize() >= 0, fs::ResultOutOfRange());
} }
default: default:
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileOperateRange();
} }
} }
public: public:
@ -438,31 +438,31 @@ namespace ams::fs {
} }
Result RomFsFileSystem::CreateFileImpl(const char *path, s64 size, int flags) { Result RomFsFileSystem::CreateFileImpl(const char *path, s64 size, int flags) {
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileSystemWrite();
} }
Result RomFsFileSystem::DeleteFileImpl(const char *path) { Result RomFsFileSystem::DeleteFileImpl(const char *path) {
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileSystemWrite();
} }
Result RomFsFileSystem::CreateDirectoryImpl(const char *path) { Result RomFsFileSystem::CreateDirectoryImpl(const char *path) {
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileSystemWrite();
} }
Result RomFsFileSystem::DeleteDirectoryImpl(const char *path) { Result RomFsFileSystem::DeleteDirectoryImpl(const char *path) {
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileSystemWrite();
} }
Result RomFsFileSystem::DeleteDirectoryRecursivelyImpl(const char *path) { Result RomFsFileSystem::DeleteDirectoryRecursivelyImpl(const char *path) {
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileSystemWrite();
} }
Result RomFsFileSystem::RenameFileImpl(const char *old_path, const char *new_path) { Result RomFsFileSystem::RenameFileImpl(const char *old_path, const char *new_path) {
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileSystemWrite();
} }
Result RomFsFileSystem::RenameDirectoryImpl(const char *old_path, const char *new_path) { Result RomFsFileSystem::RenameDirectoryImpl(const char *old_path, const char *new_path) {
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileSystemWrite();
} }
Result RomFsFileSystem::GetEntryTypeImpl(fs::DirectoryEntryType *out, const char *path) { Result RomFsFileSystem::GetEntryTypeImpl(fs::DirectoryEntryType *out, const char *path) {
@ -519,19 +519,19 @@ namespace ams::fs {
} }
Result RomFsFileSystem::GetFreeSpaceSizeImpl(s64 *out, const char *path) { Result RomFsFileSystem::GetFreeSpaceSizeImpl(s64 *out, const char *path) {
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileSystemGetSize();
} }
Result RomFsFileSystem::GetTotalSpaceSizeImpl(s64 *out, const char *path) { Result RomFsFileSystem::GetTotalSpaceSizeImpl(s64 *out, const char *path) {
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileSystemGetSize();
} }
Result RomFsFileSystem::CleanDirectoryRecursivelyImpl(const char *path) { Result RomFsFileSystem::CleanDirectoryRecursivelyImpl(const char *path) {
return fs::ResultUnsupportedOperation(); return fs::ResultUnsupportedRomFsFileSystemWrite();
} }
Result RomFsFileSystem::CommitProvisionallyImpl(s64 counter) { Result RomFsFileSystem::CommitProvisionallyImpl(s64 counter) {
return ResultSuccess(); return fs::ResultUnsupportedRomFsFileSystemCommitProvisionally();
} }
Result RomFsFileSystem::RollbackImpl() { Result RomFsFileSystem::RollbackImpl() {

View File

@ -231,6 +231,16 @@ namespace ams::fs {
R_DEFINE_ERROR_RESULT(FileExtensionWithoutOpenModeAllowAppend, 6201); R_DEFINE_ERROR_RESULT(FileExtensionWithoutOpenModeAllowAppend, 6201);
R_DEFINE_ERROR_RANGE(UnsupportedOperation, 6300, 6399); R_DEFINE_ERROR_RANGE(UnsupportedOperation, 6300, 6399);
R_DEFINE_ERROR_RESULT(UnsupportedSubStorageSetSizeA, 6302);
R_DEFINE_ERROR_RESULT(UnsupportedSubStorageSetSizeB, 6303);
R_DEFINE_ERROR_RESULT(UnsupportedMemoryStorageSetSize, 6304);
R_DEFINE_ERROR_RESULT(UnsupportedMemoryStorageOperateRange, 6305);
R_DEFINE_ERROR_RESULT(UnsupportedFileStorageOperateRange, 6306);
R_DEFINE_ERROR_RESULT(UnsupportedRomFsFileSystemWrite, 6364);
R_DEFINE_ERROR_RESULT(UnsupportedRomFsFileSystemCommitProvisionally, 6365);
R_DEFINE_ERROR_RESULT(UnsupportedRomFsFileSystemGetSize, 6366);
R_DEFINE_ERROR_RESULT(UnsupportedRomFsFileWrite, 6367);
R_DEFINE_ERROR_RESULT(UnsupportedRomFsFileOperateRange, 6368);
R_DEFINE_ERROR_RANGE(PermissionDenied, 6400, 6449); R_DEFINE_ERROR_RANGE(PermissionDenied, 6400, 6449);

View File

@ -49,6 +49,16 @@ namespace ams::mitm::fs {
virtual Result GetSize(s64 *out_size) override; virtual Result GetSize(s64 *out_size) override;
virtual Result Flush() override; virtual Result Flush() override;
virtual Result OperateRange(void *dst, size_t dst_size, ams::fs::OperationId op_id, s64 offset, s64 size, const void *src, size_t src_size) override; virtual Result OperateRange(void *dst, size_t dst_size, ams::fs::OperationId op_id, s64 offset, s64 size, const void *src, size_t src_size) override;
virtual Result Write(s64 offset, const void *buffer, size_t size) override {
/* TODO: Better result code? */
return ams::fs::ResultUnsupportedOperation();
}
virtual Result SetSize(s64 size) override {
/* TODO: Better result code? */
return ams::fs::ResultUnsupportedOperation();
}
}; };
} }