private unsafe void CreateFirstSubstData(string s, IIS7WorkerRequest iis7WorkerRequest, System.Text.Encoder encoder) { IntPtr ptr; int num = 0; int length = s.Length; if (length > 0) { fixed (char* str = ((char*) s)) { char* chars = str; int size = encoder.GetByteCount(chars, length, true); ptr = iis7WorkerRequest.AllocateRequestMemory(size); if (ptr != IntPtr.Zero) { num = encoder.GetBytes(chars, length, (byte*) ptr, size, true); } } } else { ptr = iis7WorkerRequest.AllocateRequestMemory(1); } if (ptr == IntPtr.Zero) { throw new OutOfMemoryException(); } this._firstSubstData = ptr; this._firstSubstDataSize = num; }
// WOS 1926509: ASP.NET: WriteSubstitution in integrated mode needs to support callbacks that return String.Empty private unsafe void CreateFirstSubstData(String s, IIS7WorkerRequest iis7WorkerRequest, Encoder encoder) { Debug.Assert(s != null, "s != null"); IntPtr pbBuffer; int numBytes = 0; int cch = s.Length; if (cch > 0) { fixed (char * pch = s) { int cbBuffer = encoder.GetByteCount(pch, cch, true /*flush*/); pbBuffer = iis7WorkerRequest.AllocateRequestMemory(cbBuffer); if (pbBuffer != IntPtr.Zero) { numBytes = encoder.GetBytes(pch, cch, (byte*)pbBuffer, cbBuffer, true /*flush*/); } } } else { // deal with empty string pbBuffer = iis7WorkerRequest.AllocateRequestMemory(1); } if (pbBuffer == IntPtr.Zero) { throw new OutOfMemoryException(); } _firstSubstData = pbBuffer; _firstSubstDataSize = numBytes; }