[system] Simplify process redirection initialization
authorMarek Safar <marek.safar@gmail.com>
Tue, 18 Aug 2015 09:39:16 +0000 (11:39 +0200)
committerMarek Safar <marek.safar@gmail.com>
Wed, 19 Aug 2015 12:13:03 +0000 (14:13 +0200)
mcs/class/System/System.Diagnostics/Process.cs
mcs/class/System/System.IO/MonoSyncFileStream.cs [deleted file]
mcs/class/System/System.dll.sources

index a7c793bedbfc678d40db6f923a06a29f850939b6..3748f7f04aac0b01a14d00978ee2a58185f862c5 100644 (file)
@@ -43,6 +43,7 @@ using System.Security.Permissions;
 using System.Collections.Generic;
 using System.Security;
 using System.Threading;
+using Microsoft.Win32.SafeHandles;
 
 namespace System.Diagnostics {
 
@@ -1133,23 +1134,24 @@ namespace System.Diagnostics {
                        process.process_handle = proc_info.process_handle;
                        process.pid = proc_info.pid;
                        
-                       if (startInfo.RedirectStandardInput == true) {
+                       if (startInfo.RedirectStandardInput) {
                                MonoIO.Close (stdin_rd, out error);
-                               process.input_stream = new StreamWriter (new MonoSyncFileStream (stdin_wr, FileAccess.Write, true, 8192), Console.Out.Encoding);
+                               process.input_stream = new StreamWriter (new FileStream (new SafeFileHandle (stdin_wr, false), FileAccess.Write, 8192, false), Console.InputEncoding);
                                process.input_stream.AutoFlush = true;
                        }
 
-                       Encoding stdoutEncoding = startInfo.StandardOutputEncoding ?? Console.Out.Encoding;
-                       Encoding stderrEncoding = startInfo.StandardErrorEncoding ?? Console.Out.Encoding;
+                       if (startInfo.RedirectStandardOutput) {
+                               Encoding stdoutEncoding = startInfo.StandardOutputEncoding ?? Console.Out.Encoding;
 
-                       if (startInfo.RedirectStandardOutput == true) {
                                MonoIO.Close (stdout_wr, out error);
-                               process.output_stream = new StreamReader (new MonoSyncFileStream (process.stdout_rd, FileAccess.Read, true, 8192), stdoutEncoding, true, 8192);
+                               process.output_stream = new StreamReader (new FileStream (new SafeFileHandle (process.stdout_rd, false), FileAccess.Read, 8192, false), stdoutEncoding, true, 8192);
                        }
 
-                       if (startInfo.RedirectStandardError == true) {
+                       if (startInfo.RedirectStandardError) {
+                               Encoding stderrEncoding = startInfo.StandardErrorEncoding ?? Console.Out.Encoding;
+
                                MonoIO.Close (stderr_wr, out error);
-                               process.error_stream = new StreamReader (new MonoSyncFileStream (process.stderr_rd, FileAccess.Read, true, 8192), stderrEncoding, true, 8192);
+                               process.error_stream = new StreamReader (new FileStream (new SafeFileHandle (process.stderr_rd, false), FileAccess.Read, 8192, false), stderrEncoding, true, 8192);
                        }
 
                        process.StartExitCallbackIfNeeded ();
diff --git a/mcs/class/System/System.IO/MonoSyncFileStream.cs b/mcs/class/System/System.IO/MonoSyncFileStream.cs
deleted file mode 100644 (file)
index f6dd076..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-// 
-// System.IO.MonoSyncFileStream.cs: Synchronous FileStream with
-//     asynchronous BeginRead/Write methods.
-//
-// Authors:
-//     Robert Jordan (robertj@gmx.net)
-//
-// Copyright (C) 2007 Novell, Inc. (http://www.novell.com)
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.Remoting.Messaging;
-
-namespace System.IO
-{
-       internal class MonoSyncFileStream : FileStream
-       {
-               public MonoSyncFileStream (IntPtr handle, FileAccess access, bool ownsHandle, int bufferSize)
-                       : base (handle, access, ownsHandle, bufferSize, false)
-               {
-               }
-
-               delegate void WriteDelegate (byte [] buffer, int offset, int count);
-
-               public override IAsyncResult BeginWrite (byte [] buffer, int offset, int count,
-                                                       AsyncCallback cback, object state)
-               {
-                       if (!CanWrite)
-                               throw new NotSupportedException ("This stream does not support writing");
-
-                       if (buffer == null)
-                               throw new ArgumentNullException ("buffer");
-
-                       if (count < 0)
-                               throw new ArgumentOutOfRangeException ("count", "Must be >= 0");
-
-                       if (offset < 0)
-                               throw new ArgumentOutOfRangeException ("offset", "Must be >= 0");
-
-                       WriteDelegate d = new WriteDelegate (this.Write);
-                       return d.BeginInvoke (buffer, offset, count, cback, state);
-               }
-
-               public override void EndWrite (IAsyncResult asyncResult)
-               {
-                       if (asyncResult == null)
-                               throw new ArgumentNullException ("asyncResult");
-
-                       AsyncResult ar = asyncResult as AsyncResult;
-                       if (ar == null)
-                               throw new ArgumentException ("Invalid IAsyncResult", "asyncResult");
-
-                       WriteDelegate d = ar.AsyncDelegate as WriteDelegate;
-                       if (d == null)
-                               throw new ArgumentException ("Invalid IAsyncResult", "asyncResult");
-
-                       d.EndInvoke (asyncResult);
-               }
-
-               delegate int ReadDelegate (byte [] buffer, int offset, int count);
-
-               public override IAsyncResult BeginRead (byte [] buffer, int offset, int count,
-                                                       AsyncCallback cback, object state)
-               {
-                       if (!CanRead)
-                               throw new NotSupportedException ("This stream does not support reading");
-
-                       if (buffer == null)
-                               throw new ArgumentNullException ("buffer");
-
-                       if (count < 0)
-                               throw new ArgumentOutOfRangeException ("count", "Must be >= 0");
-
-                       if (offset < 0)
-                               throw new ArgumentOutOfRangeException ("offset", "Must be >= 0");
-
-                       ReadDelegate d = new ReadDelegate (this.Read);
-                       return d.BeginInvoke (buffer, offset, count, cback, state);
-               }
-
-               public override int EndRead (IAsyncResult asyncResult)
-               {
-                       if (asyncResult == null)
-                               throw new ArgumentNullException ("asyncResult");
-
-                       AsyncResult ar = asyncResult as AsyncResult;
-                       if (ar == null)
-                               throw new ArgumentException ("Invalid IAsyncResult", "asyncResult");
-
-                       ReadDelegate d = ar.AsyncDelegate as ReadDelegate;
-                       if (d == null)
-                               throw new ArgumentException ("Invalid IAsyncResult", "asyncResult");
-
-                       return d.EndInvoke (asyncResult);
-               }
-
-       }
-}
index 9c4f6cfe4ea87886d10c5c423b6f358964f9230d..83ee323b86bf5e4ed39dc9ddcedffff988df8c8e 100644 (file)
@@ -188,7 +188,6 @@ System.IO/InternalBufferOverflowException.cs
 System.IO/InvalidDataException.cs
 System.IO/IODescriptionAttribute.cs
 System.IO/KeventWatcher.cs
-System.IO/MonoSyncFileStream.cs
 System.IO/NotifyFilters.cs
 System.IO.Ports/Handshake.cs
 System.IO.Ports/ISerialStream.cs