| Index: runtime/bin/directory.cc
|
| diff --git a/runtime/bin/directory.cc b/runtime/bin/directory.cc
|
| index 3997a32d7250b20ce413ddaf0eaea7faddce4bd1..f99a5d1c5eb7527cc36dcff660e26c3b6f65e3ba 100644
|
| --- a/runtime/bin/directory.cc
|
| +++ b/runtime/bin/directory.cc
|
| @@ -124,12 +124,22 @@ void FUNCTION_NAME(Directory_FillWithDirectoryListing)(
|
| Dart_Handle path = Dart_GetNativeArgument(args, 1);
|
| Dart_Handle recursive = Dart_GetNativeArgument(args, 2);
|
| Dart_Handle follow_links = Dart_GetNativeArgument(args, 3);
|
| - // Pass the list that should hold the directory listing to the
|
| - // SyncDirectoryListing object, which adds elements to it.
|
| - SyncDirectoryListing sync_listing(results, DartUtils::GetStringValue(path),
|
| - DartUtils::GetBooleanValue(recursive),
|
| - DartUtils::GetBooleanValue(follow_links));
|
| - Directory::List(&sync_listing);
|
| +
|
| + Dart_Handle dart_error;
|
| + {
|
| + // Pass the list that should hold the directory listing to the
|
| + // SyncDirectoryListing object, which adds elements to it.
|
| + SyncDirectoryListing sync_listing(results, DartUtils::GetStringValue(path),
|
| + DartUtils::GetBooleanValue(recursive),
|
| + DartUtils::GetBooleanValue(follow_links));
|
| + Directory::List(&sync_listing);
|
| + dart_error = sync_listing.dart_error();
|
| + }
|
| + if (Dart_IsError(dart_error)) {
|
| + Dart_PropagateError(dart_error);
|
| + } else if (!Dart_IsNull(dart_error)) {
|
| + Dart_ThrowException(dart_error);
|
| + }
|
| }
|
|
|
|
|
| @@ -401,7 +411,8 @@ bool SyncDirectoryListing::HandleDirectory(const char* dir_name) {
|
| Dart_Handle dir = Dart_New(directory_type_, Dart_Null(), 1, &dir_name_dart);
|
| Dart_Handle result = Dart_Invoke(results_, add_string_, 1, &dir);
|
| if (Dart_IsError(result)) {
|
| - Dart_PropagateError(result);
|
| + dart_error_ = result;
|
| + return false;
|
| }
|
| return true;
|
| }
|
| @@ -412,7 +423,8 @@ bool SyncDirectoryListing::HandleLink(const char* link_name) {
|
| Dart_Handle link = Dart_New(link_type_, Dart_Null(), 1, &link_name_dart);
|
| Dart_Handle result = Dart_Invoke(results_, add_string_, 1, &link);
|
| if (Dart_IsError(result)) {
|
| - Dart_PropagateError(result);
|
| + dart_error_ = result;
|
| + return false;
|
| }
|
| return true;
|
| }
|
| @@ -423,7 +435,8 @@ bool SyncDirectoryListing::HandleFile(const char* file_name) {
|
| Dart_Handle file = Dart_New(file_type_, Dart_Null(), 1, &file_name_dart);
|
| Dart_Handle result = Dart_Invoke(results_, add_string_, 1, &file);
|
| if (Dart_IsError(result)) {
|
| - Dart_PropagateError(result);
|
| + dart_error_ = result;
|
| + return false;
|
| }
|
| return true;
|
| }
|
| @@ -435,10 +448,11 @@ bool SyncDirectoryListing::HandleError() {
|
| args[0] = DartUtils::NewString("Directory listing failed");
|
| args[1] = DartUtils::NewString(error() ? "Invalid path" : CurrentPath());
|
| args[2] = dart_os_error;
|
| - Dart_ThrowException(Dart_New(
|
| +
|
| + dart_error_ = Dart_New(
|
| DartUtils::GetDartType(DartUtils::kIOLibURL, "FileSystemException"),
|
| - Dart_Null(), 3, args));
|
| - return true;
|
| + Dart_Null(), 3, args);
|
| + return false;
|
| }
|
|
|
|
|
|
|