diff options
author | reed@google.com <reed@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-06 13:39:41 +0000 |
---|---|---|
committer | reed@google.com <reed@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-06 13:39:41 +0000 |
commit | 31471e84c6ea53a1527fa0cc32388beb4f61ba5d (patch) | |
tree | 1d78bcc0ff6fc489f04b364dd0e55e30e75c1948 /skia | |
parent | dc7c9d495304651d22863bdf6999f54876657264 (diff) | |
download | chromium_src-31471e84c6ea53a1527fa0cc32388beb4f61ba5d.zip chromium_src-31471e84c6ea53a1527fa0cc32388beb4f61ba5d.tar.gz chromium_src-31471e84c6ea53a1527fa0cc32388beb4f61ba5d.tar.bz2 |
Change SkFileDescriptorStream to handle failure to open the file descriptor
(by initializing its length_ to 0), and to return the number of bytes skipped
if buffer==null, rather than returning the offset.
Review URL: http://codereview.chromium.org/8800017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113197 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia')
-rw-r--r-- | skia/ext/SkFontHost_fontconfig.cpp | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/skia/ext/SkFontHost_fontconfig.cpp b/skia/ext/SkFontHost_fontconfig.cpp index 82f69dd..c3ba2ab 100644 --- a/skia/ext/SkFontHost_fontconfig.cpp +++ b/skia/ext/SkFontHost_fontconfig.cpp @@ -244,6 +244,11 @@ class SkFileDescriptorStream : public SkStream { memory_ = NULL; offset_ = 0; + // this ensures that if we fail in the constructor, we will safely + // ignore all subsequent calls to read() because we will always trim + // the requested size down to 0 + length_ = 0; + struct stat st; if (fstat(fd, &st)) return; @@ -273,20 +278,12 @@ class SkFileDescriptorStream : public SkStream { return length_; } - if (!buffer) { - // This is a request to skip bytes. - if (offset_ + size < offset_) - return offset_; - offset_ += size; - if (offset_ > length_) - offset_ = length_; - return offset_; - } - size_t remaining = length_ - offset_; if (size > remaining) size = remaining; - memcpy(buffer, memory_ + offset_, size); + if (buffer) + memcpy(buffer, memory_ + offset_, size); + offset_ += size; return size; } |