From 88ba9209629547cdf51c3be00ca9ccbd2c66a1db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20D=C3=ADaz=20M=C3=A1s?= Date: Fri, 25 May 2018 15:10:16 +0200 Subject: [PATCH] Extract out common code for two switch-cases into a function to fix warning The warning was caused by -Wimplicit-fallthrough: https://developers.redhat.com/blog/2017/03/10/wimplicit-fallthrough-in-gcc-7/ I also realized that the method printStructure was duplicated in the classes Print and Erase. By moving the implementation to a free function into the cpp file, I could remove the duplication in the code. --- src/actions.cpp | 60 ++++++++++++++++++++++--------------------------- src/actions.hpp | 6 ----- 2 files changed, 27 insertions(+), 39 deletions(-) diff --git a/src/actions.cpp b/src/actions.cpp index b167d19e..dbca8972 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -158,6 +158,9 @@ namespace { os << make_pair( myString, width) */ std::ostream& operator<<( std::ostream& os, std::pair strAndWidth); + + //! Print image Structure information + int printStructure(std::ostream& out, Exiv2::PrintStructureOption option, const std::string &path); } // ***************************************************************************** @@ -232,6 +235,12 @@ namespace Action { { } + int setModeAndPrintStructure(Exiv2::PrintStructureOption option, const std::string& path) + { + _setmode(_fileno(stdout),O_BINARY); + return printStructure(std::cout, option, path); + } + int Print::run(const std::string& path) { try { @@ -243,18 +252,17 @@ namespace Action { case Params::pmList: rc = printList(); break; case Params::pmComment: rc = printComment(); break; case Params::pmPreview: rc = printPreviewList(); break; - case Params::pmStructure: rc = printStructure(std::cout,Exiv2::kpsBasic) ; break; - case Params::pmRecursive: rc = printStructure(std::cout,Exiv2::kpsRecursive) ; break; - + case Params::pmStructure: rc = printStructure(std::cout,Exiv2::kpsBasic, path_) ; break; + case Params::pmRecursive: rc = printStructure(std::cout,Exiv2::kpsRecursive, path_) ; break; case Params::pmXMP: if (option == Exiv2::kpsNone) option = Exiv2::kpsXMP; - // drop + rc = setModeAndPrintStructure(option, path_); + break; case Params::pmIccProfile: if (option == Exiv2::kpsNone) option = Exiv2::kpsIccProfile; - _setmode(_fileno(stdout),O_BINARY); - rc = printStructure(std::cout,option); + rc = setModeAndPrintStructure(option, path_); break; } return rc; @@ -271,19 +279,6 @@ namespace Action { } } - int Print::printStructure(std::ostream& out, Exiv2::PrintStructureOption option) - { - if (!Exiv2::fileExists(path_, true)) { - std::cerr << path_ << ": " - << _("Failed to open the file\n"); - return -1; - } - Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(path_); - assert(image.get() != 0); - image->printStructure(out,option); - return 0; - } - int Print::printSummary() { if (!Exiv2::fileExists(path_, true)) { @@ -962,7 +957,7 @@ namespace Action { rc = eraseIccProfile(image.get()); } if (0 == rc && Params::instance().target_ & Params::ctIptcRaw) { - rc = printStructure(std::cout,Exiv2::kpsIptcErase); + rc = printStructure(std::cout,Exiv2::kpsIptcErase,path_); } if (0 == rc) { @@ -979,19 +974,6 @@ namespace Action { return 1; } // Erase::run - int Erase::printStructure(std::ostream& out, Exiv2::PrintStructureOption option) - { - if (!Exiv2::fileExists(path_, true)) { - std::cerr << path_ << ": " - << _("Failed to open the file\n"); - return -1; - } - Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(path_); - assert(image.get() != 0); - image->printStructure(out,option); - return 0; - } - int Erase::eraseThumbnail(Exiv2::Image* image) const { Exiv2::ExifThumb exifThumb(image->exifData()); @@ -2379,4 +2361,16 @@ namespace { return os << std::setw( minChCount) << str; } + int printStructure(std::ostream& out, Exiv2::PrintStructureOption option, const std::string &path) + { + if (!Exiv2::fileExists(path, true)) { + std::cerr << path << ": " + << _("Failed to open the file\n"); + return -1; + } + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(path); + assert(image.get() != 0); + image->printStructure(out,option); + return 0; + } } diff --git a/src/actions.hpp b/src/actions.hpp index 8983502e..0945a228 100644 --- a/src/actions.hpp +++ b/src/actions.hpp @@ -179,8 +179,6 @@ namespace Action { bool printMetadatum(const Exiv2::Metadatum& md, const Exiv2::Image* image); //! Print the label for a summary line void printLabel(const std::string& label) const; - //! Print image Structure information - int printStructure(std::ostream& out, Exiv2::PrintStructureOption option); /*! @brief Print one summary line with a label (if provided) and requested data. A line break is printed only if a label is provided. @@ -277,10 +275,6 @@ namespace Action { @brief Erase ICCProfile from the file. */ int eraseIccProfile(Exiv2::Image* image) const; - /*! - @brief Print image Structure information (used by ctIptcRaw/kpsIptcErase) - */ - int printStructure(std::ostream& out, Exiv2::PrintStructureOption option); private: