diff options
author | Ben Wagner <bungeman@google.com> | 2016-10-07 15:50:53 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-05-18 15:06:24 +0000 |
commit | 255ab8d9a55d68b7405280dae6b586d17e23cf71 (patch) | |
tree | 06625e0edb3314d6dff3d1cb2bf13d116b6cba3f /src/core/SkStream.cpp | |
parent | 8f8d481b44fc486e7190c6e2db8077226d53c969 (diff) |
Make SkStream readers report failure.
This also fixes an issue noticed while making this change where
SkFontDescriptor improperly round trips negative axis values.
Change-Id: Iacc5929a185659dcacc18c802c4908e4f34c6899
Reviewed-on: https://skia-review.googlesource.com/128341
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Diffstat (limited to 'src/core/SkStream.cpp')
-rw-r--r-- | src/core/SkStream.cpp | 43 |
1 files changed, 18 insertions, 25 deletions
diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp index dfdc257ff6..57fd7f5d02 100644 --- a/src/core/SkStream.cpp +++ b/src/core/SkStream.cpp @@ -20,50 +20,43 @@ /////////////////////////////////////////////////////////////////////////////// -int8_t SkStream::readS8() { - int8_t value; - SkDEBUGCODE(size_t len =) this->read(&value, 1); - SkASSERT(1 == len); - return value; +bool SkStream::readS8(int8_t* i) { + return this->read(i, sizeof(*i)) == sizeof(*i); } -int16_t SkStream::readS16() { - int16_t value; - SkDEBUGCODE(size_t len =) this->read(&value, 2); - SkASSERT(2 == len); - return value; +bool SkStream::readS16(int16_t* i) { + return this->read(i, sizeof(*i)) == sizeof(*i); } -int32_t SkStream::readS32() { - int32_t value; - SkDEBUGCODE(size_t len =) this->read(&value, 4); - SkASSERT(4 == len); - return value; +bool SkStream::readS32(int32_t* i) { + return this->read(i, sizeof(*i)) == sizeof(*i); } -SkScalar SkStream::readScalar() { - SkScalar value; - SkDEBUGCODE(size_t len =) this->read(&value, sizeof(SkScalar)); - SkASSERT(sizeof(SkScalar) == len); - return value; +bool SkStream::readScalar(SkScalar* i) { + return this->read(i, sizeof(*i)) == sizeof(*i); } #define SK_MAX_BYTE_FOR_U8 0xFD #define SK_BYTE_SENTINEL_FOR_U16 0xFE #define SK_BYTE_SENTINEL_FOR_U32 0xFF -size_t SkStream::readPackedUInt() { +bool SkStream::readPackedUInt(size_t* i) { uint8_t byte; if (!this->read(&byte, 1)) { - return 0; + return false; } if (SK_BYTE_SENTINEL_FOR_U16 == byte) { - return this->readU16(); + uint16_t i16; + if (!this->readU16(&i16)) { return false; } + *i = i16; } else if (SK_BYTE_SENTINEL_FOR_U32 == byte) { - return this->readU32(); + uint32_t i32; + if (!this->readU32(&i32)) { return false; } + *i = i32; } else { - return byte; + *i = byte; } + return true; } ////////////////////////////////////////////////////////////////////////////////////// |