Index: runtime/bin/file_linux.cc |
diff --git a/runtime/bin/file_linux.cc b/runtime/bin/file_linux.cc |
index d4dbd4715d654e803811c50fec8dcd752f0abd47..7b4476869c7d26751c78be700e617789c15f6cf9 100644 |
--- a/runtime/bin/file_linux.cc |
+++ b/runtime/bin/file_linux.cc |
@@ -120,6 +120,26 @@ int64_t File::Write(const void* buffer, int64_t num_bytes) { |
} |
+bool File::VPrint(const char* format, va_list args) { |
+ // Measure. |
+ va_list measure_args; |
+ va_copy(measure_args, args); |
+ intptr_t len = vsnprintf(NULL, 0, format, measure_args); |
+ va_end(measure_args); |
+ |
+ char* buffer = reinterpret_cast<char*>(malloc(len + 1)); |
+ |
+ // Print. |
+ va_list print_args; |
+ va_copy(print_args, args); |
+ vsnprintf(buffer, len + 1, format, print_args); |
+ va_end(print_args); |
+ |
+ bool result = WriteFully(buffer, len); |
+ free(buffer); |
+ return result; |
+} |
+ |
int64_t File::Position() { |
ASSERT(handle_->fd() >= 0); |
return NO_RETRY_EXPECTED(lseek64(handle_->fd(), 0, SEEK_CUR)); |