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