Index: runtime/bin/directory.cc |
diff --git a/runtime/bin/directory.cc b/runtime/bin/directory.cc |
index b0d8c2fde5e6f52c3437e6012594253b0435fad2..3b969935bb61cccf191e4862b5fcf15902141009 100644 |
--- a/runtime/bin/directory.cc |
+++ b/runtime/bin/directory.cc |
@@ -26,24 +26,22 @@ void FUNCTION_NAME(Directory_Current)(Dart_NativeArguments args) { |
void FUNCTION_NAME(Directory_Exists)(Dart_NativeArguments args) { |
- static const int kError = -1; |
static const int kExists = 1; |
static const int kDoesNotExist = 0; |
Dart_EnterScope(); |
Dart_Handle path = Dart_GetNativeArgument(args, 0); |
- if (Dart_IsString(path)) { |
- Directory::ExistsResult result = |
- Directory::Exists(DartUtils::GetStringValue(path)); |
- int return_value = kError; |
- if (result == Directory::EXISTS) { |
- return_value = kExists; |
- } |
- if (result == Directory::DOES_NOT_EXIST) { |
- return_value = kDoesNotExist; |
- } |
- Dart_SetReturnValue(args, Dart_NewInteger(return_value)); |
- } else { |
+ Directory::ExistsResult result = |
+ Directory::Exists(DartUtils::GetStringValue(path)); |
+ if (result == Directory::EXISTS) { |
+ Dart_SetReturnValue(args, Dart_NewInteger(kExists)); |
+ } else if (result == Directory::DOES_NOT_EXIST) { |
Dart_SetReturnValue(args, Dart_NewInteger(kDoesNotExist)); |
+ } else { |
+ Dart_Handle err = DartUtils::NewDartOSError(); |
+ if (Dart_IsError(err)) { |
+ Dart_PropagateError(err); |
+ } |
+ Dart_SetReturnValue(args, err); |
} |
Dart_ExitScope(); |
} |
@@ -52,11 +50,14 @@ void FUNCTION_NAME(Directory_Exists)(Dart_NativeArguments args) { |
void FUNCTION_NAME(Directory_Create)(Dart_NativeArguments args) { |
Dart_EnterScope(); |
Dart_Handle path = Dart_GetNativeArgument(args, 0); |
- if (Dart_IsString(path)) { |
- bool created = Directory::Create(DartUtils::GetStringValue(path)); |
- Dart_SetReturnValue(args, Dart_NewBoolean(created)); |
+ if (Directory::Create(DartUtils::GetStringValue(path))) { |
+ Dart_SetReturnValue(args, Dart_True()); |
} else { |
- Dart_SetReturnValue(args, Dart_NewBoolean(false)); |
+ Dart_Handle err = DartUtils::NewDartOSError(); |
+ if (Dart_IsError(err)) { |
+ Dart_PropagateError(err); |
+ } |
+ Dart_SetReturnValue(args, err); |
} |
Dart_ExitScope(); |
} |
@@ -84,12 +85,15 @@ void FUNCTION_NAME(Directory_Delete)(Dart_NativeArguments args) { |
Dart_EnterScope(); |
Dart_Handle path = Dart_GetNativeArgument(args, 0); |
Dart_Handle recursive = Dart_GetNativeArgument(args, 1); |
- if (Dart_IsString(path) && Dart_IsBoolean(recursive)) { |
- bool deleted = Directory::Delete(DartUtils::GetStringValue(path), |
- DartUtils::GetBooleanValue(recursive)); |
- Dart_SetReturnValue(args, Dart_NewBoolean(deleted)); |
+ if (Directory::Delete(DartUtils::GetStringValue(path), |
+ DartUtils::GetBooleanValue(recursive))) { |
+ Dart_SetReturnValue(args, Dart_True()); |
} else { |
- Dart_SetReturnValue(args, Dart_NewBoolean(false)); |
+ Dart_Handle err = DartUtils::NewDartOSError(); |
+ if (Dart_IsError(err)) { |
+ Dart_PropagateError(err); |
+ } |
+ Dart_SetReturnValue(args, err); |
} |
Dart_ExitScope(); |
} |
@@ -98,10 +102,13 @@ void FUNCTION_NAME(Directory_Delete)(Dart_NativeArguments args) { |
static CObject* DirectoryCreateRequest(const CObjectArray& request) { |
if (request.Length() == 2 && request[1]->IsString()) { |
CObjectString path(request[1]); |
- bool created = Directory::Create(path.CString()); |
- return CObject::Bool(created); |
+ if (Directory::Create(path.CString())) { |
+ return CObject::True(); |
+ } else { |
+ return CObject::NewOSError(); |
+ } |
} |
- return CObject::False(); |
+ return CObject::IllegalArgumentError(); |
} |
@@ -109,30 +116,31 @@ static CObject* DirectoryDeleteRequest(const CObjectArray& request) { |
if (request.Length() == 3 && request[1]->IsString() && request[2]->IsBool()) { |
CObjectString path(request[1]); |
CObjectBool recursive(request[2]); |
- bool deleted = Directory::Delete(path.CString(), recursive.Value()); |
- return CObject::Bool(deleted); |
+ if (Directory::Delete(path.CString(), recursive.Value())) { |
+ return CObject::True(); |
+ } else { |
+ return CObject::NewOSError(); |
+ } |
} |
- return CObject::False(); |
+ return CObject::IllegalArgumentError(); |
} |
static CObject* DirectoryExistsRequest(const CObjectArray& request) { |
- static const int kError = -1; |
static const int kExists = 1; |
static const int kDoesNotExist = 0; |
if (request.Length() == 2 && request[1]->IsString()) { |
CObjectString path(request[1]); |
Directory::ExistsResult result = Directory::Exists(path.CString()); |
- int return_value = kError; |
if (result == Directory::EXISTS) { |
- return_value = kExists; |
- } |
- if (result == Directory::DOES_NOT_EXIST) { |
- return_value = kDoesNotExist; |
+ return new CObjectInt32(CObject::NewInt32(kExists)); |
+ } else if (result == Directory::DOES_NOT_EXIST) { |
+ return new CObjectInt32(CObject::NewInt32(kDoesNotExist)); |
+ } else { |
+ return CObject::NewOSError(); |
} |
- return new CObjectInt32(CObject::NewInt32(return_value)); |
} |
- return new CObjectInt32(CObject::NewInt32(kDoesNotExist)); |
+ return CObject::IllegalArgumentError(); |
} |
@@ -148,7 +156,7 @@ static CObject* DirectoryCreateTempRequest(const CObjectArray& request) { |
return CObject::NewOSError(); |
} |
} |
- return CObject::False(); |
+ return CObject::IllegalArgumentError(); |
} |
@@ -167,7 +175,19 @@ static CObject* DirectoryListRequest(const CObjectArray& request, |
response->SetAt(1, CObject::Bool(completed)); |
return response; |
} |
- return CObject::False(); |
+ // Respond with an illegal argument list error message. |
+ CObjectArray* response = new CObjectArray(CObject::NewArray(3)); |
+ response->SetAt(0, new CObjectInt32( |
+ CObject::NewInt32(DirectoryListing::kListError))); |
+ response->SetAt(1, request[1]); |
+ response->SetAt(2, CObject::IllegalArgumentError()); |
+ Dart_PostCObject(response_port, response->AsApiCObject()); |
+ |
+ response = new CObjectArray(CObject::NewArray(2)); |
+ response->SetAt( |
+ 0, new CObjectInt32(CObject::NewInt32(DirectoryListing::kListDone))); |
+ response->SetAt(1, CObject::False()); |
+ return response; |
} |
@@ -267,9 +287,13 @@ bool DirectoryListing::HandleFile(char* file_name) { |
} |
-bool DirectoryListing::HandleError(char* message) { |
+bool DirectoryListing::HandleError(const char* dir_name) { |
// TODO(sgjesse): Pass flags to indicate whether error |
// responses are needed. |
- CObjectArray* response = NewResponse(kListError, message); |
+ CObject* err = CObject::NewOSError(); |
+ CObjectArray* response = new CObjectArray(CObject::NewArray(3)); |
+ response->SetAt(0, new CObjectInt32(CObject::NewInt32(kListError))); |
+ response->SetAt(1, new CObjectString(CObject::NewString(dir_name))); |
+ response->SetAt(2, err); |
return Dart_PostCObject(response_port_, response->AsApiCObject()); |
} |