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; |