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

Unified Diff: runtime/bin/file.cc

Issue 9630012: Error reporting on File in dart:io (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Style issues 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_win.cc ('k') | runtime/bin/file.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/file.cc
diff --git a/runtime/bin/file.cc b/runtime/bin/file.cc
index 3bb2ee0bb61a4b9cdaba3d854d0a04967859b148..7feb4fc4b573697d8e8f7d09dd398e0b189342ef 100644
--- a/runtime/bin/file.cc
+++ b/runtime/bin/file.cc
@@ -7,6 +7,7 @@
#include "bin/builtin.h"
#include "bin/dartutils.h"
#include "bin/thread.h"
+#include "bin/utils.h"
#include "include/dart_api.h"
@@ -72,10 +73,17 @@ void FUNCTION_NAME(File_Open)(Dart_NativeArguments args) {
// files. Directories can be opened for reading using the posix
// 'open' call.
File* file = NULL;
- if (((file_mode & File::kWrite) != 0) || File::Exists(filename)) {
- file = File::Open(filename, file_mode);
+ file = File::Open(filename, file_mode);
+ if (file != NULL) {
+ Dart_SetReturnValue(args,
+ Dart_NewInteger(reinterpret_cast<intptr_t>(file)));
+ } else {
+ Dart_Handle err = DartUtils::NewDartOSError();
+ if (Dart_IsError(err)) {
+ Dart_PropagateError(err);
+ }
+ Dart_SetReturnValue(args, err);
}
- Dart_SetReturnValue(args, Dart_NewInteger(reinterpret_cast<intptr_t>(file)));
Dart_ExitScope();
}
@@ -322,7 +330,15 @@ void FUNCTION_NAME(File_Create)(Dart_NativeArguments args) {
const char* str =
DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
bool result = File::Create(str);
- Dart_SetReturnValue(args, Dart_NewBoolean(result));
+ if (result) {
+ Dart_SetReturnValue(args, Dart_NewBoolean(result));
+ } else {
+ Dart_Handle err = DartUtils::NewDartOSError();
+ if (Dart_IsError(err)) {
+ Dart_PropagateError(err);
+ }
+ Dart_SetReturnValue(args, err);
+ }
Dart_ExitScope();
}
@@ -332,7 +348,15 @@ void FUNCTION_NAME(File_Delete)(Dart_NativeArguments args) {
const char* str =
DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
bool result = File::Delete(str);
- Dart_SetReturnValue(args, Dart_NewBoolean(result));
+ if (result) {
+ Dart_SetReturnValue(args, Dart_NewBoolean(result));
+ } else {
+ Dart_Handle err = DartUtils::NewDartOSError();
+ if (Dart_IsError(err)) {
+ Dart_PropagateError(err);
+ }
+ Dart_SetReturnValue(args, err);
+ }
Dart_ExitScope();
}
@@ -343,11 +367,17 @@ void FUNCTION_NAME(File_Directory)(Dart_NativeArguments args) {
DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
char* str_copy = strdup(str);
char* path = File::GetContainingDirectory(str_copy);
+ free(str_copy);
if (path != NULL) {
Dart_SetReturnValue(args, Dart_NewString(path));
+ free(path);
+ } else {
+ Dart_Handle err = DartUtils::NewDartOSError();
+ if (Dart_IsError(err)) {
+ Dart_PropagateError(err);
+ }
+ Dart_SetReturnValue(args, err);
}
- free(str_copy);
- free(path);
Dart_ExitScope();
}
@@ -360,6 +390,12 @@ void FUNCTION_NAME(File_FullPath)(Dart_NativeArguments args) {
if (path != NULL) {
Dart_SetReturnValue(args, Dart_NewString(path));
free(path);
+ } else {
+ Dart_Handle err = DartUtils::NewDartOSError();
+ if (Dart_IsError(err)) {
+ Dart_PropagateError(err);
+ }
+ Dart_SetReturnValue(args, err);
}
Dart_ExitScope();
}
@@ -409,7 +445,7 @@ static CObject* FileExistsRequest(const CObjectArray& request) {
bool result = File::Exists(filename.CString());
return CObject::Bool(result);
}
- return CObject::False();
+ return CObject::IllegalArgumentError();
}
@@ -417,12 +453,15 @@ static CObject* FileCreateRequest(const CObjectArray& request) {
if (request.Length() == 2 && request[1]->IsString()) {
CObjectString filename(request[1]);
bool result = File::Create(filename.CString());
- return CObject::Bool(result);
+ if (result) {
+ return CObject::True();
+ } else {
+ return CObject::NewOSError();
+ }
}
- return CObject::False();
+ return CObject::IllegalArgumentError();
}
-
static CObject* FileOpenRequest(const CObjectArray& request) {
File* file = NULL;
if (request.Length() == 3 &&
@@ -433,12 +472,15 @@ static CObject* FileOpenRequest(const CObjectArray& request) {
File::DartFileOpenMode dart_file_mode =
static_cast<File::DartFileOpenMode>(mode.Value());
File::FileOpenMode file_mode = File::DartModeToFileMode(dart_file_mode);
- if (((file_mode & File::kWrite) != 0) || File::Exists(filename.CString())) {
- file = File::Open(filename.CString(), file_mode);
+ file = File::Open(filename.CString(), file_mode);
+ if (file != NULL) {
+ return new CObjectIntptr(
+ CObject::NewIntptr(reinterpret_cast<intptr_t>(file)));
+ } else {
+ return CObject::NewOSError();
}
}
- return new CObjectIntptr(
- CObject::NewIntptr(reinterpret_cast<intptr_t>(file)));
+ return CObject::IllegalArgumentError();
}
@@ -446,7 +488,11 @@ static CObject* FileDeleteRequest(const CObjectArray& request) {
if (request.Length() == 2 && request[1]->IsString()) {
CObjectString filename(request[1]);
bool result = File::Delete(filename.CString());
- return CObject::Bool(result);
+ if (result) {
+ return CObject::True();
+ } else {
+ return CObject::NewOSError();
+ }
}
return CObject::False();
}
@@ -455,25 +501,31 @@ static CObject* FileDeleteRequest(const CObjectArray& request) {
static CObject* FileFullPathRequest(const CObjectArray& request) {
if (request.Length() == 2 && request[1]->IsString()) {
CObjectString filename(request[1]);
- char* path = File::GetCanonicalPath(filename.CString());
- return new CObjectString(CObject::NewString(path));
+ char* result = File::GetCanonicalPath(filename.CString());
+ if (result != NULL) {
+ CObject* path = new CObjectString(CObject::NewString(result));
+ free(result);
+ return path;
+ } else {
+ return CObject::NewOSError();
+ }
}
- return CObject::Null();
+ return CObject::IllegalArgumentError();
}
static CObject* FileDirectoryRequest(const CObjectArray& request) {
if (request.Length() == 2 && request[1]->IsString()) {
CObjectString filename(request[1]);
- if (File::Exists(filename.CString())) {
- char* str_copy = strdup(filename.CString());
- char* path = File::GetContainingDirectory(str_copy);
- free(str_copy);
- if (path != NULL) {
- CObject* result = new CObjectString(CObject::NewString(path));
- free(path);
- return result;
- }
+ char* str_copy = strdup(filename.CString());
+ char* path = File::GetContainingDirectory(str_copy);
+ free(str_copy);
+ if (path != NULL) {
+ CObject* result = new CObjectString(CObject::NewString(path));
+ free(path);
+ return result;
+ } else {
+ return CObject::NewOSError();
}
}
return CObject::Null();
« no previous file with comments | « runtime/bin/directory_win.cc ('k') | runtime/bin/file.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698