[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a
Maximiliano Curia
maxy at moszumanska.debian.org
Thu Jul 13 17:36:12 UTC 2017
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=f7c55fc
The following commit has been merged in the master branch:
commit f7c55fcb6415e5741f6bb51f979dacbe494860ac
Author: Andreas Huggel <ahuggel at gmx.net>
Date: Mon Mar 22 08:49:20 2004 +0000
Bugfix: Set offset to the next IFD directly in the underlying data buffer in non-alloc mode
---
src/ifd.cpp | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++--------
src/ifd.hpp | 42 +++++++++++++++++++++++++++++++----------
2 files changed, 87 insertions(+), 18 deletions(-)
diff --git a/src/ifd.cpp b/src/ifd.cpp
index 38136ec..0539244 100644
--- a/src/ifd.cpp
+++ b/src/ifd.cpp
@@ -20,14 +20,14 @@
*/
/*
File: ifd.cpp
- Version: $Name: $ $Revision: 1.13 $
+ Version: $Name: $ $Revision: 1.14 $
Author(s): Andreas Huggel (ahu) <ahuggel at gmx.net>
History: 26-Jan-04, ahu: created
11-Feb-04, ahu: isolated as a component
*/
// *****************************************************************************
#include "rcsid.hpp"
-EXIV2_RCSID("@(#) $Name: $ $Revision: 1.13 $ $RCSfile: ifd.cpp,v $")
+EXIV2_RCSID("@(#) $Name: $ $Revision: 1.14 $ $RCSfile: ifd.cpp,v $")
// *****************************************************************************
// included header files
@@ -156,18 +156,41 @@ namespace Exif {
} // Entry::component
Ifd::Ifd(IfdId ifdId)
- : alloc_(true), ifdId_(ifdId), offset_(0), next_(0)
+ : alloc_(true), ifdId_(ifdId), offset_(0), pNext_(0), next_(0)
{
+ pNext_ = new char[4];
+ memset(pNext_, 0x0, 4);
}
Ifd::Ifd(IfdId ifdId, uint32 offset)
- : alloc_(true), ifdId_(ifdId), offset_(offset), next_(0)
+ : alloc_(true), ifdId_(ifdId), offset_(offset), pNext_(0), next_(0)
{
+ pNext_ = new char[4];
+ memset(pNext_, 0x0, 4);
}
Ifd::Ifd(IfdId ifdId, uint32 offset, bool alloc)
- : alloc_(alloc), ifdId_(ifdId), offset_(offset), next_(0)
+ : alloc_(alloc), ifdId_(ifdId), offset_(offset), pNext_(0), next_(0)
{
+ if (alloc_) {
+ pNext_ = new char[4];
+ memset(pNext_, 0x0, 4);
+ }
+ }
+
+ Ifd::~Ifd()
+ {
+ if (alloc_) delete[] pNext_;
+ }
+
+ Ifd::Ifd(const Ifd& rhs)
+ : alloc_(rhs.alloc_), entries_(rhs.entries_), ifdId_(rhs.ifdId_),
+ offset_(rhs.offset_), pNext_(rhs.pNext_), next_(rhs.next_)
+ {
+ if (alloc_ && rhs.pNext_) {
+ pNext_ = new char[4];
+ memcpy(pNext_, rhs.pNext_, 4);
+ }
}
int Ifd::read(const char* buf, ByteOrder byteOrder, long offset)
@@ -190,6 +213,12 @@ namespace Exif {
preEntries.push_back(pe);
o += 12;
}
+ if (alloc_) {
+ memcpy(pNext_, buf + o, 4);
+ }
+ else {
+ pNext_ = const_cast<char*>(buf + o);
+ }
next_ = getULong(buf+o, byteOrder);
// Guess the offset of the IFD, if it was not given. The guess is based
@@ -304,7 +333,13 @@ namespace Exif {
}
// Add the offset to the next IFD to the data buffer
- o += ul2Data(buf + o, next_, byteOrder);
+ if (pNext_) {
+ memcpy(buf + o, pNext_, 4);
+ }
+ else {
+ memset(buf + o, 0x0, 4);
+ }
+ o += 4;
// Add the data of all IFD entries to the data buffer
for (i = b; i != e; ++i) {
@@ -320,10 +355,22 @@ namespace Exif {
void Ifd::clear()
{
entries_.clear();
- next_ = 0;
+ if (alloc_) {
+ memset(pNext_, 0x0, 4);
+ }
+ else {
+ pNext_ = 0;
+ }
offset_ = 0;
} // Ifd::clear
+ void Ifd::setNext(uint32 next, ByteOrder byteOrder)
+ {
+ assert(pNext_);
+ ul2Data(pNext_, next, byteOrder);
+ next_ = next;
+ }
+
void Ifd::add(const Entry& entry)
{
assert(alloc_ == entry.alloc());
@@ -407,7 +454,7 @@ namespace Exif {
}
os << prefix << "Next IFD: 0x"
<< std::setw(8) << std::setfill('0') << std::hex
- << std::right << next_ << "
";
+ << std::right << next() << "
";
// Print data of IFD entries
for (i = b; i != e; ++i) {
if (i->size() > 4) {
diff --git a/src/ifd.hpp b/src/ifd.hpp
index 883abce..ad2b6dd 100644
--- a/src/ifd.hpp
+++ b/src/ifd.hpp
@@ -21,7 +21,7 @@
/*!
@file ifd.hpp
@brief Encoding and decoding of IFD (Image File Directory) data
- @version $Name: $ $Revision: 1.11 $
+ @version $Name: $ $Revision: 1.12 $
@author Andreas Huggel (ahu)
<a href="mailto:ahuggel at gmx.net">ahuggel at gmx.net</a>
@date 09-Jan-04, ahu: created
@@ -265,6 +265,12 @@ namespace Exif {
and the same data buffer.
*/
class Ifd {
+ //! @name Not implemented
+ //@{
+ //! Assignment not allowed (memory management mode alloc_ is const)
+ Ifd& operator=(const Ifd& rhs);
+ //@}
+
public:
//! @name Creators
//@{
@@ -285,6 +291,10 @@ namespace Exif {
memory management is required for the Entries.
*/
Ifd(IfdId ifdId, uint32 offset, bool alloc);
+ //! Copy constructor
+ Ifd(const Ifd& rhs);
+ //! Destructor
+ ~Ifd();
//@}
//! Entries const iterator type
@@ -356,8 +366,11 @@ namespace Exif {
entries.
*/
void clear();
- //! Set the offset of the next IFD
- void setNext(uint32 next) { next_ = next; }
+ /*!
+ @brief Set the offset of the next IFD. Byte order is needed to update
+ the underlying data buffer in non-alloc mode.
+ */
+ void setNext(uint32 next, ByteOrder byteOrder);
/*!
@brief Add the entry to the IFD. No duplicate-check is performed,
i.e., it is possible to add multiple entries with the same tag.
@@ -402,7 +415,7 @@ namespace Exif {
//! Get the offset of the IFD from the start of the TIFF header
long offset() const { return offset_; }
//! Get the offset to the next IFD from the start of the TIFF header
- long next() const { return next_; }
+ uint32 next() const { return next_; }
//! Get the number of directory entries in the IFD
long count() const { return entries_.size(); }
//! Get the size of this IFD in bytes (IFD only, without data)
@@ -438,12 +451,21 @@ namespace Exif {
//! Container for 'pre-entries'
typedef std::vector<PreEntry> PreEntries;
- const bool alloc_; // True: requires memory allocation and deallocation,
- // False: no memory management needed.
- Entries entries_; // IFD entries
- IfdId ifdId_; // IFD Id
- long offset_; // offset of the IFD from the start of TIFF header
- long next_; // offset of next IFD from the start of the TIFF header
+ /*!
+ True: requires memory allocation and deallocation,
+ False: no memory management needed.
+ */
+ const bool alloc_;
+ //! IFD entries
+ Entries entries_;
+ //! IFD Id
+ IfdId ifdId_;
+ //! offset of the IFD from the start of TIFF header
+ long offset_;
+ // Pointer to the offset of next IFD from the start of the TIFF header
+ char* pNext_;
+ // The offset of the next IFD as data value (always in sync with *pNext_)
+ uint32 next_;
}; // class Ifd
--
exiv2 packaging
More information about the pkg-kde-commits
mailing list