Exemple #1
0
        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;
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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);
        }