Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(297)

Unified Diff: runtime/bin/directory.cc

Issue 9773018: Add error handling to directory (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/directory.h ('k') | runtime/bin/directory.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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());
}
« no previous file with comments | « runtime/bin/directory.h ('k') | runtime/bin/directory.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698