void FlushBuffer() { if (buf_dirty) { // if (st == null) { MonoIOError error; if (CanSeek == true && !isExposed) { MonoIO.Seek(safeHandle, buf_start, SeekOrigin.Begin, out error); if (error != MonoIOError.ERROR_SUCCESS) { // don't leak the path information for isolated storage throw MonoIO.GetException(GetSecureFileName(name), error); } } int wcount = buf_length; int offset = 0; while (wcount > 0) { int n = MonoIO.Write(safeHandle, buf, offset, buf_length, out error); if (error != MonoIOError.ERROR_SUCCESS) { // don't leak the path information for isolated storage throw MonoIO.GetException(GetSecureFileName(name), error); } wcount -= n; offset += n; } // } else { // st.Write (buf, 0, buf_length); // } } buf_start += buf_offset; buf_offset = buf_length = 0; buf_dirty = false; }
void FlushBuffer(Stream st) { if (buf_dirty) { MonoIOError error; if (CanSeek == true) { MonoIO.Seek(handle, buf_start, SeekOrigin.Begin, out error); if (error != MonoIOError.ERROR_SUCCESS) { // don't leak the path information for isolated storage throw MonoIO.GetException(GetSecureFileName(name), error); } } if (st == null) { MonoIO.Write(handle, buf, 0, buf_length, out error); if (error != MonoIOError.ERROR_SUCCESS) { // don't leak the path information for isolated storage throw MonoIO.GetException(GetSecureFileName(name), error); } } else { st.Write(buf, 0, buf_length); } } buf_start += buf_offset; buf_offset = buf_length = 0; buf_dirty = false; }
public override long Seek(long offset, SeekOrigin origin) { long pos; if (safeHandle.IsClosed) { throw new ObjectDisposedException("Stream has been closed"); } // make absolute if (CanSeek == false) { throw new NotSupportedException("The stream does not support seeking"); } switch (origin) { case SeekOrigin.End: pos = Length + offset; break; case SeekOrigin.Current: pos = Position + offset; break; case SeekOrigin.Begin: pos = offset; break; default: throw new ArgumentException("origin", "Invalid SeekOrigin"); } if (pos < 0) { /* LAMESPEC: shouldn't this be * ArgumentOutOfRangeException? */ throw new IOException("Attempted to Seek before the beginning of the stream"); } if (pos < this.append_startpos) { /* More undocumented crap */ throw new IOException("Can't seek back over pre-existing data in append mode"); } FlushBuffer(); MonoIOError error; buf_start = MonoIO.Seek(safeHandle, pos, SeekOrigin.Begin, out error); if (error != MonoIOError.ERROR_SUCCESS) { // don't leak the path information for isolated storage throw MonoIO.GetException(GetSecureFileName(name), error); } return(buf_start); }