| /* |
| * Copyright 2013 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "SkStream.h" |
| #include "SkStreamHelpers.h" |
| #include "SkTypes.h" |
| |
| size_t CopyStreamToStorage(SkAutoMalloc* storage, SkStream* stream) { |
| SkASSERT(storage != NULL); |
| SkASSERT(stream != NULL); |
| |
| if (stream->hasLength()) { |
| const size_t length = stream->getLength(); |
| void* dst = storage->reset(length); |
| if (stream->read(dst, length) != length) { |
| return 0; |
| } |
| return length; |
| } |
| |
| SkDynamicMemoryWStream tempStream; |
| // Arbitrary buffer size. |
| const size_t bufferSize = 256 * 1024; // 256KB |
| 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()); |
| const size_t length = tempStream.bytesWritten(); |
| void* dst = storage->reset(length); |
| tempStream.copyTo(dst); |
| return length; |
| } |