diff options
-rw-r--r-- | include/core/SkStream.h | 6 | ||||
-rw-r--r-- | src/core/SkStream.cpp | 14 |
2 files changed, 20 insertions, 0 deletions
diff --git a/include/core/SkStream.h b/include/core/SkStream.h index 5a7dd96a3a..d42bd5658a 100644 --- a/include/core/SkStream.h +++ b/include/core/SkStream.h @@ -65,6 +65,12 @@ public: SkScalar readScalar(); size_t readPackedUInt(); + /** + * Create a new SkData from the stream contents. This balances the call + * SkWStream::writeData(). + */ + SkData* readData(); + private: typedef SkRefCnt INHERITED; }; diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp index c137167fd2..f0e52c7efb 100644 --- a/src/core/SkStream.cpp +++ b/src/core/SkStream.cpp @@ -93,6 +93,17 @@ size_t SkStream::readPackedUInt() { } } +SkData* SkStream::readStream() { + size_t size = this->readU32(); + if (0 == size) { + return SkData::NewEmpty(); + } else { + void* buffer = sk_malloc_throw(size); + stream->read(buffer, size); + return SkData::NewFromMalloc(buffer, size); + } +} + ////////////////////////////////////////////////////////////////////////////////////// SkWStream::~SkWStream() @@ -200,7 +211,10 @@ bool SkWStream::writeStream(SkStream* stream, size_t length) { bool SkWStream::writeData(const SkData* data) { if (data) { + this->write32(data->size()); this->write(data->data(), data->size()); + } else { + this->write32(0); } return true; } |