Index: src/core/SkStream.cpp |
diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp |
index fff8f3382209b9fd9509d55a916b711022d7721e..8cbf6bee5d1298aee63e358b787d6f431f246c08 100644 |
--- a/src/core/SkStream.cpp |
+++ b/src/core/SkStream.cpp |
@@ -888,21 +888,9 @@ size_t SkCopyStreamToStorage(SkAutoMalloc* storage, SkStream* stream) { |
} |
SkDynamicMemoryWStream tempStream; |
- // Arbitrary buffer size. |
-#if defined(GOOGLE3) |
- // Stack frame size is limited in GOOGLE3. |
- const size_t bufferSize = 8 * 1024; // 8KB |
-#else |
- const size_t bufferSize = 256 * 1024; // 256KB |
-#endif |
- char buffer[bufferSize]; |
- SkDEBUGCODE(size_t debugLength = 0;) |
- do { |
- size_t bytesRead = stream->read(buffer, bufferSize); |
- tempStream.write(buffer, bytesRead); |
- SkDEBUGCODE(debugLength += bytesRead); |
- SkASSERT(tempStream.bytesWritten() == debugLength); |
- } while (!stream->isAtEnd()); |
+ if (!SkStreamCopy(&tempStream, stream)) { |
+ return 0; |
+ } |
const size_t length = tempStream.bytesWritten(); |
void* dst = storage->reset(length); |
tempStream.copyTo(dst); |
@@ -976,3 +964,24 @@ bool SkStreamCopy(SkWStream* out, SkStream* input) { |
} |
} |
} |
+ |
+bool SkStreamCopyToDynamicMemoryW(SkDynamicMemoryWStream* out, SkStream* input) { |
+ // Arbitrary buffer size. |
+#if defined(GOOGLE3) |
+ // Stack frame size is limited in GOOGLE3. |
+ const size_t bufferSize = 8 * 1024; // 8KB |
+#else |
+ const size_t bufferSize = 256 * 1024; // 256KB |
+#endif |
+ char buffer[bufferSize]; |
+ SkDEBUGCODE(size_t debugLength = 0;) |
+ do { |
+ size_t bytesRead = input->read(buffer, bufferSize); |
+ if (!out->write(buffer, bytesRead)) { |
+ return false; |
+ } |
+ SkDEBUGCODE(debugLength += bytesRead); |
+ SkASSERT(out->bytesWritten() == debugLength); |
+ } while (!input->isAtEnd()); |
+ return true; |
+} |