| Index: runtime/bin/dartutils.cc
|
| ===================================================================
|
| --- runtime/bin/dartutils.cc (revision 22381)
|
| +++ runtime/bin/dartutils.cc (working copy)
|
| @@ -191,52 +191,11 @@
|
| }
|
|
|
|
|
| -void* DartUtils::OpenFile(const char* name, bool write) {
|
| - File* file = File::Open(name, write ? File::kWriteTruncate : File::kRead);
|
| - return reinterpret_cast<void*>(file);
|
| -}
|
| -
|
| -
|
| -void DartUtils::ReadFile(const uint8_t** data,
|
| - intptr_t* file_len,
|
| - void* stream) {
|
| - ASSERT(data != NULL);
|
| - ASSERT(file_len != NULL);
|
| - ASSERT(stream != NULL);
|
| - File* file_stream = reinterpret_cast<File*>(stream);
|
| - *file_len = file_stream->Length();
|
| - ASSERT(*file_len > 0);
|
| - uint8_t* text_buffer = reinterpret_cast<uint8_t*>(malloc(*file_len));
|
| - ASSERT(text_buffer != NULL);
|
| - if (!file_stream->ReadFully(text_buffer, *file_len)) {
|
| - *data = NULL;
|
| - *file_len = -1; // Indicates read was not successful.
|
| - return;
|
| - }
|
| - *data = text_buffer;
|
| -}
|
| -
|
| -
|
| -void DartUtils::WriteFile(const void* buffer,
|
| - intptr_t num_bytes,
|
| - void* stream) {
|
| - ASSERT(stream != NULL);
|
| - File* file_stream = reinterpret_cast<File*>(stream);
|
| - bool bytes_written = file_stream->WriteFully(buffer, num_bytes);
|
| - ASSERT(bytes_written);
|
| -}
|
| -
|
| -
|
| -void DartUtils::CloseFile(void* stream) {
|
| - delete reinterpret_cast<File*>(stream);
|
| -}
|
| -
|
| -
|
| -static const uint8_t* ReadFileFully(const char* filename,
|
| - intptr_t* file_len,
|
| - const char** error_msg) {
|
| - void* stream = DartUtils::OpenFile(filename, false);
|
| - if (stream == NULL) {
|
| +static const uint8_t* ReadFile(const char* filename,
|
| + intptr_t* file_len,
|
| + const char** error_msg) {
|
| + File* file = File::Open(filename, File::kRead);
|
| + if (file == NULL) {
|
| const char* format = "Unable to open file: %s";
|
| intptr_t len = snprintf(NULL, 0, format, filename);
|
| // TODO(iposva): Allocate from the zone instead of leaking error string
|
| @@ -246,14 +205,20 @@
|
| *error_msg = msg;
|
| return NULL;
|
| }
|
| - *file_len = -1;
|
| - const uint8_t* text_buffer = NULL;
|
| - DartUtils::ReadFile(&text_buffer, file_len, stream);
|
| - if (text_buffer == NULL || *file_len == -1) {
|
| - *error_msg = "Unable to read file contents";
|
| - text_buffer = NULL;
|
| + *file_len = file->Length();
|
| + uint8_t* text_buffer = reinterpret_cast<uint8_t*>(malloc(*file_len));
|
| + if (text_buffer == NULL) {
|
| + delete file;
|
| + *error_msg = "Unable to allocate buffer";
|
| + return NULL;
|
| }
|
| - DartUtils::CloseFile(stream);
|
| + if (!file->ReadFully(text_buffer, *file_len)) {
|
| + delete file;
|
| + free(text_buffer);
|
| + *error_msg = "Unable to fully read contents";
|
| + return NULL;
|
| + }
|
| + delete file;
|
| return text_buffer;
|
| }
|
|
|
| @@ -261,7 +226,7 @@
|
| Dart_Handle DartUtils::ReadStringFromFile(const char* filename) {
|
| const char* error_msg = NULL;
|
| intptr_t len;
|
| - const uint8_t* text_buffer = ReadFileFully(filename, &len, &error_msg);
|
| + const uint8_t* text_buffer = ReadFile(filename, &len, &error_msg);
|
| if (text_buffer == NULL) {
|
| return Dart_Error(error_msg);
|
| }
|
| @@ -419,9 +384,7 @@
|
| Dart_StringToCString(script_path, &script_path_cstr);
|
| const char* error_msg = NULL;
|
| intptr_t len;
|
| - const uint8_t* text_buffer = ReadFileFully(script_path_cstr,
|
| - &len,
|
| - &error_msg);
|
| + const uint8_t* text_buffer = ReadFile(script_path_cstr, &len, &error_msg);
|
| if (text_buffer == NULL) {
|
| return Dart_Error(error_msg);
|
| }
|
|
|