Index: runtime/bin/directory.cc |
diff --git a/runtime/bin/directory.cc b/runtime/bin/directory.cc |
index 0f771eecbdf38cde1ef019fd9b56c05e459db771..5d73ab8cfea18cf31dd84c10ae0a147351a832ab 100644 |
--- a/runtime/bin/directory.cc |
+++ b/runtime/bin/directory.cc |
@@ -5,6 +5,7 @@ |
#include "bin/directory.h" |
#include "bin/dartutils.h" |
+#include "bin/file.h" |
#include "bin/thread.h" |
#include "include/dart_api.h" |
#include "platform/assert.h" |
@@ -291,6 +292,23 @@ static CObject* DirectoryRenameRequest(const CObjectArray& request, |
} |
+static CObject* DirectoryResolveSymbolicLinksRequest( |
Anders Johnsen
2013/09/09 12:24:48
Why don't we use the file.cc version for all paths
Bill Hesse
2013/09/13 06:34:13
Done.
|
+ const CObjectArray& request) { |
+ if (request.Length() == 2 && request[1]->IsString()) { |
+ CObjectString filename(request[1]); |
+ char* result = File::GetCanonicalPath(filename.CString()); |
+ if (result != NULL) { |
+ CObject* path = new CObjectString(CObject::NewString(result)); |
+ free(result); |
+ return path; |
+ } else { |
+ return CObject::NewOSError(); |
+ } |
+ } |
+ return CObject::IllegalArgumentError(); |
+} |
+ |
+ |
static void DirectoryService(Dart_Port dest_port_id, |
Dart_Port reply_port_id, |
Dart_CObject* message) { |
@@ -324,6 +342,9 @@ static void DirectoryService(Dart_Port dest_port_id, |
case Directory::kRenameRequest: |
response = DirectoryRenameRequest(request, reply_port_id); |
break; |
+ case Directory::kResolveSymbolicLinksRequest: |
+ response = DirectoryResolveSymbolicLinksRequest(request); |
+ break; |
default: |
UNREACHABLE(); |
} |