applet_error: Fix 64-bit error code conversion
This commit is contained in:
		| @@ -16,6 +16,30 @@ | ||||
|  | ||||
| namespace Service::AM::Applets { | ||||
|  | ||||
| struct ErrorCode { | ||||
|     u32 error_category{}; | ||||
|     u32 error_number{}; | ||||
|  | ||||
|     static constexpr ErrorCode FromU64(u64 error_code) { | ||||
|         return { | ||||
|             .error_category{static_cast<u32>(error_code >> 32)}, | ||||
|             .error_number{static_cast<u32>(error_code & 0xFFFFFFFF)}, | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     static constexpr ErrorCode FromResultCode(ResultCode result) { | ||||
|         return { | ||||
|             .error_category{2000 + static_cast<u32>(result.module.Value())}, | ||||
|             .error_number{result.description.Value()}, | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     constexpr ResultCode ToResultCode() const { | ||||
|         return ResultCode{static_cast<ErrorModule>(error_category - 2000), error_number}; | ||||
|     } | ||||
| }; | ||||
| static_assert(sizeof(ErrorCode) == 0x8, "ErrorCode has incorrect size."); | ||||
|  | ||||
| #pragma pack(push, 4) | ||||
| struct ShowError { | ||||
|     u8 mode; | ||||
| @@ -76,12 +100,7 @@ void CopyArgumentData(const std::vector<u8>& data, T& variable) { | ||||
| } | ||||
|  | ||||
| ResultCode Decode64BitError(u64 error) { | ||||
|     const auto description = (error >> 32) & 0x1FFF; | ||||
|     auto module = error & 0x3FF; | ||||
|     if (module >= 2000) | ||||
|         module -= 2000; | ||||
|     module &= 0x1FF; | ||||
|     return {static_cast<ErrorModule>(module), static_cast<u32>(description)}; | ||||
|     return ErrorCode::FromU64(error).ToResultCode(); | ||||
| } | ||||
|  | ||||
| } // Anonymous namespace | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Morph
					Morph