| Index: src/core/SkPicture.cpp
|
| diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp
|
| index f83a5fb9aadc33ff1aacdefa42b3244bbbaec4a7..3195f8251c94953f4d5f030009b04c59a608c0f3 100644
|
| --- a/src/core/SkPicture.cpp
|
| +++ b/src/core/SkPicture.cpp
|
| @@ -260,7 +260,10 @@ void SkPicture::draw(SkCanvas* surface, SkDrawPictureCallback* callback) {
|
| #include "SkStream.h"
|
|
|
| static const char kMagic[] = { 's', 'k', 'i', 'a', 'p', 'i', 'c', 't' };
|
| -static const size_t kHeaderSize = sizeof(kMagic) + sizeof(SkPictInfo);
|
| +struct SkPictureHeader {
|
| + char fMagic[sizeof(kMagic)];
|
| + SkPictInfo fInfo;
|
| +};
|
|
|
| bool SkPicture::InternalOnly_StreamIsSKP(SkStream* stream, SkPictInfo* pInfo) {
|
| if (NULL == stream) {
|
| @@ -268,47 +271,39 @@ bool SkPicture::InternalOnly_StreamIsSKP(SkStream* stream, SkPictInfo* pInfo) {
|
| }
|
|
|
| // Check magic bytes.
|
| - char magic[sizeof(kMagic)];
|
| - if (!stream->read(magic, sizeof(kMagic)) ||
|
| - (0 != memcmp(magic, kMagic, sizeof(kMagic)))) {
|
| + SkPictureHeader header;
|
| + if (!stream->read(&header, sizeof(header)) ||
|
| + (0 != memcmp(header.fMagic, kMagic, sizeof(kMagic)))) {
|
| return false;
|
| }
|
|
|
| - SkPictInfo info;
|
| - if (!stream->read(&info, sizeof(SkPictInfo))) {
|
| - return false;
|
| - }
|
| -
|
| - if (info.fVersion < MIN_PICTURE_VERSION || info.fVersion > CURRENT_PICTURE_VERSION) {
|
| + if (header.fInfo.fVersion < MIN_PICTURE_VERSION ||
|
| + header.fInfo.fVersion > CURRENT_PICTURE_VERSION) {
|
| return false;
|
| }
|
|
|
| if (pInfo != NULL) {
|
| - *pInfo = info;
|
| + *pInfo = header.fInfo;
|
| }
|
| return true;
|
| }
|
|
|
| bool SkPicture::InternalOnly_BufferIsSKP(SkReadBuffer& buffer, SkPictInfo* pInfo) {
|
| // Check magic bytes.
|
| - char magic[sizeof(kMagic)];
|
| + SkPictureHeader header;
|
|
|
| - if (!buffer.readByteArray(magic, sizeof(kMagic)) ||
|
| - (0 != memcmp(magic, kMagic, sizeof(kMagic)))) {
|
| - return false;
|
| - }
|
| -
|
| - SkPictInfo info;
|
| - if (!buffer.readByteArray(&info, sizeof(SkPictInfo))) {
|
| + if (!buffer.readByteArray(&header, sizeof(header)) ||
|
| + (0 != memcmp(header.fMagic, kMagic, sizeof(kMagic)))) {
|
| return false;
|
| }
|
|
|
| - if (info.fVersion < MIN_PICTURE_VERSION || info.fVersion > CURRENT_PICTURE_VERSION) {
|
| + if (header.fInfo.fVersion < MIN_PICTURE_VERSION ||
|
| + header.fInfo.fVersion > CURRENT_PICTURE_VERSION) {
|
| return false;
|
| }
|
|
|
| if (pInfo != NULL) {
|
| - *pInfo = info;
|
| + *pInfo = header.fInfo;
|
| }
|
| return true;
|
| }
|
| @@ -361,22 +356,21 @@ SkPicture* SkPicture::CreateFromBuffer(SkReadBuffer& buffer) {
|
| return SkNEW_ARGS(SkPicture, (playback, info.fWidth, info.fHeight));
|
| }
|
|
|
| -void SkPicture::createHeader(void* header) const {
|
| +void SkPicture::createHeader(SkPictureHeader* header) const {
|
| // Copy magic bytes at the beginning of the header
|
| SkASSERT(sizeof(kMagic) == 8);
|
| - memcpy(header, kMagic, sizeof(kMagic));
|
| + memcpy(header->fMagic, kMagic, sizeof(kMagic));
|
|
|
| // Set picture info after magic bytes in the header
|
| - SkPictInfo* info = (SkPictInfo*)(((char*)header) + sizeof(kMagic));
|
| - info->fVersion = CURRENT_PICTURE_VERSION;
|
| - info->fWidth = fWidth;
|
| - info->fHeight = fHeight;
|
| - info->fFlags = SkPictInfo::kCrossProcess_Flag;
|
| + header->fInfo.fVersion = CURRENT_PICTURE_VERSION;
|
| + header->fInfo.fWidth = fWidth;
|
| + header->fInfo.fHeight = fHeight;
|
| + header->fInfo.fFlags = SkPictInfo::kCrossProcess_Flag;
|
| // TODO: remove this flag, since we're always float (now)
|
| - info->fFlags |= SkPictInfo::kScalarIsFloat_Flag;
|
| + header->fInfo.fFlags |= SkPictInfo::kScalarIsFloat_Flag;
|
|
|
| if (8 == sizeof(void*)) {
|
| - info->fFlags |= SkPictInfo::kPtrIs64Bit_Flag;
|
| + header->fInfo.fFlags |= SkPictInfo::kPtrIs64Bit_Flag;
|
| }
|
| }
|
|
|
| @@ -387,9 +381,9 @@ void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const {
|
| playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord));
|
| }
|
|
|
| - char header[kHeaderSize];
|
| + SkPictureHeader header;
|
| this->createHeader(&header);
|
| - stream->write(header, kHeaderSize);
|
| + stream->write(&header, sizeof(header));
|
| if (playback) {
|
| stream->writeBool(true);
|
| playback->serialize(stream, encoder);
|
| @@ -409,9 +403,9 @@ void SkPicture::flatten(SkWriteBuffer& buffer) const {
|
| playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord));
|
| }
|
|
|
| - char header[kHeaderSize];
|
| + SkPictureHeader header;
|
| this->createHeader(&header);
|
| - buffer.writeByteArray(header, kHeaderSize);
|
| + buffer.writeByteArray(&header, sizeof(header));
|
| if (playback) {
|
| buffer.writeBool(true);
|
| playback->flatten(buffer);
|
|
|