hook/hr.c: Split out hr_to_win32_error()

This commit is contained in:
Decaf Code
2019-09-04 13:29:25 -04:00
parent 8d2a67f64d
commit 16e187651e
2 changed files with 21 additions and 17 deletions
+18 -17
View File
@@ -4,29 +4,30 @@
#include "hook/hr.h"
void hr_propagate_win32_(HRESULT hr)
uint32_t hr_to_win32_error(HRESULT hr)
{
uint32_t result;
if (SUCCEEDED(hr)) {
result = ERROR_SUCCESS;
return ERROR_SUCCESS;
} else if (HRESULT_FACILITY(hr) == FACILITY_WIN32) {
result = HRESULT_CODE(hr);
return HRESULT_CODE(hr);
} else {
switch (hr) {
case E_ABORT: result = ERROR_OPERATION_ABORTED; break;
case E_ACCESSDENIED: result = ERROR_ACCESS_DENIED; break;
case E_FAIL: result = ERROR_GEN_FAILURE; break;
case E_HANDLE: result = ERROR_INVALID_HANDLE; break;
case E_INVALIDARG: result = ERROR_INVALID_PARAMETER; break;
case E_NOINTERFACE: result = ERROR_INVALID_FUNCTION; break;
case E_NOTIMPL: result = ERROR_NOT_SUPPORTED; break;
case E_OUTOFMEMORY: result = ERROR_OUTOFMEMORY; break;
case E_POINTER: result = ERROR_INVALID_ADDRESS; break;
case E_UNEXPECTED: result = ERROR_INTERNAL_ERROR; break;
default: result = ERROR_INTERNAL_ERROR; break;
case E_ABORT: return ERROR_OPERATION_ABORTED;
case E_ACCESSDENIED: return ERROR_ACCESS_DENIED;
case E_FAIL: return ERROR_GEN_FAILURE;
case E_HANDLE: return ERROR_INVALID_HANDLE;
case E_INVALIDARG: return ERROR_INVALID_PARAMETER;
case E_NOINTERFACE: return ERROR_INVALID_FUNCTION;
case E_NOTIMPL: return ERROR_NOT_SUPPORTED;
case E_OUTOFMEMORY: return ERROR_OUTOFMEMORY;
case E_POINTER: return ERROR_INVALID_ADDRESS;
case E_UNEXPECTED: return ERROR_INTERNAL_ERROR;
default: return ERROR_INTERNAL_ERROR;
}
}
}
SetLastError(result);
void hr_propagate_win32_(HRESULT hr)
{
SetLastError(hr_to_win32_error(hr));
}
+3
View File
@@ -2,6 +2,9 @@
#include <windows.h>
#include <stdint.h>
#define hr_propagate_win32(hr, r) (hr_propagate_win32_(hr), r)
uint32_t hr_to_win32_error(HRESULT hr);
void hr_propagate_win32_(HRESULT hr);