From 2fd287bc0c522eed2b25f2a19a3b272fa65c68be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Walenciak?= Date: Wed, 6 Sep 2017 20:55:07 +0200 Subject: [PATCH] printIFD uses BasicIo now --- bigtiff/parse.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/bigtiff/parse.cpp b/bigtiff/parse.cpp index 8ceb2a05..506c7255 100644 --- a/bigtiff/parse.cpp +++ b/bigtiff/parse.cpp @@ -216,11 +216,8 @@ typedef struct { uint32_t offset; } field_t; -void printIFD(FILE* f, std::ostream& out, Exiv2::PrintStructureOption option, uint32_t offset,bool bSwap,int depth) +void printIFD(Exiv2::BasicIo& io, std::ostream& out, Exiv2::PrintStructureOption option, uint32_t offset, bool bSwap, int depth) { - std::string path; // TODO: just a compilation fix. It should probably come instead of FILE* f. - Exiv2::FileIo io(path); // TODO: should come as argument? - depth++; bool bFirst = true; @@ -231,15 +228,17 @@ void printIFD(FILE* f, std::ostream& out, Exiv2::PrintStructureOption option, ui do { // Read top of directory - fseek(f,offset,SEEK_SET); + io.seek(offset, Exiv2::BasicIo::beg); + uint16_t dir; - fread(&dir,1,2,f); + io.read(reinterpret_cast(&dir), 2); + uint16_t dirLength = byteSwap2(&dir,0,bSwap); bool tooBig = dirLength > 500; if ( bFirst && bPrint ) { - out << indent(depth) << Exiv2::Internal::stringFormat("STRUCTURE OF TIFF FILE") << path << std::endl; + out << indent(depth) << Exiv2::Internal::stringFormat("STRUCTURE OF TIFF FILE") << io.path() << std::endl; if ( tooBig ) out << indent(depth) << "dirLength = " << dirLength << std::endl; } if (tooBig) break; @@ -254,7 +253,7 @@ void printIFD(FILE* f, std::ostream& out, Exiv2::PrintStructureOption option, ui bFirst = false; field_t field; - fread(&field,sizeof(field_t),1,f); + io.read(reinterpret_cast(&field), sizeof(field)); uint16_t tag = byteSwap2(&field.tagID ,0,bSwap); uint16_t type = byteSwap2(&field.tagType,2,bSwap); uint32_t count = byteSwap4(&field.count ,4,bSwap); @@ -407,9 +406,8 @@ int main(int argc,const char* argv[]) if ( result == 0 ) { std::cout << "Congrats swap = " << (bSwap?"true":"false") << " offset = " << offset << std::endl; int depth = 0 ; - FILE* f = fopen(argv[1],"rb"); - printIFD(f,std::cout, Exiv2::kpsRecursive, offset,bSwap,depth); - fclose(f); + Exiv2::FileIo file(argv[1]); + printIFD(file, std::cout, Exiv2::kpsRecursive, offset, bSwap, depth); } return result;