diff options
Diffstat (limited to 'src/core/SkRRect.cpp')
-rw-r--r-- | src/core/SkRRect.cpp | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/src/core/SkRRect.cpp b/src/core/SkRRect.cpp index 2ed8bbfc5e..824ee62e60 100644 --- a/src/core/SkRRect.cpp +++ b/src/core/SkRRect.cpp @@ -456,10 +456,8 @@ void SkRRect::inset(SkScalar dx, SkScalar dy, SkRRect* dst) const { /////////////////////////////////////////////////////////////////////////////// size_t SkRRect::writeToMemory(void* buffer) const { - SkASSERT(kSizeInMemory == sizeof(SkRect) + sizeof(fRadii)); - - memcpy(buffer, &fRect, sizeof(SkRect)); - memcpy((char*)buffer + sizeof(SkRect), fRadii, sizeof(fRadii)); + // Serialize only the rect and corners, but not the derived type tag. + memcpy(buffer, this, kSizeInMemory); return kSizeInMemory; } @@ -468,14 +466,10 @@ size_t SkRRect::readFromMemory(const void* buffer, size_t length) { return 0; } - SkScalar storage[12]; - SkASSERT(sizeof(storage) == kSizeInMemory); - - // we make a local copy, to ensure alignment before we cast - memcpy(storage, buffer, kSizeInMemory); + // Deserialize rect and corners, then rederive the type tag. + memcpy(this, buffer, kSizeInMemory); + this->computeType(); - this->setRectRadii(*(const SkRect*)&storage[0], - (const SkVector*)&storage[4]); return kSizeInMemory; } |