From adb618fcf9543e840bf73729ecedff1746ef9616 Mon Sep 17 00:00:00 2001 From: Andreas Huggel Date: Sat, 19 Mar 2005 14:56:47 +0000 Subject: [PATCH] More clean-up, updated component dependency graph --- doc/exiv2.dot | 86 ++++++++------- doc/exiv2.gif | Bin 6729 -> 8795 bytes src/exif.cpp | 89 ++++++++-------- src/exif.hpp | 5 +- test/data/write-test-debug.out | 188 +++++++++++++++++++++++++++++++++ test/data/write-test.out | 11 -- 6 files changed, 285 insertions(+), 94 deletions(-) create mode 100644 test/data/write-test-debug.out diff --git a/doc/exiv2.dot b/doc/exiv2.dot index dd174ccb..4c60f8cd 100644 --- a/doc/exiv2.dot +++ b/doc/exiv2.dot @@ -3,52 +3,64 @@ # Version : $Rev$ # Author(s): Andreas Huggel (ahu) # History : 18-Feb-04, ahu: created +# 19-Mar-05, ahu: updated after inside-out change # # Description: -# Dot file for a graph showing the component dependencies of the -# Exiv2 library. Run the following command to get the image: +# Dot file for a graph showing the component dependencies ("uses in the +# interface") of the Exiv2 library. +# Run the following command to get the image: # $ dot -Tgif -oexiv2.gif exiv2.dot ################################################################################ -digraph G { +digraph "Exiv2 component dependencies" { -L1 [shape=plaintext] ; -L2 [shape=plaintext] ; -L3 [shape=plaintext] ; -L4 [shape=plaintext] ; -L5 [shape=plaintext] ; + L1 [shape=plaintext] ; + L2 [shape=plaintext] ; + L3 [shape=plaintext] ; + L4 [shape=plaintext] ; + L5 [shape=plaintext] ; + L6 [shape=plaintext] ; -"L5" -> "L4" -> "L3" -> "L2" -> "L1" [style=invis] ; + "L6" -> "L5" -> "L4" -> "L3" -> "L2" -> "L1" [style=invis] ; -"exif" [shape=box] ; -"iptc" [shape=box] ; -"metadatum" [shape=box] ; -"ifd" [shape=box] ; -"image" [shape=box] ; -"tags" [shape=box] ; -"datasets" [shape=box] ; -"value" [shape=box] ; -"types" [shape=box] ; -"error" [shape=box] ; -"makernote" [shape=box] ; + "exif" [shape=box] ; + "iptc" [shape=box] ; + "metadatum" [shape=box] ; + "ifd" [shape=box] ; + "image" [shape=box] ; + "tags" [shape=box] ; + "datasets" [shape=box] ; + "value" [shape=box] ; + "types" [shape=box] ; + "error" [shape=box] ; + "makernote" [shape=box] ; + "basicio" [shape=box] ; + "*mn" [shape=box] ; + "jpgimage" [shape=box] ; -"exif" -> "tags" ; -"exif" -> "makernote" ; -"exif" -> "image" ; -"iptc" -> "datasets" ; -"iptc" -> "image" ; -"metadatum" -> "value" ; -"metadatum" -> "error" ; -"makernote" -> "ifd" ; -"makernote" -> "value" ; -"ifd" -> "error" ; -"ifd" -> "types" ; -"image" -> "types" ; -"tags" -> "metadatum"; -"datasets" -> "metadatum" ; -"value" -> "types" ; + clusterrank="local"; + "basicio" -> "error" + "basicio" -> "types" + "*mn" -> "makernote" + "*mn" -> "tags" + "datasets" -> "metadatum" + "exif" -> "ifd" + "exif" -> "tags" + "exif" -> "error" + "ifd" -> "types" + "image" -> "basicio" + "iptc" -> "datasets" + "iptc" -> "error" + "jpgimage" -> "exif" + "jpgimage" -> "image" + "jpgimage" -> "iptc" + "makernote" -> "ifd" + "metadatum" -> "value" + "tags" -> "metadatum" + "value" -> "types" -{ rank=same; L1 error types } -{ rank=same; L2 image value ifd } + { rank=same; L1 "types" } + { rank=same; L2 "value" "ifd" } + { rank=same; L5 "image" "iptc" } } diff --git a/doc/exiv2.gif b/doc/exiv2.gif index 8549f803b4328e2e0be37c702a9b1c7ce89b53cc..f3bf7c03755bce794a4104bc54520bfe44dd4a75 100644 GIT binary patch delta 8768 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 delta 6685 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 diff --git a/src/exif.cpp b/src/exif.cpp index 6fb69878..b0d2072c 100644 --- a/src/exif.cpp +++ b/src/exif.cpp @@ -308,14 +308,14 @@ namespace Exiv2 { ExifData::ExifData() : pTiffHeader_(0), pIfd0_(0), pExifIfd_(0), pIopIfd_(0), pGpsIfd_(0), pIfd1_(0), - size_(0), pData_(0), compatible_(true) + pMakerNote_(0), size_(0), pData_(0), compatible_(true) { } ExifData::ExifData(const ExifData& rhs) : exifMetadata_(rhs.exifMetadata_), pTiffHeader_(0), pIfd0_(0), pExifIfd_(0), pIopIfd_(0), pGpsIfd_(0), pIfd1_(0), - size_(0), pData_(0), compatible_(rhs.compatible_) + pMakerNote_(0), size_(0), pData_(0), compatible_(rhs.compatible_) { pData_ = new byte[rhs.size_]; size_ = rhs.size_; @@ -324,10 +324,6 @@ namespace Exiv2 { if (rhs.pTiffHeader_) { pTiffHeader_ = new TiffHeader(*rhs.pTiffHeader_); } - if (rhs.makerNote_.get() != 0) { - makerNote_ = rhs.makerNote_->clone(); - makerNote_->updateBase(pData_); - } if (rhs.pIfd0_) { pIfd0_ = new Ifd(*rhs.pIfd0_); pIfd0_->updateBase(pData_); @@ -348,6 +344,10 @@ namespace Exiv2 { pIfd1_ = new Ifd(*rhs.pIfd1_); pIfd1_->updateBase(pData_); } + if (rhs.pMakerNote_) { + pMakerNote_ = rhs.pMakerNote_->clone().release(); + pMakerNote_->updateBase(pData_); + } } ExifData::~ExifData() @@ -358,6 +358,7 @@ namespace Exiv2 { delete pIopIfd_; delete pGpsIfd_; delete pIfd1_; + delete pMakerNote_; delete[] pData_; } @@ -378,13 +379,6 @@ namespace Exiv2 { if (rhs.pTiffHeader_) { pTiffHeader_ = new TiffHeader(*rhs.pTiffHeader_); } - - makerNote_.reset(); - if (rhs.makerNote_.get() != 0) { - makerNote_ = rhs.makerNote_->clone(); - makerNote_->updateBase(pData_); - } - delete pIfd0_; pIfd0_ = 0; if (rhs.pIfd0_) { @@ -415,6 +409,12 @@ namespace Exiv2 { pIfd1_ = new Ifd(*rhs.pIfd1_); pIfd1_->updateBase(pData_); } + delete pMakerNote_; + pMakerNote_ = 0; + if (rhs.pMakerNote_) { + pMakerNote_ = rhs.pMakerNote_->clone().release(); + pMakerNote_->updateBase(pData_); + } compatible_ = rhs.compatible_; return *this; @@ -471,30 +471,31 @@ namespace Exiv2 { MakerNoteFactory& mnf = MakerNoteFactory::instance(); // Todo: The conversion to string assumes that there is a \0 at the end // Todo: How to avoid the cast (is that a MSVC thing?) - makerNote_ = mnf.create(reinterpret_cast(make->data()), - reinterpret_cast(model->data()), - false, - pos->data(), - pos->size(), - byteOrder(), - pExifIfd_->offset() + pos->offset()); + pMakerNote_ = mnf.create(reinterpret_cast(make->data()), + reinterpret_cast(model->data()), + false, + pos->data(), + pos->size(), + byteOrder(), + pExifIfd_->offset() + pos->offset()).release(); } // Read the MakerNote - if (makerNote_.get() != 0) { - rc = makerNote_->read(pos->data(), - pos->size(), - byteOrder(), - pExifIfd_->offset() + pos->offset()); + if (pMakerNote_) { + rc = pMakerNote_->read(pos->data(), + pos->size(), + byteOrder(), + pExifIfd_->offset() + pos->offset()); if (rc) { // Todo: How to handle debug output like this std::cerr << "Warning: Failed to read Makernote, rc = " << rc << "\n"; - makerNote_.reset(); + delete pMakerNote_; + pMakerNote_ = 0; } } // If we successfully parsed the MakerNote, delete the raw MakerNote, // the parsed MakerNote is the primary MakerNote from now on - if (makerNote_.get() != 0) { + if (pMakerNote_) { pExifIfd_->erase(pos); } @@ -539,8 +540,8 @@ namespace Exiv2 { exifMetadata_.clear(); add(pIfd0_->begin(), pIfd0_->end(), byteOrder()); add(pExifIfd_->begin(), pExifIfd_->end(), byteOrder()); - if (makerNote_.get() != 0) { - add(makerNote_->begin(), makerNote_->end(), makerNote_->byteOrder()); + if (pMakerNote_) { + add(pMakerNote_->begin(), pMakerNote_->end(), pMakerNote_->byteOrder()); } add(pIopIfd_->begin(), pIopIfd_->end(), byteOrder()); add(pGpsIfd_->begin(), pGpsIfd_->end(), byteOrder()); @@ -585,12 +586,12 @@ namespace Exiv2 { Ifd exifIfd(exifIfdId); addToIfd(exifIfd, begin(), end(), byteOrder()); MakerNote::AutoPtr makerNote; - if (makerNote_.get() != 0) { + if (pMakerNote_) { // Build MakerNote from metadata - makerNote = makerNote_->create(); + makerNote = pMakerNote_->create(); addToMakerNote(makerNote.get(), begin(), end(), - makerNote_->byteOrder()); + pMakerNote_->byteOrder()); // Create a placeholder MakerNote entry of the correct size and // add it to the Exif IFD (because we don't know the offset yet) Entry e; @@ -722,9 +723,9 @@ namespace Exiv2 { void ExifData::add(const Exifdatum& exifdatum) { if (ExifTags::isMakerIfd(exifdatum.ifdId())) { - if (makerNote_.get() == 0) { + if (pMakerNote_ == 0) { MakerNoteFactory& mnf = MakerNoteFactory::instance(); - makerNote_ = mnf.create(exifdatum.ifdId()); + pMakerNote_ = mnf.create(exifdatum.ifdId()).release(); } } // allow duplicates @@ -852,9 +853,9 @@ namespace Exiv2 { maxOffset = std::max(maxOffset, pExifIfd_->offset()); maxOffset = std::max(maxOffset, pExifIfd_->dataOffset() + pExifIfd_->dataSize()); - if (makerNote_.get() != 0) { - maxOffset = std::max(maxOffset, makerNote_->offset() - + makerNote_->size()); + if (pMakerNote_) { + maxOffset = std::max(maxOffset, pMakerNote_->offset() + + pMakerNote_->size()); } maxOffset = std::max(maxOffset, pIopIfd_->offset()); maxOffset = std::max(maxOffset, pIopIfd_->dataOffset() @@ -954,10 +955,10 @@ namespace Exiv2 { bool compatible = true; compatible &= updateRange(pIfd0_->begin(), pIfd0_->end(), byteOrder()); compatible &= updateRange(pExifIfd_->begin(), pExifIfd_->end(), byteOrder()); - if (makerNote_.get() != 0) { - compatible &= updateRange(makerNote_->begin(), - makerNote_->end(), - makerNote_->byteOrder()); + if (pMakerNote_) { + compatible &= updateRange(pMakerNote_->begin(), + pMakerNote_->end(), + pMakerNote_->byteOrder()); } compatible &= updateRange(pIopIfd_->begin(), pIopIfd_->end(), byteOrder()); compatible &= updateRange(pGpsIfd_->begin(), pGpsIfd_->end(), byteOrder()); @@ -1046,9 +1047,9 @@ namespace Exiv2 { Entries::const_iterator entry; std::pair rc(false, entry); - if (ExifTags::isMakerIfd(ifdId) && makerNote_.get() != 0) { - entry = makerNote_->findIdx(idx); - if (entry != makerNote_->end()) { + if (ExifTags::isMakerIfd(ifdId) && pMakerNote_) { + entry = pMakerNote_->findIdx(idx); + if (entry != pMakerNote_->end()) { rc.first = true; rc.second = entry; } diff --git a/src/exif.hpp b/src/exif.hpp index 0043bc87..3ba55729 100644 --- a/src/exif.hpp +++ b/src/exif.hpp @@ -838,14 +838,15 @@ namespace Exiv2 { // DATA ExifMetadata exifMetadata_; + // The pointers below are used only if Exif data is read from a + // raw data buffer TiffHeader* pTiffHeader_; //! Pointer to the TIFF header - //! Pointer to the MakerNote - std::auto_ptr makerNote_; Ifd* pIfd0_; //! Pointer to Ifd0 Ifd* pExifIfd_; //! Pointer to ExifIfd Ifd* pIopIfd_; //! Pointer to IopIfd Ifd* pGpsIfd_; //! Pointer to GpsIfd Ifd* pIfd1_; //! Pointer to Ifd1 + MakerNote* pMakerNote_; //! Pointer to the MakerNote, if any long size_; //!< Size of the Exif raw data in bytes byte* pData_; //!< Exif raw data buffer diff --git a/test/data/write-test-debug.out b/test/data/write-test-debug.out new file mode 100644 index 00000000..73a14e8e --- /dev/null +++ b/test/data/write-test-debug.out @@ -0,0 +1,188 @@ +------------------------------------------------------------ +Case 1: Non-intrusive change to the standard Exif metadata +---> Reading file ./exiv2-canon-powershot-s40.jpg +---> Modifying Exif data +---> Writing Exif data to file test1.jpg +->>>>>> using non-intrusive writing <<<<<<- +---> Reading file test1.jpg +---> Writing Exif thumbnail to file thumb1.* +13c13 +< Exif.Photo.DateTimeOriginal 0x9003 2003:12:14 12:01:44 +--- +> Exif.Photo.DateTimeOriginal 0x9003 1999:11:22 00:11:22 +------------------------------------------------------------ +Case 2: Non-intrusive change to the makernote metadata +---> Reading file ./exiv2-canon-powershot-s40.jpg +---> Modifying Exif data +---> Writing Exif data to file test2.jpg +->>>>>> using non-intrusive writing <<<<<<- +---> Reading file test2.jpg +---> Writing Exif thumbnail to file thumb2.* +49c49 +< Exif.Canon.OwnerName 0x0009 Andreas Huggel +--- +> Exif.Canon.OwnerName 0x0009 Chan YeeSend +------------------------------------------------------------ +Case 3: Non-intrusive change to the Exif metadata (w/o makernote) +---> Reading file ./exiv2-kodak-dc210.jpg +---> Modifying Exif data +---> Writing Exif data to file test3.jpg +->>>>>> using non-intrusive writing <<<<<<- +---> Reading file test3.jpg +---> Writing Exif thumbnail to file thumb3.* +14c14 +< Exif.Photo.DateTimeOriginal 0x9003 2000:10:26 16:46:51 +--- +> Exif.Photo.DateTimeOriginal 0x9003 1999:11:22 00:11:22 +------------------------------------------------------------ +Case 4: Intrusive change to the standard Exif metadata +---> Reading file ./exiv2-canon-powershot-s40.jpg +---> Modifying Exif data +---> Writing Exif data to file test4.jpg +->>>>>> writing from metadata <<<<<<- +---> Reading file test4.jpg +---> Writing Exif thumbnail to file thumb4.* +9c9 +< Exif.Image.ExifTag 0x8769 196 +--- +> Exif.Image.ExifTag 0x8769 184 +13c13 +< Exif.Photo.DateTimeOriginal 0x9003 2003:12:14 12:01:44 +--- +> Exif.Photo.DateTimeOriginal 0x9003 1999:11:22 00:11:22 and twenty seconds +29c29 +< Exif.Photo.InteroperabilityTag 0xa005 1416 +--- +> Exif.Photo.InteroperabilityTag 0xa005 1423 +------------------------------------------------------------ +Case 5: Intrusive change to the Canon makernote metadata +---> Reading file ./exiv2-canon-powershot-s40.jpg +---> Modifying Exif data +---> Writing Exif data to file test5.jpg +->>>>>> writing from metadata <<<<<<- +---> Reading file test5.jpg +---> Writing Exif thumbnail to file thumb5.* +9c9 +< Exif.Image.ExifTag 0x8769 196 +--- +> Exif.Image.ExifTag 0x8769 184 +29c29 +< Exif.Photo.InteroperabilityTag 0xa005 1416 +--- +> Exif.Photo.InteroperabilityTag 0xa005 1414 +49c49 +< Exif.Canon.OwnerName 0x0009 Andreas Huggel +--- +> Exif.Canon.OwnerName 0x0009 Frau Chan YeeSend und Herr Andreas Huggel +------------------------------------------------------------ +Case 6: Intrusive change to the Exif metadata (w/o makernote) +---> Reading file ./exiv2-kodak-dc210.jpg +---> Modifying Exif data +---> Writing Exif data to file test6.jpg +->>>>>> writing from metadata <<<<<<- +---> Reading file test6.jpg +---> Writing Exif thumbnail to file thumb6.* +10c10 +< Exif.Image.ExifTag 0x8769 374 +--- +> Exif.Image.ExifTag 0x8769 192 +14c14 +< Exif.Photo.DateTimeOriginal 0x9003 2000:10:26 16:46:51 +--- +> Exif.Photo.DateTimeOriginal 0x9003 1999:11:22 00:11:22 and twenty seconds +------------------------------------------------------------ +Case 7: Intrusive change to the Fujifilm makernote metadata +---> Reading file ./exiv2-fujifilm-finepix-s2pro.jpg +---> Modifying Exif data +---> Writing Exif data to file test7.jpg +->>>>>> writing from metadata <<<<<<- +---> Reading file test7.jpg +---> Writing Exif thumbnail to file thumb7.* +11c11 +< Exif.Image.ExifTag 0x8769 248 +--- +> Exif.Image.ExifTag 0x8769 245 +33c33 +< Exif.Photo.InteroperabilityTag 0xa005 1056 +--- +> Exif.Photo.InteroperabilityTag 0xa005 1070 +50c50 +< Exif.Fujifilm.Quality 0x1000 NORMAL +--- +> Exif.Fujifilm.Quality 0x1000 Typical Fujifilm Quality +------------------------------------------------------------ +Case 8: Intrusive change to the Sigma makernote metadata +---> Reading file ./exiv2-sigma-d10.jpg +---> Modifying Exif data +---> Writing Exif data to file test8.jpg +->>>>>> writing from metadata <<<<<<- +---> Reading file test8.jpg +---> Writing Exif thumbnail to file thumb8.* +10c10 +< Exif.Image.ExifTag 0x8769 12317 +--- +> Exif.Image.ExifTag 0x8769 213 +38c38 +< Exif.Sigma.ResolutionMode 0x0004 HI +--- +> Exif.Sigma.ResolutionMode 0x0004 Sigma HI resolution +------------------------------------------------------------ +Case 9: Intrusive change to the Nikon1 makernote metadata +---> Reading file ./exiv2-nikon-e990.jpg +---> Modifying Exif data +---> Writing Exif data to file test9.jpg +->>>>>> writing from metadata <<<<<<- +---> Reading file test9.jpg +---> Writing Exif thumbnail to file thumb9.* +11c11 +< Exif.Image.ExifTag 0x8769 284 +--- +> Exif.Image.ExifTag 0x8769 213 +32c32 +< Exif.Photo.InteroperabilityTag 0xa005 886 +--- +> Exif.Photo.InteroperabilityTag 0xa005 1214 +38c38 +< Exif.Nikon1.Quality 0x0004 FINE +--- +> Exif.Nikon1.Quality 0x0004 Typical Nikon1 Quality +------------------------------------------------------------ +Case 10: Intrusive change to the Nikon2 makernote metadata +---> Reading file ./exiv2-nikon-e950.jpg +---> Modifying Exif data +---> Writing Exif data to file test10.jpg +->>>>>> writing from metadata <<<<<<- +---> Reading file test10.jpg +---> Writing Exif thumbnail to file thumb10.* +11c11 +< Exif.Image.ExifTag 0x8769 284 +--- +> Exif.Image.ExifTag 0x8769 212 +32c32 +< Exif.Photo.InteroperabilityTag 0xa005 886 +--- +> Exif.Photo.InteroperabilityTag 0xa005 1038 +35c35 +< Exif.Nikon2.0x0002 0x0002 08.00 +--- +> Exif.Nikon2.0x0002 0x0002 Nikon2 Version 2 +------------------------------------------------------------ +Case 11: Intrusive change to the Nikon3 makernote metadata +---> Reading file ./exiv2-nikon-d70.jpg +---> Modifying Exif data +---> Writing Exif data to file test11.jpg +->>>>>> writing from metadata <<<<<<- +---> Reading file test11.jpg +---> Writing Exif thumbnail to file thumb11.* +13c13 +< Exif.Image.ExifTag 0x8769 340 +--- +> Exif.Image.ExifTag 0x8769 332 +36c36 +< Exif.Photo.InteroperabilityTag 0xa005 30306 +--- +> Exif.Photo.InteroperabilityTag 0xa005 2402 +55c55 +< Exif.Nikon3.Quality 0x0004 FINE +--- +> Exif.Nikon3.Quality 0x0004 Typical Nikon3 Quality diff --git a/test/data/write-test.out b/test/data/write-test.out index 73a14e8e..4804a2d2 100644 --- a/test/data/write-test.out +++ b/test/data/write-test.out @@ -3,7 +3,6 @@ Case 1: Non-intrusive change to the standard Exif metadata ---> Reading file ./exiv2-canon-powershot-s40.jpg ---> Modifying Exif data ---> Writing Exif data to file test1.jpg -->>>>>> using non-intrusive writing <<<<<<- ---> Reading file test1.jpg ---> Writing Exif thumbnail to file thumb1.* 13c13 @@ -15,7 +14,6 @@ Case 2: Non-intrusive change to the makernote metadata ---> Reading file ./exiv2-canon-powershot-s40.jpg ---> Modifying Exif data ---> Writing Exif data to file test2.jpg -->>>>>> using non-intrusive writing <<<<<<- ---> Reading file test2.jpg ---> Writing Exif thumbnail to file thumb2.* 49c49 @@ -27,7 +25,6 @@ Case 3: Non-intrusive change to the Exif metadata (w/o makernote) ---> Reading file ./exiv2-kodak-dc210.jpg ---> Modifying Exif data ---> Writing Exif data to file test3.jpg -->>>>>> using non-intrusive writing <<<<<<- ---> Reading file test3.jpg ---> Writing Exif thumbnail to file thumb3.* 14c14 @@ -39,7 +36,6 @@ Case 4: Intrusive change to the standard Exif metadata ---> Reading file ./exiv2-canon-powershot-s40.jpg ---> Modifying Exif data ---> Writing Exif data to file test4.jpg -->>>>>> writing from metadata <<<<<<- ---> Reading file test4.jpg ---> Writing Exif thumbnail to file thumb4.* 9c9 @@ -59,7 +55,6 @@ Case 5: Intrusive change to the Canon makernote metadata ---> Reading file ./exiv2-canon-powershot-s40.jpg ---> Modifying Exif data ---> Writing Exif data to file test5.jpg -->>>>>> writing from metadata <<<<<<- ---> Reading file test5.jpg ---> Writing Exif thumbnail to file thumb5.* 9c9 @@ -79,7 +74,6 @@ Case 6: Intrusive change to the Exif metadata (w/o makernote) ---> Reading file ./exiv2-kodak-dc210.jpg ---> Modifying Exif data ---> Writing Exif data to file test6.jpg -->>>>>> writing from metadata <<<<<<- ---> Reading file test6.jpg ---> Writing Exif thumbnail to file thumb6.* 10c10 @@ -95,7 +89,6 @@ Case 7: Intrusive change to the Fujifilm makernote metadata ---> Reading file ./exiv2-fujifilm-finepix-s2pro.jpg ---> Modifying Exif data ---> Writing Exif data to file test7.jpg -->>>>>> writing from metadata <<<<<<- ---> Reading file test7.jpg ---> Writing Exif thumbnail to file thumb7.* 11c11 @@ -115,7 +108,6 @@ Case 8: Intrusive change to the Sigma makernote metadata ---> Reading file ./exiv2-sigma-d10.jpg ---> Modifying Exif data ---> Writing Exif data to file test8.jpg -->>>>>> writing from metadata <<<<<<- ---> Reading file test8.jpg ---> Writing Exif thumbnail to file thumb8.* 10c10 @@ -131,7 +123,6 @@ Case 9: Intrusive change to the Nikon1 makernote metadata ---> Reading file ./exiv2-nikon-e990.jpg ---> Modifying Exif data ---> Writing Exif data to file test9.jpg -->>>>>> writing from metadata <<<<<<- ---> Reading file test9.jpg ---> Writing Exif thumbnail to file thumb9.* 11c11 @@ -151,7 +142,6 @@ Case 10: Intrusive change to the Nikon2 makernote metadata ---> Reading file ./exiv2-nikon-e950.jpg ---> Modifying Exif data ---> Writing Exif data to file test10.jpg -->>>>>> writing from metadata <<<<<<- ---> Reading file test10.jpg ---> Writing Exif thumbnail to file thumb10.* 11c11 @@ -171,7 +161,6 @@ Case 11: Intrusive change to the Nikon3 makernote metadata ---> Reading file ./exiv2-nikon-d70.jpg ---> Modifying Exif data ---> Writing Exif data to file test11.jpg -->>>>>> writing from metadata <<<<<<- ---> Reading file test11.jpg ---> Writing Exif thumbnail to file thumb11.* 13c13