Index: runtime/vm/dart_api_impl.cc |
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc |
index 254d829e5bfcc3b60beeaed579d4231348b05583..b3ff7b749a7805b26a3d1fe4b1576ad0391fc160 100644 |
--- a/runtime/vm/dart_api_impl.cc |
+++ b/runtime/vm/dart_api_impl.cc |
@@ -16,6 +16,7 @@ |
#include "vm/dart_api_state.h" |
#include "vm/dart_entry.h" |
#include "vm/debugger.h" |
+#include "vm/dev_fs.h" |
#include "vm/exceptions.h" |
#include "vm/flags.h" |
#include "vm/growable_array.h" |
@@ -5895,6 +5896,80 @@ DART_EXPORT Dart_Handle Dart_ServiceSendDataEvent(const char* stream_id, |
} |
+DART_EXPORT bool Dart_IsDevFSUri(Dart_Handle uri) { |
+ DARTSCOPE(Thread::Current()); |
+ const String& uri_string = Api::UnwrapStringHandle(Z, uri); |
+ if (uri_string.IsNull()) { |
+ return false; |
+ } |
+ ParsedUri parsed_uri; |
+ if (!ParseUri(uri_string.ToCString(), &parsed_uri)) { |
+ return false; |
+ } |
+ if ((parsed_uri.scheme == NULL) || |
+ (strcmp(parsed_uri.scheme, "dart-devfs") != 0)) { |
+ return false; |
+ } |
+ return true; |
+} |
+ |
+ |
+DART_EXPORT Dart_Handle Dart_DevFSReadFile(Dart_Handle uri) { |
+ DARTSCOPE(Thread::Current()); |
+ const String& uri_string = Api::UnwrapStringHandle(Z, uri); |
+ if (uri_string.IsNull()) { |
+ RETURN_TYPE_ERROR(Z, uri, String); |
+ } |
+ ParsedUri parsed_uri; |
+ if (!ParseUri(uri_string.ToCString(), &parsed_uri)) { |
+ return Api::NewError("%s: Unable to parse uri '%s'.", |
+ CURRENT_FUNC, uri_string.ToCString()); |
+ } |
+ if ((parsed_uri.scheme == NULL) || |
+ (strcmp(parsed_uri.scheme, "dart-devfs") != 0)) { |
+ return Api::NewError("%s: Not a dart-devfs uri '%s'.", |
+ CURRENT_FUNC, uri_string.ToCString()); |
+ } |
+ if (parsed_uri.host == NULL) { |
+ return Api::NewError("%s: Invalid dart-devfs uri '%s'.", |
turnidge
2016/06/10 18:45:34
Make error message better. "No authority specified
|
+ CURRENT_FUNC, uri_string.ToCString()); |
+ } |
+ if (parsed_uri.path == NULL) { |
+ return Api::NewError("%s: No path specified in dart-devfs uri '%s'.", |
+ CURRENT_FUNC, uri_string.ToCString()); |
+ } |
+ return DevFS::ReadFile(parsed_uri.host, parsed_uri.path); |
+} |
+ |
+ |
+DART_EXPORT Dart_Handle Dart_DevFSReadFileAsUTF8String(Dart_Handle uri) { |
+ DARTSCOPE(Thread::Current()); |
+ const String& uri_string = Api::UnwrapStringHandle(Z, uri); |
+ if (uri_string.IsNull()) { |
+ RETURN_TYPE_ERROR(Z, uri, String); |
+ } |
+ ParsedUri parsed_uri; |
+ if (!ParseUri(uri_string.ToCString(), &parsed_uri)) { |
+ return Api::NewError("%s: Unable to parse uri '%s'.", |
+ CURRENT_FUNC, uri_string.ToCString()); |
+ } |
+ if ((parsed_uri.scheme == NULL) || |
+ (strcmp(parsed_uri.scheme, "dart-devfs") != 0)) { |
+ return Api::NewError("%s: Not a dart-devfs uri '%s'.", |
+ CURRENT_FUNC, uri_string.ToCString()); |
+ } |
+ if (parsed_uri.host == NULL) { |
+ return Api::NewError("%s: Invalid dart-devfs uri '%s'.", |
+ CURRENT_FUNC, uri_string.ToCString()); |
+ } |
+ if (parsed_uri.path == NULL) { |
+ return Api::NewError("%s: No path specified in dart-devfs uri '%s'.", |
+ CURRENT_FUNC, uri_string.ToCString()); |
+ } |
+ return DevFS::ReadFileAsString(parsed_uri.host, parsed_uri.path); |
+} |
+ |
+ |
DART_EXPORT int64_t Dart_TimelineGetMicros() { |
return OS::GetCurrentMonotonicMicros(); |
} |