diff --git a/src/image.cpp b/src/image.cpp index 91cb6f41..e8c24e82 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -342,13 +342,35 @@ void Image::printIFDStructure(BasicIo& io, std::ostream& out, Exiv2::PrintStruct std::string sp; // output spacer // prepare to print the value - uint32_t kount = isPrintXMP(tag, option) ? count // haul in all the data - : isPrintICC(tag, option) ? count // ditto - : isStringType(type) ? (count > 32 ? 32 : count) // restrict long arrays - : count > 5 ? 5 - : count; + uint32_t kount = [=] { + // haul in all the data + if (isPrintXMP(tag, option)) + return count; + // ditto + if (isPrintICC(tag, option)) + return count; + // restrict long arrays + if (isStringType(type)) { + if (count > 32u) + return 32u; + return count; + } + if (count > 5u) + return 5u; + return count; + }(); uint32_t pad = isStringType(type) ? 1 : 0; - size_t size = isStringType(type) ? 1 : is2ByteType(type) ? 2 : is4ByteType(type) ? 4 : is8ByteType(type) ? 8 : 1; + size_t size = [=] { + if (isStringType(type)) + return 1; + if (is2ByteType(type)) + return 2; + if (is4ByteType(type)) + return 4; + if (is8ByteType(type)) + return 8; + return 1; + }(); // if ( offset > io.size() ) offset = 0; // Denial of service?