mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	Merge pull request #6886 from Morph1984/error-code-64
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