63 lines
2.0 KiB
C#
63 lines
2.0 KiB
C#
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Microsoft Research Singularity
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
// File: BitmapFileHeader.cs
|
||
|
//
|
||
|
// Note:
|
||
|
//
|
||
|
#define BUG
|
||
|
|
||
|
using System;
|
||
|
using System.Runtime.InteropServices;
|
||
|
|
||
|
using Microsoft.SingSharp;
|
||
|
using Microsoft.Singularity;
|
||
|
using Microsoft.Singularity.Channels;
|
||
|
|
||
|
namespace Microsoft.Singularity.Io
|
||
|
{
|
||
|
#if BUG
|
||
|
[CLSCompliant(false)]
|
||
|
[StructLayout(LayoutKind.Explicit)]
|
||
|
public pointerfree struct BITMAPFILEHEADER {
|
||
|
[FieldOffset( 0)] public ushort bfType;
|
||
|
[FieldOffset( 2)] public uint bfSize;
|
||
|
[FieldOffset( 6)] public ushort bfReserved1;
|
||
|
[FieldOffset( 8)] public ushort bfReserved2;
|
||
|
[FieldOffset(10)] public int bfOffBits;
|
||
|
#else
|
||
|
[CLSCompliant(false)]
|
||
|
[StructLayout(LayoutKind.Sequential, Pack=2)]
|
||
|
public pointerfree struct BITMAPFILEHEADER {
|
||
|
public ushort bfType;
|
||
|
public uint bfSize;
|
||
|
public ushort bfReserved1;
|
||
|
public ushort bfReserved2;
|
||
|
public int bfOffBits;
|
||
|
#endif
|
||
|
|
||
|
public static BITMAPFILEHEADER Read(byte[]! in ExHeap buffer,
|
||
|
int offset, out int used)
|
||
|
{
|
||
|
if (buffer == null || offset < 0 ||
|
||
|
offset + sizeof(BITMAPFILEHEADER) > buffer.Length) {
|
||
|
unchecked {
|
||
|
Tracing.Log(Tracing.Error,
|
||
|
"BITMAPFILEHEADER Read(offset={0}, length={1})",
|
||
|
(UIntPtr)(uint)offset,
|
||
|
(UIntPtr)(uint)buffer.Length);
|
||
|
}
|
||
|
throw new OverflowException("Read source invalid.");
|
||
|
}
|
||
|
|
||
|
used = offset + /*sizeof(BITMAPFILEHEADER)*/ 14;
|
||
|
|
||
|
ref BITMAPFILEHEADER bmfh = ref buffer[offset];
|
||
|
return bmfh;
|
||
|
}
|
||
|
}
|
||
|
} // namespace Microsoft.Singularity.Io
|