summaryrefslogtreecommitdiffstats
path: root/skia
diff options
context:
space:
mode:
authorreed@google.com <reed@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-06 13:39:41 +0000
committerreed@google.com <reed@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-06 13:39:41 +0000
commit31471e84c6ea53a1527fa0cc32388beb4f61ba5d (patch)
tree1d78bcc0ff6fc489f04b364dd0e55e30e75c1948 /skia
parentdc7c9d495304651d22863bdf6999f54876657264 (diff)
downloadchromium_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.cpp19
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;
}