diff --git a/src/crwimage.cpp b/src/crwimage.cpp index 5d231efc..8059ce77 100644 --- a/src/crwimage.cpp +++ b/src/crwimage.cpp @@ -791,7 +791,10 @@ namespace Exiv2 { assert(rootDirectory == 0x0000); crwDirs.pop(); if (!pRootDir_) pRootDir_ = new CiffDirectory; - if ( pRootDir_) pRootDir_->add(crwDirs, crwTagId)->setValue(buf); + if ( pRootDir_) { + CiffComponent* child = pRootDir_->add(crwDirs, crwTagId); + if ( child ) child->setValue(buf); + } } // CiffHeader::add CiffComponent* CiffComponent::add(CrwDirs& crwDirs, uint16_t crwTagId) diff --git a/test/crw-test.sh b/test/crw-test.sh index e1996f46..ffd98254 100755 --- a/test/crw-test.sh +++ b/test/crw-test.sh @@ -1,75 +1,50 @@ #! /bin/sh # Test driver for CRW file operations -# ---------------------------------------------------------------------- -# Setup -results="./tmp/crw-test.out" -good="./data/crw-test.out" -diffargs="--strip-trailing-cr" -tmpfile=tmp/ttt -touch $tmpfile -diff -q $diffargs $tmpfile $tmpfile 2>/dev/null -if [ $? -ne 0 ] ; then - diffargs="" -fi - -# ---------------------------------------------------------------------- -# Main routine -( -if [ -z "$EXIV2_BINDIR" ] ; then - bin="$VALGRIND ../../bin" -else - bin="$VALGRIND $EXIV2_BINDIR" -fi -cmdfile=cmdfile -crwfile=exiv2-canon-powershot-s40.crw - -cd ./tmp - -# ---------------------------------------------------------------------- -# Testcases: Add and modify tags - -cat > $cmdfile < $cmdfile < $results 2>&1 +source ./functions.source + +( cd "$testdir" + + crwfile=exiv2-canon-powershot-s40.crw + + # ---------------------------------------------------------------------- + # Testcases: Add and modify tags + cmdfile=cmdfile1 + ( echo set Exif.Photo.ColorSpace 65535 + echo set Exif.Canon.OwnerName Different owner + echo set Exif.Canon.FirmwareVersion Whatever version + echo set Exif.Canon.SerialNumber 1 + echo add Exif.Canon.SerialNumber 2 + echo set Exif.Photo.ISOSpeedRatings 155 + echo set Exif.Photo.DateTimeOriginal 2007:11:11 09:10:11 + ) > $cmdfile + + copyTestFile $crwfile + runTest exiv2 -v -pt $crwfile + runTest exiv2 -v -m $cmdfile $crwfile + # runTest crwparse $crwfile + runTest exiv2 -v -pt $crwfile + + # ---------------------------------------------------------------------- + # Testcases: Delete tags + cmdfile=cmdfile2 + ( echo del Exif.Canon.OwnerName + ) > $cmdfile2 + + copyTestFile $crwfile + runTest exiv2 -v -pt $crwfile + runTest exiv2 -v -m $cmdfile $crwfile + # runTest crwparse $crwfile + runTest exiv2 -v -pt $crwfile + +) 3>&1 > $results 2>&1 + +printf "\n" # ---------------------------------------------------------------------- # Evaluate results -diff -q $diffargs $results $good -rc=$? -if [ $rc -eq 0 ] ; then - echo "All testcases passed." -else - diff $diffargs $results $good -fi +cat $results | sed 's/\x0d$//' > $results-stripped +reportTest $results-stripped $good + +# That's all Folks! +## diff --git a/test/data/crw-test.out b/test/data/crw-test.out index c9595428..6b53da15 100644 Binary files a/test/data/crw-test.out and b/test/data/crw-test.out differ diff --git a/test/functions.source b/test/functions.source index d406655e..3e3a6305 100644 --- a/test/functions.source +++ b/test/functions.source @@ -407,9 +407,9 @@ copyVideoFiles () fi # http://stackoverflow.com/questions/7442417/how-to-sort-an-array-in-bash - readarray -t sorted < <(printf '%s\0' "${videos[@]}" | sort -z | xargs -0n1) - echo ${videos[*]} - unset videos + # readarray -t sorted < <(printf '%s\0' "${videos[@]}" | sort -z | xargs -0n1) + # echo ${videos[*]} + # unset videos popd 2>/dev/null >/dev/null }