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

Unified Diff: runtime/bin/file_support.cc

Issue 1839463002: Really remove io support when dart:io is unsupported. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 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
Index: runtime/bin/file_support.cc
diff --git a/runtime/bin/file_support.cc b/runtime/bin/file_support.cc
new file mode 100644
index 0000000000000000000000000000000000000000..0ad5edcce25ede6116e30df73f7389cd7dda2c05
--- /dev/null
+++ b/runtime/bin/file_support.cc
@@ -0,0 +1,109 @@
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "bin/file.h"
+
+#include "bin/builtin.h"
+#include "bin/dartutils.h"
+#include "bin/embedded_dart_io.h"
+#include "bin/io_buffer.h"
+#include "bin/utils.h"
+
+#include "include/dart_api.h"
+#include "include/dart_tools_api.h"
+
+namespace dart {
+namespace bin {
+
+// Are we capturing output from stdout for the VM service?
+static bool capture_stdout = false;
+
+// Are we capturing output from stderr for the VM service?
+static bool capture_stderr = false;
+
+void SetCaptureStdout(bool value) {
+ capture_stdout = value;
+}
+
+
+void SetCaptureStderr(bool value) {
+ capture_stderr = value;
+}
+
+
+bool ShouldCaptureStdout() {
+ return capture_stdout;
+}
+
+
+bool ShouldCaptureStderr() {
+ return capture_stderr;
+}
+
+
+bool File::ReadFully(void* buffer, int64_t num_bytes) {
+ int64_t remaining = num_bytes;
+ char* current_buffer = reinterpret_cast<char*>(buffer);
+ while (remaining > 0) {
+ int64_t bytes_read = Read(current_buffer, remaining);
+ if (bytes_read <= 0) {
+ return false;
+ }
+ remaining -= bytes_read; // Reduce the number of remaining bytes.
+ current_buffer += bytes_read; // Move the buffer forward.
+ }
+ return true;
+}
+
+
+bool File::WriteFully(const void* buffer, int64_t num_bytes) {
+ int64_t remaining = num_bytes;
+ const char* current_buffer = reinterpret_cast<const char*>(buffer);
+ while (remaining > 0) {
+ int64_t bytes_written = Write(current_buffer, remaining);
+ if (bytes_written < 0) {
+ return false;
+ }
+ remaining -= bytes_written; // Reduce the number of remaining bytes.
+ current_buffer += bytes_written; // Move the buffer forward.
+ }
+ if (capture_stdout || capture_stderr) {
+ intptr_t fd = GetFD();
+ if ((fd == STDOUT_FILENO) && capture_stdout) {
+ Dart_ServiceSendDataEvent("Stdout", "WriteEvent",
+ reinterpret_cast<const uint8_t*>(buffer),
+ num_bytes);
+ } else if ((fd == STDERR_FILENO) && capture_stderr) {
+ Dart_ServiceSendDataEvent("Stderr", "WriteEvent",
+ reinterpret_cast<const uint8_t*>(buffer),
+ num_bytes);
+ }
+ }
+ return true;
+}
+
+
+File::FileOpenMode File::DartModeToFileMode(DartFileOpenMode mode) {
+ ASSERT((mode == File::kDartRead) ||
+ (mode == File::kDartWrite) ||
+ (mode == File::kDartAppend) ||
+ (mode == File::kDartWriteOnly) ||
+ (mode == File::kDartWriteOnlyAppend));
+ if (mode == File::kDartWrite) {
+ return File::kWriteTruncate;
+ }
+ if (mode == File::kDartAppend) {
+ return File::kWrite;
+ }
+ if (mode == File::kDartWriteOnly) {
+ return File::kWriteOnlyTruncate;
+ }
+ if (mode == File::kDartWriteOnlyAppend) {
+ return File::kWriteOnly;
+ }
+ return File::kRead;
+}
+
+} // namespace bin
+} // namespace dart
« no previous file with comments | « runtime/bin/file.cc ('k') | runtime/bin/file_system_watcher.h » ('j') | runtime/bin/socket.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698