| 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(
|
| + 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();
|
| }
|
|
|