Chromium Code Reviews| Index: runtime/bin/file_impl.dart |
| diff --git a/runtime/bin/file_impl.dart b/runtime/bin/file_impl.dart |
| index 8ab5bbbf29afdd5e61c5212dd2c4bdf2f46cc393..2fcf36e4829a5f91a95a291a135f030e951ad7ad 100644 |
| --- a/runtime/bin/file_impl.dart |
| +++ b/runtime/bin/file_impl.dart |
| @@ -251,7 +251,7 @@ class _FileUtils { |
| } |
| static bool exists(String name) native "File_Exists"; |
| - static int open(String name, int mode) native "File_Open"; |
| + static open(String name, int mode) native "File_Open"; |
|
Mads Ager (google)
2012/03/09 09:40:13
Do we want 'void' here?
Søren Gjesse
2012/03/13 08:25:55
No, open now returns either an int or an instance
|
| static bool create(String name) native "File_Create"; |
| static bool delete(String name) native "File_Delete"; |
| static String fullPath(String name) native "File_FullPath"; |
| @@ -280,8 +280,14 @@ class _FileUtils { |
| static SendPort newServicePort() native "File_NewServicePort"; |
| static int checkedOpen(String name, int mode) { |
| - if (name is !String || mode is !int) return 0; |
| - return open(name, mode); |
| + if (name is !String || mode is !int) { |
| + throw new IllegalArgumentException(); |
| + }; |
| + var result = open(name, mode); |
| + if (result is OSError) { |
| + throw new FileIOException("Cannot open file", result); |
| + } |
| + return result; |
| } |
| static bool checkedCreate(String name) { |
| @@ -440,11 +446,14 @@ class _File implements File { |
| request[0] = _FileUtils.kOpenRequest; |
| request[1] = _name; |
| request[2] = mode._mode; // Direct int value for serialization. |
| - _fileService.call(request).receive((id, replyTo) { |
| - if (id != 0) { |
| + _fileService.call(request).receive((result, replyTo) { |
| + if (result is Array) { |
| + if (_onError != null) { |
| + _onError(new FileIOException( |
| + "Cannot open file", new OSError(result[1], result[0]))); |
| + } |
| + } else { |
| callback(new _RandomAccessFile(id, _name)); |
| - } else if (_onError != null) { |
| - _onError("Cannot open file: $_name"); |
| } |
| }); |
| } |
| @@ -461,9 +470,7 @@ class _File implements File { |
| "FileMode.WRITE or FileMode.APPEND."); |
| } |
| var id = _FileUtils.checkedOpen(_name, mode._mode); |
| - if (id == 0) { |
| - throw new FileIOException("Cannot open file: $_name"); |
| - } |
| + assert(id != 0); |
| return new _RandomAccessFile(id, _name); |
| } |