diff options
author | Marek Safar <marek.safar@gmail.com> | 2015-02-19 15:04:16 +0300 |
---|---|---|
committer | Marek Safar <marek.safar@gmail.com> | 2015-02-19 15:04:46 +0300 |
commit | 1425ace04092ca3256d6b0480dcc5da8a7c251c8 (patch) | |
tree | 3fd88f09c28efcfcd1f8450d5e962d8a738b00b5 /mcs/class | |
parent | 8da38a9e4a70f3555148295804d597c5161b2b94 (diff) |
[corlib] Stream, MemoryStream from reference sources
Diffstat (limited to 'mcs/class')
-rw-r--r-- | mcs/class/corlib/Makefile | 9 | ||||
-rw-r--r-- | mcs/class/corlib/ReferenceSources/BCLDebug.cs | 5 | ||||
-rw-r--r-- | mcs/class/corlib/ReferenceSources/CompatibilitySwitches.cs | 1 | ||||
-rw-r--r-- | mcs/class/corlib/System.IO/MemoryStream.cs | 494 | ||||
-rw-r--r-- | mcs/class/corlib/System.IO/Stream.cs | 513 | ||||
-rw-r--r-- | mcs/class/corlib/System.Security.Permissions/FileIOPermission.cs | 4 | ||||
-rw-r--r-- | mcs/class/corlib/System/Buffer.cs | 5 | ||||
-rw-r--r-- | mcs/class/corlib/corlib.dll.sources | 6 |
8 files changed, 27 insertions, 1010 deletions
diff --git a/mcs/class/corlib/Makefile b/mcs/class/corlib/Makefile index 26c880d3532..150cac3ce47 100644 --- a/mcs/class/corlib/Makefile +++ b/mcs/class/corlib/Makefile @@ -38,7 +38,14 @@ RESOURCE_FILES = \ resources/collation.cjkKO.bin \ resources/collation.cjkKOlv2.bin -REFERENCE_SOURCES_FLAGS = -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT +REFERENCE_SOURCES_FLAGS = -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO + +MOBILE_STATIC := $(filter mobile_static monotouch monotouch_runtime, $(PROFILE)) + +ifndef MOBILE_STATIC +REFERENCE_SOURCES_FLAGS += -d:FEATURE_REMOTING +endif + LOCAL_MCS_FLAGS = -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC $(REFERENCE_SOURCES_FLAGS) DEFAULT_REFERENCES = diff --git a/mcs/class/corlib/ReferenceSources/BCLDebug.cs b/mcs/class/corlib/ReferenceSources/BCLDebug.cs index 753bc2d25a9..5896ae8d674 100644 --- a/mcs/class/corlib/ReferenceSources/BCLDebug.cs +++ b/mcs/class/corlib/ReferenceSources/BCLDebug.cs @@ -18,5 +18,10 @@ namespace System static public void Log (string message) { } + + [Conditional("_DEBUG")] + internal static void Perf (bool expr, string msg) + { + } } }
\ No newline at end of file diff --git a/mcs/class/corlib/ReferenceSources/CompatibilitySwitches.cs b/mcs/class/corlib/ReferenceSources/CompatibilitySwitches.cs index e21e6d04240..ba5dba8e652 100644 --- a/mcs/class/corlib/ReferenceSources/CompatibilitySwitches.cs +++ b/mcs/class/corlib/ReferenceSources/CompatibilitySwitches.cs @@ -31,5 +31,6 @@ namespace System static class CompatibilitySwitches { public const bool IsAppEarlierThanSilverlight4 = false; + public const bool IsAppEarlierThanWindowsPhone8 = false; } }
\ No newline at end of file diff --git a/mcs/class/corlib/System.IO/MemoryStream.cs b/mcs/class/corlib/System.IO/MemoryStream.cs deleted file mode 100644 index 77dd6d64e37..00000000000 --- a/mcs/class/corlib/System.IO/MemoryStream.cs +++ /dev/null @@ -1,494 +0,0 @@ -// -// System.IO.MemoryStream.cs -// -// Authors: Marcin Szczepanski (marcins@zipworld.com.au) -// Patrik Torstensson -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// Marek Safar (marek.safar@gmail.com) -// -// (c) 2001,2002 Marcin Szczepanski, Patrik Torstensson -// (c) 2003 Ximian, Inc. (http://www.ximian.com) -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// Copyright 2011 Xamarin, Inc (http://www.xamarin.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.Globalization; -using System.Runtime.InteropServices; -using System.Threading; -using System.Threading.Tasks; - -namespace System.IO -{ - [Serializable] - [ComVisible (true)] - [MonoLimitation ("Serialization format not compatible with .NET")] - public class MemoryStream : Stream - { - bool canWrite; - bool allowGetBuffer; - int capacity; - int length; - byte [] internalBuffer; - int initialIndex; - bool expandable; - bool streamClosed; - int position; - int dirty_bytes; - [NonSerialized] - Task<int> read_task; - - public MemoryStream () : this (0) - { - } - - public MemoryStream (int capacity) - { - if (capacity < 0) - throw new ArgumentOutOfRangeException ("capacity"); - - canWrite = true; - - this.capacity = capacity; - internalBuffer = new byte [capacity]; - - expandable = true; - allowGetBuffer = true; - } - - public MemoryStream (byte [] buffer) - { - if (buffer == null) - throw new ArgumentNullException ("buffer"); - - InternalConstructor (buffer, 0, buffer.Length, true, false); - } - - public MemoryStream (byte [] buffer, bool writable) - { - if (buffer == null) - throw new ArgumentNullException ("buffer"); - - InternalConstructor (buffer, 0, buffer.Length, writable, false); - } - - public MemoryStream (byte [] buffer, int index, int count) - { - InternalConstructor (buffer, index, count, true, false); - } - - public MemoryStream (byte [] buffer, int index, int count, bool writable) - { - InternalConstructor (buffer, index, count, writable, false); - } - - public MemoryStream (byte [] buffer, int index, int count, bool writable, bool publiclyVisible) - { - InternalConstructor (buffer, index, count, writable, publiclyVisible); - } - - void InternalConstructor (byte [] buffer, int index, int count, bool writable, bool publicallyVisible) - { - if (buffer == null) - throw new ArgumentNullException ("buffer"); - - if (index < 0 || count < 0) - throw new ArgumentOutOfRangeException ("index or count is less than 0."); - - if (buffer.Length - index < count) - throw new ArgumentException ("index+count", - "The size of the buffer is less than index + count."); - - canWrite = writable; - - internalBuffer = buffer; - capacity = count + index; - length = capacity; - position = index; - initialIndex = index; - - allowGetBuffer = publicallyVisible; - expandable = false; - } - - void CheckIfClosedThrowDisposed () - { - if (streamClosed) - throw new ObjectDisposedException ("MemoryStream"); - } - - public override bool CanRead { - get { return !streamClosed; } - } - - public override bool CanSeek { - get { return !streamClosed; } - } - - public override bool CanWrite { - get { return (!streamClosed && canWrite); } - } - - public virtual int Capacity { - get { - CheckIfClosedThrowDisposed (); - return capacity - initialIndex; - } - - set { - CheckIfClosedThrowDisposed (); - - if (!expandable) - throw new NotSupportedException ("Cannot expand this MemoryStream"); - - if (value < 0 || value < length) - throw new ArgumentOutOfRangeException ("value", - "New capacity cannot be negative or less than the current capacity " + value + " " + capacity); - - if (internalBuffer != null && value == internalBuffer.Length) - return; - - byte [] newBuffer = null; - if (value != 0) { - newBuffer = new byte [value]; - if (internalBuffer != null) - Buffer.BlockCopy (internalBuffer, 0, newBuffer, 0, length); - } - - dirty_bytes = 0; // discard any dirty area beyond previous length - internalBuffer = newBuffer; // It's null when capacity is set to 0 - capacity = value; - } - } - - public override long Length { - get { - // LAMESPEC: The spec says to throw an IOException if the - // stream is closed and an ObjectDisposedException if - // "methods were called after the stream was closed". What - // is the difference? - - CheckIfClosedThrowDisposed (); - - // This is ok for MemoryStreamTest.ConstructorFive - return length - initialIndex; - } - } - - public override long Position { - get { - CheckIfClosedThrowDisposed (); - return position - initialIndex; - } - - set { - CheckIfClosedThrowDisposed (); - if (value < 0) - throw new ArgumentOutOfRangeException ("value", - "Position cannot be negative" ); - - if (value > Int32.MaxValue) - throw new ArgumentOutOfRangeException ("value", - "Position must be non-negative and less than 2^31 - 1 - origin"); - - position = initialIndex + (int) value; - } - } - - protected override void Dispose (bool disposing) - { - streamClosed = true; - expandable = false; - } - - public override void Flush () - { - // Do nothing - } - - public virtual byte [] GetBuffer () - { - if (!allowGetBuffer) - throw new UnauthorizedAccessException (); - - return internalBuffer; - } - - public override int Read ([In,Out] byte [] buffer, int offset, int count) - { - if (buffer == null) - throw new ArgumentNullException ("buffer"); - - if (offset < 0 || count < 0) - throw new ArgumentOutOfRangeException ("offset or count less than zero."); - - if (buffer.Length - offset < count ) - throw new ArgumentException ("offset+count", - "The size of the buffer is less than offset + count."); - - CheckIfClosedThrowDisposed (); - - if (position >= length || count == 0) - return 0; - - if (position > length - count) - count = length - position; - - Buffer.BlockCopy (internalBuffer, position, buffer, offset, count); - position += count; - return count; - } - - public override int ReadByte () - { - CheckIfClosedThrowDisposed (); - if (position >= length) - return -1; - - return internalBuffer [position++]; - } - - public override long Seek (long offset, SeekOrigin loc) - { - CheckIfClosedThrowDisposed (); - - // It's funny that they don't throw this exception for < Int32.MinValue - if (offset > (long) Int32.MaxValue) - throw new ArgumentOutOfRangeException ("Offset out of range. " + offset); - - int refPoint; - switch (loc) { - case SeekOrigin.Begin: - if (offset < 0) - throw new IOException ("Attempted to seek before start of MemoryStream."); - refPoint = initialIndex; - break; - case SeekOrigin.Current: - refPoint = position; - break; - case SeekOrigin.End: - refPoint = length; - break; - default: - throw new ArgumentException ("loc", "Invalid SeekOrigin"); - } - - // LAMESPEC: My goodness, how may LAMESPECs are there in this - // class! :) In the spec for the Position property it's stated - // "The position must not be more than one byte beyond the end of the stream." - // In the spec for seek it says "Seeking to any location beyond the length of the - // stream is supported." That's a contradiction i'd say. - // I guess seek can go anywhere but if you use position it may get moved back. - - refPoint += (int) offset; - if (refPoint < initialIndex) - throw new IOException ("Attempted to seek before start of MemoryStream."); - - position = refPoint; - return position; - } - - int CalculateNewCapacity (int minimum) - { - if (minimum < 256) - minimum = 256; // See GetBufferTwo test - - if (minimum < capacity * 2) - minimum = capacity * 2; - - return minimum; - } - - void Expand (int newSize) - { - // We don't need to take into account the dirty bytes when incrementing the - // Capacity, as changing it will only preserve the valid clear region. - if (newSize > capacity) - Capacity = CalculateNewCapacity (newSize); - else if (dirty_bytes > 0) { - Array.Clear (internalBuffer, length, dirty_bytes); - dirty_bytes = 0; - } - } - - public override void SetLength (long value) - { - if (!expandable && value > capacity) - throw new NotSupportedException ("Expanding this MemoryStream is not supported"); - - CheckIfClosedThrowDisposed (); - - if (!canWrite) { - throw new NotSupportedException (Locale.GetText - ("Cannot write to this MemoryStream")); - } - - // LAMESPEC: AGAIN! It says to throw this exception if value is - // greater than "the maximum length of the MemoryStream". I haven't - // seen anywhere mention what the maximum length of a MemoryStream is and - // since we're this far this memory stream is expandable. - if (value < 0 || (value + initialIndex) > (long) Int32.MaxValue) - throw new ArgumentOutOfRangeException (); - - int newSize = (int) value + initialIndex; - - if (newSize > length) - Expand (newSize); - else if (newSize < length) // Postpone the call to Array.Clear till expand time - dirty_bytes += length - newSize; - - length = newSize; - if (position > length) - position = length; - } - - public virtual byte [] ToArray () - { - int l = length - initialIndex; - byte[] outBuffer = new byte [l]; - - if (internalBuffer != null) - Buffer.BlockCopy (internalBuffer, initialIndex, outBuffer, 0, l); - return outBuffer; - } - - public override void Write (byte [] buffer, int offset, int count) - { - if (buffer == null) - throw new ArgumentNullException ("buffer"); - - if (offset < 0 || count < 0) - throw new ArgumentOutOfRangeException (); - - if (buffer.Length - offset < count) - throw new ArgumentException ("offset+count", - "The size of the buffer is less than offset + count."); - - CheckIfClosedThrowDisposed (); - - if (!CanWrite) - throw new NotSupportedException ("Cannot write to this stream."); - - // reordered to avoid possible integer overflow - if (position > length - count) - Expand (position + count); - - Buffer.BlockCopy (buffer, offset, internalBuffer, position, count); - position += count; - if (position >= length) - length = position; - } - - public override void WriteByte (byte value) - { - CheckIfClosedThrowDisposed (); - if (!canWrite) - throw new NotSupportedException ("Cannot write to this stream."); - - if (position >= length) { - Expand (position + 1); - length = position + 1; - } - - internalBuffer [position++] = value; - } - - public virtual void WriteTo (Stream stream) - { - CheckIfClosedThrowDisposed (); - - if (stream == null) - throw new ArgumentNullException ("stream"); - - stream.Write (internalBuffer, initialIndex, length - initialIndex); - } - - - public override Task CopyToAsync (Stream destination, int bufferSize, CancellationToken cancellationToken) - { - // TODO: Specialization but what for? - return base.CopyToAsync (destination, bufferSize, cancellationToken); - } - - public override Task FlushAsync (CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - return TaskConstants.Canceled; - - try { - Flush (); - return TaskConstants.Finished; - } catch (Exception ex) { - return Task.FromException<object> (ex); - } - } - - public override Task<int> ReadAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken) - { - if (buffer == null) - throw new ArgumentNullException ("buffer"); - - if (offset < 0 || count < 0) - throw new ArgumentOutOfRangeException ("offset or count less than zero."); - - if (buffer.Length - offset < count ) - throw new ArgumentException ("offset+count", - "The size of the buffer is less than offset + count."); - if (cancellationToken.IsCancellationRequested) - return TaskConstants<int>.Canceled; - - try { - count = Read (buffer, offset, count); - - // Try not to allocate a new task for every buffer read - if (read_task == null || read_task.Result != count) - read_task = Task<int>.FromResult (count); - - return read_task; - } catch (Exception ex) { - return Task.FromException<int> (ex); - } - } - - public override Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken) - { - if (buffer == null) - throw new ArgumentNullException ("buffer"); - - if (offset < 0 || count < 0) - throw new ArgumentOutOfRangeException (); - - if (buffer.Length - offset < count) - throw new ArgumentException ("offset+count", - "The size of the buffer is less than offset + count."); - - if (cancellationToken.IsCancellationRequested) - return TaskConstants.Canceled; - - try { - Write (buffer, offset, count); - return TaskConstants.Finished; - } catch (Exception ex) { - return Task.FromException<object> (ex); - } - } - } -} diff --git a/mcs/class/corlib/System.IO/Stream.cs b/mcs/class/corlib/System.IO/Stream.cs deleted file mode 100644 index 8307d0aff26..00000000000 --- a/mcs/class/corlib/System.IO/Stream.cs +++ /dev/null @@ -1,513 +0,0 @@ -// -// System.IO.Stream.cs -// -// Authors: -// Dietmar Maurer (dietmar@ximian.com) -// Miguel de Icaza (miguel@ximian.com) -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// Marek Safar (marek.safar@gmail.com) -// -// (C) 2001, 2002 Ximian, Inc. http://www.ximian.com -// (c) 2004 Novell, Inc. (http://www.novell.com) -// Copyright 2011 Xamarin, Inc (http://www.xamarin.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.Threading; -using System.Runtime.Remoting.Messaging; -using System.Runtime.InteropServices; -using System.Threading.Tasks; - -namespace System.IO -{ - [Serializable] - [ComVisible (true)] -#if NET_2_1 - public abstract class Stream : IDisposable -#else - public abstract class Stream : MarshalByRefObject, IDisposable -#endif - { - public static readonly Stream Null = new NullStream (); - - [NonSerialized] - Func<byte[], int, int, int> async_read; - [NonSerialized] - Action<byte[], int, int> async_write; - [NonSerialized] - AutoResetEvent async_event; - - protected Stream () - { - } - - public abstract bool CanRead - { - get; - } - - public abstract bool CanSeek - { - get; - } - - public abstract bool CanWrite - { - get; - } - - [ComVisible (false)] - public virtual bool CanTimeout { - get { - return false; - } - } - - public abstract long Length - { - get; - } - - public abstract long Position - { - get; - set; - } - - - public void Dispose () - { - Close (); - } - - protected virtual void Dispose (bool disposing) - { - if (async_event != null && disposing) { - async_event.Close (); - async_event = null; - } - } - - public virtual void Close () - { - Dispose (true); - GC.SuppressFinalize (this); - } - - [ComVisible (false)] - public virtual int ReadTimeout { - get { - throw new InvalidOperationException ("Timeouts are not supported on this stream."); - } - set { - throw new InvalidOperationException ("Timeouts are not supported on this stream."); - } - } - - [ComVisible (false)] - public virtual int WriteTimeout { - get { - throw new InvalidOperationException ("Timeouts are not supported on this stream."); - } - set { - throw new InvalidOperationException ("Timeouts are not supported on this stream."); - } - } - - public static Stream Synchronized (Stream stream) - { - return new SynchronizedStream (stream); - } - - [Obsolete ("CreateWaitHandle is due for removal. Use \"new ManualResetEvent(false)\" instead.")] - protected virtual WaitHandle CreateWaitHandle() - { - return new ManualResetEvent (false); - } - - public abstract void Flush (); - - public abstract int Read ([In,Out] byte[] buffer, int offset, int count); - - public virtual int ReadByte () - { - byte[] buffer = new byte [1]; - - if (Read (buffer, 0, 1) > 0) - return buffer [0]; - - return -1; - } - - public abstract long Seek (long offset, SeekOrigin origin); - - public abstract void SetLength (long value); - - public abstract void Write (byte[] buffer, int offset, int count); - - public virtual void WriteByte (byte value) - { - byte[] buffer = new byte [1]; - - buffer [0] = value; - - Write (buffer, 0, 1); - } - - public virtual IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback callback, object state) - { - if (!CanRead) - throw new NotSupportedException ("This stream does not support reading"); - - if (async_event == null) { - lock (this) { - if (async_event == null) - async_event = new AutoResetEvent (true); - } - } - - async_event.WaitOne (); - async_read = Read; - return async_read.BeginInvoke (buffer, offset, count, callback, state); - } - - public virtual IAsyncResult BeginWrite (byte[] buffer, int offset, int count, AsyncCallback callback, object state) - { - if (!CanWrite) - throw new NotSupportedException ("This stream does not support writing"); - - if (async_event == null) { - lock (this) { - if (async_event == null) - async_event = new AutoResetEvent (true); - } - } - - async_event.WaitOne (); - async_write = Write; - return async_write.BeginInvoke (buffer, offset, count, callback, state); - } - - public virtual int EndRead (IAsyncResult asyncResult) - { - if (asyncResult == null) - throw new ArgumentNullException ("asyncResult"); - - if (async_read == null) - throw new ArgumentException ("EndRead cannot be called multiple times"); - - try { - return async_read.EndInvoke (asyncResult); - } finally { - async_read = null; - async_event.Set (); - } - } - - public virtual void EndWrite (IAsyncResult asyncResult) - { - if (asyncResult == null) - throw new ArgumentNullException ("asyncResult"); - - if (async_write == null) - throw new ArgumentException ("EndWrite cannot be called multiple times"); - - try { - async_write.EndInvoke (asyncResult); - } finally { - async_write = null; - async_event.Set (); - } - } - - public void CopyTo (Stream destination) - { - CopyTo (destination, 16*1024); - } - - public void CopyTo (Stream destination, int bufferSize) - { - if (destination == null) - throw new ArgumentNullException ("destination"); - if (!CanRead) - throw new NotSupportedException ("This stream does not support reading"); - if (!destination.CanWrite) - throw new NotSupportedException ("This destination stream does not support writing"); - if (bufferSize <= 0) - throw new ArgumentOutOfRangeException ("bufferSize"); - - var buffer = new byte [bufferSize]; - int nread; - while ((nread = Read (buffer, 0, bufferSize)) != 0) - destination.Write (buffer, 0, nread); - } - - [ObsoleteAttribute("Do not call or override this method")] - protected virtual void ObjectInvariant () - { - } - - - public Task CopyToAsync (Stream destination) - { - return CopyToAsync (destination, 16 * 1024, CancellationToken.None); - } - - public Task CopyToAsync (Stream destination, int bufferSize) - { - return CopyToAsync (destination, bufferSize, CancellationToken.None); - } - - public virtual Task CopyToAsync (Stream destination, int bufferSize, CancellationToken cancellationToken) - { - if (destination == null) - throw new ArgumentNullException ("destination"); - if (!CanRead) - throw new NotSupportedException ("This stream does not support reading"); - if (!destination.CanWrite) - throw new NotSupportedException ("This destination stream does not support writing"); - if (bufferSize <= 0) - throw new ArgumentOutOfRangeException ("bufferSize"); - - if (cancellationToken.IsCancellationRequested) - return TaskConstants.Canceled; - - return CopyToAsync (destination, new byte[bufferSize], cancellationToken); - } - - async Task CopyToAsync (Stream destination, byte[] buffer, CancellationToken cancellationToken) - { - int nread; - while ((nread = await ReadAsync (buffer, 0, buffer.Length, cancellationToken).ConfigureAwait (false)) != 0) - await destination.WriteAsync (buffer, 0, nread, cancellationToken).ConfigureAwait (false); - } - - public Task FlushAsync () - { - return FlushAsync (CancellationToken.None); - } - - public virtual Task FlushAsync (CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - return TaskConstants.Canceled; - - return Task.Factory.StartNew (l => ((Stream) l).Flush (), this, cancellationToken); - } - - public Task<int> ReadAsync (byte[] buffer, int offset, int count) - { - return ReadAsync (buffer, offset, count, CancellationToken.None); - } - - public virtual Task<int> ReadAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - return TaskConstants<int>.Canceled; - - return Task<int>.Factory.FromAsync (BeginRead, EndRead, buffer, offset, count, null); - } - - public Task WriteAsync (byte[] buffer, int offset, int count) - { - return WriteAsync (buffer, offset, count, CancellationToken.None); - } - - public virtual Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken) - { - return Task.Factory.FromAsync (BeginWrite, EndWrite, buffer, offset, count, null); - } - } - - class NullStream : Stream - { - public override bool CanRead - { - get { - return true; - } - } - - public override bool CanSeek - { - get { - return true; - } - } - - public override bool CanWrite - { - get { - return true; - } - } - - public override long Length - { - get { - return 0; - } - } - - public override long Position - { - get { - return 0; - } - set { - } - } - - public override void Flush () - { - } - - public override int Read (byte[] buffer, int offset, int count) - { - return 0; - } - - public override int ReadByte () - { - return -1; - } - - public override long Seek (long offset, SeekOrigin origin) - { - return 0; - } - - public override void SetLength (long value) - { - } - - public override void Write (byte[] buffer, int offset, int count) - { - } - - public override void WriteByte (byte value) - { - } - } - - class SynchronizedStream : Stream { - Stream source; - object slock; - - internal SynchronizedStream (Stream source) - { - this.source = source; - slock = new object (); - } - - public override bool CanRead - { - get { - lock (slock) - return source.CanRead; - } - } - - public override bool CanSeek - { - get { - lock (slock) - return source.CanSeek; - } - } - - public override bool CanWrite - { - get { - lock (slock) - return source.CanWrite; - } - } - - public override long Length - { - get { - lock (slock) - return source.Length; - } - } - - public override long Position - { - get { - lock (slock) - return source.Position; - } - set { - lock (slock) - source.Position = value; - } - } - - public override void Close () - { - lock (slock) - source.Close (); - } - - public override void Flush () - { - lock (slock) - source.Flush (); - } - - public override int Read (byte[] buffer, int offset, int count) - { - lock (slock) - return source.Read (buffer, offset, count); - } - - public override int ReadByte () - { - lock (slock) - return source.ReadByte (); - } - - public override long Seek (long offset, SeekOrigin origin) - { - lock (slock) - return source.Seek (offset, origin); - } - - public override void SetLength (long value) - { - lock (slock) - source.SetLength (value); - } - - public override void Write (byte[] buffer, int offset, int count) - { - lock (slock) - source.Write (buffer, offset, count); - } - - public override void WriteByte (byte value) - { - lock (slock) - source.WriteByte (value); - } - } -} diff --git a/mcs/class/corlib/System.Security.Permissions/FileIOPermission.cs b/mcs/class/corlib/System.Security.Permissions/FileIOPermission.cs index 1d685ea757d..c08313b278f 100644 --- a/mcs/class/corlib/System.Security.Permissions/FileIOPermission.cs +++ b/mcs/class/corlib/System.Security.Permissions/FileIOPermission.cs @@ -112,6 +112,10 @@ namespace System.Security.Permissions { throw new NotImplementedException (); } + internal FileIOPermission (FileIOPermissionAccess access, string[] pathList, bool checkForDuplicates, bool needFullPath) + { + } + public FileIOPermissionAccess AllFiles { get { return m_AllFilesAccess; } set { diff --git a/mcs/class/corlib/System/Buffer.cs b/mcs/class/corlib/System/Buffer.cs index 46d02b6194b..0a80e11cfcb 100644 --- a/mcs/class/corlib/System/Buffer.cs +++ b/mcs/class/corlib/System/Buffer.cs @@ -114,5 +114,10 @@ namespace System { [MethodImplAttribute (MethodImplOptions.InternalCall)] internal extern static bool BlockCopyInternal (Array src, int src_offset, Array dest, int dest_offset, int count); + + internal static bool InternalBlockCopy (Array src, int src_offset, Array dest, int dest_offset, int count) + { + return BlockCopyInternal (src, src_offset, dest, dest_offset, count); + } } } diff --git a/mcs/class/corlib/corlib.dll.sources b/mcs/class/corlib/corlib.dll.sources index 0462080c5d6..893affda7b5 100644 --- a/mcs/class/corlib/corlib.dll.sources +++ b/mcs/class/corlib/corlib.dll.sources @@ -353,7 +353,6 @@ System.IO/FileStreamAsyncResult.cs System.IO/FileSystemInfo.cs System.IO/IOException.cs System.IO/LogcatTextWriter.cs -System.IO/MemoryStream.cs System.IO/MonoIO.cs System.IO/MonoIOError.cs System.IO/MonoFileType.cs @@ -363,7 +362,6 @@ System.IO/PathTooLongException.cs System.IO/SearchOption.cs System.IO/SearchPattern.cs System.IO/SeekOrigin.cs -System.IO/Stream.cs System.IO/StreamReader.cs System.IO/StreamWriter.cs System.IO/StringReader.cs @@ -1568,6 +1566,10 @@ ReferenceSources/EncodingTable.cs ../../../external/referencesource/mscorlib/system/globalization/thaibuddhistcalendar.cs ../../../external/referencesource/mscorlib/system/globalization/umalquracalendar.cs +../../../external/referencesource/mscorlib/system/io/__error.cs +../../../external/referencesource/mscorlib/system/io/memorystream.cs +../../../external/referencesource/mscorlib/system/io/stream.cs + ../../../external/referencesource/mscorlib/system/runtime/versioning/binarycompatibility.cs ../../../external/referencesource/mscorlib/system/runtime/versioning/targetframeworkid.cs |