mirror of
https://github.com/PabloMK7/citra.git
synced 2025-10-11 20:10:03 +00:00
kernel: Update to use atmosphere macros and correct Result (#7242)
* kernel: Switch to atmosphere style macros * code: Rename ResultCode to Result * code: Result constants are lower case * Address review comments * core: Remove CASCADE_CODE * R_TRY replaces completely * core: Run clang format
This commit is contained in:
parent
811303ea54
commit
5a7f615da1
132 changed files with 2807 additions and 2995 deletions
|
@ -52,7 +52,7 @@ ResultVal<ArchiveHandle> ArchiveManager::OpenArchive(ArchiveIdCode id_code,
|
|||
|
||||
auto itr = id_code_map.find(id_code);
|
||||
if (itr == id_code_map.end()) {
|
||||
return FileSys::ERROR_NOT_FOUND;
|
||||
return FileSys::ResultNotFound;
|
||||
}
|
||||
|
||||
CASCADE_RESULT(std::unique_ptr<ArchiveBackend> res,
|
||||
|
@ -66,17 +66,17 @@ ResultVal<ArchiveHandle> ArchiveManager::OpenArchive(ArchiveIdCode id_code,
|
|||
return next_handle++;
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::CloseArchive(ArchiveHandle handle) {
|
||||
Result ArchiveManager::CloseArchive(ArchiveHandle handle) {
|
||||
if (handle_map.erase(handle) == 0)
|
||||
return FileSys::ERR_INVALID_ARCHIVE_HANDLE;
|
||||
return FileSys::ResultInvalidArchiveHandle;
|
||||
else
|
||||
return RESULT_SUCCESS;
|
||||
return ResultSuccess;
|
||||
}
|
||||
|
||||
// TODO(yuriks): This might be what the fs:REG service is for. See the Register/Unregister calls in
|
||||
// http://3dbrew.org/wiki/Filesystem_services#ProgramRegistry_service_.22fs:REG.22
|
||||
ResultCode ArchiveManager::RegisterArchiveType(std::unique_ptr<FileSys::ArchiveFactory>&& factory,
|
||||
ArchiveIdCode id_code) {
|
||||
Result ArchiveManager::RegisterArchiveType(std::unique_ptr<FileSys::ArchiveFactory>&& factory,
|
||||
ArchiveIdCode id_code) {
|
||||
auto result = id_code_map.emplace(id_code, std::move(factory));
|
||||
|
||||
bool inserted = result.second;
|
||||
|
@ -85,7 +85,7 @@ ResultCode ArchiveManager::RegisterArchiveType(std::unique_ptr<FileSys::ArchiveF
|
|||
auto& archive = result.first->second;
|
||||
LOG_DEBUG(Service_FS, "Registered archive {} with id code 0x{:08X}", archive->GetName(),
|
||||
id_code);
|
||||
return RESULT_SUCCESS;
|
||||
return ResultSuccess;
|
||||
}
|
||||
|
||||
std::pair<ResultVal<std::shared_ptr<File>>, std::chrono::nanoseconds>
|
||||
|
@ -93,7 +93,7 @@ ArchiveManager::OpenFileFromArchive(ArchiveHandle archive_handle, const FileSys:
|
|||
const FileSys::Mode mode) {
|
||||
ArchiveBackend* archive = GetArchive(archive_handle);
|
||||
if (archive == nullptr) {
|
||||
return std::make_pair(FileSys::ERR_INVALID_ARCHIVE_HANDLE, std::chrono::nanoseconds{0});
|
||||
return std::make_pair(FileSys::ResultInvalidArchiveHandle, std::chrono::nanoseconds{0});
|
||||
}
|
||||
|
||||
const std::chrono::nanoseconds open_timeout_ns{archive->GetOpenDelayNs()};
|
||||
|
@ -106,23 +106,23 @@ ArchiveManager::OpenFileFromArchive(ArchiveHandle archive_handle, const FileSys:
|
|||
return std::make_pair(std::move(file), open_timeout_ns);
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::DeleteFileFromArchive(ArchiveHandle archive_handle,
|
||||
const FileSys::Path& path) {
|
||||
Result ArchiveManager::DeleteFileFromArchive(ArchiveHandle archive_handle,
|
||||
const FileSys::Path& path) {
|
||||
ArchiveBackend* archive = GetArchive(archive_handle);
|
||||
if (archive == nullptr)
|
||||
return FileSys::ERR_INVALID_ARCHIVE_HANDLE;
|
||||
return FileSys::ResultInvalidArchiveHandle;
|
||||
|
||||
return archive->DeleteFile(path);
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::RenameFileBetweenArchives(ArchiveHandle src_archive_handle,
|
||||
const FileSys::Path& src_path,
|
||||
ArchiveHandle dest_archive_handle,
|
||||
const FileSys::Path& dest_path) {
|
||||
Result ArchiveManager::RenameFileBetweenArchives(ArchiveHandle src_archive_handle,
|
||||
const FileSys::Path& src_path,
|
||||
ArchiveHandle dest_archive_handle,
|
||||
const FileSys::Path& dest_path) {
|
||||
ArchiveBackend* src_archive = GetArchive(src_archive_handle);
|
||||
ArchiveBackend* dest_archive = GetArchive(dest_archive_handle);
|
||||
if (src_archive == nullptr || dest_archive == nullptr)
|
||||
return FileSys::ERR_INVALID_ARCHIVE_HANDLE;
|
||||
return FileSys::ResultInvalidArchiveHandle;
|
||||
|
||||
if (src_archive == dest_archive) {
|
||||
return src_archive->RenameFile(src_path, dest_path);
|
||||
|
@ -132,50 +132,50 @@ ResultCode ArchiveManager::RenameFileBetweenArchives(ArchiveHandle src_archive_h
|
|||
}
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::DeleteDirectoryFromArchive(ArchiveHandle archive_handle,
|
||||
const FileSys::Path& path) {
|
||||
Result ArchiveManager::DeleteDirectoryFromArchive(ArchiveHandle archive_handle,
|
||||
const FileSys::Path& path) {
|
||||
ArchiveBackend* archive = GetArchive(archive_handle);
|
||||
if (archive == nullptr)
|
||||
return FileSys::ERR_INVALID_ARCHIVE_HANDLE;
|
||||
return FileSys::ResultInvalidArchiveHandle;
|
||||
|
||||
return archive->DeleteDirectory(path);
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::DeleteDirectoryRecursivelyFromArchive(ArchiveHandle archive_handle,
|
||||
const FileSys::Path& path) {
|
||||
Result ArchiveManager::DeleteDirectoryRecursivelyFromArchive(ArchiveHandle archive_handle,
|
||||
const FileSys::Path& path) {
|
||||
ArchiveBackend* archive = GetArchive(archive_handle);
|
||||
if (archive == nullptr)
|
||||
return FileSys::ERR_INVALID_ARCHIVE_HANDLE;
|
||||
return FileSys::ResultInvalidArchiveHandle;
|
||||
|
||||
return archive->DeleteDirectoryRecursively(path);
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::CreateFileInArchive(ArchiveHandle archive_handle,
|
||||
const FileSys::Path& path, u64 file_size) {
|
||||
Result ArchiveManager::CreateFileInArchive(ArchiveHandle archive_handle, const FileSys::Path& path,
|
||||
u64 file_size) {
|
||||
ArchiveBackend* archive = GetArchive(archive_handle);
|
||||
if (archive == nullptr)
|
||||
return FileSys::ERR_INVALID_ARCHIVE_HANDLE;
|
||||
return FileSys::ResultInvalidArchiveHandle;
|
||||
|
||||
return archive->CreateFile(path, file_size);
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::CreateDirectoryFromArchive(ArchiveHandle archive_handle,
|
||||
const FileSys::Path& path) {
|
||||
Result ArchiveManager::CreateDirectoryFromArchive(ArchiveHandle archive_handle,
|
||||
const FileSys::Path& path) {
|
||||
ArchiveBackend* archive = GetArchive(archive_handle);
|
||||
if (archive == nullptr)
|
||||
return FileSys::ERR_INVALID_ARCHIVE_HANDLE;
|
||||
return FileSys::ResultInvalidArchiveHandle;
|
||||
|
||||
return archive->CreateDirectory(path);
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::RenameDirectoryBetweenArchives(ArchiveHandle src_archive_handle,
|
||||
const FileSys::Path& src_path,
|
||||
ArchiveHandle dest_archive_handle,
|
||||
const FileSys::Path& dest_path) {
|
||||
Result ArchiveManager::RenameDirectoryBetweenArchives(ArchiveHandle src_archive_handle,
|
||||
const FileSys::Path& src_path,
|
||||
ArchiveHandle dest_archive_handle,
|
||||
const FileSys::Path& dest_path) {
|
||||
ArchiveBackend* src_archive = GetArchive(src_archive_handle);
|
||||
ArchiveBackend* dest_archive = GetArchive(dest_archive_handle);
|
||||
if (src_archive == nullptr || dest_archive == nullptr)
|
||||
return FileSys::ERR_INVALID_ARCHIVE_HANDLE;
|
||||
return FileSys::ResultInvalidArchiveHandle;
|
||||
|
||||
if (src_archive == dest_archive) {
|
||||
return src_archive->RenameDirectory(src_path, dest_path);
|
||||
|
@ -189,7 +189,7 @@ ResultVal<std::shared_ptr<Directory>> ArchiveManager::OpenDirectoryFromArchive(
|
|||
ArchiveHandle archive_handle, const FileSys::Path& path) {
|
||||
ArchiveBackend* archive = GetArchive(archive_handle);
|
||||
if (archive == nullptr) {
|
||||
return FileSys::ERR_INVALID_ARCHIVE_HANDLE;
|
||||
return FileSys::ResultInvalidArchiveHandle;
|
||||
}
|
||||
|
||||
auto backend = archive->OpenDirectory(path);
|
||||
|
@ -203,14 +203,14 @@ ResultVal<std::shared_ptr<Directory>> ArchiveManager::OpenDirectoryFromArchive(
|
|||
ResultVal<u64> ArchiveManager::GetFreeBytesInArchive(ArchiveHandle archive_handle) {
|
||||
const ArchiveBackend* archive = GetArchive(archive_handle);
|
||||
if (archive == nullptr) {
|
||||
return FileSys::ERR_INVALID_ARCHIVE_HANDLE;
|
||||
return FileSys::ResultInvalidArchiveHandle;
|
||||
}
|
||||
return archive->GetFreeBytes();
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::FormatArchive(ArchiveIdCode id_code,
|
||||
const FileSys::ArchiveFormatInfo& format_info,
|
||||
const FileSys::Path& path, u64 program_id) {
|
||||
Result ArchiveManager::FormatArchive(ArchiveIdCode id_code,
|
||||
const FileSys::ArchiveFormatInfo& format_info,
|
||||
const FileSys::Path& path, u64 program_id) {
|
||||
auto archive_itr = id_code_map.find(id_code);
|
||||
if (archive_itr == id_code_map.end()) {
|
||||
return UnimplementedFunction(ErrorModule::FS); // TODO(Subv): Find the right error
|
||||
|
@ -229,10 +229,10 @@ ResultVal<FileSys::ArchiveFormatInfo> ArchiveManager::GetArchiveFormatInfo(
|
|||
return archive->second->GetFormatInfo(archive_path, program_id);
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::CreateExtSaveData(MediaType media_type, u32 high, u32 low,
|
||||
std::span<const u8> smdh_icon,
|
||||
const FileSys::ArchiveFormatInfo& format_info,
|
||||
u64 program_id) {
|
||||
Result ArchiveManager::CreateExtSaveData(MediaType media_type, u32 high, u32 low,
|
||||
std::span<const u8> smdh_icon,
|
||||
const FileSys::ArchiveFormatInfo& format_info,
|
||||
u64 program_id) {
|
||||
// Construct the binary path to the archive first
|
||||
FileSys::Path path =
|
||||
FileSys::ConstructExtDataBinaryPath(static_cast<u32>(media_type), high, low);
|
||||
|
@ -246,16 +246,16 @@ ResultCode ArchiveManager::CreateExtSaveData(MediaType media_type, u32 high, u32
|
|||
|
||||
auto ext_savedata = static_cast<FileSys::ArchiveFactory_ExtSaveData*>(archive->second.get());
|
||||
|
||||
ResultCode result = ext_savedata->Format(path, format_info, program_id);
|
||||
Result result = ext_savedata->Format(path, format_info, program_id);
|
||||
if (result.IsError()) {
|
||||
return result;
|
||||
}
|
||||
|
||||
ext_savedata->WriteIcon(path, smdh_icon);
|
||||
return RESULT_SUCCESS;
|
||||
return ResultSuccess;
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::DeleteExtSaveData(MediaType media_type, u32 high, u32 low) {
|
||||
Result ArchiveManager::DeleteExtSaveData(MediaType media_type, u32 high, u32 low) {
|
||||
// Construct the binary path to the archive first
|
||||
FileSys::Path path =
|
||||
FileSys::ConstructExtDataBinaryPath(static_cast<u32>(media_type), high, low);
|
||||
|
@ -267,7 +267,7 @@ ResultCode ArchiveManager::DeleteExtSaveData(MediaType media_type, u32 high, u32
|
|||
media_type_directory = FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir);
|
||||
} else {
|
||||
LOG_ERROR(Service_FS, "Unsupported media type {}", media_type);
|
||||
return ResultCode(-1); // TODO(Subv): Find the right error code
|
||||
return ResultUnknown; // TODO(Subv): Find the right error code
|
||||
}
|
||||
|
||||
// Delete all directories (/user, /boss) and the icon file.
|
||||
|
@ -275,11 +275,11 @@ ResultCode ArchiveManager::DeleteExtSaveData(MediaType media_type, u32 high, u32
|
|||
FileSys::GetExtDataContainerPath(media_type_directory, media_type == MediaType::NAND);
|
||||
std::string extsavedata_path = FileSys::GetExtSaveDataPath(base_path, path);
|
||||
if (FileUtil::Exists(extsavedata_path) && !FileUtil::DeleteDirRecursively(extsavedata_path))
|
||||
return ResultCode(-1); // TODO(Subv): Find the right error code
|
||||
return RESULT_SUCCESS;
|
||||
return ResultUnknown; // TODO(Subv): Find the right error code
|
||||
return ResultSuccess;
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::DeleteSystemSaveData(u32 high, u32 low) {
|
||||
Result ArchiveManager::DeleteSystemSaveData(u32 high, u32 low) {
|
||||
// Construct the binary path to the archive first
|
||||
const FileSys::Path path = FileSys::ConstructSystemSaveDataBinaryPath(high, low);
|
||||
|
||||
|
@ -287,13 +287,13 @@ ResultCode ArchiveManager::DeleteSystemSaveData(u32 high, u32 low) {
|
|||
const std::string base_path = FileSys::GetSystemSaveDataContainerPath(nand_directory);
|
||||
const std::string systemsavedata_path = FileSys::GetSystemSaveDataPath(base_path, path);
|
||||
if (!FileUtil::DeleteDirRecursively(systemsavedata_path)) {
|
||||
return ResultCode(-1); // TODO(Subv): Find the right error code
|
||||
return ResultUnknown; // TODO(Subv): Find the right error code
|
||||
}
|
||||
|
||||
return RESULT_SUCCESS;
|
||||
return ResultSuccess;
|
||||
}
|
||||
|
||||
ResultCode ArchiveManager::CreateSystemSaveData(u32 high, u32 low) {
|
||||
Result ArchiveManager::CreateSystemSaveData(u32 high, u32 low) {
|
||||
// Construct the binary path to the archive first
|
||||
const FileSys::Path path = FileSys::ConstructSystemSaveDataBinaryPath(high, low);
|
||||
|
||||
|
@ -301,10 +301,10 @@ ResultCode ArchiveManager::CreateSystemSaveData(u32 high, u32 low) {
|
|||
const std::string base_path = FileSys::GetSystemSaveDataContainerPath(nand_directory);
|
||||
const std::string systemsavedata_path = FileSys::GetSystemSaveDataPath(base_path, path);
|
||||
if (!FileUtil::CreateFullPath(systemsavedata_path)) {
|
||||
return ResultCode(-1); // TODO(Subv): Find the right error code
|
||||
return ResultUnknown; // TODO(Subv): Find the right error code
|
||||
}
|
||||
|
||||
return RESULT_SUCCESS;
|
||||
return ResultSuccess;
|
||||
}
|
||||
|
||||
ResultVal<ArchiveResource> ArchiveManager::GetArchiveResource(MediaType media_type) const {
|
||||
|
|
|
@ -88,7 +88,7 @@ public:
|
|||
* Closes an archive
|
||||
* @param handle Handle to the archive to close
|
||||
*/
|
||||
ResultCode CloseArchive(ArchiveHandle handle);
|
||||
Result CloseArchive(ArchiveHandle handle);
|
||||
|
||||
/**
|
||||
* Open a File from an Archive
|
||||
|
@ -106,7 +106,7 @@ public:
|
|||
* @param path Path to the File inside of the Archive
|
||||
* @return Whether deletion succeeded
|
||||
*/
|
||||
ResultCode DeleteFileFromArchive(ArchiveHandle archive_handle, const FileSys::Path& path);
|
||||
Result DeleteFileFromArchive(ArchiveHandle archive_handle, const FileSys::Path& path);
|
||||
|
||||
/**
|
||||
* Rename a File between two Archives
|
||||
|
@ -116,10 +116,10 @@ public:
|
|||
* @param dest_path Path to the File inside of the destination Archive
|
||||
* @return Whether rename succeeded
|
||||
*/
|
||||
ResultCode RenameFileBetweenArchives(ArchiveHandle src_archive_handle,
|
||||
const FileSys::Path& src_path,
|
||||
ArchiveHandle dest_archive_handle,
|
||||
const FileSys::Path& dest_path);
|
||||
Result RenameFileBetweenArchives(ArchiveHandle src_archive_handle,
|
||||
const FileSys::Path& src_path,
|
||||
ArchiveHandle dest_archive_handle,
|
||||
const FileSys::Path& dest_path);
|
||||
|
||||
/**
|
||||
* Delete a Directory from an Archive
|
||||
|
@ -127,7 +127,7 @@ public:
|
|||
* @param path Path to the Directory inside of the Archive
|
||||
* @return Whether deletion succeeded
|
||||
*/
|
||||
ResultCode DeleteDirectoryFromArchive(ArchiveHandle archive_handle, const FileSys::Path& path);
|
||||
Result DeleteDirectoryFromArchive(ArchiveHandle archive_handle, const FileSys::Path& path);
|
||||
|
||||
/**
|
||||
* Delete a Directory and anything under it from an Archive
|
||||
|
@ -135,8 +135,8 @@ public:
|
|||
* @param path Path to the Directory inside of the Archive
|
||||
* @return Whether deletion succeeded
|
||||
*/
|
||||
ResultCode DeleteDirectoryRecursivelyFromArchive(ArchiveHandle archive_handle,
|
||||
const FileSys::Path& path);
|
||||
Result DeleteDirectoryRecursivelyFromArchive(ArchiveHandle archive_handle,
|
||||
const FileSys::Path& path);
|
||||
|
||||
/**
|
||||
* Create a File in an Archive
|
||||
|
@ -145,8 +145,8 @@ public:
|
|||
* @param file_size The size of the new file, filled with zeroes
|
||||
* @return File creation result code
|
||||
*/
|
||||
ResultCode CreateFileInArchive(ArchiveHandle archive_handle, const FileSys::Path& path,
|
||||
u64 file_size);
|
||||
Result CreateFileInArchive(ArchiveHandle archive_handle, const FileSys::Path& path,
|
||||
u64 file_size);
|
||||
|
||||
/**
|
||||
* Create a Directory from an Archive
|
||||
|
@ -154,7 +154,7 @@ public:
|
|||
* @param path Path to the Directory inside of the Archive
|
||||
* @return Whether creation of directory succeeded
|
||||
*/
|
||||
ResultCode CreateDirectoryFromArchive(ArchiveHandle archive_handle, const FileSys::Path& path);
|
||||
Result CreateDirectoryFromArchive(ArchiveHandle archive_handle, const FileSys::Path& path);
|
||||
|
||||
/**
|
||||
* Rename a Directory between two Archives
|
||||
|
@ -164,10 +164,10 @@ public:
|
|||
* @param dest_path Path to the Directory inside of the destination Archive
|
||||
* @return Whether rename succeeded
|
||||
*/
|
||||
ResultCode RenameDirectoryBetweenArchives(ArchiveHandle src_archive_handle,
|
||||
const FileSys::Path& src_path,
|
||||
ArchiveHandle dest_archive_handle,
|
||||
const FileSys::Path& dest_path);
|
||||
Result RenameDirectoryBetweenArchives(ArchiveHandle src_archive_handle,
|
||||
const FileSys::Path& src_path,
|
||||
ArchiveHandle dest_archive_handle,
|
||||
const FileSys::Path& dest_path);
|
||||
|
||||
/**
|
||||
* Open a Directory from an Archive
|
||||
|
@ -192,10 +192,10 @@ public:
|
|||
* @param format_info Format information about the new archive
|
||||
* @param path The path to the archive, if relevant.
|
||||
* @param program_id the program ID of the client that requests the operation
|
||||
* @return ResultCode 0 on success or the corresponding code on error
|
||||
* @return Result 0 on success or the corresponding code on error
|
||||
*/
|
||||
ResultCode FormatArchive(ArchiveIdCode id_code, const FileSys::ArchiveFormatInfo& format_info,
|
||||
const FileSys::Path& path, u64 program_id);
|
||||
Result FormatArchive(ArchiveIdCode id_code, const FileSys::ArchiveFormatInfo& format_info,
|
||||
const FileSys::Path& path, u64 program_id);
|
||||
|
||||
/**
|
||||
* Retrieves the format info about the archive of the specified type and path.
|
||||
|
@ -217,36 +217,35 @@ public:
|
|||
* @param smdh_icon the SMDH icon for this ExtSaveData
|
||||
* @param format_info Format information about the new archive
|
||||
* @param program_id the program ID of the client that requests the operation
|
||||
* @return ResultCode 0 on success or the corresponding code on error
|
||||
* @return Result 0 on success or the corresponding code on error
|
||||
*/
|
||||
ResultCode CreateExtSaveData(MediaType media_type, u32 high, u32 low,
|
||||
std::span<const u8> smdh_icon,
|
||||
const FileSys::ArchiveFormatInfo& format_info, u64 program_id);
|
||||
Result CreateExtSaveData(MediaType media_type, u32 high, u32 low, std::span<const u8> smdh_icon,
|
||||
const FileSys::ArchiveFormatInfo& format_info, u64 program_id);
|
||||
|
||||
/**
|
||||
* Deletes the SharedExtSaveData archive for the specified extdata ID
|
||||
* @param media_type The media type of the archive to delete (NAND / SDMC)
|
||||
* @param high The high word of the extdata id to delete
|
||||
* @param low The low word of the extdata id to delete
|
||||
* @return ResultCode 0 on success or the corresponding code on error
|
||||
* @return Result 0 on success or the corresponding code on error
|
||||
*/
|
||||
ResultCode DeleteExtSaveData(MediaType media_type, u32 high, u32 low);
|
||||
Result DeleteExtSaveData(MediaType media_type, u32 high, u32 low);
|
||||
|
||||
/**
|
||||
* Deletes the SystemSaveData archive folder for the specified save data id
|
||||
* @param high The high word of the SystemSaveData archive to delete
|
||||
* @param low The low word of the SystemSaveData archive to delete
|
||||
* @return ResultCode 0 on success or the corresponding code on error
|
||||
* @return Result 0 on success or the corresponding code on error
|
||||
*/
|
||||
ResultCode DeleteSystemSaveData(u32 high, u32 low);
|
||||
Result DeleteSystemSaveData(u32 high, u32 low);
|
||||
|
||||
/**
|
||||
* Creates the SystemSaveData archive folder for the specified save data id
|
||||
* @param high The high word of the SystemSaveData archive to create
|
||||
* @param low The low word of the SystemSaveData archive to create
|
||||
* @return ResultCode 0 on success or the corresponding code on error
|
||||
* @return Result 0 on success or the corresponding code on error
|
||||
*/
|
||||
ResultCode CreateSystemSaveData(u32 high, u32 low);
|
||||
Result CreateSystemSaveData(u32 high, u32 low);
|
||||
|
||||
/**
|
||||
* Returns capacity and free space information about the given media type.
|
||||
|
@ -266,8 +265,8 @@ private:
|
|||
* @param factory File system backend interface to the archive
|
||||
* @param id_code Id code used to access this type of archive
|
||||
*/
|
||||
ResultCode RegisterArchiveType(std::unique_ptr<FileSys::ArchiveFactory>&& factory,
|
||||
ArchiveIdCode id_code);
|
||||
Result RegisterArchiveType(std::unique_ptr<FileSys::ArchiveFactory>&& factory,
|
||||
ArchiveIdCode id_code);
|
||||
|
||||
/// Register all archive types
|
||||
void RegisterArchiveTypes();
|
||||
|
|
|
@ -51,7 +51,7 @@ void Directory::Read(Kernel::HLERequestContext& ctx) {
|
|||
buffer.Write(entries.data(), 0, read * sizeof(FileSys::Entry));
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(2, 2);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.Push(read);
|
||||
rb.PushMappedBuffer(buffer);
|
||||
}
|
||||
|
@ -62,7 +62,7 @@ void Directory::Close(Kernel::HLERequestContext& ctx) {
|
|||
backend->Close();
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
}
|
||||
|
||||
} // namespace Service::FS
|
||||
|
|
|
@ -86,7 +86,7 @@ void File::Read(Kernel::HLERequestContext& ctx) {
|
|||
rb.Push<u32>(0);
|
||||
} else {
|
||||
buffer.Write(*data, 0, *read);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.Push<u32>(static_cast<u32>(*read));
|
||||
}
|
||||
rb.PushMappedBuffer(buffer);
|
||||
|
@ -104,7 +104,7 @@ void File::Read(Kernel::HLERequestContext& ctx) {
|
|||
bool cache_ready;
|
||||
|
||||
// Output
|
||||
ResultCode ret{0};
|
||||
Result ret{0};
|
||||
Kernel::MappedBuffer* buffer;
|
||||
std::unique_ptr<u8*> data;
|
||||
size_t read_size;
|
||||
|
@ -130,7 +130,7 @@ void File::Read(Kernel::HLERequestContext& ctx) {
|
|||
async_data->ret = read.Code();
|
||||
async_data->read_size = 0;
|
||||
} else {
|
||||
async_data->ret = RESULT_SUCCESS;
|
||||
async_data->ret = ResultSuccess;
|
||||
async_data->read_size = *read;
|
||||
}
|
||||
|
||||
|
@ -157,7 +157,7 @@ void File::Read(Kernel::HLERequestContext& ctx) {
|
|||
rb.Push<u32>(0);
|
||||
} else {
|
||||
async_data->buffer->Write(*async_data->data, 0, async_data->read_size);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.Push<u32>(static_cast<u32>(async_data->read_size));
|
||||
}
|
||||
rb.PushMappedBuffer(*async_data->buffer);
|
||||
|
@ -180,7 +180,7 @@ void File::Write(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
// Subfiles can not be written to
|
||||
if (file->subfile) {
|
||||
rb.Push(FileSys::ERROR_UNSUPPORTED_OPEN_FLAGS);
|
||||
rb.Push(FileSys::ResultUnsupportedOpenFlags);
|
||||
rb.Push<u32>(0);
|
||||
rb.PushMappedBuffer(buffer);
|
||||
return;
|
||||
|
@ -197,7 +197,7 @@ void File::Write(Kernel::HLERequestContext& ctx) {
|
|||
rb.Push(written.Code());
|
||||
rb.Push<u32>(0);
|
||||
} else {
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.Push<u32>(static_cast<u32>(*written));
|
||||
}
|
||||
rb.PushMappedBuffer(buffer);
|
||||
|
@ -209,7 +209,7 @@ void File::GetSize(Kernel::HLERequestContext& ctx) {
|
|||
const FileSessionSlot* file = GetSessionData(ctx.Session());
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(3, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.Push<u64>(file->size);
|
||||
}
|
||||
|
||||
|
@ -223,13 +223,13 @@ void File::SetSize(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
// SetSize can not be called on subfiles.
|
||||
if (file->subfile) {
|
||||
rb.Push(FileSys::ERROR_UNSUPPORTED_OPEN_FLAGS);
|
||||
rb.Push(FileSys::ResultUnsupportedOpenFlags);
|
||||
return;
|
||||
}
|
||||
|
||||
file->size = size;
|
||||
backend->SetSize(size);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
}
|
||||
|
||||
void File::Close(Kernel::HLERequestContext& ctx) {
|
||||
|
@ -242,7 +242,7 @@ void File::Close(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
backend->Close();
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
}
|
||||
|
||||
void File::Flush(Kernel::HLERequestContext& ctx) {
|
||||
|
@ -254,12 +254,12 @@ void File::Flush(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
// Subfiles can not be flushed.
|
||||
if (file->subfile) {
|
||||
rb.Push(FileSys::ERROR_UNSUPPORTED_OPEN_FLAGS);
|
||||
rb.Push(FileSys::ResultUnsupportedOpenFlags);
|
||||
return;
|
||||
}
|
||||
|
||||
backend->Flush();
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
}
|
||||
|
||||
void File::SetPriority(Kernel::HLERequestContext& ctx) {
|
||||
|
@ -269,7 +269,7 @@ void File::SetPriority(Kernel::HLERequestContext& ctx) {
|
|||
file->priority = rp.Pop<u32>();
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
}
|
||||
|
||||
void File::GetPriority(Kernel::HLERequestContext& ctx) {
|
||||
|
@ -277,7 +277,7 @@ void File::GetPriority(Kernel::HLERequestContext& ctx) {
|
|||
const FileSessionSlot* file = GetSessionData(ctx.Session());
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.Push(file->priority);
|
||||
}
|
||||
|
||||
|
@ -298,7 +298,7 @@ void File::OpenLinkFile(Kernel::HLERequestContext& ctx) {
|
|||
slot->size = backend->GetSize();
|
||||
slot->subfile = false;
|
||||
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.PushMoveObjects(client);
|
||||
}
|
||||
|
||||
|
@ -313,21 +313,21 @@ void File::OpenSubFile(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
if (original_file->subfile) {
|
||||
// OpenSubFile can not be called on a file which is already as subfile
|
||||
rb.Push(FileSys::ERROR_UNSUPPORTED_OPEN_FLAGS);
|
||||
rb.Push(FileSys::ResultUnsupportedOpenFlags);
|
||||
return;
|
||||
}
|
||||
|
||||
if (offset < 0 || size < 0) {
|
||||
rb.Push(FileSys::ERR_WRITE_BEYOND_END);
|
||||
rb.Push(FileSys::ResultWriteBeyondEnd);
|
||||
return;
|
||||
}
|
||||
|
||||
std::size_t end = offset + size;
|
||||
|
||||
// TODO(Subv): Check for overflow and return ERR_WRITE_BEYOND_END
|
||||
// TODO(Subv): Check for overflow and return ResultWriteBeyondEnd
|
||||
|
||||
if (end > original_file->size) {
|
||||
rb.Push(FileSys::ERR_WRITE_BEYOND_END);
|
||||
rb.Push(FileSys::ResultWriteBeyondEnd);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -342,7 +342,7 @@ void File::OpenSubFile(Kernel::HLERequestContext& ctx) {
|
|||
slot->size = size;
|
||||
slot->subfile = true;
|
||||
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.PushMoveObjects(client);
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ void FS_USER::Initialize(Kernel::HLERequestContext& ctx) {
|
|||
slot->program_id = system.Kernel().GetProcessById(pid)->codeset->program_id;
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
}
|
||||
|
||||
void FS_USER::OpenFile(Kernel::HLERequestContext& ctx) {
|
||||
|
@ -349,7 +349,7 @@ void FS_USER::ControlArchive(Kernel::HLERequestContext& ctx) {
|
|||
archive_handle, action, input_size, output_size);
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
}
|
||||
|
||||
void FS_USER::CloseArchive(Kernel::HLERequestContext& ctx) {
|
||||
|
@ -363,14 +363,14 @@ void FS_USER::CloseArchive(Kernel::HLERequestContext& ctx) {
|
|||
void FS_USER::IsSdmcDetected(Kernel::HLERequestContext& ctx) {
|
||||
IPC::RequestParser rp(ctx);
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.Push(Settings::values.use_virtual_sd.GetValue());
|
||||
}
|
||||
|
||||
void FS_USER::IsSdmcWriteable(Kernel::HLERequestContext& ctx) {
|
||||
IPC::RequestParser rp(ctx);
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
// If the SD isn't enabled, it can't be writeable...else, stubbed true
|
||||
rb.Push(Settings::values.use_virtual_sd.GetValue());
|
||||
LOG_DEBUG(Service_FS, " (STUBBED)");
|
||||
|
@ -398,7 +398,7 @@ void FS_USER::FormatSaveData(Kernel::HLERequestContext& ctx) {
|
|||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||
if (archive_id != FS::ArchiveIdCode::SaveData) {
|
||||
LOG_ERROR(Service_FS, "tried to format an archive different than SaveData, {}", archive_id);
|
||||
rb.Push(FileSys::ERROR_INVALID_PATH);
|
||||
rb.Push(FileSys::ResultInvalidPath);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -471,7 +471,7 @@ void FS_USER::GetSdmcArchiveResource(Kernel::HLERequestContext& ctx) {
|
|||
}
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(5, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.PushRaw(*resource);
|
||||
}
|
||||
|
||||
|
@ -488,7 +488,7 @@ void FS_USER::GetNandArchiveResource(Kernel::HLERequestContext& ctx) {
|
|||
}
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(5, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.PushRaw(*resource);
|
||||
}
|
||||
|
||||
|
@ -544,7 +544,7 @@ void FS_USER::DeleteExtSaveData(Kernel::HLERequestContext& ctx) {
|
|||
void FS_USER::CardSlotIsInserted(Kernel::HLERequestContext& ctx) {
|
||||
IPC::RequestParser rp(ctx);
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.Push(false);
|
||||
LOG_WARNING(Service_FS, "(STUBBED) called");
|
||||
}
|
||||
|
@ -614,7 +614,7 @@ void FS_USER::InitializeWithSdkVersion(Kernel::HLERequestContext& ctx) {
|
|||
LOG_WARNING(Service_FS, "(STUBBED) called, version: 0x{:08X}", version);
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
}
|
||||
|
||||
void FS_USER::SetPriority(Kernel::HLERequestContext& ctx) {
|
||||
|
@ -623,7 +623,7 @@ void FS_USER::SetPriority(Kernel::HLERequestContext& ctx) {
|
|||
priority = rp.Pop<u32>();
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
|
||||
LOG_DEBUG(Service_FS, "called priority=0x{:X}", priority);
|
||||
}
|
||||
|
@ -636,7 +636,7 @@ void FS_USER::GetPriority(Kernel::HLERequestContext& ctx) {
|
|||
}
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.Push(priority);
|
||||
|
||||
LOG_DEBUG(Service_FS, "called priority=0x{:X}", priority);
|
||||
|
@ -656,7 +656,7 @@ void FS_USER::GetArchiveResource(Kernel::HLERequestContext& ctx) {
|
|||
}
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(5, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.PushRaw(*resource);
|
||||
}
|
||||
|
||||
|
@ -699,12 +699,12 @@ void FS_USER::GetProductInfo(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
const auto product_info = GetProductInfo(process_id);
|
||||
if (!product_info.has_value()) {
|
||||
rb.Push(ResultCode(FileSys::ErrCodes::ArchiveNotMounted, ErrorModule::FS,
|
||||
ErrorSummary::NotFound, ErrorLevel::Status));
|
||||
rb.Push(Result(FileSys::ErrCodes::ArchiveNotMounted, ErrorModule::FS,
|
||||
ErrorSummary::NotFound, ErrorLevel::Status));
|
||||
return;
|
||||
}
|
||||
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.PushRaw<ProductInfo>(product_info.value());
|
||||
}
|
||||
|
||||
|
@ -737,7 +737,7 @@ void FS_USER::GetProgramLaunchInfo(Kernel::HLERequestContext& ctx) {
|
|||
program_info.media_type = MediaType::SDMC;
|
||||
}
|
||||
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.PushRaw<ProgramInfo>(program_info);
|
||||
}
|
||||
|
||||
|
@ -801,7 +801,7 @@ void FS_USER::GetSpecialContentIndex(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
if (index.Succeeded()) {
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.Push(index.Unwrap());
|
||||
} else {
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||
|
@ -812,7 +812,7 @@ void FS_USER::GetSpecialContentIndex(Kernel::HLERequestContext& ctx) {
|
|||
void FS_USER::GetNumSeeds(Kernel::HLERequestContext& ctx) {
|
||||
IPC::RequestParser rp(ctx);
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
rb.Push<u32>(FileSys::GetSeedCount());
|
||||
}
|
||||
|
||||
|
@ -822,7 +822,7 @@ void FS_USER::AddSeed(Kernel::HLERequestContext& ctx) {
|
|||
FileSys::Seed::Data seed{rp.PopRaw<FileSys::Seed::Data>()};
|
||||
FileSys::AddSeed({title_id, seed, {}});
|
||||
IPC::RequestBuilder rb{rp.MakeBuilder(1, 0)};
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
}
|
||||
|
||||
void FS_USER::ObsoletedSetSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
|
||||
|
@ -841,7 +841,7 @@ void FS_USER::ObsoletedSetSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
}
|
||||
|
||||
void FS_USER::ObsoletedGetSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
|
||||
|
@ -857,7 +857,7 @@ void FS_USER::ObsoletedGetSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(4, 0);
|
||||
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
|
||||
// TODO: Implement Secure Value Lookup & Generation
|
||||
|
||||
|
@ -877,7 +877,7 @@ void FS_USER::SetThisSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
}
|
||||
|
||||
void FS_USER::GetThisSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
|
||||
|
@ -888,7 +888,7 @@ void FS_USER::GetThisSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(5, 0);
|
||||
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
|
||||
// TODO: Implement Secure Value Lookup & Generation
|
||||
|
||||
|
@ -913,7 +913,7 @@ void FS_USER::SetSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
}
|
||||
|
||||
void FS_USER::GetSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
|
||||
|
@ -926,7 +926,7 @@ void FS_USER::GetSaveDataSecureValue(Kernel::HLERequestContext& ctx) {
|
|||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(5, 0);
|
||||
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
rb.Push(ResultSuccess);
|
||||
|
||||
// TODO: Implement Secure Value Lookup & Generation
|
||||
|
||||
|
@ -966,7 +966,7 @@ ResultVal<u16> FS_USER::GetSpecialContentIndexFromGameCard(u64 title_id, Special
|
|||
if (type > SpecialContentType::DLPChild) {
|
||||
// Maybe type 4 is New 3DS update/partition 6 but this needs more research
|
||||
// TODO(B3N30): Find correct result code
|
||||
return ResultCode(-1);
|
||||
return ResultUnknown;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
|
@ -985,7 +985,7 @@ ResultVal<u16> FS_USER::GetSpecialContentIndexFromTMD(MediaType media_type, u64
|
|||
SpecialContentType type) {
|
||||
if (type > SpecialContentType::DLPChild) {
|
||||
// TODO(B3N30): Find correct result code
|
||||
return ResultCode(-1);
|
||||
return ResultUnknown;
|
||||
}
|
||||
|
||||
std::string tmd_path = AM::GetTitleMetadataPath(media_type, title_id);
|
||||
|
@ -993,7 +993,7 @@ ResultVal<u16> FS_USER::GetSpecialContentIndexFromTMD(MediaType media_type, u64
|
|||
FileSys::TitleMetadata tmd;
|
||||
if (tmd.Load(tmd_path) != Loader::ResultStatus::Success || type == SpecialContentType::Update) {
|
||||
// TODO(B3N30): Find correct result code
|
||||
return ResultCode(-1);
|
||||
return ResultUnknown;
|
||||
}
|
||||
|
||||
// TODO(B3N30): Does real 3DS check if content exists in TMD?
|
||||
|
@ -1007,7 +1007,7 @@ ResultVal<u16> FS_USER::GetSpecialContentIndexFromTMD(MediaType media_type, u64
|
|||
ASSERT(false);
|
||||
}
|
||||
|
||||
return ResultCode(-1);
|
||||
return ResultUnknown;
|
||||
}
|
||||
|
||||
FS_USER::FS_USER(Core::System& system)
|
||||
|
|
|
@ -72,8 +72,8 @@ public:
|
|||
if (info != program_info_map.end()) {
|
||||
return info->second;
|
||||
} else {
|
||||
return ResultCode(FileSys::ErrCodes::ArchiveNotMounted, ErrorModule::FS,
|
||||
ErrorSummary::NotFound, ErrorLevel::Status);
|
||||
return Result(FileSys::ErrCodes::ArchiveNotMounted, ErrorModule::FS,
|
||||
ErrorSummary::NotFound, ErrorLevel::Status);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue