Index: src/images/SkImageDecoder_libbmp.cpp |
diff --git a/src/images/SkImageDecoder_libbmp.cpp b/src/images/SkImageDecoder_libbmp.cpp |
index 6c5ae27c478a22e13b3b62d77e59f0776ad45b23..73e7a2014459417e713673e5ab64a55726153bbf 100644 |
--- a/src/images/SkImageDecoder_libbmp.cpp |
+++ b/src/images/SkImageDecoder_libbmp.cpp |
@@ -8,10 +8,11 @@ |
#include "bmpdecoderhelper.h" |
+#include "SkColorPriv.h" |
#include "SkImageDecoder.h" |
#include "SkScaledBitmapSampler.h" |
#include "SkStream.h" |
-#include "SkColorPriv.h" |
+#include "SkStreamHelpers.h" |
#include "SkTDArray.h" |
#include "SkTRegistry.h" |
@@ -96,31 +97,12 @@ bool SkBMPImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { |
// First read the entire stream, so that all of the data can be passed to |
// the BmpDecoderHelper. |
- // Byte length of all of the data. |
- size_t length; |
// Allocated space used to hold the data. |
SkAutoMalloc storage; |
- |
- if (stream->hasLength()) { |
- length = stream->getLength(); |
- void* dst = storage.reset(length); |
- if (stream->read(dst, length) != length) { |
- return false; |
- } |
- } else { |
- SkDynamicMemoryWStream tempStream; |
- // Arbitrary buffer size. |
- const size_t bufferSize = 256 * 1024; // 256 KB |
- char buffer[bufferSize]; |
- length = 0; |
- do { |
- size_t bytesRead = stream->read(buffer, bufferSize); |
- tempStream.write(buffer, bytesRead); |
- length += bytesRead; |
- SkASSERT(tempStream.bytesWritten() == length); |
- } while (!stream->isAtEnd()); |
- void* dst = storage.reset(length); |
- tempStream.copyTo(dst); |
+ // Byte length of all of the data. |
+ const size_t length = CopyStreamToStorage(&storage, stream); |
+ if (0 == length) { |
+ return 0; |
} |
const bool justBounds = SkImageDecoder::kDecodeBounds_Mode == mode; |