Imported Upstream version 4.0.0~alpha1

Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
This commit is contained in:
Jo Shields
2015-04-07 09:35:12 +01:00
parent 283343f570
commit 3c1f479b9d
22469 changed files with 2931443 additions and 869343 deletions

View File

@ -96,6 +96,26 @@ namespace System.Resources
ResourceValue = value;
}
}
unsafe class HGlobalUnmanagedMemoryStream : UnmanagedMemoryStream
{
IntPtr ptr;
public HGlobalUnmanagedMemoryStream (byte* pointer, long length, IntPtr ptr)
: base (pointer, length, length, FileAccess.ReadWrite)
{
this.ptr = ptr;
}
protected override void Dispose (bool disposing)
{
if (!closed) {
Marshal.FreeHGlobal (ptr);
}
base.Dispose (disposing);
}
}
BinaryReader reader;
object readerLock = new object ();
@ -448,12 +468,7 @@ namespace System.Resources
} else {
IntPtr ptr = Marshal.AllocHGlobal ((int) slen);
byte* addr = (byte*) ptr.ToPointer ();
UnmanagedMemoryStream ms = new UnmanagedMemoryStream (addr, slen, slen, FileAccess.ReadWrite);
// The memory resource must be freed
// when the stream is disposed.
ms.Closed += delegate (object o, EventArgs e) {
Marshal.FreeHGlobal (ptr);
};
UnmanagedMemoryStream ms = new HGlobalUnmanagedMemoryStream (addr, slen, ptr);
byte [] bytes = new byte [slen < 1024 ? slen : 1024];
while (slen > 0 ) {
@ -477,11 +492,7 @@ namespace System.Resources
Dispose(true);
}
#if NET_4_0
public void Dispose ()
#else
void IDisposable.Dispose ()
#endif
{
Dispose(true);
}