Chromium Code Reviews| 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(); |
| } |