[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:35:56 UTC 2017


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

The following commit has been merged in the master branch:
commit 325671ff2a442c7561290f9edfb32a932561c713
Author: Andreas Huggel <ahuggel at gmx.net>
Date:   Mon Jan 19 07:24:46 2004 +0000

    More code...
---
 src/exif.cpp     | 120 +++++++++++++++++++++++++++-------
 src/exif.hpp     | 195 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 src/exiftest.cpp |   7 +-
 src/tags.cpp     |  23 +++++--
 src/tags.hpp     |  20 +++++-
 src/utils.cpp    |  21 ++++--
 src/utils.hpp    |  20 +++++-
 7 files changed, 340 insertions(+), 66 deletions(-)

diff --git a/src/exif.cpp b/src/exif.cpp
index 4183ccc..cec8bed 100644
--- a/src/exif.cpp
+++ b/src/exif.cpp
@@ -1,18 +1,31 @@
 // ***************************************************************** -*- C++ -*-
 /*
- * Copyright (c) 2004 Andreas Huggel
- *
- * Todo: Insert license blabla here
+ * Copyright (C) 2004 Andreas Huggel <ahuggel at gmx.net>
+ * 
+ * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 /*
-  Author(s): Andreas Huggel (ahu)
+  Author(s): Andreas Huggel (ahu) <ahuggel at gmx.net>
   History:
    13-Jan-04, ahu: created
 
   RCS information
    $Name:  $
-   $Revision: 1.4 $
+   $Revision: 1.5 $
  */
 // *****************************************************************************
 // included header files
@@ -216,8 +229,12 @@ namespace Exif {
 
     void DataValue::read(const std::string& buf)
     {
-        // Todo: read from a string of bytes??
-        value_ = buf;
+        std::istringstream is(buf);
+        int tmp;
+        value_.clear();
+        while (is >> tmp) {
+            value_ += (char)tmp;
+        }
     }
 
     long DataValue::copy(char* buf, ByteOrder byteOrder) const
@@ -278,11 +295,23 @@ namespace Exif {
     }
 
     Metadatum::Metadatum()
-        : tag_(0), type_(0), count_(0), offset_(0), size_(0), 
-          ifdId_(IfdIdNotSet), ifdIdx_(-1), value_(0)
+        : tag_(0), type_(0), count_(0), offset_(0),
+          ifdId_(IfdIdNotSet), ifdIdx_(-1), value_(0), size_(0)
     {
     }
 
+    Metadatum::Metadatum(uint16 tag, uint16 type, uint32 count, uint32 offset, 
+                         IfdId ifdId, int ifdIdx, Value* value)
+        : tag_(tag), type_(type), count_(count), offset_(offset),
+          ifdId_(ifdId), ifdIdx_(ifdIdx), value_(value)
+    {
+        key_ = std::string(ifdItem()) 
+            + "." + std::string(sectionName()) 
+            + "." + std::string(tagName());
+        
+        size_ = count_ * typeSize();
+    }
+
     Metadatum::~Metadatum()
     {
         delete value_;
@@ -294,13 +323,15 @@ namespace Exif {
         type_ = rhs.type_;
         count_ = rhs.count_;
         offset_ = rhs.offset_;   
-        size_ = rhs.size_;
 
         ifdId_ = rhs.ifdId_;
         ifdIdx_ = rhs.ifdIdx_;
 
         value_ = 0;
         if (rhs.value_ != 0) value_ = rhs.value_->clone(); // deep copy
+
+        key_ = rhs.key_;
+        size_ = rhs.size_;
     }
 
     Metadatum& Metadatum::operator=(const Metadatum& rhs)
@@ -311,7 +342,6 @@ namespace Exif {
         type_ = rhs.type_;
         count_ = rhs.count_;
         offset_ = rhs.offset_;   
-        size_ = rhs.size_;
 
         ifdId_ = rhs.ifdId_;
         ifdIdx_ = rhs.ifdIdx_;
@@ -320,17 +350,12 @@ namespace Exif {
         value_ = 0;
         if (rhs.value_ != 0) value_ = rhs.value_->clone(); // deep copy
 
+        key_ = rhs.key_;
+        size_ = rhs.size_;
+
         return *this;
     } // Metadatum::operator=
 
-    std::string Metadatum::key() const
-    {
-        std::string key = std::string(ifdItem()) 
-                  + "." + std::string(sectionName()) 
-                  + "." + std::string(tagName());
-        return key;
-    }
-
     Ifd::Ifd(IfdId ifdId)
         : ifdId_(ifdId), offset_(0), next_(0), size_(0)
     {
@@ -380,7 +405,6 @@ namespace Exif {
         // calculate offsets relative to the start of the IFD
         for (i = eb; i != ee; ++i) {
             delete i->value_;
-            //! Todo: Create the correct type here, once we have them
             i->value_ = Value::create(TypeId(i->type_));
             if (i->size_ > 4) {
                 i->offset_ = i->offset_ - offset_;
@@ -392,18 +416,23 @@ namespace Exif {
                 i->value_->read(tmpbuf, i->size_, byteOrder);
             }
         }
+
         return 0;
     } // Ifd::read
 
+    Metadata::const_iterator Ifd::findTag(uint16 tag) const 
+    {
+        return std::find_if(entries_.begin(), entries_.end(),
+                            FindMetadatumByTag(tag));
+    }
+
     int Ifd::readSubIfd(
         Ifd& dest, const char* buf, ByteOrder byteOrder, uint16 tag
     ) const
     {
         int rc = 0;
-        Metadata::const_iterator pos;
-        Metadata::const_iterator end = entries_.end();
-        pos = std::find_if(entries_.begin(), end, FindMetadatumByTag(tag));
-        if (pos != end) {
+        Metadata::const_iterator pos = findTag(tag);
+        if (pos != entries_.end()) {
             rc = dest.read(buf + pos->offset_, byteOrder, pos->offset_);
         }
         return rc;
@@ -529,6 +558,44 @@ namespace Exif {
 
     } // Ifd::print
 
+    // Todo: implement this properly..
+    //       - Tag values 0x0201 and 0x0202 may be long OR short types...
+    //       - TIFF thumbnails
+    int Thumbnail::read(const char* buf, const Ifd& ifd1, ByteOrder byteOrder)
+    {
+        Metadata::const_iterator pos = ifd1.findTag(0x0103);
+        if (pos == ifd1.entries().end()) return 1;
+        const UShortValue& compression = dynamic_cast<const UShortValue&>(pos->value());
+        if (compression.value() == 6) {
+            pos = ifd1.findTag(0x0201);
+            if (pos == ifd1.entries().end()) return 2;
+            const ULongValue& offset = dynamic_cast<const ULongValue&>(pos->value());
+            pos = ifd1.findTag(0x0202);
+            if (pos == ifd1.entries().end()) return 3;
+            const ULongValue& size = dynamic_cast<const ULongValue&>(pos->value());
+
+            thumbnail_ = std::string(buf + offset.value(), size.value());
+        }
+        else if (compression.value() == 1) {
+            // Todo: to be continued...
+            return 4;
+        }
+        else {
+            // invalid compression value
+            return 5;
+        }
+        return 0;
+    }
+
+    int Thumbnail::write(const std::string& path) const
+    {
+        std::ofstream file(path.c_str(), std::ios::binary | std::ios::out);
+        if (!file) return 1;
+        file.write(thumbnail_.data(), thumbnail_.size());
+        if (!file.good()) return 2;
+        return 0;
+    }
+
     int ExifData::read(const std::string& path)
     {
         JpegImage img;
@@ -587,7 +654,7 @@ namespace Exif {
         rc = ifd1.readSubIfd(ifd1GpsIfd, buf, byteOrder(), 0x8825);
         if (rc) return rc;
 
-        // Finally, copy all metadata from the IFDs to the internal metadata
+        // Copy all metadata from the IFDs to the internal metadata
         metadata_.clear();
         add(ifd0.entries());
         add(exifIfd.entries());
@@ -598,6 +665,9 @@ namespace Exif {
         add(ifd1IopIfd.entries());
         add(ifd1GpsIfd.entries());
 
+        // Read the thumbnail
+        thumbnail_.read(buf, ifd1, byteOrder());
+
         return 0;
     } // ExifData::read
 
diff --git a/src/exif.hpp b/src/exif.hpp
index 5150842..e4c3444 100644
--- a/src/exif.hpp
+++ b/src/exif.hpp
@@ -1,15 +1,29 @@
 // ***************************************************************** -*- C++ -*-
 /*
- * Copyright (c) 2004 Andreas Huggel. All rights reserved.
+ * Copyright (C) 2004 Andreas Huggel <ahuggel at gmx.net>
  * 
- * Todo: Insert license blabla here
+ * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 /*!
   @file    exif.hpp
   @brief   Encoding and decoding of %Exif data
-  @version $Name:  $ $Revision: 1.4 $
+  @version $Name:  $ $Revision: 1.5 $
   @author  Andreas Huggel (ahu)
+           <a href="mailto:ahuggel at gmx.net">ahuggel at gmx.net</a>
   @date    09-Jan-03, ahu: created
  */
 #ifndef _EXIF_HPP_
@@ -144,6 +158,7 @@ namespace Exif {
         ByteOrder byteOrder_;
         uint16 tag_;
         uint32 offset_;
+
     }; // class TiffHeader
 
     /*!
@@ -188,7 +203,12 @@ namespace Exif {
                  The caller owns this copy and is responsible to delete it!
          */
         virtual Value* clone() const =0;
-        //! Write the value to an output stream, return the stream
+        /*! 
+          @brief Write the value to an output stream. You do not usually have
+                 to use this function; it is used for the implementation of 
+                 the output operator for %Value, 
+                 operator<<(std::ostream &os, const Value &value).
+        */
         virtual std::ostream& write(std::ostream& os) const =0;
 
         /*!
@@ -203,7 +223,7 @@ namespace Exif {
     protected:
         const TypeId typeId_;                   //!< Format type identifier
 
-    };
+    }; // class Value
 
     //! Output operator for Value types
     inline std::ostream& operator<<(std::ostream& os, const Value& value)
@@ -216,8 +236,28 @@ namespace Exif {
     public:
         //! Default constructor.
         DataValue(TypeId typeId =undefined) : Value(typeId) {}
+        /*!
+          @brief Read the value from a character buffer. The byte order is
+                 required by the interface but not used by this method.
+
+          @param buf Pointer to the data buffer to read from
+          @param len Number of bytes in the data buffer 
+          @param byteOrder Byte order. Not used.
+         */
         virtual void read(const char* buf, long len, ByteOrder byteOrder);
+        //! Set the data from a string of integer values (e.g., "0 1 2 3")
         virtual void read(const std::string& buf);
+        /*!
+          @brief Write value to a character data buffer. The byte order is
+                 required by the interface but not used by this method.
+
+          The user must ensure that the buffer has enough memory. Otherwise
+          the call results in undefined behaviour.
+
+          @param buf Data buffer to write to.
+          @param byteOrder Byte order. Not used.
+          @return Number of characters written.
+        */
         virtual long copy(char* buf, ByteOrder byteOrder) const;
         virtual long size() const;
         virtual Value* clone() const;
@@ -226,15 +266,35 @@ namespace Exif {
     private:
         std::string value_;
 
-    };
+    }; // class DataValue
 
     //! %Value for an Ascii string type.
     class AsciiValue : public Value {
     public:
         //! Default constructor.
         AsciiValue() : Value(asciiString) {}
+        /*!
+          @brief Read the value from a character buffer. The byte order is
+                 required by the interface but not used by this method.
+
+          @param buf Pointer to the data buffer to read from
+          @param len Number of bytes in the data buffer 
+          @param byteOrder Byte order. Not used.
+         */
         virtual void read(const char* buf, long len, ByteOrder byteOrder);
+        //! Set the value to that of the supplied string
         virtual void read(const std::string& buf);
+        /*!
+          @brief Write value to a character data buffer. The byte order is
+                 required by the interface but not used by this method.
+
+          The user must ensure that the buffer has enough memory. Otherwise
+          the call results in undefined behaviour.
+
+          @param buf Data buffer to write to.
+          @param byteOrder Byte order. Not used.
+          @return Number of characters written.
+        */
         virtual long copy(char* buf, ByteOrder byteOrder) const;
         virtual long size() const;
         virtual Value* clone() const;
@@ -243,7 +303,7 @@ namespace Exif {
     private:
         std::string value_;
 
-    };
+    }; // class AsciiValue
 
     /*!
       @brief Template for a %Value for a basic Type. This is used for unsigned 
@@ -255,27 +315,77 @@ namespace Exif {
         //! Default constructor.
         ValueType() : Value(getType<T>()) {}
         virtual void read(const char* buf, long len, ByteOrder byteOrder);
+        /*!
+          @brief Set the data from a string of values of type T (e.g., 
+                 "0 1 2 3" or "1/2 1/3 1/4" depending on what T is). 
+                 Generally, the accepted input format is the same as that 
+                 produced by the write() method.
+         */
         virtual void read(const std::string& buf);
         virtual long copy(char* buf, ByteOrder byteOrder) const;
         virtual long size() const;
         virtual Value* clone() const;
         virtual std::ostream& write(std::ostream& os) const;
 
-    private:
+        //! Container for values 
         typedef std::vector<T> ValueList;
+        //! @name Accessors
+        //@{
+        //! Read access to the list of values
+        const ValueList& valueList() const { return value_; }
+        /*!
+          @brief Get the first value. If there is no value in the container,
+                 then the behaviour is undefined.
+         */
+        T value() const { return value_[0]; }
+        //@}
+
+    private:
         ValueList value_;
 
-    };
+    }; // class ValueType
+
+    //! Unsigned short value type
+    typedef ValueType<uint16> UShortValue;
+    //! Unsigned long value type
+    typedef ValueType<uint32> ULongValue;
+    //! Unsigned rational value type
+    typedef ValueType<URational> URationalValue;
+    //! Signed short value type
+    typedef ValueType<int16> ShortValue;
+    //! Signed long value type
+    typedef ValueType<int32> LongValue;
+    //! Signed rational value type
+    typedef ValueType<Rational> RationalValue;
 
     /*!
       @brief Information related to one %Exif tag.
      */
     class Metadatum {
     public:
-        Metadatum();                   //!< Constructor
-        ~Metadatum();                  //!< Destructor 
-        Metadatum(const Metadatum& rhs); //!< Copy constructor
-        Metadatum& operator=(const Metadatum& rhs); //!< Assignment operator
+        //! Default Constructor
+        Metadatum();
+        /*!
+          @brief Constructor for tag data read from an IFD, when all 
+                 information is available. The Metadatum takes ownership
+                 of the value pointer if one is provided, so the application
+                 must not delete it!
+         */
+        Metadatum(uint16 tag, uint16 type, uint32 count, uint32 offset, 
+                  IfdId ifdId, int ifdIdx, Value* value =0);
+        /*!
+          @brief Constructor for new tags created by an application,
+                 which doesn't know/care about the underlying IFD structure.
+                 We'll figure out the details for it.
+         */
+        // Todo: implement me!
+        Metadatum(const std::string& key, TypeId typeId, Value* value =0);
+        //! Destructor
+        ~Metadatum();
+        //! Copy constructor
+        Metadatum(const Metadatum& rhs);
+        //! Assignment operator
+        Metadatum& operator=(const Metadatum& rhs);
 
         //! Return the name of the type
         const char* tagName() const { return ExifTags::tagName(tag_, ifdId_); }
@@ -290,28 +400,43 @@ namespace Exif {
         //! Return the name of the section
         const char* sectionName() const 
             { return ExifTags::sectionName(tag_, ifdId_); }
-        //! Return a unique key of the tag (ifdItem.sectionName.tagName)
-        std::string key() const;
+        //! @name Accessors
+        //@{
+        //! Return the tag
+        uint16 tag() const { return tag_; }
+        //! Return the type
+        TypeId type() const { return TypeId(type_); }
+        //! Return the count
+        uint32 count() const { return count_; }
+        //! Return the IFD id
+        IfdId ifdId() const { return ifdId_; }
+        //! Return the position in the IFD (-1: not set)
+        int ifdIdx() const { return ifdIdx_; }
         /*!
-          @brief Return a reference the the value. The behaviour is undefined
-                 if the value has not been initialized.
-                 Todo: should we make sure there is a value?
+          @brief Return a constant reference to the value. Do not write to the 
+                 value through this reference. The behaviour is undefined if 
+                 value is not set.
          */
         const Value& value() const { return *value_; }
+        //! Return a unique key of the tag (ifdItem.sectionName.tagName)
+        std::string key() const { return key_; }
+        //@}
 
     public:
         uint16 tag_;                   //!< Tag value
-        uint16 type_;                  //!< Type of the data Todo: change to TypeId?
+        uint16 type_;                  //!< Type of the data
         uint32 count_;                 //!< Number of components
         uint32 offset_;                //!< Offset of the data from start of IFD
-        long size_;                    //!< Size of the data in bytes
 
         IfdId ifdId_;                  //!< The IFD associated with this tag
         int   ifdIdx_;                 //!< Position in the IFD (-1: not set)
 
         Value* value_;                 //!< Pointer to the value
 
-    }; // struct Metadatum
+        std::string key_;              //!< Unique key
+        long size_;                    //!< Size of the data in bytes
+
+    }; // class Metadatum
 
     //! Container type to hold all metadata
     typedef std::vector<Metadatum> Metadata;
@@ -330,7 +455,8 @@ namespace Exif {
 
     private:
         uint16 tag_;
-    };
+
+    }; // class FindMetadatumByTag
 
     /*!
       @brief Models an IFD (Image File Directory)
@@ -399,6 +525,8 @@ namespace Exif {
         long offset() const { return offset_; }
         //! Get the IFD entries
         const Metadata& entries() const { return entries_; }
+        //! Find an IFD entry by tag, return an iterator into the entries list
+        Metadata::const_iterator findTag(uint16 tag) const;
         //! Get the offset to the next IFD from the start of the Tiff header
         long next() const { return next_; }
         //! Get the size of this IFD in bytes (IFD only, without data)
@@ -413,8 +541,22 @@ namespace Exif {
         long next_;                      // offset of next IFD from the start of 
                                          // the Tiff header
         long size_;                      // size of the IFD in bytes
+
     }; // class Ifd
 
+    //! Thumbnail data Todo: implement this properly
+    class Thumbnail {
+    public:
+        //! Read the thumbnail from the data buffer, return 0 if succesfull
+        int read(const char* buf, const Ifd& ifd1, ByteOrder byteOrder);
+
+        //! Write thumbnail to file path, return 0 if successful
+        int write(const std::string& path) const;
+
+    private:
+        std::string thumbnail_;
+    }; // class Thumbnail
+
     /*!
       @brief A container for %Exif data
 
@@ -422,8 +564,9 @@ namespace Exif {
       - read and write access to all tags and data
       - iterators to access the %Exif data
       - decoding and encoding through the stream interface
-      - human readable 
+      - human readable output
       - XML input and output
+      - access to thumbnail (write, delete, re-calculate)
 
       Todo:
       - A constructor which creates a minimal valid set of %Exif data
@@ -468,10 +611,16 @@ namespace Exif {
         //! End of the metadata
         const_iterator end() const { return metadata_.end(); }
 
+        //! Write the thumbnail image to a file
+        int writeThumbnail(const std::string& path) const 
+            { return thumbnail_.write(path); }
+
     private:
         long offset_;                   // Original abs offset of the Exif data
         TiffHeader tiffHeader_;
         Metadata metadata_;
+        Thumbnail thumbnail_;
+        
     }; // class ExifData
 
 // *****************************************************************************
diff --git a/src/exiftest.cpp b/src/exiftest.cpp
index 2bcb1ef..d271557 100644
--- a/src/exiftest.cpp
+++ b/src/exiftest.cpp
@@ -29,7 +29,7 @@ int main(int argc, char* const argv[])
                       << i->typeName() << " "
                       << std::dec << std::setw(3) 
                       << std::setfill(' ') << std::right
-                      << i->count_ << " " 
+                      << i->count_ << "   " 
                       << std::dec << i->value() << "
";
         }
     }
@@ -49,11 +49,12 @@ int main(int argc, char* const argv[])
     ValueType<Rational> vr;
     ValueType<URational> vur;
 
-    std::string str(" 4 / 5 x2 5/3");
+    std::string str("1/ 2 4 / 5 2 5/3");
     vr.read(str);
     std::cout << "ValueType<Rational> vr  = " << vr 
               << ", size is " << vr.size() << "
";
 
-    return rc;
+    rc = exifData.writeThumbnail("thumb.jpg");
 
+    return rc;
 }
diff --git a/src/tags.cpp b/src/tags.cpp
index 31441d3..1ffdc0a 100644
--- a/src/tags.cpp
+++ b/src/tags.cpp
@@ -1,18 +1,31 @@
 // ***************************************************************** -*- C++ -*-
 /*
- * Copyright (c) 2004 Andreas Huggel
- *
- * Todo: Insert license blabla here
+ * Copyright (C) 2004 Andreas Huggel <ahuggel at gmx.net>
+ * 
+ * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 /*
-  Author(s): Andreas Huggel (ahu)
+  Author(s): Andreas Huggel (ahu) <ahuggel at gmx.net>
   History:
    15-Jan-04, ahu: created
 
   RCS information
    $Name:  $
-   $Revision: 1.4 $
+   $Revision: 1.5 $
  */
 // *****************************************************************************
 // included header files
diff --git a/src/tags.hpp b/src/tags.hpp
index 0eff1df..2ee2703 100644
--- a/src/tags.hpp
+++ b/src/tags.hpp
@@ -1,15 +1,29 @@
 // ***************************************************************** -*- C++ -*-
 /*
- * Copyright (c) 2004 Andreas Huggel. All rights reserved.
+ * Copyright (C) 2004 Andreas Huggel <ahuggel at gmx.net>
  * 
- * Todo: Insert license blabla here
+ * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 /*!
   @file    tags.hpp
   @brief   %Exif tag and type information
-  @version $Name:  $ $Revision: 1.4 $
+  @version $Name:  $ $Revision: 1.5 $
   @author  Andreas Huggel (ahu)
+           <a href="mailto:ahuggel at gmx.net">ahuggel at gmx.net</a>
   @date    15-Jan-03, ahu: created
  */
 #ifndef _TAGS_HPP_
diff --git a/src/utils.cpp b/src/utils.cpp
index f1c5068..63238bf 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -1,18 +1,31 @@
 // ********************************************************** -*- C++ -*-
 /*
- * Copyright (c) 2004 Andreas Huggel. All rights reserved.
+ * Copyright (C) 2004 Andreas Huggel <ahuggel at gmx.net>
  * 
- * Todo: Insert license blabla here
+ * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 /*
-  Author(s): Andreas Huggel (ahu)
+  Author(s): Andreas Huggel (ahu) <ahuggel at gmx.net>
   History:
    08-Dec-03, ahu: created
 
   RCS information
    $Name:  $
-   $Revision: 1.2 $
+   $Revision: 1.3 $
  */
 
 // *********************************************************************
diff --git a/src/utils.hpp b/src/utils.hpp
index e77a3b9..741d59d 100644
--- a/src/utils.hpp
+++ b/src/utils.hpp
@@ -1,15 +1,29 @@
 // ********************************************************* -*- C++ -*-
 /*
- * Copyright (c) 2004 Andreas Huggel. All rights reserved.
+ * Copyright (C) 2004 Andreas Huggel <ahuggel at gmx.net>
  * 
- * Todo: insert license blabla here.
+ * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 /*!
   @file    utils.hpp
   @brief   A collection of utility functions
-  @version $Name:  $ $Revision: 1.2 $
+  @version $Name:  $ $Revision: 1.3 $
   @author  Andreas Huggel (ahu)
+           <a href="mailto:ahuggel at gmx.net">ahuggel at gmx.net</a>
   @date    12-Dec-03, ahu: created
  */
 #ifndef _UTILS_HPP_

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list