Index: runtime/bin/directory.cc |
diff --git a/runtime/bin/directory.cc b/runtime/bin/directory.cc |
index 1493b2d4fe0efa16061ff8c164c2fd33448b6810..c2185953cb8a0e5ff34b04b0d425ebf9cdec8afe 100644 |
--- a/runtime/bin/directory.cc |
+++ b/runtime/bin/directory.cc |
@@ -117,6 +117,9 @@ void FUNCTION_NAME(Directory_List)(Dart_NativeArguments args) { |
Dart_Handle recursive = Dart_GetNativeArgument(args, 1); |
// Create the list to hold the directory listing here, and pass it to the |
// SyncDirectoryListing object, which adds elements to it. |
+ Dart_Handle follow_links = Dart_GetNativeArgument(args, 2); |
+ // Create the list to hold the directory listing here, and pass it to the |
+ // SyncDirectoryListing object, which adds elements to it. |
Dart_Handle results = |
Dart_New(DartUtils::GetDartClass(DartUtils::kCoreLibURL, "List"), |
Dart_Null(), |
@@ -125,6 +128,7 @@ void FUNCTION_NAME(Directory_List)(Dart_NativeArguments args) { |
SyncDirectoryListing sync_listing(results); |
Directory::List(DartUtils::GetStringValue(path), |
DartUtils::GetBooleanValue(recursive), |
+ DartUtils::GetBooleanValue(follow_links), |
&sync_listing); |
Dart_SetReturnValue(args, results); |
Dart_ExitScope(); |
@@ -194,13 +198,17 @@ static CObject* DirectoryCreateTempRequest(const CObjectArray& request) { |
static CObject* DirectoryListRequest(const CObjectArray& request, |
Dart_Port response_port) { |
- if (request.Length() == 3 && request[1]->IsString() && request[2]->IsBool()) { |
+ if (request.Length() == 4 && |
+ request[1]->IsString() && |
+ request[2]->IsBool() && |
+ request[3]->IsBool()) { |
AsyncDirectoryListing* dir_listing = |
new AsyncDirectoryListing(response_port); |
CObjectString path(request[1]); |
CObjectBool recursive(request[2]); |
+ CObjectBool follow_links(request[3]); |
bool completed = Directory::List( |
- path.CString(), recursive.Value(), dir_listing); |
+ path.CString(), recursive.Value(), follow_links.Value(), dir_listing); |
delete dir_listing; |
CObjectArray* response = new CObjectArray(CObject::NewArray(2)); |
response->SetAt( |
@@ -315,6 +323,12 @@ bool AsyncDirectoryListing::HandleFile(char* file_name) { |
} |
+bool AsyncDirectoryListing::HandleLink(char* link_name) { |
+ CObjectArray* response = NewResponse(kListLink, link_name); |
+ return Dart_PostCObject(response_port_, response->AsApiCObject()); |
+} |
+ |
+ |
bool AsyncDirectoryListing::HandleError(const char* dir_name) { |
CObject* err = CObject::NewOSError(); |
CObjectArray* response = new CObjectArray(CObject::NewArray(3)); |
@@ -332,6 +346,14 @@ bool SyncDirectoryListing::HandleDirectory(char* dir_name) { |
return true; |
} |
+bool SyncDirectoryListing::HandleLink(char* link_name) { |
+ Dart_Handle link_name_dart = DartUtils::NewString(link_name); |
+ Dart_Handle link = |
+ Dart_New(link_class_, Dart_Null(), 1, &link_name_dart); |
+ Dart_Invoke(results_, add_string_, 1, &link); |
+ return true; |
+} |
+ |
bool SyncDirectoryListing::HandleFile(char* file_name) { |
Dart_Handle file_name_dart = DartUtils::NewString(file_name); |
Dart_Handle file = |