Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
73
Server/NativeReader.cs
Normal file
73
Server/NativeReader.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
#region References
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
#endregion
|
||||
|
||||
namespace Server
|
||||
{
|
||||
public static class NativeReader
|
||||
{
|
||||
private static readonly INativeReader m_NativeReader;
|
||||
|
||||
static NativeReader()
|
||||
{
|
||||
if (Core.Unix)
|
||||
{
|
||||
m_NativeReader = new NativeReaderUnix();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_NativeReader = new NativeReaderWin32();
|
||||
}
|
||||
}
|
||||
|
||||
public static unsafe void Read(IntPtr ptr, void* buffer, int length)
|
||||
{
|
||||
m_NativeReader.Read(ptr, buffer, length);
|
||||
}
|
||||
}
|
||||
|
||||
public interface INativeReader
|
||||
{
|
||||
unsafe void Read(IntPtr ptr, void* buffer, int length);
|
||||
}
|
||||
|
||||
public sealed class NativeReaderWin32 : INativeReader
|
||||
{
|
||||
internal class UnsafeNativeMethods
|
||||
{
|
||||
/*[DllImport("kernel32")]
|
||||
internal unsafe static extern int _lread(IntPtr hFile, void* lpBuffer, int wBytes);*/
|
||||
|
||||
[DllImport("kernel32")]
|
||||
internal static extern unsafe bool ReadFile(
|
||||
IntPtr hFile,
|
||||
void* lpBuffer,
|
||||
uint nNumberOfBytesToRead,
|
||||
ref uint lpNumberOfBytesRead,
|
||||
NativeOverlapped* lpOverlapped);
|
||||
}
|
||||
|
||||
public unsafe void Read(IntPtr ptr, void* buffer, int length)
|
||||
{
|
||||
//UnsafeNativeMethods._lread( ptr, buffer, length );
|
||||
uint lpNumberOfBytesRead = 0;
|
||||
UnsafeNativeMethods.ReadFile(ptr, buffer, (uint)length, ref lpNumberOfBytesRead, null);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class NativeReaderUnix : INativeReader
|
||||
{
|
||||
internal class UnsafeNativeMethods
|
||||
{
|
||||
[DllImport("libc")]
|
||||
internal static extern unsafe int read(IntPtr ptr, void* buffer, int length);
|
||||
}
|
||||
|
||||
public unsafe void Read(IntPtr ptr, void* buffer, int length)
|
||||
{
|
||||
UnsafeNativeMethods.read(ptr, buffer, length);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user