Index: sdk/lib/io/directory_impl.dart |
diff --git a/sdk/lib/io/directory_impl.dart b/sdk/lib/io/directory_impl.dart |
index 9b43b8e962333d61d0cce020810bc611267fe0cf..2f231969012b5bdc76cbb5621e0fa91b1fd34c8e 100644 |
--- a/sdk/lib/io/directory_impl.dart |
+++ b/sdk/lib/io/directory_impl.dart |
@@ -14,19 +14,24 @@ class _Directory extends FileSystemEntity implements Directory { |
} |
} |
- external static _current(); |
- external static _setCurrent(path); |
- external static _createTemp(String path); |
- external static String _systemTemp(); |
- external static _exists(String path); |
- external static _create(String path); |
- external static _deleteNative(String path, bool recursive); |
- external static _rename(String path, String newPath); |
- external static void _fillWithDirectoryListing(List<FileSystemEntity> list, |
- String path, bool recursive, bool followLinks); |
+ external static _current(_Namespace namespace); |
+ external static _setCurrent(_Namespace namespace, path); |
+ external static _createTemp(_Namespace namespace, String path); |
+ external static String _systemTemp(_Namespace namespace); |
+ external static _exists(_Namespace namespace, String path); |
+ external static _create(_Namespace namespace, String path); |
+ external static _deleteNative( |
+ _Namespace namespace, String path, bool recursive); |
+ external static _rename(_Namespace namespace, String path, String newPath); |
+ external static void _fillWithDirectoryListing( |
+ _Namespace namespace, |
+ List<FileSystemEntity> list, |
+ String path, |
+ bool recursive, |
+ bool followLinks); |
static Directory get current { |
- var result = _current(); |
+ var result = _current(_Namespace._namespace); |
if (result is OSError) { |
throw new FileSystemException( |
"Getting current working directory failed", "", result); |
@@ -34,9 +39,11 @@ class _Directory extends FileSystemEntity implements Directory { |
return new _Directory(result); |
} |
+ // TODO(zra): Provide a flag that an embedder can set to make attempts to set |
+ // the working directory for the whole process fail. |
static void set current(path) { |
if (path is Directory) path = path.path; |
- var result = _setCurrent(path); |
+ var result = _setCurrent(_Namespace._namespace, path); |
if (result is ArgumentError) throw result; |
if (result is OSError) { |
throw new FileSystemException( |
@@ -49,7 +56,8 @@ class _Directory extends FileSystemEntity implements Directory { |
} |
Future<bool> exists() { |
- return _IOService._dispatch(_DIRECTORY_EXISTS, [path]).then((response) { |
+ return _File._dispatchWithNamespace(_DIRECTORY_EXISTS, [null, path]).then( |
+ (response) { |
if (_isErrorResponse(response)) { |
throw _exceptionOrErrorFromResponse(response, "Exists failed"); |
} |
@@ -58,7 +66,7 @@ class _Directory extends FileSystemEntity implements Directory { |
} |
bool existsSync() { |
- var result = _exists(path); |
+ var result = _exists(_Namespace._namespace, path); |
if (result is OSError) { |
throw new FileSystemException("Exists failed", path, result); |
} |
@@ -80,7 +88,8 @@ class _Directory extends FileSystemEntity implements Directory { |
} |
}); |
} else { |
- return _IOService._dispatch(_DIRECTORY_CREATE, [path]).then((response) { |
+ return _File._dispatchWithNamespace(_DIRECTORY_CREATE, [null, path]).then( |
+ (response) { |
if (_isErrorResponse(response)) { |
throw _exceptionOrErrorFromResponse(response, "Creation failed"); |
} |
@@ -96,13 +105,14 @@ class _Directory extends FileSystemEntity implements Directory { |
parent.createSync(recursive: true); |
} |
} |
- var result = _create(path); |
+ var result = _create(_Namespace._namespace, path); |
if (result is OSError) { |
throw new FileSystemException("Creation failed", path, result); |
} |
} |
- static Directory get systemTemp => new Directory(_systemTemp()); |
+ static Directory get systemTemp => |
+ new Directory(_systemTemp(_Namespace._namespace)); |
Future<Directory> createTemp([String prefix]) { |
if (prefix == null) prefix = ''; |
@@ -116,8 +126,8 @@ class _Directory extends FileSystemEntity implements Directory { |
} else { |
fullPrefix = "$path${Platform.pathSeparator}$prefix"; |
} |
- return _IOService |
- ._dispatch(_DIRECTORY_CREATE_TEMP, [fullPrefix]).then((response) { |
+ return _File._dispatchWithNamespace( |
+ _DIRECTORY_CREATE_TEMP, [null, fullPrefix]).then((response) { |
if (_isErrorResponse(response)) { |
throw _exceptionOrErrorFromResponse( |
response, "Creation of temporary directory failed"); |
@@ -138,7 +148,7 @@ class _Directory extends FileSystemEntity implements Directory { |
} else { |
fullPrefix = "$path${Platform.pathSeparator}$prefix"; |
} |
- var result = _createTemp(fullPrefix); |
+ var result = _createTemp(_Namespace._namespace, fullPrefix); |
if (result is OSError) { |
throw new FileSystemException( |
"Creation of temporary directory failed", fullPrefix, result); |
@@ -147,8 +157,8 @@ class _Directory extends FileSystemEntity implements Directory { |
} |
Future<Directory> _delete({bool recursive: false}) { |
- return _IOService |
- ._dispatch(_DIRECTORY_DELETE, [path, recursive]).then((response) { |
+ return _File._dispatchWithNamespace( |
+ _DIRECTORY_DELETE, [null, path, recursive]).then((response) { |
if (_isErrorResponse(response)) { |
throw _exceptionOrErrorFromResponse(response, "Deletion failed"); |
} |
@@ -157,15 +167,15 @@ class _Directory extends FileSystemEntity implements Directory { |
} |
void _deleteSync({bool recursive: false}) { |
- var result = _deleteNative(path, recursive); |
+ var result = _deleteNative(_Namespace._namespace, path, recursive); |
if (result is OSError) { |
throw new FileSystemException("Deletion failed", path, result); |
} |
} |
Future<Directory> rename(String newPath) { |
- return _IOService |
- ._dispatch(_DIRECTORY_RENAME, [path, newPath]).then((response) { |
+ return _File._dispatchWithNamespace( |
+ _DIRECTORY_RENAME, [null, path, newPath]).then((response) { |
if (_isErrorResponse(response)) { |
throw _exceptionOrErrorFromResponse(response, "Rename failed"); |
} |
@@ -177,7 +187,7 @@ class _Directory extends FileSystemEntity implements Directory { |
if (newPath is! String) { |
throw new ArgumentError(); |
} |
- var result = _rename(path, newPath); |
+ var result = _rename(_Namespace._namespace, path, newPath); |
if (result is OSError) { |
throw new FileSystemException("Rename failed", path, result); |
} |
@@ -200,6 +210,7 @@ class _Directory extends FileSystemEntity implements Directory { |
} |
var result = <FileSystemEntity>[]; |
_fillWithDirectoryListing( |
+ _Namespace._namespace, |
result, |
FileSystemEntity._ensureTrailingPathSeparators(path), |
recursive, |
@@ -261,6 +272,7 @@ class _AsyncDirectoryLister { |
onListen: onListen, onResume: onResume, onCancel: onCancel, sync: true); |
} |
+ // WARNING: |
// Calling this function will increase the reference count on the native |
// object that implements the async directory lister operations. It should |
// only be called to pass the pointer to the IO Service, which will decrement |
@@ -272,8 +284,8 @@ class _AsyncDirectoryLister { |
Stream<FileSystemEntity> get stream => controller.stream; |
void onListen() { |
- _IOService._dispatch( |
- _DIRECTORY_LIST_START, [path, recursive, followLinks]).then((response) { |
+ _File._dispatchWithNamespace(_DIRECTORY_LIST_START, |
+ [null, path, recursive, followLinks]).then((response) { |
if (response is int) { |
_ops = new _AsyncDirectoryListerOps(response); |
next(); |