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;
        }