From 4299ac842a02ad6d0f734bbf1307cd7abcadac10 Mon Sep 17 00:00:00 2001 From: TianZer <41182852+TianZerL@users.noreply.github.com> Date: Sat, 4 May 2024 21:37:13 +0800 Subject: [PATCH] Fix compilation errors on unsupported platforms, make it work on UWP (#103) --- ruapu.h | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/ruapu.h b/ruapu.h index 8dcdf56..f6e565d 100644 --- a/ruapu.h +++ b/ruapu.h @@ -19,34 +19,23 @@ const char* const* ruapu_rua(); #ifdef RUAPU_IMPLEMENTATION +#include + +typedef void (*ruapu_some_inst)(); + #if defined _WIN32 #include #include -#include -#if WINAPI_FAMILY == WINAPI_FAMILY_APP -// uwp does not support veh :( -#if defined (_MSC_VER) -#pragma message("warning: ruapu does not support UWP yet.") -#else -#warning ruapu does not support UWP yet. -#endif -static int ruapu_detect_isa(const void* some_inst) -{ - (void)some_inst; - return 0; -} -#else // WINAPI_FAMILY == WINAPI_FAMILY_APP -typedef const void* ruapu_some_inst; #if defined (_MSC_VER) // MSVC -static int ruapu_detect_isa(const void* some_inst) +static int ruapu_detect_isa(ruapu_some_inst some_inst) { int g_ruapu_sigill_caught = 0; __try { - ((void (*)())some_inst)(); + some_inst(); } __except (GetExceptionCode() == EXCEPTION_ILLEGAL_INSTRUCTION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) @@ -71,7 +60,7 @@ static LONG CALLBACK ruapu_catch_sigill(struct _EXCEPTION_POINTERS* ExceptionInf return EXCEPTION_CONTINUE_SEARCH; } -static int ruapu_detect_isa(const void* some_inst) +static int ruapu_detect_isa(ruapu_some_inst some_inst) { g_ruapu_sigill_caught = 0; @@ -79,26 +68,22 @@ static int ruapu_detect_isa(const void* some_inst) if (setjmp(g_ruapu_jmpbuf) == 0) { - ((void (*)())some_inst)(); + some_inst(); } RemoveVectoredExceptionHandler(eh); return g_ruapu_sigill_caught ? 0 : 1; } -#endif #endif // WINAPI_FAMILY == WINAPI_FAMILY_APP #elif defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __DragonFly__ || defined __sun__ #include #include -#include static int g_ruapu_sigill_caught = 0; static sigjmp_buf g_ruapu_jmpbuf; -typedef void (*ruapu_some_inst)(); - static void ruapu_catch_sigill(int signo, siginfo_t* si, void* data) { (void)signo; @@ -131,7 +116,6 @@ static int ruapu_detect_isa(ruapu_some_inst some_inst) #elif defined __SYTERKIT__ -typedef void (*ruapu_some_inst)(); #include static int g_ruapu_sigill_caught = 0; @@ -358,7 +342,7 @@ struct ruapu_isa_entry ruapu_some_inst inst; }; -#define RUAPU_ISAENTRY(isa) { #isa, (ruapu_some_inst)ruapu_some_##isa }, +#define RUAPU_ISAENTRY(isa) { #isa, (ruapu_some_inst)(void*)ruapu_some_##isa }, struct ruapu_isa_entry g_ruapu_isa_map[] = {