[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:28 UTC 2017


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=8f445fa

The following commit has been merged in the master branch:
commit 8f445fa016ee35ff2e8bdb39dd9ee1725e23df1c
Author: Andreas Huggel <ahuggel at gmx.net>
Date:   Sat Jun 19 11:31:34 2004 +0000

    * Fixed MSVC errors and warnings (Steve, sking_5.patch)
    * Fixed ExifData::copyFromMetadata to automatically add missing offset tags
    * Fixed an embarassing bug in ExifData::updateEntries, which caused write
      after erasing metadata to write back the original metadata.
---
 src/exif.cpp | 90 +++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 49 insertions(+), 41 deletions(-)

diff --git a/src/exif.cpp b/src/exif.cpp
index b68eb4a..7b32a26 100644
--- a/src/exif.cpp
+++ b/src/exif.cpp
@@ -20,14 +20,14 @@
  */
 /*
   File:      exif.cpp
-  Version:   $Name:  $ $Revision: 1.45 $
+  Version:   $Name:  $ $Revision: 1.46 $
   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.45 $ $RCSfile: exif.cpp,v $")
+EXIV2_RCSID("@(#) $Name:  $ $Revision: 1.46 $ $RCSfile: exif.cpp,v $")
 
 // Define DEBUG_MAKERNOTE to output debug information to std::cerr
 #undef DEBUG_MAKERNOTE
@@ -708,17 +708,12 @@ namespace Exiv2 {
 
     long ExifData::copyFromMetadata(char* buf)
     {
-        // Copy the TIFF header
-        long ifd0Offset = tiffHeader_.copy(buf);
-
         // Build IFD0
-        Ifd ifd0(ifd0, ifd0Offset);
+        Ifd ifd0(ifd0);
         addToIfd(ifd0, begin(), end(), byteOrder());
 
         // Build Exif IFD from metadata
-        int idx = ifd0.erase(0x8769);
-        long exifIfdOffset = ifd0Offset + ifd0.size() + 12 + ifd0.dataSize();
-        Ifd exifIfd(exifIfd, exifIfdOffset);
+        Ifd exifIfd(exifIfd);
         addToIfd(exifIfd, begin(), end(), byteOrder());
         MakerNote* pMakerNote = 0;
         if (pMakerNote_) {
@@ -732,39 +727,36 @@ namespace Exiv2 {
             e.setTag(0x927c);
             DataBuf buf(pMakerNote->size());
             memset(buf.pData_, 0x0, buf.size_);
-            e.setValue(undefined, buf.size_, buf.pData_, buf.size_); 
+            e.setValue(undefined, buf.size_, buf.pData_, buf.size_);
+            exifIfd.erase(0x927c);
             exifIfd.add(e);
         }
 
-        // Set the offset to the Exif IFD in IFD0
-        if (exifIfd.size() > 0) {
-            setOffsetTag(ifd0, idx, 0x8769, exifIfdOffset, byteOrder());
-        }
-
         // Build Interoperability IFD from metadata
-        idx = exifIfd.erase(0xa005);
-        long iopIfdOffset = exifIfdOffset + exifIfd.size() + 12 + exifIfd.dataSize();
-        Ifd iopIfd(iopIfd, iopIfdOffset);
+        Ifd iopIfd(iopIfd);
         addToIfd(iopIfd, begin(), end(), byteOrder());
 
-        // Set the offset to the Interoperability IFD in Exif IFD
-        if (iopIfd.size() > 0) {
-            setOffsetTag(exifIfd, idx, 0xa005, iopIfdOffset, byteOrder());
-        }
-
         // Build GPSInfo IFD from metadata
-        idx = ifd0.erase(0x8825);
-        long gpsIfdOffset = iopIfdOffset + 12 + iopIfd.size() + iopIfd.dataSize();
-        Ifd gpsIfd(gpsIfd, gpsIfdOffset);
+        Ifd gpsIfd(gpsIfd);
         addToIfd(gpsIfd, begin(), end(), byteOrder());
 
-        // Set the offset to the GPSInfo IFD in IFD0
-        if (gpsIfd.size() > 0) {
-            setOffsetTag(ifd0, idx, 0x8825, gpsIfdOffset, byteOrder());
-        }
+        // Compute the new IFD offsets and set offset tags
+        int exifIdx = ifd0.erase(0x8769);
+        int gpsIdx  = ifd0.erase(0x8825);
+        int iopIdx  = exifIfd.erase(0xa005);
+
+        long ifd0Offset    = tiffHeader_.size();
+        long exifIfdOffset = ifd0Offset + ifd0.size() 
+                             + (exifIfd.size() > 0 ? 12 : 0)
+                             + (gpsIfd.size()  > 0 ? 12 : 0)
+                             + ifd0.dataSize();
+        long iopIfdOffset  = exifIfdOffset + exifIfd.size() 
+                             + (iopIfd.size() > 0 ? 12 : 0)
+                             + exifIfd.dataSize();
+        long gpsIfdOffset  = iopIfdOffset + iopIfd.size() + iopIfd.dataSize();
+        long ifd1Offset    = gpsIfdOffset + gpsIfd.size() + gpsIfd.dataSize();
 
         // build IFD1 from updated metadata if there is a thumbnail
-        long ifd1Offset = gpsIfdOffset + gpsIfd.size() + gpsIfd.dataSize();
         Ifd ifd1(ifd1, ifd1Offset);
         if (pThumbnail_) {
             // Update Exif data from thumbnail
@@ -777,7 +769,21 @@ namespace Exiv2 {
             }
         }
 
-        // Copy all IFDs, the MakerNote data and the thumbnail to the data buffer
+        // Set the offset to the Exif IFD in IFD0
+        if (exifIfd.size() > 0) {
+            setOffsetTag(ifd0, exifIdx, 0x8769, exifIfdOffset, byteOrder());
+        }
+        // Set the offset to the GPSInfo IFD in IFD0
+        if (gpsIfd.size() > 0) {
+            setOffsetTag(ifd0, gpsIdx, 0x8825, gpsIfdOffset, byteOrder());
+        }
+        // Set the offset to the Interoperability IFD in Exif IFD
+        if (iopIfd.size() > 0) {
+            setOffsetTag(exifIfd, iopIdx, 0xa005, iopIfdOffset, byteOrder());
+        }
+
+        // Copy the TIFF header, all IFDs, MakerNote and thumbnail to the buffer
+        tiffHeader_.copy(buf);
         ifd0.sortByTag();
         ifd0.copy(buf + ifd0Offset, byteOrder(), ifd0Offset);
         exifIfd.sortByTag();
@@ -806,6 +812,7 @@ namespace Exiv2 {
             len = thumbOffset;
             len += pThumbnail_->copy(buf + thumbOffset);
         }
+
         return len;
 
     } // ExifData::copyFromMetadata
@@ -1010,17 +1017,17 @@ namespace Exiv2 {
         if (!this->compatible()) return false;
 
         bool compatible = true;
-        compatible |= updateRange(ifd0_.begin(), ifd0_.end(), byteOrder());
-        compatible |= updateRange(exifIfd_.begin(), exifIfd_.end(), byteOrder());
+        compatible &= updateRange(ifd0_.begin(), ifd0_.end(), byteOrder());
+        compatible &= updateRange(exifIfd_.begin(), exifIfd_.end(), byteOrder());
         if (pMakerNote_) {
-            compatible |= updateRange(pMakerNote_->begin(), 
+            compatible &= updateRange(pMakerNote_->begin(), 
                                       pMakerNote_->end(), 
                                       pMakerNote_->byteOrder());
         }
-        compatible |= updateRange(iopIfd_.begin(), iopIfd_.end(), byteOrder());
-        compatible |= updateRange(gpsIfd_.begin(), gpsIfd_.end(), byteOrder());
+        compatible &= updateRange(iopIfd_.begin(), iopIfd_.end(), byteOrder());
+        compatible &= updateRange(gpsIfd_.begin(), gpsIfd_.end(), byteOrder());
         if (pThumbnail_) {
-            compatible |= updateRange(ifd1_.begin(), ifd1_.end(), byteOrder());
+            compatible &= updateRange(ifd1_.begin(), ifd1_.end(), byteOrder());
         }
 
         return compatible;
@@ -1049,7 +1056,8 @@ namespace Exiv2 {
             else {
                 DataBuf buf(md->size());
                 md->copy(buf.pData_, byteOrder);
-                entry->setValue(md->typeId(), md->count(), buf.pData_, md->size());
+                entry->setValue(static_cast<uint16>(md->typeId()), md->count(), 
+                                buf.pData_, md->size());
             }
         }
         return compatible;
@@ -1204,7 +1212,7 @@ namespace Exiv2 {
 
         DataBuf buf(md.size());
         md.copy(buf.pData_, byteOrder);
-        e.setValue(md.typeId(), md.count(), buf.pData_, md.size()); 
+        e.setValue(static_cast<uint16>(md.typeId()), md.count(), buf.pData_, md.size()); 
         ifd.add(e);
     } // addToIfd
 
@@ -1233,7 +1241,7 @@ namespace Exiv2 {
 
         DataBuf buf(md.size());
         md.copy(buf.pData_, byteOrder);
-        e.setValue(md.typeId(), md.count(), buf.pData_, md.size()); 
+        e.setValue(static_cast<uint16>(md.typeId()), md.count(), buf.pData_, md.size()); 
         makerNote->add(e);
     } // addToMakerNote
 

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list