| Index: src/core/SkStream.cpp
|
| diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp
|
| index b04bc162d2b96221f2e98b37ead8f6746ef6419a..86513e9a9f1d22cf09720f929cf1b5575021fdf0 100644
|
| --- a/src/core/SkStream.cpp
|
| +++ b/src/core/SkStream.cpp
|
| @@ -66,13 +66,15 @@ size_t SkStream::readPackedUInt() {
|
|
|
| SkData* SkStream::readData() {
|
| size_t size = this->readU32();
|
| - if (0 == size) {
|
| - return SkData::NewEmpty();
|
| - } else {
|
| - SkData* data = SkData::NewUninitialized(size);
|
| - this->read(data->writable_data(), size);
|
| - return data;
|
| + return size ? this->readIntoData(size) : SkData::NewEmpty();
|
| +}
|
| +
|
| +SkData* SkStream::readIntoData(size_t size) {
|
| + SkAutoDataUnref data(SkData::NewUninitialized(size));
|
| + if (this->read(data->writable_data(), size) != size) {
|
| + return NULL;
|
| }
|
| + return data.detach();
|
| }
|
|
|
| //////////////////////////////////////////////////////////////////////////////////////
|
| @@ -890,13 +892,7 @@ SkData* SkCopyStreamToData(SkStream* stream) {
|
| SkASSERT(stream != NULL);
|
|
|
| if (stream->hasLength()) {
|
| - const size_t length = stream->getLength();
|
| - SkData* data = SkData::NewUninitialized(length);
|
| - if (stream->read(data->writable_data(), length) != length) {
|
| - data->unref();
|
| - data = NULL;
|
| - }
|
| - return data;
|
| + return stream->readIntoData(stream->getLength());
|
| }
|
|
|
| SkDynamicMemoryWStream tempStream;
|
| @@ -923,9 +919,7 @@ SkStreamRewindable* SkStreamRewindableFromSkStream(SkStream* stream) {
|
| if (stream->hasPosition()) { // If stream has length, but can't rewind.
|
| length -= stream->getPosition();
|
| }
|
| - SkAutoTUnref<SkData> data(SkData::NewUninitialized(length));
|
| - SkDEBUGCODE(size_t read =) stream->read(data->writable_data(), length);
|
| - SkASSERT(length == read);
|
| + SkAutoTUnref<SkData> data(stream->readIntoData(length));
|
| return SkNEW_ARGS(SkMemoryStream, (data.get()));
|
| }
|
| SkDynamicMemoryWStream tempStream;
|
|
|