From f04faca08ab56eb17614456c166cad2b9424f5e5 Mon Sep 17 00:00:00 2001 From: mullerj Date: Sun, 25 Aug 2024 13:25:13 -0400 Subject: [PATCH] Updated NormFile.Name to use stackalloc (#37) --- src/dotnet/src/Mil.Navy.Nrl.Norm/NormFile.cs | 23 ++++++-------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/dotnet/src/Mil.Navy.Nrl.Norm/NormFile.cs b/src/dotnet/src/Mil.Navy.Nrl.Norm/NormFile.cs index 7a26825..954e084 100644 --- a/src/dotnet/src/Mil.Navy.Nrl.Norm/NormFile.cs +++ b/src/dotnet/src/Mil.Navy.Nrl.Norm/NormFile.cs @@ -25,28 +25,19 @@ namespace Mil.Navy.Nrl.Norm /// The name of the file. /// /// Thrown when failed to get file name. - public string Name + public unsafe string Name { get { - var buffer = new byte[FILENAME_MAX]; - var bufferHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned); - string? name; + var buffer = stackalloc byte[FILENAME_MAX]; + var bufferPtr = (nint)buffer; - try + if (!NormFileGetName(_handle, bufferPtr, FILENAME_MAX)) { - var bufferPtr = bufferHandle.AddrOfPinnedObject(); - if (!NormFileGetName(_handle, bufferPtr, FILENAME_MAX)) - { - throw new IOException("Failed to get file name"); - } - name = Marshal.PtrToStringAnsi(bufferPtr); - } - finally - { - bufferHandle.Free(); + throw new IOException("Failed to get file name"); } - + var name = Marshal.PtrToStringAnsi(bufferPtr); + return name ?? string.Empty; } }