| 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;
|
|
|