michael@0: /* michael@0: * Copyright 2013 Google Inc. michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: michael@0: #include "SkStream.h" michael@0: #include "SkStreamHelpers.h" michael@0: #include "SkTypes.h" michael@0: michael@0: size_t CopyStreamToStorage(SkAutoMalloc* storage, SkStream* stream) { michael@0: SkASSERT(storage != NULL); michael@0: SkASSERT(stream != NULL); michael@0: michael@0: if (stream->hasLength()) { michael@0: const size_t length = stream->getLength(); michael@0: void* dst = storage->reset(length); michael@0: if (stream->read(dst, length) != length) { michael@0: return 0; michael@0: } michael@0: return length; michael@0: } michael@0: michael@0: SkDynamicMemoryWStream tempStream; michael@0: // Arbitrary buffer size. michael@0: const size_t bufferSize = 256 * 1024; // 256KB michael@0: char buffer[bufferSize]; michael@0: SkDEBUGCODE(size_t debugLength = 0;) michael@0: do { michael@0: size_t bytesRead = stream->read(buffer, bufferSize); michael@0: tempStream.write(buffer, bytesRead); michael@0: SkDEBUGCODE(debugLength += bytesRead); michael@0: SkASSERT(tempStream.bytesWritten() == debugLength); michael@0: } while (!stream->isAtEnd()); michael@0: const size_t length = tempStream.bytesWritten(); michael@0: void* dst = storage->reset(length); michael@0: tempStream.copyTo(dst); michael@0: return length; michael@0: }