aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/core/SkStream.h6
-rw-r--r--src/core/SkStream.cpp14
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;
}