From 9468eca38a915741d977bd834cfe9fac44795ad6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 5 Apr 2007 12:15:56 +0000 Subject: [PATCH] * Implemented support for the "header only" extension. * Added missing header when compiling RAWTranslator in test mode for Haiku. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20575 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/translators/raw/RAWTranslator.cpp | 18 +++++++++++++++--- src/add-ons/translators/raw/main.cpp | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/add-ons/translators/raw/RAWTranslator.cpp b/src/add-ons/translators/raw/RAWTranslator.cpp index 8a5d1e1832..978623caff 100644 --- a/src/add-ons/translators/raw/RAWTranslator.cpp +++ b/src/add-ons/translators/raw/RAWTranslator.cpp @@ -141,6 +141,10 @@ RAWTranslator::DerivedTranslate(BPositionIO* source, if (outType != B_TRANSLATOR_BITMAP || baseType != 0) return B_NO_TRANSLATOR; + bool headerOnly = false; + if (settings != NULL) + settings->FindBool(B_TRANSLATOR_EXT_HEADER_ONLY, &headerOnly); + DCRaw raw(*source); int32 imageIndex = 0; @@ -161,7 +165,7 @@ RAWTranslator::DerivedTranslate(BPositionIO* source, if (imageIndex < 0 || imageIndex >= (int32)raw.CountImages()) status = B_BAD_VALUE; } - if (status == B_OK) + if (status == B_OK && !headerOnly) status = raw.ReadImageAt(imageIndex, buffer, bufferSize); } catch (status_t error) { status = error; @@ -191,9 +195,17 @@ RAWTranslator::DerivedTranslate(BPositionIO* source, // write out Be's Bitmap header swap_data(B_UINT32_TYPE, &header, sizeof(TranslatorBitmap), B_SWAP_HOST_TO_BENDIAN); - target->Write(&header, sizeof(TranslatorBitmap)); + ssize_t bytesWritten = target->Write(&header, sizeof(TranslatorBitmap)); + if (bytesWritten < B_OK) + return bytesWritten; - ssize_t bytesWritten = target->Write(buffer, dataSize); + if ((size_t)bytesWritten != sizeof(TranslatorBitmap)) + return B_IO_ERROR; + + if (headerOnly) + return B_OK; + + bytesWritten = target->Write(buffer, dataSize); if (bytesWritten < B_OK) return bytesWritten; diff --git a/src/add-ons/translators/raw/main.cpp b/src/add-ons/translators/raw/main.cpp index b3909e7d0a..7fa8cc364f 100644 --- a/src/add-ons/translators/raw/main.cpp +++ b/src/add-ons/translators/raw/main.cpp @@ -15,6 +15,7 @@ #if SHOW_MODE && TEST_MODE # include # include +# include # include # include #endif