Index: runtime/bin/main.cc |
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc |
index 34557307dff4f268caaa51f0d02a5007c40399df..ae3df1904a279564fd6573f3bff1a798a1e537af 100644 |
--- a/runtime/bin/main.cc |
+++ b/runtime/bin/main.cc |
@@ -582,6 +582,21 @@ static bool ProcessRootCertsCacheOption(const char* arg, |
return true; |
} |
+const char* commandline_namespace = NULL; |
+static bool ProcessNamespaceOption(const char* arg, |
+ CommandLineOptions* vm_options) { |
+ ASSERT(arg != NULL); |
+ if (*arg == '-') { |
+ return false; |
+ } |
+ if (commandline_namespace != NULL) { |
+ Log::PrintErr("Only one --namespace argument is allowed."); |
+ return false; |
+ } |
+ commandline_namespace = arg; |
+ return true; |
+} |
+ |
static struct { |
const char* option_name; |
bool (*process)(const char* option, CommandLineOptions* vm_options); |
@@ -623,6 +638,7 @@ static struct { |
{"--short_socket_write", ProcessShortSocketWriteOption}, |
{"--root-certs-file=", ProcessRootCertsFileOption}, |
{"--root-certs-cache=", ProcessRootCertsCacheOption}, |
+ {"--namespace=", ProcessNamespaceOption}, |
{NULL, NULL}}; |
static bool ProcessMainOptions(const char* option, |
@@ -912,7 +928,7 @@ static Dart_Isolate IsolateSetupHelper(Dart_Isolate isolate, |
CHECK_RESULT(result); |
if (isolate_run_app_snapshot) { |
- result = DartUtils::SetupIOLibrary(script_uri); |
+ result = DartUtils::SetupIOLibrary(commandline_namespace, script_uri); |
CHECK_RESULT(result); |
Loader::InitForSnapshot(script_uri); |
#if !defined(DART_PRECOMPILED_RUNTIME) |
@@ -948,7 +964,7 @@ static Dart_Isolate IsolateSetupHelper(Dart_Isolate isolate, |
Dart_GetMainPortId(), Dart_Timeline_Event_Async_End, 0, |
NULL, NULL); |
- result = DartUtils::SetupIOLibrary(script_uri); |
+ result = DartUtils::SetupIOLibrary(commandline_namespace, script_uri); |
CHECK_RESULT(result); |
} |
@@ -1320,6 +1336,11 @@ static void PrintUsage() { |
" The path to a cache directory containing the trusted root certificates to\n" |
" use for secure socket connections.\n" |
#endif // !defined(HOST_OS_MACOS) |
+#if defined(HOST_OS_LINUX) |
+"--namespace=<path>\n" |
+" The path to a directory that dart:io calls will treat as the root of the\n" |
+" filesystem.\n" |
+#endif // defined(HOST_OS_LINUX) |
"\n" |
"The following options are only used for VM development and may\n" |
"be changed in any future version:\n"); |
@@ -1383,7 +1404,7 @@ static bool FileModifiedCallback(const char* url, int64_t since) { |
return true; |
} |
int64_t data[File::kStatSize]; |
- File::Stat(url + 7, data); |
+ File::Stat(NULL, url + 7, data); |
if (data[File::kType] == File::kDoesNotExist) { |
return true; |
} |
@@ -1416,7 +1437,7 @@ static void GenerateAppAOTSnapshot() { |
static void WriteFile(const char* filename, |
const uint8_t* buffer, |
const intptr_t size) { |
- File* file = File::Open(filename, File::kWriteTruncate); |
+ File* file = File::Open(NULL, filename, File::kWriteTruncate); |
if (file == NULL) { |
ErrorExit(kErrorExitCode, "Unable to open file %s\n", filename); |
} |
@@ -1427,7 +1448,7 @@ static void WriteFile(const char* filename, |
} |
static void ReadFile(const char* filename, uint8_t** buffer, intptr_t* size) { |
- File* file = File::Open(filename, File::kRead); |
+ File* file = File::Open(NULL, filename, File::kRead); |
if (file == NULL) { |
ErrorExit(kErrorExitCode, "Unable to open file %s\n", filename); |
} |
@@ -1467,6 +1488,7 @@ static Dart_QualifiedFunctionName standalone_entry_points[] = { |
{"dart:io", "_ExternalBuffer", "set:data"}, |
{"dart:io", "_ExternalBuffer", "set:end"}, |
{"dart:io", "_ExternalBuffer", "set:start"}, |
+ {"dart:io", "_Namespace", "_setupNamespace"}, |
{"dart:io", "_Platform", "set:_nativeScript"}, |
{"dart:io", "_ProcessStartStatus", "set:_errorCode"}, |
{"dart:io", "_ProcessStartStatus", "set:_errorMessage"}, |
@@ -1586,7 +1608,7 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { |
uint8_t* feedback_buffer = NULL; |
intptr_t feedback_length = 0; |
if (load_feedback_filename != NULL) { |
- File* file = File::Open(load_feedback_filename, File::kRead); |
+ File* file = File::Open(NULL, load_feedback_filename, File::kRead); |
if (file == NULL) { |
ErrorExit(kErrorExitCode, "Failed to read JIT feedback.\n"); |
} |
@@ -1695,7 +1717,7 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { |
ASSERT(isolate_data != NULL); |
MallocGrowableArray<char*>* dependencies = isolate_data->dependencies(); |
ASSERT(dependencies != NULL); |
- File* file = File::Open(snapshot_deps_filename, File::kWriteTruncate); |
+ File* file = File::Open(NULL, snapshot_deps_filename, File::kWriteTruncate); |
if (file == NULL) { |
ErrorExit(kErrorExitCode, |
"Error: Unable to open snapshot depfile: %s\n\n", |