diff --git a/src/OpenAL/Extensions/Silk.NET.OpenAL.Extensions.Creative/EnumerateAll.cs b/src/OpenAL/Extensions/Silk.NET.OpenAL.Extensions.Creative/EnumerateAll.cs index ca9c40d7c6..6b4678df86 100644 --- a/src/OpenAL/Extensions/Silk.NET.OpenAL.Extensions.Creative/EnumerateAll.cs +++ b/src/OpenAL/Extensions/Silk.NET.OpenAL.Extensions.Creative/EnumerateAll.cs @@ -3,7 +3,8 @@ using System; using System.Collections.Generic; -using System.Runtime.InteropServices; +using System.Linq; +using System.Text; using Silk.NET.Core.Attributes; using Silk.NET.Core.Contexts; using Silk.NET.Core.Native; @@ -36,24 +37,18 @@ public IEnumerable GetStringList(GetEnumerateAllContextStringList param) unsafe { var result = GetStringList(null, param); - if (result == (byte*) 0) - { - return new List(); - } + if (result is null) return Enumerable.Empty(); var strings = new List(); var currentPos = result; - while (true) + while (*currentPos != '\0') { - var currentString = Marshal.PtrToStringAnsi((nint) currentPos); - if (string.IsNullOrEmpty(currentString)) - { - break; - } + var currentLength = (int) SilkMarshal.StringLength((nint) currentPos, NativeStringEncoding.UTF8); + var currentString = Encoding.UTF8.GetString(currentPos, currentLength); strings.Add(currentString); - currentPos += currentString.Length + 1; + currentPos += currentLength + 1; } return strings; diff --git a/src/OpenAL/Extensions/Silk.NET.OpenAL.Extensions.EXT/CaptureEnumerationEnumeration.cs b/src/OpenAL/Extensions/Silk.NET.OpenAL.Extensions.EXT/CaptureEnumerationEnumeration.cs index 2152f04264..e38159a4e9 100644 --- a/src/OpenAL/Extensions/Silk.NET.OpenAL.Extensions.EXT/CaptureEnumerationEnumeration.cs +++ b/src/OpenAL/Extensions/Silk.NET.OpenAL.Extensions.EXT/CaptureEnumerationEnumeration.cs @@ -3,7 +3,8 @@ using System; using System.Collections.Generic; -using System.Runtime.InteropServices; +using System.Linq; +using System.Text; using Silk.NET.Core.Attributes; using Silk.NET.Core.Contexts; using Silk.NET.Core.Native; @@ -37,24 +38,18 @@ public IEnumerable GetStringList(GetCaptureContextStringList param) unsafe { var result = GetStringList(null, param); - if (result == (byte*) 0) - { - return new List(); - } + if (result is null) return Enumerable.Empty(); var strings = new List(); - + var currentPos = result; - while (true) + while (*currentPos != '\0') { - var currentString = Marshal.PtrToStringAnsi((nint) currentPos); - if (string.IsNullOrEmpty(currentString)) - { - break; - } + var currentLength = (int) SilkMarshal.StringLength((nint) currentPos, NativeStringEncoding.UTF8); + var currentString = Encoding.UTF8.GetString(currentPos, currentLength); strings.Add(currentString); - currentPos += currentString.Length + 1; + currentPos += currentLength + 1; } return strings; diff --git a/src/OpenAL/Extensions/Silk.NET.OpenAL.Extensions.Enumeration/Enumeration.cs b/src/OpenAL/Extensions/Silk.NET.OpenAL.Extensions.Enumeration/Enumeration.cs index 5293e90860..3b2e301ee4 100644 --- a/src/OpenAL/Extensions/Silk.NET.OpenAL.Extensions.Enumeration/Enumeration.cs +++ b/src/OpenAL/Extensions/Silk.NET.OpenAL.Extensions.Enumeration/Enumeration.cs @@ -3,7 +3,8 @@ using System; using System.Collections.Generic; -using System.Runtime.InteropServices; +using System.Linq; +using System.Text; using Silk.NET.Core.Attributes; using Silk.NET.Core.Contexts; using Silk.NET.Core.Native; @@ -36,24 +37,18 @@ public IEnumerable GetStringList(GetEnumerationContextStringList param) unsafe { var result = GetStringList(null, param); - if (result == (byte*) 0) - { - return new List(); - } + if (result is null) return Enumerable.Empty(); var strings = new List(); var currentPos = result; - while (true) + while (*currentPos != '\0') { - var currentString = Marshal.PtrToStringAnsi((nint) currentPos); - if (string.IsNullOrEmpty(currentString)) - { - break; - } + var currentLength = (int) SilkMarshal.StringLength((nint) currentPos, NativeStringEncoding.UTF8); + var currentString = Encoding.UTF8.GetString(currentPos, currentLength); strings.Add(currentString); - currentPos += currentString.Length + 1; + currentPos += currentLength + 1; } return strings;