From 06226e78cf53ec34cfbabfcb5d1d6498f6e525ac Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Mon, 29 Aug 2022 15:34:44 -0700 Subject: [PATCH] add way to obtain error message in ILinkedLibManager, use it to display an error code for init lib checks --- src/BizHawk.Client.EmuHawk/Program.cs | 2 +- src/BizHawk.Common/OSTailoredCode.cs | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/BizHawk.Client.EmuHawk/Program.cs b/src/BizHawk.Client.EmuHawk/Program.cs index 571af660ce..8e1d17a0de 100644 --- a/src/BizHawk.Client.EmuHawk/Program.cs +++ b/src/BizHawk.Client.EmuHawk/Program.cs @@ -38,7 +38,7 @@ namespace BizHawk.Client.EmuHawk var p = OSTC.LinkedLibManager.LoadOrZero(dllToLoad); if (p == IntPtr.Zero) { - using (var box = new ExceptionBox($"EmuHawk needs {desc} in order to run! See the readme on GitHub for more info. (EmuHawk will now close.)")) box.ShowDialog(); + using (var box = new ExceptionBox($"EmuHawk needs {desc} in order to run! See the readme on GitHub for more info. (EmuHawk will now close.) Internal error message: {OSTC.LinkedLibManager.GetErrorMessage()}")) box.ShowDialog(); Process.GetCurrentProcess().Kill(); return; } diff --git a/src/BizHawk.Common/OSTailoredCode.cs b/src/BizHawk.Common/OSTailoredCode.cs index 9044784df2..eec8a48fba 100644 --- a/src/BizHawk.Common/OSTailoredCode.cs +++ b/src/BizHawk.Common/OSTailoredCode.cs @@ -91,6 +91,8 @@ namespace BizHawk.Common /// could not find library IntPtr LoadOrThrow(string dllToLoad); + + string GetErrorMessage(); } private class UnixMonoLLManager : ILinkedLibManager @@ -128,6 +130,12 @@ namespace BizHawk.Common return ret != IntPtr.Zero ? ret : throw new InvalidOperationException($"got null pointer from {nameof(dlopen)}, error: {Marshal.PtrToStringAnsi(dlerror())}"); } + public string GetErrorMessage() + { + var errCharPtr = dlerror(); + return errCharPtr == IntPtr.Zero ? "No error present" : Marshal.PtrToStringAnsi(errCharPtr); + } + private const int RTLD_NOW = 2; } @@ -163,7 +171,9 @@ namespace BizHawk.Common { var ret = LoadOrZero(dllToLoad); return ret != IntPtr.Zero ? ret : throw new InvalidOperationException($"got null pointer from {nameof(LoadLibrary)}, error code: {GetLastError()}"); - } + } + + public string GetErrorMessage() => $"Error Code 0x{GetLastError():X8}"; } public enum DistinctOS : byte