Chromium Code Reviews| Index: runtime/bin/file_impl.dart |
| diff --git a/runtime/bin/file_impl.dart b/runtime/bin/file_impl.dart |
| index 10a5cfc9b393f835ab03825f7a5dcabc3e2c79ce..a90b0dcc5e6e01589f7267c2d6628f65c40ecfb0 100644 |
| --- a/runtime/bin/file_impl.dart |
| +++ b/runtime/bin/file_impl.dart |
| @@ -650,8 +650,8 @@ class _File extends _FileBase implements File { |
| Future<String> readAsText([Encoding encoding = Encoding.UTF_8]) { |
| _ensureFileService(); |
| - var decoder = _StringDecoders.decoder(encoding); |
| return readAsBytes().transform((bytes) { |
| + var decoder = _StringDecoders.decoder(encoding); |
| decoder.write(bytes); |
| return decoder.decoded; |
| }); |
| @@ -683,8 +683,8 @@ class _File extends _FileBase implements File { |
| Future<List<String>> readAsLines([Encoding encoding = Encoding.UTF_8]) { |
| _ensureFileService(); |
| Completer<List<String>> completer = new Completer<List<String>>(); |
| - var decoder = _StringDecoders.decoder(encoding); |
| return readAsBytes().transform((bytes) { |
| + var decoder = _StringDecoders.decoder(encoding); |
| decoder.write(bytes); |
| return _getDecodedLines(decoder); |
| }); |
| @@ -716,7 +716,7 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
| Future<RandomAccessFile> close() { |
| Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); |
| - if (_id == 0) { |
| + if (_isClosed) { |
| // Complete asynchronously so the user has a chance to setup |
| // handlers without getting exceptions when registering the |
| // then handler. |
| @@ -756,6 +756,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
| Future<int> readByte() { |
| _ensureFileService(); |
| Completer<int> completer = new Completer<int>(); |
| + if (_isClosed) { |
|
Søren Gjesse
2012/05/16 11:54:11
Add a function for closed exception as 4 lines of
Mads Ager (google)
2012/05/16 12:45:19
Done. Each of these replaced by:
if (_isClosed) r
|
| + new Timer(0, (t) { |
| + completer.completeException( |
| + new FileIOException("File closed '$_name'")); |
| + }); |
| + return completer.future; |
| + } |
| List request = new List(2); |
| request[0] = _FileUtils.kReadByteRequest; |
| request[1] = _id; |
| @@ -793,6 +800,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
| }); |
| return completer.future; |
| }; |
| + if (_isClosed) { |
| + new Timer(0, (t) { |
| + completer.completeException( |
| + new FileIOException("File closed '$_name'")); |
| + }); |
| + return completer.future; |
| + } |
| List request = new List(3); |
| request[0] = _FileUtils.kReadListRequest; |
| request[1] = _id; |
| @@ -845,6 +859,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
| }); |
| return completer.future; |
| } |
| + if (_isClosed) { |
| + new Timer(0, (t) { |
| + completer.completeException( |
| + new FileIOException("File closed '$_name'")); |
| + }); |
| + return completer.future; |
| + } |
| List request = new List(3); |
| request[0] = _FileUtils.kWriteByteRequest; |
| request[1] = _id; |
| @@ -888,6 +909,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
| }); |
| return completer.future; |
| } |
| + if (_isClosed) { |
| + new Timer(0, (t) { |
| + completer.completeException( |
| + new FileIOException("File closed '$_name'")); |
| + }); |
| + return completer.future; |
| + } |
| List result = |
| _FileUtils.ensureFastAndSerializableBuffer(buffer, offset, bytes); |
| @@ -935,6 +963,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
| [Encoding encoding = Encoding.UTF_8]) { |
| _ensureFileService(); |
| Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); |
| + if (_isClosed) { |
| + new Timer(0, (t) { |
| + completer.completeException( |
| + new FileIOException("File closed '$_name'")); |
| + }); |
| + return completer.future; |
| + } |
| List request = new List(3); |
| request[0] = _FileUtils.kWriteStringRequest; |
| request[1] = _id; |
| @@ -963,6 +998,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
| Future<int> position() { |
| _ensureFileService(); |
| Completer<int> completer = new Completer<int>(); |
| + if (_isClosed) { |
| + new Timer(0, (t) { |
| + completer.completeException( |
| + new FileIOException("File closed '$_name'")); |
| + }); |
| + return completer.future; |
| + } |
| List request = new List(2); |
| request[0] = _FileUtils.kPositionRequest; |
| request[1] = _id; |
| @@ -990,6 +1032,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
| Future<RandomAccessFile> setPosition(int position) { |
| _ensureFileService(); |
| Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); |
| + if (_isClosed) { |
| + new Timer(0, (t) { |
| + completer.completeException( |
| + new FileIOException("File closed '$_name'")); |
| + }); |
| + return completer.future; |
| + } |
| List request = new List(3); |
| request[0] = _FileUtils.kSetPositionRequest; |
| request[1] = _id; |
| @@ -1017,6 +1066,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
| Future<RandomAccessFile> truncate(int length) { |
| _ensureFileService(); |
| Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); |
| + if (_isClosed) { |
| + new Timer(0, (t) { |
| + completer.completeException( |
| + new FileIOException("File closed '$_name'")); |
| + }); |
| + return completer.future; |
| + } |
| List request = new List(3); |
| request[0] = _FileUtils.kTruncateRequest; |
| request[1] = _id; |
| @@ -1044,6 +1100,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
| Future<int> length() { |
| _ensureFileService(); |
| Completer<int> completer = new Completer<int>(); |
| + if (_isClosed) { |
| + new Timer(0, (t) { |
| + completer.completeException( |
| + new FileIOException("File closed '$_name'")); |
| + }); |
| + return completer.future; |
| + } |
| List request = new List(2); |
| request[0] = _FileUtils.kLengthRequest; |
| request[1] = _id; |
| @@ -1071,6 +1134,13 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
| Future<RandomAccessFile> flush() { |
| _ensureFileService(); |
| Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); |
| + if (_isClosed) { |
| + new Timer(0, (t) { |
| + completer.completeException( |
| + new FileIOException("File closed '$_name'")); |
| + }); |
| + return completer.future; |
| + } |
| List request = new List(2); |
| request[0] = _FileUtils.kFlushRequest; |
| request[1] = _id; |
| @@ -1102,8 +1172,10 @@ class _RandomAccessFile extends _FileBase implements RandomAccessFile { |
| } |
| } |
| + bool get _isClosed() => _id == 0; |
| + |
| void _checkNotClosed() { |
| - if (_id == 0) { |
| + if (_isClosed) { |
| throw new FileIOException("File closed '$_name'"); |
| } |
| } |