You've already forked linux-packaging-mono
Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
This commit is contained in:
59
external/referencesource/mscorlib/system/unsafecharbuffer.cs
vendored
Normal file
59
external/referencesource/mscorlib/system/unsafecharbuffer.cs
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
// ==++==
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// ==--==
|
||||
/*============================================================
|
||||
**
|
||||
** Class: UnSafeBuffer
|
||||
**
|
||||
** Purpose: A class to detect incorrect usage of UnSafeBuffer
|
||||
**
|
||||
**
|
||||
===========================================================*/
|
||||
|
||||
namespace System {
|
||||
using System.Security;
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics.Contracts;
|
||||
|
||||
unsafe internal struct UnSafeCharBuffer{
|
||||
[SecurityCritical]
|
||||
char * m_buffer;
|
||||
int m_totalSize;
|
||||
int m_length;
|
||||
|
||||
[System.Security.SecurityCritical] // auto-generated
|
||||
public UnSafeCharBuffer( char *buffer, int bufferSize) {
|
||||
Contract.Assert( buffer != null, "buffer pointer can't be null." );
|
||||
Contract.Assert( bufferSize >= 0, "buffer size can't be negative." );
|
||||
m_buffer = buffer;
|
||||
m_totalSize = bufferSize;
|
||||
m_length = 0;
|
||||
}
|
||||
|
||||
[System.Security.SecuritySafeCritical] // auto-generated
|
||||
public void AppendString(string stringToAppend) {
|
||||
if( String.IsNullOrEmpty( stringToAppend ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( (m_totalSize - m_length) < stringToAppend.Length ) {
|
||||
throw new IndexOutOfRangeException();
|
||||
}
|
||||
|
||||
fixed( char* pointerToString = stringToAppend ) {
|
||||
Buffer.Memcpy( (byte*) (m_buffer + m_length), (byte *) pointerToString, stringToAppend.Length * sizeof(char));
|
||||
}
|
||||
|
||||
m_length += stringToAppend.Length;
|
||||
Contract.Assert(m_length <= m_totalSize, "Buffer has been overflowed!");
|
||||
}
|
||||
|
||||
public int Length {
|
||||
get {
|
||||
return m_length;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user