Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1159)

Unified Diff: runtime/bin/directory_impl.dart

Issue 8588029: Add Directory.createTemp() to asynchronously create a temporary directory. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Added Windows code. Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/bin/directory_impl.dart
diff --git a/runtime/bin/directory_impl.dart b/runtime/bin/directory_impl.dart
index 485dfadfcac5e6b83b22824b6f9ee4ff70552399..2644005e0cee3beae1a697c5d199c510decf2248 100644
--- a/runtime/bin/directory_impl.dart
+++ b/runtime/bin/directory_impl.dart
@@ -29,6 +29,26 @@ class _DirectoryListingIsolate extends Isolate {
}
+class _DirectoryCreateTempIsolate extends Isolate {
+
+ _DirectoryCreateTempIsolate() : super.heavy();
+
+ void main() {
+ port.receive((path, replyTo) {
+ if (path == '') path = '/tmp/darttmpdirXXXXXX';
Mads Ager (google) 2011/11/18 09:50:45 You should add a comment about this default behavi
Bill Hesse 2011/11/21 15:48:41 Moved to .cc file.
+
+ // Call function to get file name
+ String result = _createTemp(path);
+ var message = {'success': (result != ''), 'directoryName': result};
Mads Ager (google) 2011/11/18 09:50:45 Do this in the caller? Just do replyTo.send(_creat
Bill Hesse 2011/11/21 15:48:41 Done.
+ replyTo.send(message);
+ port.close();
+ });
+ }
+
+ String _createTemp(String template) native "Directory_CreateTemp";
+}
+
+
class _Directory implements Directory {
_Directory(String this._path);
@@ -47,6 +67,24 @@ class _Directory implements Directory {
}
}
+ void createTemp(void createdHandler(Directory tempDir)) {
+ new _DirectoryCreateTempIsolate().spawn().then((port) {
+ port.call(_path).receive((result, ignored) {
+ if (result['success']) {
+ // Create new Directory with returned file name.
+ Directory tempDir = new Directory(result['directoryName']);
+ tempDir.dirHandler = _dirHandler;
Mads Ager (google) 2011/11/18 09:50:45 This is subtle, why do you transfer the handlers?
Bill Hesse 2011/11/21 15:48:41 All this is removed, and we do not create a new Di
+ tempDir.fileHandler = _fileHandler;
+ tempDir.doneHandler = _doneHandler;
+ tempDir.errorHandler = _errorHandler;
+ createdHandler(tempDir);
+ } else {
+ // Report error
+ }
+ });
+ });
+ }
+
void deleteSync() {
if (!_delete(_path)) {
throw new DirectoryException("Directory deletion failed: $_path");

Powered by Google App Engine
This is Rietveld 408576698