Safely handle null pointers in `Util.UnsafeSpanFromPointer`
This commit is contained in:
parent
2441dd1223
commit
984957a4f7
|
@ -287,24 +287,24 @@ namespace BizHawk.Common
|
|||
}
|
||||
|
||||
/// <summary>creates span over <paramref name="length"/> octets starting at <paramref name="ptr"/></summary>
|
||||
/// <remarks>returns empty span if <paramref name="ptr"/> is the null pointer (<see cref="IntPtr.Zero"/>)</remarks>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static unsafe Span<byte> UnsafeSpanFromPointer(IntPtr ptr, int length)
|
||||
{
|
||||
return new(pointer: ptr.ToPointer(), length: length);
|
||||
}
|
||||
=> ptr == IntPtr.Zero ? [ ] : new(pointer: ptr.ToPointer(), length: length);
|
||||
|
||||
#if false // unused
|
||||
/// <summary>
|
||||
/// creates span over <paramref name="count"/><c> * sizeof(</c><typeparamref name="T"/><c>)</c> octets
|
||||
/// starting at <paramref name="ptr"/>
|
||||
/// </summary>
|
||||
/// <remarks>uses native endianness and <paramref name="ptr"/> must be aligned (else UB)</remarks>
|
||||
/// <remarks>
|
||||
/// uses native endianness and <paramref name="ptr"/> must be aligned (else UB);
|
||||
/// returns empty span if <paramref name="ptr"/> is the null pointer (<see cref="IntPtr.Zero"/>)
|
||||
/// </remarks>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static unsafe Span<T> UnsafeSpanFromPointerAligned<T>(IntPtr ptr, int count)
|
||||
where T : unmanaged
|
||||
{
|
||||
return new(pointer: ptr.ToPointer(), length: count * sizeof(T));
|
||||
}
|
||||
=> ptr == IntPtr.Zero ? [ ] : new(pointer: ptr.ToPointer(), length: count * sizeof(T));
|
||||
#endif
|
||||
|
||||
public static void WriteByteBuffer(this BinaryWriter bw, byte[]? data)
|
||||
|
|
|
@ -72,10 +72,9 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.N3DS
|
|||
}
|
||||
|
||||
private Span<byte> GetPage(uint addr)
|
||||
{
|
||||
var pagePointer = _core.Encore_GetPagePointer(_context, addr);
|
||||
return pagePointer == IntPtr.Zero ? [ ] : Util.UnsafeSpanFromPointer(pagePointer, (int)(ENCORE_PAGE_SIZE - (addr & ENCORE_PAGE_MASK)));
|
||||
}
|
||||
=> Util.UnsafeSpanFromPointer(
|
||||
ptr: _core.Encore_GetPagePointer(_context, addr: addr),
|
||||
length: (int) (ENCORE_PAGE_SIZE - (addr & ENCORE_PAGE_MASK)));
|
||||
|
||||
public override byte PeekByte(long addr)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue