| Index: sdk/lib/io/file_impl.dart
|
| diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart
|
| index d39e3c07a8ae80e3519507c97f6e4187ec1a2a4d..aaf3f592ddb591d4d616b85d01fc1e015b252624 100644
|
| --- a/sdk/lib/io/file_impl.dart
|
| +++ b/sdk/lib/io/file_impl.dart
|
| @@ -214,8 +214,20 @@ class _File extends FileSystemEntity implements File {
|
| }
|
| }
|
|
|
| + // WARNING:
|
| + // Calling this function will increase the reference count on the native
|
| + // namespace object. It should only be called to pass the pointer to the
|
| + // IOService, which will decrement the reference count when it is finished
|
| + // with it.
|
| + static int _namespacePointer() => _Namespace._namespacePointer;
|
| +
|
| + static Future _dispatchWithNamespace(int request, List data) {
|
| + data[0] = _namespacePointer();
|
| + return _IOService._dispatch(request, data);
|
| + }
|
| +
|
| Future<bool> exists() {
|
| - return _IOService._dispatch(_FILE_EXISTS, [path]).then((response) {
|
| + return _dispatchWithNamespace(_FILE_EXISTS, [null, path]).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response, "Cannot check existence", path);
|
| }
|
| @@ -223,10 +235,10 @@ class _File extends FileSystemEntity implements File {
|
| });
|
| }
|
|
|
| - external static _exists(String path);
|
| + external static _exists(_Namespace namespace, String path);
|
|
|
| bool existsSync() {
|
| - var result = _exists(path);
|
| + var result = _exists(_Namespace._namespace, path);
|
| throwIfError(result, "Cannot check existence of file", path);
|
| return result;
|
| }
|
| @@ -237,7 +249,7 @@ class _File extends FileSystemEntity implements File {
|
| var result =
|
| recursive ? parent.create(recursive: true) : new Future.value(null);
|
| return result
|
| - .then((_) => _IOService._dispatch(_FILE_CREATE, [path]))
|
| + .then((_) => _dispatchWithNamespace(_FILE_CREATE, [null, path]))
|
| .then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response, "Cannot create file", path);
|
| @@ -246,17 +258,17 @@ class _File extends FileSystemEntity implements File {
|
| });
|
| }
|
|
|
| - external static _create(String path);
|
| + external static _create(_Namespace namespace, String path);
|
|
|
| - external static _createLink(String path, String target);
|
| + external static _createLink(_Namespace namespace, String path, String target);
|
|
|
| - external static _linkTarget(String path);
|
| + external static _linkTarget(_Namespace namespace, String path);
|
|
|
| void createSync({bool recursive: false}) {
|
| if (recursive) {
|
| parent.createSync(recursive: true);
|
| }
|
| - var result = _create(path);
|
| + var result = _create(_Namespace._namespace, path);
|
| throwIfError(result, "Cannot create file", path);
|
| }
|
|
|
| @@ -264,7 +276,7 @@ class _File extends FileSystemEntity implements File {
|
| if (recursive) {
|
| return new Directory(path).delete(recursive: true).then((_) => this);
|
| }
|
| - return _IOService._dispatch(_FILE_DELETE, [path]).then((response) {
|
| + return _dispatchWithNamespace(_FILE_DELETE, [null, path]).then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response, "Cannot delete file", path);
|
| }
|
| @@ -272,20 +284,21 @@ class _File extends FileSystemEntity implements File {
|
| });
|
| }
|
|
|
| - external static _deleteNative(String path);
|
| + external static _deleteNative(_Namespace namespace, String path);
|
|
|
| - external static _deleteLinkNative(String path);
|
| + external static _deleteLinkNative(_Namespace namespace, String path);
|
|
|
| void _deleteSync({bool recursive: false}) {
|
| if (recursive) {
|
| return new Directory(path).deleteSync(recursive: true);
|
| }
|
| - var result = _deleteNative(path);
|
| + var result = _deleteNative(_Namespace._namespace, path);
|
| throwIfError(result, "Cannot delete file", path);
|
| }
|
|
|
| Future<File> rename(String newPath) {
|
| - return _IOService._dispatch(_FILE_RENAME, [path, newPath]).then((response) {
|
| + return _dispatchWithNamespace(_FILE_RENAME, [null, path, newPath])
|
| + .then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(
|
| response, "Cannot rename file to '$newPath'", path);
|
| @@ -294,18 +307,21 @@ class _File extends FileSystemEntity implements File {
|
| });
|
| }
|
|
|
| - external static _rename(String oldPath, String newPath);
|
| + external static _rename(
|
| + _Namespace namespace, String oldPath, String newPath);
|
|
|
| - external static _renameLink(String oldPath, String newPath);
|
| + external static _renameLink(
|
| + _Namespace namespace, String oldPath, String newPath);
|
|
|
| File renameSync(String newPath) {
|
| - var result = _rename(path, newPath);
|
| + var result = _rename(_Namespace._namespace, path, newPath);
|
| throwIfError(result, "Cannot rename file to '$newPath'", path);
|
| return new File(newPath);
|
| }
|
|
|
| Future<File> copy(String newPath) {
|
| - return _IOService._dispatch(_FILE_COPY, [path, newPath]).then((response) {
|
| + return _dispatchWithNamespace(_FILE_COPY, [null, path, newPath])
|
| + .then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(
|
| response, "Cannot copy file to '$newPath'", path);
|
| @@ -314,10 +330,10 @@ class _File extends FileSystemEntity implements File {
|
| });
|
| }
|
|
|
| - external static _copy(String oldPath, String newPath);
|
| + external static _copy(_Namespace namespace, String oldPath, String newPath);
|
|
|
| File copySync(String newPath) {
|
| - var result = _copy(path, newPath);
|
| + var result = _copy(_Namespace._namespace, path, newPath);
|
| throwIfError(result, "Cannot copy file to '$newPath'", path);
|
| return new File(newPath);
|
| }
|
| @@ -331,8 +347,8 @@ class _File extends FileSystemEntity implements File {
|
| return new Future.error(
|
| new ArgumentError('Invalid file mode for this operation'));
|
| }
|
| - return _IOService
|
| - ._dispatch(_FILE_OPEN, [path, mode._mode]).then((response) {
|
| + return _dispatchWithNamespace(_FILE_OPEN, [null, path, mode._mode])
|
| + .then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response, "Cannot open file", path);
|
| }
|
| @@ -341,8 +357,8 @@ class _File extends FileSystemEntity implements File {
|
| }
|
|
|
| Future<int> length() {
|
| - return _IOService
|
| - ._dispatch(_FILE_LENGTH_FROM_PATH, [path]).then((response) {
|
| + return _dispatchWithNamespace(_FILE_LENGTH_FROM_PATH, [null, path])
|
| + .then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(
|
| response, "Cannot retrieve length of file", path);
|
| @@ -351,16 +367,17 @@ class _File extends FileSystemEntity implements File {
|
| });
|
| }
|
|
|
| - external static _lengthFromPath(String path);
|
| + external static _lengthFromPath(_Namespace namespace, String path);
|
|
|
| int lengthSync() {
|
| - var result = _lengthFromPath(path);
|
| + var result = _lengthFromPath(_Namespace._namespace, path);
|
| throwIfError(result, "Cannot retrieve length of file", path);
|
| return result;
|
| }
|
|
|
| Future<DateTime> lastAccessed() {
|
| - return _IOService._dispatch(_FILE_LAST_ACCESSED, [path]).then((response) {
|
| + return _dispatchWithNamespace(_FILE_LAST_ACCESSED, [null, path])
|
| + .then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(
|
| response, "Cannot retrieve access time", path);
|
| @@ -369,18 +386,18 @@ class _File extends FileSystemEntity implements File {
|
| });
|
| }
|
|
|
| - external static _lastAccessed(String path);
|
| + external static _lastAccessed(_Namespace namespace, String path);
|
|
|
| DateTime lastAccessedSync() {
|
| - var ms = _lastAccessed(path);
|
| + var ms = _lastAccessed(_Namespace._namespace, path);
|
| throwIfError(ms, "Cannot retrieve access time", path);
|
| return new DateTime.fromMillisecondsSinceEpoch(ms);
|
| }
|
|
|
| Future setLastAccessed(DateTime time) {
|
| int millis = time.millisecondsSinceEpoch;
|
| - return _IOService
|
| - ._dispatch(_FILE_SET_LAST_ACCESSED, [path, millis]).then((response) {
|
| + return _dispatchWithNamespace(_FILE_SET_LAST_ACCESSED, [null, path, millis])
|
| + .then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(response, "Cannot set access time", path);
|
| }
|
| @@ -388,11 +405,12 @@ class _File extends FileSystemEntity implements File {
|
| });
|
| }
|
|
|
| - external static _setLastAccessed(String path, int millis);
|
| + external static _setLastAccessed(
|
| + _Namespace namespace, String path, int millis);
|
|
|
| void setLastAccessedSync(DateTime time) {
|
| int millis = time.millisecondsSinceEpoch;
|
| - var result = _setLastAccessed(path, millis);
|
| + var result = _setLastAccessed(_Namespace._namespace, path, millis);
|
| if (result is OSError) {
|
| throw new FileSystemException(
|
| "Failed to set file access time", path, result);
|
| @@ -400,7 +418,8 @@ class _File extends FileSystemEntity implements File {
|
| }
|
|
|
| Future<DateTime> lastModified() {
|
| - return _IOService._dispatch(_FILE_LAST_MODIFIED, [path]).then((response) {
|
| + return _dispatchWithNamespace(_FILE_LAST_MODIFIED, [null, path])
|
| + .then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(
|
| response, "Cannot retrieve modification time", path);
|
| @@ -409,18 +428,18 @@ class _File extends FileSystemEntity implements File {
|
| });
|
| }
|
|
|
| - external static _lastModified(String path);
|
| + external static _lastModified(_Namespace namespace, String path);
|
|
|
| DateTime lastModifiedSync() {
|
| - var ms = _lastModified(path);
|
| + var ms = _lastModified(_Namespace._namespace, path);
|
| throwIfError(ms, "Cannot retrieve modification time", path);
|
| return new DateTime.fromMillisecondsSinceEpoch(ms);
|
| }
|
|
|
| Future setLastModified(DateTime time) {
|
| int millis = time.millisecondsSinceEpoch;
|
| - return _IOService
|
| - ._dispatch(_FILE_SET_LAST_MODIFIED, [path, millis]).then((response) {
|
| + return _dispatchWithNamespace(_FILE_SET_LAST_MODIFIED, [null, path, millis])
|
| + .then((response) {
|
| if (_isErrorResponse(response)) {
|
| throw _exceptionFromResponse(
|
| response, "Cannot set modification time", path);
|
| @@ -429,18 +448,19 @@ class _File extends FileSystemEntity implements File {
|
| });
|
| }
|
|
|
| - external static _setLastModified(String path, int millis);
|
| + external static _setLastModified(
|
| + _Namespace namespace, String path, int millis);
|
|
|
| void setLastModifiedSync(DateTime time) {
|
| int millis = time.millisecondsSinceEpoch;
|
| - var result = _setLastModified(path, millis);
|
| + var result = _setLastModified(_Namespace._namespace, path, millis);
|
| if (result is OSError) {
|
| throw new FileSystemException(
|
| "Failed to set file modification time", path, result);
|
| }
|
| }
|
|
|
| - external static _open(String path, int mode);
|
| + external static _open(_Namespace namespace, String path, int mode);
|
|
|
| RandomAccessFile openSync({FileMode mode: FileMode.READ}) {
|
| if (mode != FileMode.READ &&
|
| @@ -450,7 +470,7 @@ class _File extends FileSystemEntity implements File {
|
| mode != FileMode.WRITE_ONLY_APPEND) {
|
| throw new ArgumentError('Invalid file mode for this operation');
|
| }
|
| - var id = _open(path, mode._mode);
|
| + var id = _open(_Namespace._namespace, path, mode._mode);
|
| throwIfError(id, "Cannot open file", path);
|
| return new _RandomAccessFile(id, path);
|
| }
|
| @@ -1035,6 +1055,7 @@ class _RandomAccessFile implements RandomAccessFile {
|
|
|
| bool closed = false;
|
|
|
| + // WARNING:
|
| // Calling this function will increase the reference count on the native
|
| // object that implements the file operations. It should only be called to
|
| // pass the pointer to the IO Service, which will decrement the reference
|
|
|