diff --git a/Penumbra/Interop/Loader/ResourceLoader.Replacement.cs b/Penumbra/Interop/Loader/ResourceLoader.Replacement.cs index b02cfff6..89237ff7 100644 --- a/Penumbra/Interop/Loader/ResourceLoader.Replacement.cs +++ b/Penumbra/Interop/Loader/ResourceLoader.Replacement.cs @@ -182,7 +182,7 @@ public unsafe partial class ResourceLoader return ReadSqPackHook.Original( resourceManager, fileDescriptor, priority, isSync ); } - if( !Utf8GamePath.FromSpan( fileDescriptor->ResourceHandle->FileNameSpan(), out var gamePath, false ) || gamePath.Length == 0 ) + if( !fileDescriptor->ResourceHandle->GamePath(out var gamePath) || gamePath.Length == 0 ) { return ReadSqPackHook.Original( resourceManager, fileDescriptor, priority, isSync ); } diff --git a/Penumbra/Interop/Structs/ResourceHandle.cs b/Penumbra/Interop/Structs/ResourceHandle.cs index 59b4b942..77c212ef 100644 --- a/Penumbra/Interop/Structs/ResourceHandle.cs +++ b/Penumbra/Interop/Structs/ResourceHandle.cs @@ -3,6 +3,8 @@ using System.Runtime.InteropServices; using FFXIVClientStructs.FFXIV.Client.System.Resource; using Penumbra.GameData; using Penumbra.GameData.Enums; +using Penumbra.String; +using Penumbra.String.Classes; namespace Penumbra.Interop.Structs; @@ -40,7 +42,7 @@ public unsafe struct ResourceHandle public const int SsoSize = 15; - public byte* FileName() + public byte* FileNamePtr() { if( FileNameLength > SsoSize ) { @@ -53,8 +55,11 @@ public unsafe struct ResourceHandle } } - public ReadOnlySpan< byte > FileNameSpan() - => new(FileName(), FileNameLength); + public ByteString FileName() + => ByteString.FromByteStringUnsafe( FileNamePtr(), FileNameLength, true ); + + public bool GamePath( out Utf8GamePath path ) + => Utf8GamePath.FromSpan( new ReadOnlySpan< byte >( FileNamePtr(), FileNameLength ), out path ); [FieldOffset( 0x00 )] public void** VTable; diff --git a/Penumbra/UI/ConfigWindow.Misc.cs b/Penumbra/UI/ConfigWindow.Misc.cs index 38a98b50..ed180fd2 100644 --- a/Penumbra/UI/ConfigWindow.Misc.cs +++ b/Penumbra/UI/ConfigWindow.Misc.cs @@ -33,7 +33,7 @@ public partial class ConfigWindow // Draw the name of a resource file. private static unsafe void Text( ResourceHandle* resource ) - => Text( resource->FileName(), resource->FileNameLength ); + => Text( resource->FileName().Path, resource->FileNameLength ); // Draw a ByteString as a selectable. internal static unsafe bool Selectable( ByteString s, bool selected )