From e47383a4fab4e5704e3a3f6035f3bad2f7de2394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 24 Apr 2016 20:49:24 +0200 Subject: [PATCH 1/3] Fix NREs in QueryDevices by bailing out early. --- OpenRA.Platforms.Default/OpenAlSoundEngine.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/OpenRA.Platforms.Default/OpenAlSoundEngine.cs b/OpenRA.Platforms.Default/OpenAlSoundEngine.cs index 65f56f9a0e..711738e361 100644 --- a/OpenRA.Platforms.Default/OpenAlSoundEngine.cs +++ b/OpenRA.Platforms.Default/OpenAlSoundEngine.cs @@ -56,6 +56,12 @@ namespace OpenRA.Platforms.Default var devices = new List(); var next = ALC10.alcGetString(IntPtr.Zero, type); + if (next == IntPtr.Zero || AL10.alGetError() != AL10.AL_NO_ERROR) + { + Log.Write("sound", "Failed to query OpenAL device list using {0}", label); + return new string[] { }; + } + do { var str = Marshal.PtrToStringAnsi(next); @@ -63,12 +69,6 @@ namespace OpenRA.Platforms.Default devices.Add(str); } while (Marshal.ReadByte(next) != 0); - if (AL10.alGetError() != AL10.AL_NO_ERROR) - { - Log.Write("sound", "Failed to query OpenAL device list using {0}", label); - return new string[] { }; - } - return devices.ToArray(); } From 1df5e556c61c9dd61f50a137c72267eb0a7420d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Fri, 20 May 2016 21:22:10 +0200 Subject: [PATCH 2/3] Auto-detect UTF8 instead of assuming ANSI for device names. --- OpenRA.Platforms.Default/OpenAlSoundEngine.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenRA.Platforms.Default/OpenAlSoundEngine.cs b/OpenRA.Platforms.Default/OpenAlSoundEngine.cs index 711738e361..56d0e8faf1 100644 --- a/OpenRA.Platforms.Default/OpenAlSoundEngine.cs +++ b/OpenRA.Platforms.Default/OpenAlSoundEngine.cs @@ -64,7 +64,7 @@ namespace OpenRA.Platforms.Default do { - var str = Marshal.PtrToStringAnsi(next); + var str = Marshal.PtrToStringAuto(next); next += str.Length + 1; devices.Add(str); } while (Marshal.ReadByte(next) != 0); From f22bc68d948531b90a7e9ce9dc6f93e021007836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Fri, 20 May 2016 21:19:09 +0200 Subject: [PATCH 3/3] Count the string length in the system codepage. --- OpenRA.Platforms.Default/OpenAlSoundEngine.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OpenRA.Platforms.Default/OpenAlSoundEngine.cs b/OpenRA.Platforms.Default/OpenAlSoundEngine.cs index 56d0e8faf1..5f76074ea7 100644 --- a/OpenRA.Platforms.Default/OpenAlSoundEngine.cs +++ b/OpenRA.Platforms.Default/OpenAlSoundEngine.cs @@ -13,6 +13,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; +using System.Text; using OpenAL; namespace OpenRA.Platforms.Default @@ -65,7 +66,7 @@ namespace OpenRA.Platforms.Default do { var str = Marshal.PtrToStringAuto(next); - next += str.Length + 1; + next += UnicodeEncoding.Default.GetByteCount(str) + 1; devices.Add(str); } while (Marshal.ReadByte(next) != 0);