Fix msvc/CI build breakers.

main
Robin Mills 4 years ago
parent ea968149f2
commit 0b4b7c695e

@ -147,8 +147,8 @@ namespace Exiv2
long BmffImage::boxHandler(int indent /* =0 */) long BmffImage::boxHandler(int indent /* =0 */)
{ {
long result = io_->size(); long result = (long) io_->size();
long address = io_->tell(); long address = (long) io_->tell();
BmffBoxHeader box = {0,0}; BmffBoxHeader box = {0,0};
if ( io_->read((byte*)&box, sizeof(box)) != sizeof(box)) return result; if ( io_->read((byte*)&box, sizeof(box)) != sizeof(box)) return result;
@ -165,7 +165,7 @@ namespace Exiv2
// TAG_mdat should not be processed twice // TAG_mdat should not be processed twice
if ( box.type == TAG_mdat ) { if ( box.type == TAG_mdat ) {
std::cout << std::endl; std::cout << std::endl;
return io_->size(); return result ;
} }
if ( visits_.find(address) != visits_.end() || visits_.size() > visits_max_ ) { if ( visits_.find(address) != visits_.end() || visits_.size() > visits_max_ ) {
throw Error(kerCorruptedMetadata); throw Error(kerCorruptedMetadata);
@ -244,7 +244,7 @@ namespace Exiv2
bLF=false; bLF=false;
#endif #endif
io_->seek(skip,BasicIo::cur); io_->seek(skip,BasicIo::cur);
while ( io_->tell() < address + skip + box.length ) { while ( (long) io_->tell() < (long)(address + skip + box.length) ) {
io_->seek(boxHandler(indent+1),BasicIo::beg); io_->seek(boxHandler(indent+1),BasicIo::beg);
} }
} break; } break;
@ -263,14 +263,14 @@ namespace Exiv2
#endif #endif
uint32_t itemCount = version < 2 ? getShort(data.pData_+skip,bigEndian) : getLong(data.pData_+skip,bigEndian); uint32_t itemCount = version < 2 ? getShort(data.pData_+skip,bigEndian) : getLong(data.pData_+skip,bigEndian);
skip += version < 2 ? 2 : 4 ; skip += version < 2 ? 2 : 4 ;
if ( offsetSize == 4 && lengthSize == 4 && ((box.length-16) % itemCount) == 0 ) { if ( itemCount && offsetSize == 4 && lengthSize == 4 && ((box.length-16) % itemCount) == 0 ) {
#ifdef EXIV2_DEBUG_MESSAGES #ifdef EXIV2_DEBUG_MESSAGES
std::cout << std::endl; std::cout << std::endl;
bLF=false; bLF=false;
#endif #endif
uint64_t step = (box.length-16)/itemCount ; // length of data per item. uint32_t step = (box.length-16)/itemCount ; // length of data per item.
uint64_t base = skip; uint32_t base = skip;
for ( uint64_t i = 0 ; i < itemCount ; i++ ) { for ( uint32_t i = 0 ; i < itemCount ; i++ ) {
skip=base+i*step ; // move in 16 or 14 byte steps skip=base+i*step ; // move in 16 or 14 byte steps
uint32_t ID = version > 2 ? getLong(data.pData_+skip,bigEndian) : getShort(data.pData_+skip,bigEndian); uint32_t ID = version > 2 ? getLong(data.pData_+skip,bigEndian) : getShort(data.pData_+skip,bigEndian);
uint32_t offset = getLong(data.pData_+skip+step-8,bigEndian); uint32_t offset = getLong(data.pData_+skip+step-8,bigEndian);

Loading…
Cancel
Save