| Index: runtime/bin/file_impl.dart
|
| diff --git a/runtime/bin/file_impl.dart b/runtime/bin/file_impl.dart
|
| index 900c59b4e8f10a49c14d8dc2ce956eaf588f3764..eb4f45b9928ffa8b94cd4b1704701927867b0672 100644
|
| --- a/runtime/bin/file_impl.dart
|
| +++ b/runtime/bin/file_impl.dart
|
| @@ -50,7 +50,7 @@ class _FileInputStream extends _BaseDataInputStream implements InputStream {
|
|
|
| class _FileOutputStream implements OutputStream {
|
| _FileOutputStream(File file) {
|
| - _file = file.openSync(true);
|
| + _file = file.openSync(FileMode.WRITE);
|
| }
|
|
|
| bool write(List<int> buffer, [bool copyBuffer = false]) {
|
| @@ -116,15 +116,15 @@ class _ExistsOperation extends _FileOperation {
|
|
|
|
|
| class _OpenOperation extends _FileOperation {
|
| - _OpenOperation(String this._name, bool this._writable);
|
| + _OpenOperation(String this._name, int this._mode);
|
|
|
| void execute(ReceivePort port) {
|
| - _replyPort.send(_FileUtils.checkedOpen(_name, _writable),
|
| + _replyPort.send(_FileUtils.checkedOpen(_name, _mode),
|
| port.toSendPort());
|
| }
|
|
|
| String _name;
|
| - bool _writable;
|
| + int _mode;
|
| }
|
|
|
|
|
| @@ -411,7 +411,7 @@ class _FileOperationScheduler {
|
| // Helper class containing static file helper methods.
|
| class _FileUtils {
|
| static bool exists(String name) native "File_Exists";
|
| - static int open(String name, bool writable) native "File_Open";
|
| + static int open(String name, int mode) native "File_Open";
|
| static bool create(String name) native "File_Create";
|
| static bool delete(String name) native "File_Delete";
|
| static String fullPath(String name) native "File_FullPath";
|
| @@ -429,9 +429,9 @@ class _FileUtils {
|
| static int length(int id) native "File_Length";
|
| static int flush(int id) native "File_Flush";
|
|
|
| - static int checkedOpen(String name, bool writable) {
|
| - if (name is !String || writable is !bool) return 0;
|
| - return open(name, writable);
|
| + static int checkedOpen(String name, int mode) {
|
| + if (name is !String || mode is !int) return 0;
|
| + return open(name, mode);
|
| }
|
|
|
| static bool checkedCreate(String name) {
|
| @@ -545,8 +545,17 @@ class _File implements File {
|
| }
|
| }
|
|
|
| - void open([bool writable = false]) {
|
| + void open([FileMode mode = FileMode.READ]) {
|
| _asyncUsed = true;
|
| + if (mode != FileMode.READ &&
|
| + mode != FileMode.WRITE &&
|
| + mode != FileMode.APPEND) {
|
| + if (_errorHandler != null) {
|
| + _errorHandler("Unknown file mode. Use FileMode.READ, FileMode.WRITE " +
|
| + "or FileMode.APPEND.");
|
| + return;
|
| + }
|
| + }
|
| // If no open handler is present, close the file immediately to
|
| // avoid leaking an open file descriptor.
|
| var handler = _openHandler;
|
| @@ -561,16 +570,22 @@ class _File implements File {
|
| _errorHandler("Cannot open file: $_name");
|
| }
|
| };
|
| - var operation = new _OpenOperation(_name, writable);
|
| + var operation = new _OpenOperation(_name, mode.mode);
|
| _scheduler.enqueue(operation, handleOpenResult);
|
| }
|
|
|
| - void openSync([bool writable = false]) {
|
| + void openSync([FileMode mode = FileMode.READ]) {
|
| if (_asyncUsed) {
|
| throw new FileIOException(
|
| "Mixed use of synchronous and asynchronous API");
|
| }
|
| - var id = _FileUtils.checkedOpen(_name, writable);
|
| + if (mode != FileMode.READ &&
|
| + mode != FileMode.WRITE &&
|
| + mode != FileMode.APPEND) {
|
| + throw new FileIOException("Unknown file mode. Use FileMode.READ, " +
|
| + "FileMode.WRITE or FileMode.APPEND.");
|
| + }
|
| + var id = _FileUtils.checkedOpen(_name, mode.mode);
|
| if (id == 0) {
|
| throw new FileIOException("Cannot open file: $_name");
|
| }
|
|
|