Index: runtime/bin/directory.cc |
diff --git a/runtime/bin/directory.cc b/runtime/bin/directory.cc |
index a4f9efc88f7e52186f99f253e1104185db31e15f..b0d8c2fde5e6f52c3437e6012594253b0435fad2 100644 |
--- a/runtime/bin/directory.cc |
+++ b/runtime/bin/directory.cc |
@@ -65,39 +65,16 @@ void FUNCTION_NAME(Directory_Create)(Dart_NativeArguments args) { |
void FUNCTION_NAME(Directory_CreateTemp)(Dart_NativeArguments args) { |
Dart_EnterScope(); |
Dart_Handle path = Dart_GetNativeArgument(args, 0); |
- Dart_Handle status_handle = Dart_GetNativeArgument(args, 1); |
- static const int kMaxChildOsErrorMessageLength = 256; |
- char os_error_message[kMaxChildOsErrorMessageLength]; |
- if (!Dart_IsString(path)) { |
- DartUtils::SetIntegerField(status_handle, "_errorCode", 0); |
- DartUtils::SetStringField( |
- status_handle, "_errorMessage", "Invalid arguments"); |
- Dart_SetReturnValue(args, Dart_Null()); |
- Dart_ExitScope(); |
- return; |
- } |
- |
- char* result = NULL; |
- int error_code = Directory::CreateTemp(DartUtils::GetStringValue(path), |
- &result, |
- os_error_message, |
- kMaxChildOsErrorMessageLength); |
- if (error_code == 0) { |
+ char* result = Directory::CreateTemp(DartUtils::GetStringValue(path)); |
+ if (result != NULL) { |
Dart_SetReturnValue(args, Dart_NewString(result)); |
free(result); |
} else { |
- ASSERT(result == NULL); |
- if (error_code == -1) { |
- DartUtils::SetIntegerField(status_handle, "_errorCode", 0); |
- DartUtils::SetStringField( |
- status_handle, "_errorMessage", "Invalid arguments"); |
- } else { |
- DartUtils::SetIntegerField( |
- status_handle, "_errorCode", error_code); |
- DartUtils::SetStringField( |
- status_handle, "_errorMessage", os_error_message); |
+ Dart_Handle err = DartUtils::NewDartOSError(); |
+ if (Dart_IsError(err)) { |
+ Dart_PropagateError(err); |
} |
- Dart_SetReturnValue(args, Dart_Null()); |
+ Dart_SetReturnValue(args, err); |
} |
Dart_ExitScope(); |
} |
@@ -162,32 +139,13 @@ static CObject* DirectoryExistsRequest(const CObjectArray& request) { |
static CObject* DirectoryCreateTempRequest(const CObjectArray& request) { |
if (request.Length() == 2 && request[1]->IsString()) { |
CObjectString path(request[1]); |
- |
- static const int kMaxChildOsErrorMessageLength = 256; |
- char os_error_message[kMaxChildOsErrorMessageLength]; |
- char* result = NULL; |
- int error_code = Directory::CreateTemp(path.CString(), |
- &result, |
- os_error_message, |
- kMaxChildOsErrorMessageLength); |
- if (error_code == 0) { |
+ char* result = Directory::CreateTemp(path.CString()); |
+ if (result != NULL) { |
CObject* temp_dir = new CObjectString(CObject::NewString(result)); |
free(result); |
return temp_dir; |
} else { |
- ASSERT(result == NULL); |
- CObjectArray* error_response = new CObjectArray(CObject::NewArray(2)); |
- if (error_code == -1) { |
- error_response->SetAt(0, new CObjectInt32(CObject::NewInt32(0))); |
- error_response->SetAt( |
- 1, new CObjectString(CObject::NewString("Invalid arguments"))); |
- } else { |
- error_response->SetAt( |
- 0, new CObjectInt32(CObject::NewInt32(error_code))); |
- error_response->SetAt( |
- 1, new CObjectString(CObject::NewString(os_error_message))); |
- } |
- return error_response; |
+ return CObject::NewOSError(); |
} |
} |
return CObject::False(); |