summaryrefslogtreecommitdiffstats
path: root/gfx/skia/skia/src/sksl/SkSLOutputStream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/skia/skia/src/sksl/SkSLOutputStream.cpp')
-rw-r--r--gfx/skia/skia/src/sksl/SkSLOutputStream.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/gfx/skia/skia/src/sksl/SkSLOutputStream.cpp b/gfx/skia/skia/src/sksl/SkSLOutputStream.cpp
new file mode 100644
index 0000000000..7972c9fd19
--- /dev/null
+++ b/gfx/skia/skia/src/sksl/SkSLOutputStream.cpp
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2019 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "src/sksl/SkSLOutputStream.h"
+
+#include <stdio.h>
+#include <memory>
+
+namespace SkSL {
+
+void OutputStream::writeString(const std::string& s) {
+ this->write(s.c_str(), s.size());
+}
+
+void OutputStream::printf(const char format[], ...) {
+ va_list args;
+ va_start(args, format);
+ this->appendVAList(format, args);
+ va_end(args);
+}
+
+void OutputStream::appendVAList(const char format[], va_list args) {
+ char buffer[kBufferSize];
+ va_list copy;
+ va_copy(copy, args);
+ int length = vsnprintf(buffer, kBufferSize, format, args);
+ if (length > (int) kBufferSize) {
+ std::unique_ptr<char[]> bigBuffer(new char[length + 1]);
+ vsnprintf(bigBuffer.get(), length + 1, format, copy);
+ this->write(bigBuffer.get(), length);
+ } else {
+ this->write(buffer, length);
+ }
+ va_end(copy);
+}
+
+} // namespace SkSL