From 7a7ae7a1df7d005e5ef9d581102b931fd6cb4e3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20=C4=8Cerm=C3=A1k?= Date: Sun, 30 Sep 2018 00:27:12 +0200 Subject: [PATCH] [image_int] Move internal functions into separate translation unit --- src/CMakeLists.txt | 2 + src/image.cpp | 116 ------------------------------------ src/image_int.cpp | 145 +++++++++++++++++++++++++++++++++++++++++++++ src/image_int.hpp | 2 +- 4 files changed, 148 insertions(+), 117 deletions(-) create mode 100644 src/image_int.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9f1afbc6..7b8bbff7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -103,6 +103,7 @@ set( LIBEXIV2_PRIVATE_SRC cr2header_int.cpp crwimage_int.cpp fujimn_int.cpp + image_int.cpp makernote_int.cpp minoltamn_int.cpp nikonmn_int.cpp @@ -128,6 +129,7 @@ set( LIBEXIV2_PRIVATE_HDR cr2header_int.hpp crwimage_int.hpp fujimn_int.hpp + image_int.hpp makernote_int.hpp minoltamn_int.hpp nikonmn_int.hpp diff --git a/src/image.cpp b/src/image.cpp index eb9179f2..e1d7b938 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -72,7 +72,6 @@ #include #include -#include #ifdef _MSC_VER # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) #endif @@ -984,118 +983,3 @@ namespace Exiv2 { } // append } // namespace Exiv2 - -namespace Exiv2 { - namespace Internal { - -#ifdef MSDEV_2003 -#undef vsnprintf -#define vsnprintf _vsnprintf -#endif - - std::string stringFormat(const char* format, ...) - { - std::string result; - std::vector buffer; - size_t need = std::strlen(format); // initial guess - int rc = -1; - - // vsnprintf writes at most size (2nd parameter) bytes (including \0) - // returns the number of bytes required for the formatted string excluding \0 - // the following loop goes through: - // one iteration (if 'need' was large enough for the for formatted string) - // or two iterations (after the first call to vsnprintf we know the required length) - do { - buffer.resize(need + 1); - va_list args; // variable arg list - va_start(args, format); // args start after format - rc = vsnprintf(&buffer[0], buffer.size(), format, args); - va_end(args); // free the args - assert(rc >= 0); // rc < 0 => we have made an error in the format string - if ( rc > 0 ) - need = static_cast(rc); - } while ( buffer.size() <= need ); - - if ( rc > 0 ) - result = std::string(&buffer[0], need); - return result; - } - - std::string binaryToString(const byte* buff, size_t size, size_t start /*=0*/) - { - std::string result = ""; - size += start; - - while (start < size) { - int c = (int) buff[start++] ; - bool bTrailingNull = c == 0 && start == size; - if ( !bTrailingNull ) { - if (c < ' ' || c >= 127) c = '.' ; - result += (char) c ; - } - } - return result; - } - - std::string binaryToString(DataBuf& buf, size_t size, size_t start /*=0*/) - { - if ( size > (size_t) buf.size_ ) size = (size_t) buf.size_; - return binaryToString(buf.pData_,size,start); - } - - std::string binaryToHex(const byte *data, size_t size) - { - std::stringstream hexOutput; - - unsigned long tl = (unsigned long)((size / 16) * 16); - unsigned long tl_offset = (unsigned long)(size - tl); - - for (unsigned long loop = 0; loop < (unsigned long)size; loop++) { - if (data[loop] < 16) { - hexOutput << "0"; - } - hexOutput << std::hex << (int)data[loop]; - if ((loop % 8) == 7) { - hexOutput << " "; - } - if ((loop % 16) == 15 || loop == (tl + tl_offset - 1)) { - int max = 15; - if (loop >= tl) { - max = tl_offset - 1; - for (int offset = 0; offset < (int)(16 - tl_offset); offset++) { - if ((offset % 8) == 7) { - hexOutput << " "; - } - hexOutput << " "; - } - } - hexOutput << " "; - for (int offset = max; offset >= 0; offset--) { - if (offset == (max - 8)) { - hexOutput << " "; - } - byte c = '.'; - if (data[loop - offset] >= 0x20 && data[loop - offset] <= 0x7E) { - c = data[loop - offset] ; - } - hexOutput << (char) c ; - } - hexOutput << std::endl; - } - } - - hexOutput << std::endl << std::endl << std::endl; - - return hexOutput.str(); - } - - std::string indent(int32_t d) - { - std::string result ; - if ( d > 0 ) - while ( d--) - result += " "; - return result; - } - -}} // namespace Internal, Exiv2 diff --git a/src/image_int.cpp b/src/image_int.cpp new file mode 100644 index 00000000..0b10f775 --- /dev/null +++ b/src/image_int.cpp @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2004-2018 Exiv2 authors + * This program is part of the Exiv2 distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA. + */ + +#include "image_int.hpp" + +#include +#include +#include +#include + +namespace Exiv2 +{ + namespace Internal + { +#ifdef MSDEV_2003 +#undef vsnprintf +#define vsnprintf _vsnprintf +#endif + + std::string stringFormat(const char* format, ...) + { + std::string result; + std::vector buffer; + size_t need = std::strlen(format); // initial guess + int rc = -1; + + // vsnprintf writes at most size (2nd parameter) bytes (including \0) + // returns the number of bytes required for the formatted string excluding \0 + // the following loop goes through: + // one iteration (if 'need' was large enough for the for formatted string) + // or two iterations (after the first call to vsnprintf we know the required length) + do { + buffer.resize(need + 1); + va_list args; // variable arg list + va_start(args, format); // args start after format + rc = vsnprintf(&buffer[0], buffer.size(), format, args); + va_end(args); // free the args + assert(rc >= 0); // rc < 0 => we have made an error in the format string + if (rc > 0) + need = static_cast(rc); + } while (buffer.size() <= need); + + if (rc > 0) + result = std::string(&buffer[0], need); + return result; + } + + std::string binaryToString(const byte* buff, size_t size, size_t start /*=0*/) + { + std::string result = ""; + size += start; + + while (start < size) { + int c = (int)buff[start++]; + bool bTrailingNull = c == 0 && start == size; + if (!bTrailingNull) { + if (c < ' ' || c >= 127) + c = '.'; + result += (char)c; + } + } + return result; + } + + std::string binaryToString(const DataBuf& buf, size_t size, size_t start /*=0*/) + { + if (size > (size_t)buf.size_) + size = (size_t)buf.size_; + return binaryToString(buf.pData_, size, start); + } + + std::string binaryToHex(const byte* data, size_t size) + { + std::stringstream hexOutput; + + unsigned long tl = (unsigned long)((size / 16) * 16); + unsigned long tl_offset = (unsigned long)(size - tl); + + for (unsigned long loop = 0; loop < (unsigned long)size; loop++) { + if (data[loop] < 16) { + hexOutput << "0"; + } + hexOutput << std::hex << (int)data[loop]; + if ((loop % 8) == 7) { + hexOutput << " "; + } + if ((loop % 16) == 15 || loop == (tl + tl_offset - 1)) { + int max = 15; + if (loop >= tl) { + max = tl_offset - 1; + for (int offset = 0; offset < (int)(16 - tl_offset); offset++) { + if ((offset % 8) == 7) { + hexOutput << " "; + } + hexOutput << " "; + } + } + hexOutput << " "; + for (int offset = max; offset >= 0; offset--) { + if (offset == (max - 8)) { + hexOutput << " "; + } + byte c = '.'; + if (data[loop - offset] >= 0x20 && data[loop - offset] <= 0x7E) { + c = data[loop - offset]; + } + hexOutput << (char)c; + } + hexOutput << std::endl; + } + } + + hexOutput << std::endl << std::endl << std::endl; + + return hexOutput.str(); + } + + std::string indent(int32_t d) + { + std::string result; + if (d > 0) + while (d--) + result += " "; + return result; + } + + } // namespace Internal + +} // namespace Exiv2 diff --git a/src/image_int.hpp b/src/image_int.hpp index f92003e5..a0ed9023 100644 --- a/src/image_int.hpp +++ b/src/image_int.hpp @@ -56,7 +56,7 @@ namespace Exiv2 { /*! @brief format binary for display in \em printStructure() \em . */ - std::string binaryToString(DataBuf& buf, size_t size, size_t start =0); + std::string binaryToString(const DataBuf& buf, size_t size, size_t start =0); /*! @brief format binary for display in \em printStructure() \em .