basicio.hpp   basicio.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
skipping to change at line 35 skipping to change at line 35
@author Brad Schick (brad) @author Brad Schick (brad)
<a href="mailto:brad@robotbattle.com">brad@robotbattle.com</a> <a href="mailto:brad@robotbattle.com">brad@robotbattle.com</a>
@date 04-Dec-04, brad: created @date 04-Dec-04, brad: created
*/ */
#ifndef BASICIO_HPP_ #ifndef BASICIO_HPP_
#define BASICIO_HPP_ #define BASICIO_HPP_
// ************************************************************************ ***** // ************************************************************************ *****
// included header files // included header files
#include "types.hpp" #include "types.hpp"
#include "futils.hpp"
// + standard includes // + standard includes
#include <string> #include <string>
#include <memory> // for std::auto_ptr #include <memory> // for std::auto_ptr
#include <fstream> // write the temporary file
#include <fcntl.h> // _O_BINARY in FileIo::FileIo
#include <ctime> // timestamp for the name of temporary file
#include <cstring> // std::memcpy
// The way to handle data from stdin or data uri path. If EXV_XPATH_MEMIO =
1,
// it uses MemIo. Otherwises, it uses FileIo.
#ifndef EXV_XPATH_MEMIO
#define EXV_XPATH_MEMIO 0
#endif
#ifndef EXV_USE_CURL
#define EXV_USE_CURL 0
#endif
#ifndef EXV_USE_SSH
#define EXV_USE_SSH 0
#endif
// ************************************************************************ ***** // ************************************************************************ *****
// namespace extensions // namespace extensions
namespace Exiv2 { namespace Exiv2 {
// ************************************************************************ ***** // ************************************************************************ *****
// class definitions // class definitions
/*! /*!
@brief An interface for simple binary IO. @brief An interface for simple binary IO.
skipping to change at line 173 skipping to change at line 190
virtual void transfer(BasicIo& src) = 0; virtual void transfer(BasicIo& src) = 0;
/*! /*!
@brief Move the current IO position. @brief Move the current IO position.
@param offset Number of bytes to move the position relative @param offset Number of bytes to move the position relative
to the starting position specified by \em pos to the starting position specified by \em pos
@param pos Position from which the seek should start @param pos Position from which the seek should start
@return 0 if successful;<BR> @return 0 if successful;<BR>
Nonzero if failure; Nonzero if failure;
*/ */
#if defined(_MSC_VER) #if defined(_MSC_VER)
virtual int seek(uint64_t offset, Position pos) = 0; virtual int seek(int64_t offset, Position pos) = 0;
#else #else
virtual int seek(long offset, Position pos) = 0; virtual int seek(long offset, Position pos) = 0;
#endif #endif
/*! /*!
@brief Direct access to the IO data. For files, this is done by @brief Direct access to the IO data. For files, this is done by
mapping the file into the process's address space; for mem ory mapping the file into the process's address space; for mem ory
blocks, this allows direct access to the memory block. blocks, this allows direct access to the memory block.
@param isWriteable Set to true if the mapped area should be write able @param isWriteable Set to true if the mapped area should be write able
(default is false). (default is false).
@return A pointer to the mapped area. @return A pointer to the mapped area.
@throw Error In case of failure. @throw Error In case of failure.
skipping to change at line 244 skipping to change at line 261
For example, data may be read from the original IO source, modifi ed For example, data may be read from the original IO source, modifi ed
in some way, and then saved to the temporary instance. After the in some way, and then saved to the temporary instance. After the
operation is complete, the BasicIo::transfer method can be used t o operation is complete, the BasicIo::transfer method can be used t o
replace the original IO source with the modified version. Subclas ses replace the original IO source with the modified version. Subclas ses
are free to return any class that derives from BasicIo. are free to return any class that derives from BasicIo.
@return An instance of BasicIo on success @return An instance of BasicIo on success
@throw Error In case of failure @throw Error In case of failure
*/ */
virtual BasicIo::AutoPtr temporary() const = 0; virtual BasicIo::AutoPtr temporary() const = 0;
/*!
@brief Mark all the bNone blocks to bKnow. This avoids allocating
memory
for parts of the file that contain image-date (non-metadata/pix
el data)
@note This method should be only called after the concerned data
(metadata)
are all downloaded from the remote file to memory.
*/
virtual void populateFakeData() {}
//@} //@}
protected: protected:
//! @name Creators //! @name Creators
//@{ //@{
//! Default Constructor //! Default Constructor
BasicIo() {} BasicIo() {}
//@} //@}
}; // class BasicIo }; // class BasicIo
skipping to change at line 267 skipping to change at line 293
ensure BasicIo instances get closed. Useful when functions return ensure BasicIo instances get closed. Useful when functions return
errors from many locations. errors from many locations.
*/ */
class EXIV2API IoCloser { class EXIV2API IoCloser {
public: public:
//! @name Creators //! @name Creators
//@{ //@{
//! Constructor, takes a BasicIo reference //! Constructor, takes a BasicIo reference
IoCloser(BasicIo& bio) : bio_(bio) {} IoCloser(BasicIo& bio) : bio_(bio) {}
//! Destructor, closes the BasicIo reference //! Destructor, closes the BasicIo reference
~IoCloser() { close(); } virtual ~IoCloser() { close(); }
//@} //@}
//! @name Manipulators //! @name Manipulators
//@{ //@{
//! Close the BasicIo if it is open //! Close the BasicIo if it is open
void close() { if (bio_.isopen()) bio_.close(); } void close() { if (bio_.isopen()) bio_.close(); }
//@} //@}
// DATA // DATA
//! The BasicIo reference //! The BasicIo reference
skipping to change at line 433 skipping to change at line 459
virtual void transfer(BasicIo& src); virtual void transfer(BasicIo& src);
/*! /*!
@brief Move the current file position. @brief Move the current file position.
@param offset Number of bytes to move the file position @param offset Number of bytes to move the file position
relative to the starting position specified by \em pos relative to the starting position specified by \em pos
@param pos Position from which the seek should start @param pos Position from which the seek should start
@return 0 if successful;<BR> @return 0 if successful;<BR>
Nonzero if failure; Nonzero if failure;
*/ */
#if defined(_MSC_VER) #if defined(_MSC_VER)
virtual int seek(uint64_t offset, Position pos); virtual int seek(int64_t offset, Position pos);
#else #else
virtual int seek(long offset, Position pos); virtual int seek(long offset, Position pos);
#endif #endif
/*! /*!
@brief Map the file into the process's address space. The file mu st be @brief Map the file into the process's address space. The file mu st be
open before mmap() is called. If the mapped area is writea ble, open before mmap() is called. If the mapped area is writea ble,
changes may not be written back to the underlying file unt il changes may not be written back to the underlying file unt il
munmap() is called. The pointer is valid only as long as t he munmap() is called. The pointer is valid only as long as t he
FileIo object exists. FileIo object exists.
@param isWriteable Set to true if the mapped area should be write able @param isWriteable Set to true if the mapped area should be write able
(default is false). (default is false).
@return A pointer to the mapped area. @return A pointer to the mapped area.
@throw Error In case of failure. @throw Error In case of failure.
*/ */
virtual byte* mmap(bool isWriteable =false); virtual byte* mmap(bool isWriteable =false);
/*! /*!
@brief Remove a mapping established with mmap(). If the mapped ar ea is @brief Remove a mapping established with mmap(). If the mapped ar ea is
writeable, this ensures that changes are written back to t he writeable, this ensures that changes are written back to t he
underlying file. underlying file.
@return 0 if successful;<BR> @return 0 if successful;<BR>
Nonzero if failure; Nonzero if failure;
*/ */
virtual int munmap(); virtual int munmap();
/*!
@brief close the file source and set a new path.
*/
virtual void setPath(const std::string& path);
#ifdef EXV_UNICODE_PATH
/*!
@brief Like setPath(const std::string& path) but accepts a
unicode path in an std::wstring.
@note This method is only available on Windows.
*/
virtual void setPath(const std::wstring& wpath);
#endif
//@} //@}
//! @name Accessors //! @name Accessors
//@{ //@{
/*! /*!
@brief Get the current file position. @brief Get the current file position.
@return Offset from the start of the file if successful;<BR> @return Offset from the start of the file if successful;<BR>
-1 if failure; -1 if failure;
*/ */
virtual long tell() const; virtual long tell() const;
/*! /*!
@brief Flush any buffered writes and get the current file size @brief Flush any buffered writes and get the current file size
skipping to change at line 499 skipping to change at line 536
/*! /*!
@brief Returns a temporary data storage location. The actual type @brief Returns a temporary data storage location. The actual type
returned depends upon the size of the file represented a File Io returned depends upon the size of the file represented a File Io
object. For small files, a MemIo is returned while for large files object. For small files, a MemIo is returned while for large files
a FileIo is returned. Callers should not rely on this behavio r, a FileIo is returned. Callers should not rely on this behavio r,
however, since it may change. however, since it may change.
@return An instance of BasicIo on success @return An instance of BasicIo on success
@throw Error If opening the temporary file fails @throw Error If opening the temporary file fails
*/ */
virtual BasicIo::AutoPtr temporary() const; virtual BasicIo::AutoPtr temporary() const;
/*!
@brief Mark all the bNone blocks to bKnow. This avoids allocating
memory
for parts of the file that contain image-date (non-metadata/pix
el data)
@note This method should be only called after the concerned data
(metadata)
are all downloaded from the remote file to memory.
*/
virtual void populateFakeData();
//@} //@}
private: private:
// NOT IMPLEMENTED // NOT IMPLEMENTED
//! Copy constructor //! Copy constructor
FileIo(FileIo& rhs); FileIo(FileIo& rhs);
//! Assignment operator //! Assignment operator
FileIo& operator=(const FileIo& rhs); FileIo& operator=(const FileIo& rhs);
// Pimpl idiom // Pimpl idiom
skipping to change at line 542 skipping to change at line 588
/*! /*!
@brief Constructor that accepts a block of memory. A copy-on-writ e @brief Constructor that accepts a block of memory. A copy-on-writ e
algorithm allows read operations directly from the original d ata algorithm allows read operations directly from the original d ata
and will create a copy of the buffer on the first write opera tion. and will create a copy of the buffer on the first write opera tion.
@param data Pointer to data. Data must be at least \em size @param data Pointer to data. Data must be at least \em size
bytes long bytes long
@param size Number of bytes to copy. @param size Number of bytes to copy.
*/ */
MemIo(const byte* data, long size); MemIo(const byte* data, long size);
//! Destructor. Releases all managed memory //! Destructor. Releases all managed memory
~MemIo(); virtual ~MemIo();
//@} //@}
//! @name Manipulators //! @name Manipulators
//@{ //@{
/*! /*!
@brief Memory IO is always open for reading and writing. This met hod @brief Memory IO is always open for reading and writing. This met hod
therefore only resets the IO position to the start. therefore only resets the IO position to the start.
@return 0 @return 0
*/ */
skipping to change at line 645 skipping to change at line 691
virtual void transfer(BasicIo& src); virtual void transfer(BasicIo& src);
/*! /*!
@brief Move the current IO position. @brief Move the current IO position.
@param offset Number of bytes to move the IO position @param offset Number of bytes to move the IO position
relative to the starting position specified by \em pos relative to the starting position specified by \em pos
@param pos Position from which the seek should start @param pos Position from which the seek should start
@return 0 if successful;<BR> @return 0 if successful;<BR>
Nonzero if failure; Nonzero if failure;
*/ */
#if defined(_MSC_VER) #if defined(_MSC_VER)
virtual int seek(uint64_t offset, Position pos); virtual int seek(int64_t offset, Position pos);
#else #else
virtual int seek(long offset, Position pos); virtual int seek(long offset, Position pos);
#endif #endif
/*! /*!
@brief Allow direct access to the underlying data buffer. The buf fer @brief Allow direct access to the underlying data buffer. The buf fer
is not protected against write access in any way, the argu ment is not protected against write access in any way, the argu ment
is ignored. is ignored.
@note The application must ensure that the memory pointed to by the @note The application must ensure that the memory pointed to by the
returned pointer remains valid and allocated as long as th e returned pointer remains valid and allocated as long as th e
MemIo object exists. MemIo object exists.
*/ */
virtual byte* mmap(bool /*isWriteable*/ =false); virtual byte* mmap(bool /*isWriteable*/ =false);
virtual int munmap(); virtual int munmap();
int msync();
//@} //@}
//! @name Accessors //! @name Accessors
//@{ //@{
/*! /*!
@brief Get the current IO position. @brief Get the current IO position.
@return Offset from the start of the memory block @return Offset from the start of the memory block
*/ */
virtual long tell() const; virtual long tell() const;
/*! /*!
skipping to change at line 696 skipping to change at line 743
*/ */
virtual std::wstring wpath() const; virtual std::wstring wpath() const;
#endif #endif
/*! /*!
@brief Returns a temporary data storage location. Currently retur ns @brief Returns a temporary data storage location. Currently retur ns
an empty MemIo object, but callers should not rely on this an empty MemIo object, but callers should not rely on this
behavior since it may change. behavior since it may change.
@return An instance of BasicIo @return An instance of BasicIo
*/ */
virtual BasicIo::AutoPtr temporary() const; virtual BasicIo::AutoPtr temporary() const;
/*!
@brief Mark all the bNone blocks to bKnow. This avoids allocating
memory
for parts of the file that contain image-date (non-metadata/pix
el data)
@note This method should be only called after the concerned data
(metadata)
are all downloaded from the remote file to memory.
*/
virtual void populateFakeData();
//@} //@}
private: private:
// NOT IMPLEMENTED // NOT IMPLEMENTED
//! Copy constructor //! Copy constructor
MemIo(MemIo& rhs); MemIo(MemIo& rhs);
//! Assignment operator //! Assignment operator
MemIo& operator=(const MemIo& rhs); MemIo& operator=(const MemIo& rhs);
// Pimpl idiom // Pimpl idiom
class Impl; class Impl;
Impl* p_; Impl* p_;
}; // class MemIo }; // class MemIo
/*!
@brief Provides binary IO for the data from stdin and data uri path.
*/
#if EXV_XPATH_MEMIO
class EXIV2API XPathIo : public MemIo {
public:
//! @name Creators
//@{
//! Default constructor
XPathIo(const std::string& path);
#ifdef EXV_UNICODE_PATH
/*!
@brief Like XPathIo(const std::string& path) but accepts a
unicode url in an std::wstring.
@note This constructor is only available on Windows.
*/
XPathIo(const std::wstring& wpath);
#endif
//@}
private:
/*!
@brief Read data from stdin and write the data to memory.
@throw Error if it can't convert stdin to binary.
*/
void ReadStdin();
/*!
@brief Read the data from data uri path and write the data to m
emory.
@param path The data uri.
@throw Error if no base64 data in path.
*/
void ReadDataUri(const std::string& path);
}; // class XPathIo
#else
class EXIV2API XPathIo : public FileIo {
public:
/*!
@brief The extension of the temporary file which is created whe
n getting input data
to read metadata. This file will be deleted in destruct
or.
*/
static const std::string TEMP_FILE_EXT;
/*!
@brief The extension of the generated file which is created whe
n getting input data
to add or modify the metadata.
*/
static const std::string GEN_FILE_EXT;
//! @name Creators
//@{
//! Default constructor that reads data from stdin/data uri path an
d writes them to the temp file.
XPathIo(const std::string& orgPath);
#ifdef EXV_UNICODE_PATH
/*!
@brief Like XPathIo(const std::string& orgPath) but accepts a
unicode url in an std::wstring.
@note This constructor is only available on Windows.
*/
XPathIo(const std::wstring& wOrgPathpath);
#endif
//! Destructor. Releases all managed memory and removes the temp fi
le.
virtual ~XPathIo();
//@}
//! @name Manipulators
//@{
/*!
@brief Change the name of the temp file and make it untemporary
before
calling the method of superclass FileIo::transfer.
*/
virtual void transfer(BasicIo& src);
//@}
//! @name Static methods
//@{
/*!
@brief Read the data from stdin/data uri path and write them to
the file.
@param orgPath It equals "-" if the input data's from stdin. Ot
herwise, it's data uri path.
@return the name of the new file.
@throw Error if it fails.
*/
static std::string writeDataToFile(const std::string& orgPath);
#ifdef EXV_UNICODE_PATH
/*!
@brief Like writeDataToFile(const std::string& orgPath) but accep
ts a
unicode url in an std::wstring.
@note This constructor is only available on Windows.
*/
static std::string writeDataToFile(const std::wstring& wOrgPath);
#endif
//@}
private:
// True if the file is a temporary file and it should be deleted in
destructor.
bool isTemp_;
std::string tempFilePath_;
}; // class XPathIo
#endif
/*!
@brief Utility class provides the block mapping to the part of data.
This avoids allocating
a single contiguous block of memory to the big data.
*/
class EXIV2API BlockMap {
public:
//! the status of the block.
enum blockType_e {bNone, bKnown, bMemory};
//! @name Creators
//@{
//! Default constructor. the init status of the block is bNone.
BlockMap():type_(bNone), data_(NULL),size_(0) {}
//! Destructor. Releases all managed memory.
virtual ~BlockMap() {
if (data_) {std::free(data_); data_ = NULL;}
}
//@}
//! @name Manipulators
//@{
/*!
@brief Populate the block.
@param source The data populate to the block
@param num The size of data
*/
void populate (byte* source, size_t num) {
size_ = num;
data_ = (byte*) std::malloc(size_);
type_ = bMemory;
std::memcpy(data_, source, size_);
}
/*!
@brief Change the status to bKnow. bKnow blocks do not contain th
e data,
but they keep the size of data. This avoids allocating memo
ry for parts
of the file that contain image-date (non-metadata/pixel dat
a) which never change in exiv2.
@param num The size of the data
*/
void markKnown(size_t num) {
type_ = bKnown;
size_ = num;
}
//@}
//! @name Accessors
//@{
bool isNone() {return type_ == bNone;}
bool isInMem () {return type_ == bMemory;}
bool isKnown () {return type_ == bKnown;}
byte* getData () {return data_;}
size_t getSize () {return size_;}
//@}
private:
blockType_e type_;
byte* data_;
size_t size_;
}; // class BlockMap
/*!
@brief Provides remote binary file IO by implementing the BasicIo i
nterface. This is an
abstract class. The logics for remote access are implemented in
HttpIo, CurlIo, SshIo which
are the derived classes of RemoteIo.
*/
class EXIV2API RemoteIo : public BasicIo {
public:
//! Destructor. Releases all managed memory.
virtual ~RemoteIo();
//@}
//! @name Manipulators
//@{
/*!
@brief Connect to the remote server, get the size of the remote f
ile and
allocate the array of blocksMap.
If the blocksMap is already allocated (this method has been cal
led before),
it just reset IO position to the start and does not flush the o
ld data.
@return 0 if successful;<BR>
Nonzero if failure.
*/
virtual int open();
/*!
@brief Reset the IO position to the start. It does not release th
e data.
@return 0 if successful;<BR>
Nonzero if failure.
*/
virtual int close();
/*!
@brief Not support this method.
@return 0 means failure
*/
virtual long write(const byte* data, long wcount);
/*!
@brief Write data that is read from another BasicIo instance to t
he remote file.
The write access is done in an efficient way. It only sends the r
ange of different
bytes between the current data and BasicIo instance to the remote
machine.
@param src Reference to another BasicIo instance. Reading start
at the source's current IO position
@return The size of BasicIo instance;<BR>
0 if failure;
@throw Error In case of failure
@note The write access is only supported by http, https, ssh.
*/
virtual long write(BasicIo& src);
/*!
@brief Not support
@return 0 means failure
*/
virtual int putb(byte data);
/*!
@brief Read data from the memory blocks. Reading starts at the cur
rent
IO position and the position is advanced by the number of
bytes read.
If the memory blocks are not populated (False), it will connec
t to server
and populate the data to memory blocks.
@param rcount Maximum number of bytes to read. Fewer bytes may be
read if \em rcount bytes are not available.
@return DataBuf instance containing the bytes read. Use the
DataBuf::size_ member to find the number of bytes read.
DataBuf::size_ will be 0 on failure.
*/
virtual DataBuf read(long rcount);
/*!
@brief Read data from the the memory blocks. Reading starts at the
current
IO position and the position is advanced by the number of
bytes read.
If the memory blocks are not populated (!= bMemory), it will c
onnect to server
and populate the data to memory blocks.
@param buf Pointer to a block of memory into which the read data
is stored. The memory block must be at least \em rcount bytes
long.
@param rcount Maximum number of bytes to read. Fewer bytes may be
read if \em rcount bytes are not available.
@return Number of bytes read from the memory block successfully;<B
R>
0 if failure;
*/
virtual long read(byte* buf, long rcount);
/*!
@brief Read one byte from the memory blocks. The IO position is
advanced by one byte.
If the memory block is not populated (!= bMemory), it will con
nect to server
and populate the data to the memory block.
@return The byte read from the memory block if successful;<BR>
EOF if failure;
*/
virtual int getb();
/*!
@brief Remove the contents of the file and then transfer data fro
m
the \em src BasicIo object into the empty file.
The write access is done in an efficient way. It only sends the r
ange of different
bytes between the current data and BasicIo instance to the remote
machine.
@param src Reference to another BasicIo instance. The entire cont
ents
of src are transferred to this object. The \em src object is
invalidated by the method.
@throw Error In case of failure
@note The write access is only supported by http, https, ssh.
*/
virtual void transfer(BasicIo& src);
/*!
@brief Move the current IO position.
@param offset Number of bytes to move the IO position
relative to the starting position specified by \em pos
@param pos Position from which the seek should start
@return 0 if successful;<BR>
Nonzero if failure;
*/
#if defined(_MSC_VER)
virtual int seek(int64_t offset, Position pos);
#else
virtual int seek(long offset, Position pos);
#endif
/*!
@brief Not support
@return NULL
*/
virtual byte* mmap(bool /*isWriteable*/ =false);
/*!
@brief Not support
@return 0
*/
virtual int munmap();
//@}
//! @name Accessors
//@{
/*!
@brief Get the current IO position.
@return Offset from the start of the memory block
*/
virtual long tell() const;
/*!
@brief Get the current memory buffer size in bytes.
@return Size of the in memory data in bytes;<BR>
-1 if failure;
*/
virtual long size() const;
//!Returns true if the memory area is allocated.
virtual bool isopen() const;
//!Always returns 0
virtual int error() const;
//!Returns true if the IO position has reach the end, otherwise fals
e.
virtual bool eof() const;
//!Returns the URL of the file.
virtual std::string path() const;
#ifdef EXV_UNICODE_PATH
/*
@brief Like path() but returns a unicode URL path in an std::wstri
ng.
@note This function is only available on Windows.
*/
virtual std::wstring wpath() const;
#endif
/*!
@brief Returns a temporary data storage location. Currently return
s
an empty MemIo object, but callers should not rely on this
behavior since it may change.
@return An instance of BasicIo
*/
virtual BasicIo::AutoPtr temporary() const;
/*!
@brief Mark all the bNone blocks to bKnow. This avoids allocating
memory
for parts of the file that contain image-date (non-metadata/pix
el data)
@note This method should be only called after the concerned data
(metadata)
are all downloaded from the remote file to memory.
*/
virtual void populateFakeData();
//@}
protected:
//! @name Creators
//@{
//! Default Constructor
RemoteIo() {p_=NULL;}
//@}
// Pimpl idiom
class Impl;
Impl* p_;
}; // class RemoteIo
/*!
@brief Provides the http read/write access for the RemoteIo.
*/
class EXIV2API HttpIo : public RemoteIo {
public:
//! @name Creators
//@{
/*!
@brief Constructor that accepts the http URL on which IO will be
performed. The constructor does not open the file, and
therefore never failes.
@param url The full path of url
@param blockSize the size of the memory block. The file content i
s
divided into the memory blocks. These blocks are populated
on demand from the server, so it avoids copying the complet
e file.
*/
HttpIo(const std::string& url, size_t blockSize = 1024);
#ifdef EXV_UNICODE_PATH
/*!
@brief Like HttpIo(const std::string& url, size_t blockSize = 102
4) but accepts a
unicode url in an std::wstring.
@note This constructor is only available on Windows.
*/
HttpIo(const std::wstring& wurl, size_t blockSize = 1024);
#endif
//@}
protected:
// NOT IMPLEMENTED
//! Copy constructor
HttpIo(HttpIo& rhs);
//! Assignment operator
HttpIo& operator=(const HttpIo& rhs);
// Pimpl idiom
class HttpImpl;
//! @name Creators
//@{
//! Default Destructor
virtual ~HttpIo(){}
//@}
};
#if EXV_USE_CURL == 1
/*!
@brief Provides the http, https read/write access and ftp read acce
ss for the RemoteIo.
This class is based on libcurl.
*/
class EXIV2API CurlIo : public RemoteIo {
public:
//! @name Creators
//@{
/*!
@brief Constructor that accepts the URL on which IO will be
performed.
@param url The full path of url
@param blockSize the size of the memory block. The file content i
s
divided into the memory blocks. These blocks are populated
on demand from the server, so it avoids copying the complet
e file.
@throw Error if it is unable to init curl pointer.
*/
CurlIo(const std::string& url, size_t blockSize = 0);
#ifdef EXV_UNICODE_PATH
/*!
@brief Like CurlIo(const std::string& url, size_t blockSize = 0
) but accepts a
unicode url in an std::wstring.
@note This constructor is only available on Windows.
*/
CurlIo(const std::wstring& wurl, size_t blockSize = 0);
#endif
/*!
@brief Write access is only available for some protocols. This me
thod
will call RemoteIo::write(const byte* data, long wcount) if
the write
access is available for the protocol. Otherwise, it throws
the Error.
*/
long write(const byte* data, long wcount);
/*!
@brief Write access is only available for some protocols. This me
thod
will call RemoteIo::write(BasicIo& src) if the write access
is available
for the protocol. Otherwise, it throws the Error.
*/
long write(BasicIo& src);
protected:
// NOT IMPLEMENTED
//! Copy constructor
CurlIo(CurlIo& rhs);
//! Assignment operator
CurlIo& operator=(const CurlIo& rhs);
// Pimpl idiom
class CurlImpl;
//! @name Creators
//@{
//! Default Destructor
virtual ~CurlIo(){}
//@}
};
#endif
#if EXV_USE_SSH == 1
/*!
@brief Provides the ssh read/write access and sftp read access for
the RemoteIo.
This class is based on libssh.
*/
class EXIV2API SshIo : public RemoteIo {
public:
//! @name Creators
//@{
/*!
@brief Constructor that accepts the URL on which IO will be
performed.
@param url The full path of url
@param blockSize the size of the memory block. The file content i
s
divided into the memory blocks. These blocks are populated
on demand from the server, so it avoids copying the complet
e file.
@throw Error if it is unable to init ssh session.
*/
SshIo(const std::string& url, size_t blockSize = 1024);
#ifdef EXV_UNICODE_PATH
/*!
@brief Like SshIo(const std::string& url, size_t blockSize = 10
24) but accepts a
unicode url in an std::wstring.
@note This constructor is only available on Windows.
*/
SshIo(const std::wstring& wurl, size_t blockSize = 1024);
#endif
//@}
protected:
// NOT IMPLEMENTED
//! Copy constructor
SshIo(SshIo& rhs);
//! Assignment operator
SshIo& operator=(const SshIo& rhs);
// Pimpl idiom
class SshImpl;
//! @name Creators
//@{
//! Default Destructor
virtual ~SshIo(){}
//@}
};
#endif
// ************************************************************************ ***** // ************************************************************************ *****
// template, inline and free functions // template, inline and free functions
/*! /*!
@brief Read file \em path into a DataBuf, which is returned. @brief Read file \em path into a DataBuf, which is returned.
@return Buffer containing the file. @return Buffer containing the file.
@throw Error In case of failure. @throw Error In case of failure.
*/ */
EXIV2API DataBuf readFile(const std::string& path); EXIV2API DataBuf readFile(const std::string& path);
#ifdef EXV_UNICODE_PATH #ifdef EXV_UNICODE_PATH
skipping to change at line 739 skipping to change at line 1281
@return Return the number of bytes written. @return Return the number of bytes written.
@throw Error In case of failure. @throw Error In case of failure.
*/ */
EXIV2API long writeFile(const DataBuf& buf, const std::string& path); EXIV2API long writeFile(const DataBuf& buf, const std::string& path);
#ifdef EXV_UNICODE_PATH #ifdef EXV_UNICODE_PATH
/*! /*!
@brief Like writeFile() but accepts a unicode path in an std::wstring . @brief Like writeFile() but accepts a unicode path in an std::wstring .
@note This function is only available on Windows. @note This function is only available on Windows.
*/ */
EXIV2API long writeFile(const DataBuf& buf, const std::wstring& wpath); EXIV2API long writeFile(const DataBuf& buf, const std::wstring& wpath);
#endif #endif
/*!
@brief replace each substring of the subject that matches the given s
earch string with the given replacement.
@return the subject after replacing.
*/
EXIV2API std::string ReplaceStringInPlace(std::string subject, const st
d::string& search,
const std::string& replace);
#ifdef EXV_UNICODE_PATH
/*!
@brief Like ReplaceStringInPlace() but accepts a unicode path in an s
td::wstring.
@return the subject after replacing.
@note This function is only available on Windows.
*/
EXIV2API std::wstring ReplaceStringInPlace(std::wstring subject, const
std::wstring& search,
const std::wstring& replace);
#endif
#if EXV_USE_CURL == 1
/*!
@brief The callback function is called by libcurl to write the data
*/
EXIV2API size_t curlWriter(char* data, size_t size, size_t nmemb, std::
string* writerData);
#endif
} // namespace Exiv2 } // namespace Exiv2
#endif // #ifndef BASICIO_HPP_ #endif // #ifndef BASICIO_HPP_
 End of changes. 21 change blocks. 
14 lines changed or deleted 646 lines changed or added


 bmpimage.hpp   bmpimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 convert.hpp   convert.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
skipping to change at line 35 skipping to change at line 35
@author Andreas Huggel (ahu) @author Andreas Huggel (ahu)
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a><BR> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a><BR>
Vladimir Nadvornik (vn) Vladimir Nadvornik (vn)
<a href="mailto:nadvornik@suse.cz">nadvornik@suse.cz</a> <a href="mailto:nadvornik@suse.cz">nadvornik@suse.cz</a>
@date 17-Mar-08, ahu: created basic converter framework<BR> @date 17-Mar-08, ahu: created basic converter framework<BR>
20-May-08, vn: added actual conversion logic 20-May-08, vn: added actual conversion logic
*/ */
#ifndef CONVERT_HPP_ #ifndef CONVERT_HPP_
#define CONVERT_HPP_ #define CONVERT_HPP_
// ************************************************************************ *****
// included header files // included header files
#ifdef _MSC_VER #include "config.h"
# include "exv_msvc.h"
#else
# include "exv_conf.h"
#endif
// + standard includes // + standard includes
#include <string> #include <string>
// ************************************************************************ ***** // ************************************************************************ *****
// namespace extensions // namespace extensions
namespace Exiv2 { namespace Exiv2 {
// ************************************************************************ ***** // ************************************************************************ *****
// class declarations // class declarations
 End of changes. 3 change blocks. 
7 lines changed or deleted 2 lines changed or added


 cr2image.hpp   cr2image.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 crwimage.hpp   crwimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 datasets.hpp   datasets.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 easyaccess.hpp   easyaccess.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 epsimage.hpp   epsimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 error.hpp   error.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 exif.hpp   exif.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 exiv2.hpp   exiv2.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
skipping to change at line 46 skipping to change at line 46
#include "convert.hpp" #include "convert.hpp"
#include "cr2image.hpp" #include "cr2image.hpp"
#include "crwimage.hpp" #include "crwimage.hpp"
#include "datasets.hpp" #include "datasets.hpp"
#include "easyaccess.hpp" #include "easyaccess.hpp"
#include "epsimage.hpp" #include "epsimage.hpp"
#include "error.hpp" #include "error.hpp"
#include "exif.hpp" #include "exif.hpp"
#include "futils.hpp" #include "futils.hpp"
#include "gifimage.hpp" #include "gifimage.hpp"
#include "http.hpp"
#include "image.hpp" #include "image.hpp"
#include "iptc.hpp" #include "iptc.hpp"
#include "jp2image.hpp" #include "jp2image.hpp"
#include "jpgimage.hpp" #include "jpgimage.hpp"
#include "metadatum.hpp" #include "metadatum.hpp"
#include "mrwimage.hpp" #include "mrwimage.hpp"
#include "orfimage.hpp" #include "orfimage.hpp"
#include "pgfimage.hpp" #include "pgfimage.hpp"
#include "pngimage.hpp" #include "pngimage.hpp"
#include "preview.hpp" #include "preview.hpp"
#include "properties.hpp" #include "properties.hpp"
#include "psdimage.hpp" #include "psdimage.hpp"
#include "rafimage.hpp" #include "rafimage.hpp"
#include "rw2image.hpp" #include "rw2image.hpp"
#if EXV_USE_SSH == 1
#include "ssh.hpp"
#endif
#include "tags.hpp" #include "tags.hpp"
#include "tgaimage.hpp" #include "tgaimage.hpp"
#include "tiffimage.hpp" #include "tiffimage.hpp"
#include "types.hpp" #include "types.hpp"
#include "value.hpp" #include "value.hpp"
#include "version.hpp" #include "version.hpp"
#include "xmp.hpp" #include "xmp.hpp"
#include "xmpsidecar.hpp" #include "xmpsidecar.hpp"
#endif // #ifndef EXIV2_HPP_ #endif // #ifndef EXIV2_HPP_
 End of changes. 3 change blocks. 
1 lines changed or deleted 5 lines changed or added


 exv_conf.h   exv_conf.h 
/* ./config/config.h. Generated from config.h.in by configure. */ /* ./config/config.h. Generated from config.h.in by configure. */
/* config.h.in. Generated from configure.ac by autoheader. */ #ifndef __CONFIG__H__
#define __CONFIG__H__
#ifdef _MSC_VER
# include "exv_msvc.h"
#else
/* Define to 1 if you want to use libssh */
/* #undef EXV_USE_SSH */
/* Define to 1 if you want to use libcurl in httpIo */
/* #undef EXV_USE_CURL */
/* Define to 1 if you have the `alarm' function. */ /* Define to 1 if you have the `alarm' function. */
/* #undef EXV_HAVE_ALARM */ /* #undef EXV_HAVE_ALARM */
/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
don't. */ don't. */
#define EXV_HAVE_DECL_STRERROR_R 1 #define EXV_HAVE_DECL_STRERROR_R 1
/* Define to 1 if you have the `gmtime_r' function. */ /* Define to 1 if you have the `gmtime_r' function. */
#define EXV_HAVE_GMTIME_R 1 #define EXV_HAVE_GMTIME_R 1
skipping to change at line 31 skipping to change at line 42
/* Define to 1 to enable translation of Nikon lens names. */ /* Define to 1 to enable translation of Nikon lens names. */
#define EXV_HAVE_LENSDATA 1 #define EXV_HAVE_LENSDATA 1
/* Define to 1 if translation of program messages to the user's /* Define to 1 if translation of program messages to the user's
native language is requested. */ native language is requested. */
#define EXV_ENABLE_NLS 1 #define EXV_ENABLE_NLS 1
#endif /* !EXV_COMMERCIAL_VERSION */ #endif /* !EXV_COMMERCIAL_VERSION */
/* Define to 1 to include video code in the library */
/* #undef EXV_ENABLE_VIDEO */
/* Define to 1 to include webready code in the library */
/* #undef EXV_ENABLE_WEBREADY */
/* Define to 1 if you have the `iconv' function. */ /* Define to 1 if you have the `iconv' function. */
#define EXV_HAVE_ICONV 1 #define EXV_HAVE_ICONV 1
/* Define to `const' or to empty, depending on the second argument of `icon v'. */ /* Define to `const' or to empty, depending on the second argument of `icon v'. */
#define EXV_ICONV_CONST #define EXV_ICONV_CONST
/* Define to 1 if you have the <libintl.h> header file. */ /* Define to 1 if you have the <libintl.h> header file. */
#define EXV_HAVE_LIBINTL_H 1 #define EXV_HAVE_LIBINTL_H 1
/* Define to 1 if you have the <regex.h> header file. */
#define EXV_HAVE_REGEX 1
/* Define to 1 if your system has a GNU libc compatible `malloc' function, and /* Define to 1 if your system has a GNU libc compatible `malloc' function, and
to 0 otherwise. */ to 0 otherwise. */
/* #undef EXV_HAVE_MALLOC */ /* #undef EXV_HAVE_MALLOC */
/* Define to 1 if you have the <malloc.h> header file. */ /* Define to 1 if you have the <malloc.h> header file. */
#define EXV_HAVE_MALLOC_H 1 #define EXV_HAVE_MALLOC_H 1
/* Define to 1 if you have the <memory.h> header file. */ /* Define to 1 if you have the <memory.h> header file. */
#define EXV_HAVE_MEMORY_H 1 #define EXV_HAVE_MEMORY_H 1
skipping to change at line 146 skipping to change at line 166
/* Define to the address where bug reports for this package should be sent. */ /* Define to the address where bug reports for this package should be sent. */
#define EXV_PACKAGE_BUGREPORT "ahuggel@gmx.net" #define EXV_PACKAGE_BUGREPORT "ahuggel@gmx.net"
/* Define to the name of this package. */ /* Define to the name of this package. */
#define EXV_PACKAGE "exiv2" #define EXV_PACKAGE "exiv2"
/* Define to the full name of this package. */ /* Define to the full name of this package. */
#define EXV_PACKAGE_NAME "exiv2" #define EXV_PACKAGE_NAME "exiv2"
/* Define to the full name and version of this package. */ /* Define to the full name and version of this package. */
#define EXV_PACKAGE_STRING "exiv2 0.24" #define EXV_PACKAGE_STRING "exiv2 0.25"
/* Define to the one symbol short name of this package. */ /* Define to the one symbol short name of this package. */
#define EXV_PACKAGE_TARNAME "exiv2" #define EXV_PACKAGE_TARNAME "exiv2"
/* Define to the version of this package. */ /* Define to the version of this package. */
#define EXV_PACKAGE_VERSION "0.24" #define EXV_PACKAGE_VERSION "0.25"
/* Define to 1 if you have the ANSI C header files. */ /* Define to 1 if you have the ANSI C header files. */
#define EXV_STDC_HEADERS 1 #define EXV_STDC_HEADERS 1
/* Define to 1 if strerror_r returns char *. */ /* Define to 1 if strerror_r returns char *. */
/* #undef EXV_STRERROR_R_CHAR_P */ /* #undef EXV_STRERROR_R_CHAR_P */
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
/* #undef EXV_TIME_WITH_SYS_TIME */ /* #undef EXV_TIME_WITH_SYS_TIME */
skipping to change at line 194 skipping to change at line 214
/* Define to `unsigned' if <sys/types.h> does not define. */ /* Define to `unsigned' if <sys/types.h> does not define. */
/* #undef size_t */ /* #undef size_t */
#if defined __CYGWIN32__ && !defined __CYGWIN__ #if defined __CYGWIN32__ && !defined __CYGWIN__
/* For backwards compatibility with Cygwin b19 and /* For backwards compatibility with Cygwin b19 and
earlier, we define __CYGWIN__ here, so that earlier, we define __CYGWIN__ here, so that
we can rely on checking just for that macro. */ we can rely on checking just for that macro. */
#define __CYGWIN__ __CYGWIN32__ #define __CYGWIN__ __CYGWIN32__
#endif #endif
/* File path seperator */ #if defined __MINGW32__ || defined __MINGW64__
#ifndef __MINGW__
#define __MINGW__ 1
#endif
#endif
/* File path separator */
#if defined WIN32 && !defined __CYGWIN__ #if defined WIN32 && !defined __CYGWIN__
#define EXV_SEPERATOR_STR "\\" #define EXV_SEPARATOR_STR "\\"
#define EXV_SEPERATOR_CHR '\\' #define EXV_SEPARATOR_CHR '\\'
#else #else
#define EXV_SEPERATOR_STR "/" #define EXV_SEPARATOR_STR "/"
#define EXV_SEPERATOR_CHR '/' #define EXV_SEPARATOR_CHR '/'
#endif #endif
/* Windows unicode path support */ /* Windows unicode path support */
#if defined WIN32 && !defined __CYGWIN__ #if defined WIN32 && !defined __CYGWIN__ && !defined __MINGW__
# define EXV_UNICODE_PATH # define EXV_UNICODE_PATH
#endif #endif
/* Symbol visibility support */ /* Symbol visibility support */
#ifdef WIN32 #ifdef WIN32
# define EXV_IMPORT __declspec(dllimport) # define EXV_IMPORT __declspec(dllimport)
# define EXV_EXPORT __declspec(dllexport) # define EXV_EXPORT __declspec(dllexport)
# define EXV_DLLLOCAL # define EXV_DLLLOCAL
# define EXV_DLLPUBLIC # define EXV_DLLPUBLIC
#else #else
skipping to change at line 266 skipping to change at line 292
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <strings.h> #include <strings.h>
#include <stdlib.h> #include <stdlib.h>
#include <math.h> #include <math.h>
#if defined(__cplusplus) #if defined(__cplusplus)
#include <ios> #include <ios>
#include <fstream> #include <fstream>
#endif #endif
#endif #endif
#endif
#endif
 End of changes. 10 change blocks. 
9 lines changed or deleted 35 lines changed or added


 futils.hpp   futils.hpp 
// ********************************************************* -*- C++ -*- // ********************************************************* -*- C++ -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
skipping to change at line 35 skipping to change at line 35
@author Andreas Huggel (ahu) @author Andreas Huggel (ahu)
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
@date 12-Dec-03, ahu: created<BR> @date 12-Dec-03, ahu: created<BR>
02-Apr-05, ahu: moved to Exiv2 namespace 02-Apr-05, ahu: moved to Exiv2 namespace
*/ */
#ifndef FUTILS_HPP_ #ifndef FUTILS_HPP_
#define FUTILS_HPP_ #define FUTILS_HPP_
// ********************************************************************* // *********************************************************************
// included header files // included header files
#ifdef _MSC_VER #include "config.h"
# include "exv_msvc.h" #include "types.hpp"
#else
# include "exv_conf.h" #ifdef EXV_HAVE_STDINT_H
# include <stdint.h> // for uint8_t
#endif #endif
// + standard includes // + standard includes
#include <string> #include <string>
#include <map>
#include <limits.h> // for UINT
_MAX
// ********************************************************************* // *********************************************************************
// namespace extensions // namespace extensions
namespace Exiv2 { namespace Exiv2 {
//! the name of environmental variables.
enum EnVar { envHTTPPOST = 0, envTIMEOUT = 1};
//! the collection of protocols.
enum Protocol { pFile = 0, pHttp, pFtp, pHttps, pSftp, pSsh, pFil
eUri, pDataUri, pStdin};
// ********************************************************************* // *********************************************************************
// free functions // free functions
/*!
@brief Return the value of environmental variable.
@param var The name of environmental variable.
@return the value of environmental variable. If it's empty, the defau
lt value is returned.
*/
EXIV2API std::string getEnv(EnVar var);
/*!
@brief Convert an integer value to its hex character.
@param code The integer value.
@return the input's hex character.
*/
EXIV2API char to_hex(char code);
/*!
@brief Convert a hex character to its integer value.
@param ch The hex character.
@return the input's integer value.
*/
EXIV2API char from_hex(char ch);
/*!
@brief Encode the input url.
@param str The url needs encoding.
@return the url-encoded version of str.
@note Be sure to free() the returned string after use
Source: http://www.geekhideout.com/urlcode.shtml
*/
EXIV2API char* urlencode(char* str);
/*!
@brief Decode the input url.
@param str The url needs decoding.
@return the url-decoded version of str.
@note Be sure to free() the returned string after use
Source: http://www.geekhideout.com/urlcode.shtml
*/
EXIV2API char* urldecode(const char* str);
/*!
@brief Like urlencode(char* str) but accept the input url in the std:
:string and modify it.
*/
EXIV2API void urldecode(std::string& str);
/*!
@brief Encode in base64 the data in data_buf and put the resulting st
ring in result.
@param data_buf The data need to encode
@param dataLength Size in bytes of the in buffer
@param result The container for the result, NULL if it fails
@param resultSize Size in bytes of the out string, it should be at le
ast ((dataLength + 2) / 3) * 4 + 1
@return 1 indicate success
@note Source: http://en.wikibooks.org/wiki/Algorithm_Implementation/M
iscellaneous/Base64
*/
EXIV2API int base64encode(const void* data_buf, size_t dataLength, char
* result, size_t resultSize);
/*!
@brief Decode base64 data and put the resulting string in out.
@param in The data need to decode.
@param out The container for the result, it should be large enough to
contain the result.
@param out_size The size of out in bytes.
@return the size of the resulting string. If it fails, return -1.
@note Source: https://github.com/davidgaleano/libwebsockets/blob/mast
er/lib/base64-decode.c
*/
EXIV2API long base64decode(const char *in, char *out, size_t out_size);
/*!
@brief Return the protocol of the path.
@param path The path of file to extract the protocol.
@return the protocol of the path.
*/
EXIV2API Protocol fileProtocol(const std::string& path);
#ifdef EXV_UNICODE_PATH
/*!
@brief Like fileProtocol() but accept a unicode path in an std::wstri
ng.
@note This function is only available on Windows.
*/
EXIV2API Protocol fileProtocol(const std::wstring& wpath);
#endif
/*! /*!
@brief Test if a file exists. @brief Test if a file exists.
@param path Name of file to verify. @param path Name of file to verify.
@param ct Flag to check if <i>path</i> is a regular file. @param ct Flag to check if <i>path</i> is a regular file.
@return true if <i>path</i> exists and, if <i>ct</i> is set, @return true if <i>path</i> exists and, if <i>ct</i> is set,
is a regular file, else false. is a regular file, else false.
@note The function calls <b>stat()</b> test for <i>path</i> @note The function calls <b>stat()</b> test for <i>path</i>
and its type, see stat(2). <b>errno</b> is left unchanged and its type, see stat(2). <b>errno</b> is left unchanged
in case of an error. in case of an error.
*/ */
EXIV2API bool fileExists(const std::string& path, bool ct =false); EXIV2API bool fileExists(const std::string& path, bool ct =false);
#ifdef EXV_UNICODE_PATH #ifdef EXV_UNICODE_PATH
/*! /*!
@brief Like fileExists() but accepts a unicode path in an std::wstrin @brief Like fileExists(const std::string& path, bool ct =false) but
g. accepts a unicode path in an std::wstring.
@note This function is only available on Windows. @note This function is only available on Windows.
*/ */
EXIV2API bool fileExists(const std::wstring& wpath, bool ct =false); EXIV2API bool fileExists(const std::wstring& wpath, bool ct =false);
#endif #endif
/*! /*!
@brief Get the path of file URL.
@param url The file URL in the format file:///<path> or file://<host
>/<path>.
@return the path of file URL.
*/
EXIV2API std::string pathOfFileUrl(const std::string& url);
#ifdef EXV_UNICODE_PATH
/*!
@brief Like pathOfFileUrl(const std::string& url) but accepts a unico
de path in an std::wstring.
@note This function is only available on Windows.
*/
EXIV2API std::wstring pathOfFileUrl(const std::wstring& wurl);
#endif
/*!
@brief Return a system error message and the error code (errno). @brief Return a system error message and the error code (errno).
See %strerror(3). See %strerror(3).
*/ */
EXIV2API std::string strError(); EXIV2API std::string strError();
} // namespace Exiv2 /*!
@brief A container for URL components. It also provides the method to
parse a
URL to get the protocol, host, path, port, querystring, usernam
e, password.
Source: http://stackoverflow.com/questions/2616011/easy-way-to-parse-
a-url-in-c-cross-platform
*/
class Uri
{
public:
// DATA
std::string QueryString; //!< URL query string
std::string Path; //!< URL file path
std::string Protocol; //!< URL protocol
std::string Host; //!< URL host
std::string Port; //!< URL port
std::string Username; //!< URL username
std::string Password; //!< URL password
/*!
@brief Parse the input URL to the protocol, host, path, username,
password
*/
static Uri EXIV2API Parse(const std::string &uri);
/*!
@brief Decode the url components.
*/
static void EXIV2API Decode(Uri& uri);
}; // class Uri
} // namespace Exiv2
#endif // #ifndef FUTILS_HPP_ #endif // #ifndef FUTILS_HPP_
 End of changes. 9 change blocks. 
9 lines changed or deleted 148 lines changed or added


 gifimage.hpp   gifimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 image.hpp   image.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
skipping to change at line 75 skipping to change at line 75
uint32_t width_; //!< Width uint32_t width_; //!< Width
uint32_t height_; //!< Height uint32_t height_; //!< Height
std::string filter_; //!< Filter std::string filter_; //!< Filter
std::string mimeType_; //!< MIME type std::string mimeType_; //!< MIME type
}; };
//! List of native previews. This is meant to be used only by the Previ ewManager. //! List of native previews. This is meant to be used only by the Previ ewManager.
typedef std::vector<NativePreview> NativePreviewList; typedef std::vector<NativePreview> NativePreviewList;
/*! /*!
@brief Options for printStructure
*/
typedef enum { kpsNone, kpsBasic, kpsXMP } PrintStructureOption;
/*!
@brief Abstract base class defining the interface for an image. This is @brief Abstract base class defining the interface for an image. This is
the top-level interface to the Exiv2 library. the top-level interface to the Exiv2 library.
Image has containers to store image metadata and subclasses implement Image has containers to store image metadata and subclasses implement
read and save metadata from and to specific image formats.<BR> read and save metadata from and to specific image formats.<BR>
Most client apps will obtain an Image instance by calling a static Most client apps will obtain an Image instance by calling a static
ImageFactory method. The Image class can then be used to to read, wri te, ImageFactory method. The Image class can then be used to to read, wri te,
and save metadata. and save metadata.
*/ */
class EXIV2API Image { class EXIV2API Image {
skipping to change at line 106 skipping to change at line 111
Image(int imageType, Image(int imageType,
uint16_t supportedMetadata, uint16_t supportedMetadata,
BasicIo::AutoPtr io); BasicIo::AutoPtr io);
//! Virtual Destructor //! Virtual Destructor
virtual ~Image(); virtual ~Image();
//@} //@}
//! @name Manipulators //! @name Manipulators
//@{ //@{
/*! /*!
@brief Print out the structure of image file.
@throw Error if reading of the file fails or the image data is
not valid (does not look like data of the specific image ty
pe).
@caution This function is not thread safe and intended for exiv2
-pS for debugging.
*/
virtual void printStructure(std::ostream& out, PrintStructureOption
option =kpsNone);
/*!
@brief Read all metadata supported by a specific image format fro m the @brief Read all metadata supported by a specific image format fro m the
image. Before this method is called, the image metadata will be image. Before this method is called, the image metadata will be
cleared. cleared.
This method returns success even if no metadata is found in the This method returns success even if no metadata is found in the
image. Callers must therefore check the size of individual metada ta image. Callers must therefore check the size of individual metada ta
types before accessing the data. types before accessing the data.
@throw Error if opening or reading of the file fails or the image @throw Error if opening or reading of the file fails or the image
data is not valid (does not look like data of the specific im age data is not valid (does not look like data of the specific im age
skipping to change at line 448 skipping to change at line 460
/*! /*!
@brief Returns an Image instance of the specified type. @brief Returns an Image instance of the specified type.
The factory is implemented as a static class. The factory is implemented as a static class.
*/ */
class EXIV2API ImageFactory { class EXIV2API ImageFactory {
friend bool Image::good() const; friend bool Image::good() const;
public: public:
/*! /*!
@brief Create the appropriate class type implemented BasicIo base
d on the protocol of the input.
"-" path implies the data from stdin and it is handled by StdinIo
.
Http path can be handled by either HttpIo or CurlIo. Https, ftp p
aths
are handled by CurlIo. Ssh, sftp paths are handled by SshIo. Othe
rs are handled by FileIo.
@param path %Image file.
@param useCurl Indicate whether the libcurl is used or not.
If it's true, http is handled by CurlIo. Otherwise it is ha
ndled by HttpIo.
@return An auto-pointer that owns an BasicIo instance.
@throw Error If the file is not found or it is unable to connect
to the server to
read the remote file.
*/
static BasicIo::AutoPtr createIo(const std::string& path, bool useC
url = true);
#ifdef EXV_UNICODE_PATH
/*!
@brief Like createIo() but accepts a unicode path in an std::wstr
ing.
@note This function is only available on Windows.
*/
static BasicIo::AutoPtr createIo(const std::wstring& wpath, bool us
eCurl = true);
#endif
/*!
@brief Create an Image subclass of the appropriate type by readin g @brief Create an Image subclass of the appropriate type by readin g
the specified file. %Image type is derived from the file the specified file. %Image type is derived from the file
contents. contents.
@param path %Image file. The contents of the file are tested to @param path %Image file. The contents of the file are tested to
determine the image type. File extension is ignored. determine the image type. File extension is ignored.
@param useCurl Indicate whether the libcurl is used or not.
If it's true, http is handled by CurlIo. Otherwise it is ha
ndled by HttpIo.
@return An auto-pointer that owns an Image instance whose type @return An auto-pointer that owns an Image instance whose type
matches that of the file. matches that of the file.
@throw Error If opening the file fails or it contains data of an @throw Error If opening the file fails or it contains data of an
unknown image type. unknown image type.
*/ */
static Image::AutoPtr open(const std::string& path); static Image::AutoPtr open(const std::string& path, bool useCurl = true);
#ifdef EXV_UNICODE_PATH #ifdef EXV_UNICODE_PATH
/*! /*!
@brief Like open() but accepts a unicode path in an std::wstring. @brief Like open() but accepts a unicode path in an std::wstring.
@note This function is only available on Windows. @note This function is only available on Windows.
*/ */
static Image::AutoPtr open(const std::wstring& wpath); static Image::AutoPtr open(const std::wstring& wpath, bool useCurl = true);
#endif #endif
/*! /*!
@brief Create an Image subclass of the appropriate type by readin g @brief Create an Image subclass of the appropriate type by readin g
the provided memory. %Image type is derived from the memory the provided memory. %Image type is derived from the memory
contents. contents.
@param data Pointer to a data buffer containing an image. The con tents @param data Pointer to a data buffer containing an image. The con tents
of the memory are tested to determine the image type. of the memory are tested to determine the image type.
@param size Number of bytes pointed to by \em data. @param size Number of bytes pointed to by \em data.
@return An auto-pointer that owns an Image instance whose type @return An auto-pointer that owns an Image instance whose type
matches that of the data buffer. matches that of the data buffer.
 End of changes. 7 change blocks. 
3 lines changed or deleted 52 lines changed or added


 iptc.hpp   iptc.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 jp2image.hpp   jp2image.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 jpgimage.hpp   jpgimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
skipping to change at line 155 skipping to change at line 155
/*! /*!
@brief Abstract helper base class to access JPEG images. @brief Abstract helper base class to access JPEG images.
*/ */
class EXIV2API JpegBase : public Image { class EXIV2API JpegBase : public Image {
public: public:
//! @name Manipulators //! @name Manipulators
//@{ //@{
void readMetadata(); void readMetadata();
void writeMetadata(); void writeMetadata();
/*!
@brief Print out the structure of image file.
@throw Error if reading of the file fails or the image data is
not valid (does not look like data of the specific image ty
pe).
@caution This function is not thread safe and intended for exiv2
-pS for debugging.
*/
void printStructure(std::ostream& out, PrintStructureOption option)
;
//@} //@}
protected: protected:
//! @name Creators //! @name Creators
//@{ //@{
/*! /*!
@brief Constructor that can either open an existing image or crea te @brief Constructor that can either open an existing image or crea te
a new image from scratch. If a new image is to be created, an y a new image from scratch. If a new image is to be created, an y
existing data is overwritten. existing data is overwritten.
@param type Image type. @param type Image type.
skipping to change at line 221 skipping to change at line 229
/*! /*!
@brief Writes the image header (aka signature) to the BasicIo ins tance. @brief Writes the image header (aka signature) to the BasicIo ins tance.
@param oIo BasicIo instance that the header is written to. @param oIo BasicIo instance that the header is written to.
@return 0 if successful;<BR> @return 0 if successful;<BR>
4 if the output file can not be written to 4 if the output file can not be written to
*/ */
virtual int writeHeader(BasicIo& oIo) const =0; virtual int writeHeader(BasicIo& oIo) const =0;
//@} //@}
// Constant Data // Constant Data
static const byte dht_; //!< JPEG DHT marker
static const byte dqt_; //!< JPEG DQT marker
static const byte dri_; //!< JPEG DRI marker
static const byte sos_; //!< JPEG SOS marker static const byte sos_; //!< JPEG SOS marker
static const byte eoi_; //!< JPEG EOI marker static const byte eoi_; //!< JPEG EOI marker
static const byte app0_; //!< JPEG APP0 marker static const byte app0_; //!< JPEG APP0 marker
static const byte app1_; //!< JPEG APP1 marker static const byte app1_; //!< JPEG APP1 marker
static const byte app13_; //!< JPEG APP13 marker static const byte app13_; //!< JPEG APP13 marker
static const byte com_; //!< JPEG Comment marker static const byte com_; //!< JPEG Comment marker
static const byte sof0_; //!< JPEG Start-Of-Frame ma rker static const byte sof0_; //!< JPEG Start-Of-Frame ma rker
static const byte sof1_; //!< JPEG Start-Of-Frame ma rker static const byte sof1_; //!< JPEG Start-Of-Frame ma rker
static const byte sof2_; //!< JPEG Start-Of-Frame ma rker static const byte sof2_; //!< JPEG Start-Of-Frame ma rker
static const byte sof3_; //!< JPEG Start-Of-Frame ma rker static const byte sof3_; //!< JPEG Start-Of-Frame ma rker
 End of changes. 3 change blocks. 
1 lines changed or deleted 15 lines changed or added


 metadatum.hpp   metadatum.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 mrwimage.hpp   mrwimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 orfimage.hpp   orfimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 pgfimage.hpp   pgfimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 pngimage.hpp   pngimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
skipping to change at line 89 skipping to change at line 89
@param create Specifies if an existing image should be read (fals e) @param create Specifies if an existing image should be read (fals e)
or if a new file should be created (true). or if a new file should be created (true).
*/ */
PngImage(BasicIo::AutoPtr io, bool create); PngImage(BasicIo::AutoPtr io, bool create);
//@} //@}
//! @name Manipulators //! @name Manipulators
//@{ //@{
void readMetadata(); void readMetadata();
void writeMetadata(); void writeMetadata();
/*!
@brief Print out the structure of image file.
@throw Error if reading of the file fails or the image data is
not valid (does not look like data of the specific image ty
pe).
@caution This function is not thread safe and intended for exiv2
-pS for debugging.
*/
void printStructure(std::ostream& out, PrintStructureOption option)
;
//@} //@}
//! @name Accessors //! @name Accessors
//@{ //@{
std::string mimeType() const; std::string mimeType() const;
//@} //@}
private: private:
//! @name NOT implemented //! @name NOT implemented
//@{ //@{
 End of changes. 2 change blocks. 
1 lines changed or deleted 12 lines changed or added


 preview.hpp   preview.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 properties.hpp   properties.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 psdimage.hpp   psdimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 rafimage.hpp   rafimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA. * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA.
*/ */
/*! /*!
@file rafimage.hpp @file rafimage.hpp
@brief Fujifilm RAW image @brief Fujifilm RAW image
@version $Rev: 3201 $ @version $Rev: 3090 $
@author Andreas Huggel (ahu) @author Andreas Huggel (ahu)
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
@date 05-Feb-07, ahu: created @date 05-Feb-07, ahu: created
*/ */
#ifndef RAFIMAGE_HPP_ #ifndef RAFIMAGE_HPP_
#define RAFIMAGE_HPP_ #define RAFIMAGE_HPP_
// ************************************************************************ ***** // ************************************************************************ *****
// included header files // included header files
#include "image.hpp" #include "image.hpp"
 End of changes. 2 change blocks. 
2 lines changed or deleted 2 lines changed or added


 rw2image.hpp   rw2image.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA. * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA.
*/ */
/*! /*!
@file rw2image.hpp @file rw2image.hpp
@brief Class Rw2Image @brief Class Rw2Image
@version $Rev: 3201 $ @version $Rev: 3090 $
@author Andreas Huggel (ahu) @author Andreas Huggel (ahu)
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
@date 06-Jan-09, ahu: created @date 06-Jan-09, ahu: created
*/ */
#ifndef RW2IMAGE_HPP_ #ifndef RW2IMAGE_HPP_
#define RW2IMAGE_HPP_ #define RW2IMAGE_HPP_
// ************************************************************************ ***** // ************************************************************************ *****
// included header files // included header files
#include "image.hpp" #include "image.hpp"
 End of changes. 2 change blocks. 
2 lines changed or deleted 2 lines changed or added


 tags.hpp   tags.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA. * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA.
*/ */
/*! /*!
@file tags.hpp @file tags.hpp
@brief Exif tag and type information @brief Exif tag and type information
@version $Rev: 3201 $ @version $Rev: 3090 $
@author Andreas Huggel (ahu) @author Andreas Huggel (ahu)
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
@date 15-Jan-04, ahu: created<BR> @date 15-Jan-04, ahu: created<BR>
11-Feb-04, ahu: isolated as a component 11-Feb-04, ahu: isolated as a component
*/ */
#ifndef TAGS_HPP_ #ifndef TAGS_HPP_
#define TAGS_HPP_ #define TAGS_HPP_
// ************************************************************************ ***** // ************************************************************************ *****
// included header files // included header files
 End of changes. 2 change blocks. 
2 lines changed or deleted 2 lines changed or added


 tags_int.hpp   tags_int.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA. * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA.
*/ */
/*! /*!
@file tags_int.hpp @file tags_int.hpp
@brief Internal Exif tag and type information @brief Internal Exif tag and type information
@version $Rev: 3201 $ @version $Rev: 3777 $
@author Andreas Huggel (ahu) @author Andreas Huggel (ahu)
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
@date 15-Jan-04, ahu: created<BR> @date 15-Jan-04, ahu: created<BR>
11-Feb-04, ahu: isolated as a component 11-Feb-04, ahu: isolated as a component
*/ */
#ifndef TAGS_INT_HPP_ #ifndef TAGS_INT_HPP_
#define TAGS_INT_HPP_ #define TAGS_INT_HPP_
// ************************************************************************ ***** // ************************************************************************ *****
// included header files // included header files
skipping to change at line 85 skipping to change at line 85
panaRawId, panaRawId,
mnId, mnId,
canonId, canonId,
canonCsId, canonCsId,
canonSiId, canonSiId,
canonCfId, canonCfId,
canonPiId, canonPiId,
canonPaId, canonPaId,
canonFiId, canonFiId,
canonPrId, canonPrId,
casioId,
casio2Id,
fujiId, fujiId,
minoltaId, minoltaId,
minoltaCs5DId, minoltaCs5DId,
minoltaCs7DId, minoltaCs7DId,
minoltaCsOldId, minoltaCsOldId,
minoltaCsNewId, minoltaCsNewId,
nikon1Id, nikon1Id,
nikon2Id, nikon2Id,
nikon3Id, nikon3Id,
nikonPvId, nikonPvId,
skipping to change at line 185 skipping to change at line 187
SectionId sectionId_; //!< Section id SectionId sectionId_; //!< Section id
const char* name_; //!< Section name (one word ) const char* name_; //!< Section name (one word )
const char* desc_; //!< Section description const char* desc_; //!< Section description
}; };
/*! /*!
@brief Helper structure for lookup tables for translations of numeric @brief Helper structure for lookup tables for translations of numeric
tag values to human readable labels. tag values to human readable labels.
*/ */
struct TagDetails { struct TagDetails {
long val_; //!< Tag value int64_t val_; //!< Tag value
const char* label_; //!< Translation of the tag value const char* label_; //!< Translation of the tag value
//! Comparison operator for use with the find template //! Comparison operator for use with the find template
bool operator==(long key) const { return val_ == key; } bool operator==(long key) const { return val_ == key; }
}; // struct TagDetails }; // struct TagDetails
/*! /*!
@brief Helper structure for lookup tables for translations of bitmask @brief Helper structure for lookup tables for translations of bitmask
values to human readable labels. values to human readable labels.
*/ */
 End of changes. 4 change blocks. 
3 lines changed or deleted 5 lines changed or added


 tgaimage.hpp   tgaimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
skipping to change at line 26 skipping to change at line 26
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA. * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA.
*/ */
/*! /*!
@file tgaimage.hpp @file tgaimage.hpp
@brief Truevision TARGA v2 image, implemented using the following refer ences: @brief Truevision TARGA v2 image, implemented using the following refer ences:
<a href="http://en.wikipedia.org/wiki/Truevision_TGA">Truevision TGA page on Wikipedia</a><br> <a href="http://en.wikipedia.org/wiki/Truevision_TGA">Truevision TGA page on Wikipedia</a><br>
<a href="http://www.gamers.org/dEngine/quake3/TGA.ps.gz">TGA(tm) File Format Specification</a> <a href="http://www.gamers.org/dEngine/quake3/TGA.ps.gz">TGA(tm) File Format Specification</a>
@version $Rev: 3201 $ @version $Rev: 3090 $
@author Marco Piovanelli, Ovolab (marco) @author Marco Piovanelli, Ovolab (marco)
<a href="mailto:marco.piovanelli@pobox.com">marco.piovanelli@pob ox.com</a> <a href="mailto:marco.piovanelli@pobox.com">marco.piovanelli@pob ox.com</a>
@date 05-Mar-2007, marco: created @date 05-Mar-2007, marco: created
*/ */
#ifndef TGAIMAGE_HPP_ #ifndef TGAIMAGE_HPP_
#define TGAIMAGE_HPP_ #define TGAIMAGE_HPP_
// ************************************************************************ ***** // ************************************************************************ *****
// included header files // included header files
#include "exif.hpp" #include "exif.hpp"
 End of changes. 2 change blocks. 
2 lines changed or deleted 2 lines changed or added


 tiffimage.hpp   tiffimage.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA. * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA.
*/ */
/*! /*!
@file tiffimage.hpp @file tiffimage.hpp
@brief Class TiffImage @brief Class TiffImage
@version $Rev: 3201 $ @version $Rev: 3090 $
@author Andreas Huggel (ahu) @author Andreas Huggel (ahu)
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
@date 15-Mar-06, ahu: created @date 15-Mar-06, ahu: created
*/ */
#ifndef TIFFIMAGE_HPP_ #ifndef TIFFIMAGE_HPP_
#define TIFFIMAGE_HPP_ #define TIFFIMAGE_HPP_
// ************************************************************************ ***** // ************************************************************************ *****
// included header files // included header files
#include "image.hpp" #include "image.hpp"
skipping to change at line 89 skipping to change at line 89
@param create Specifies if an existing image should be read (fals e) @param create Specifies if an existing image should be read (fals e)
or if a new file should be created (true). or if a new file should be created (true).
*/ */
TiffImage(BasicIo::AutoPtr io, bool create); TiffImage(BasicIo::AutoPtr io, bool create);
//@} //@}
//! @name Manipulators //! @name Manipulators
//@{ //@{
void readMetadata(); void readMetadata();
void writeMetadata(); void writeMetadata();
/*!
@brief Print out the structure of image file.
@throw Error if reading of the file fails or the image data is
not valid (does not look like data of the specific image ty
pe).
@caution This function is not thread safe and intended for exiv2
-pS for debugging.
*/
void printStructure(std::ostream& out, PrintStructureOption option)
;
/*! /*!
@brief Not supported. TIFF format does not contain a comment. @brief Not supported. TIFF format does not contain a comment.
Calling this function will throw an Error(32). Calling this function will throw an Error(32).
*/ */
void setComment(const std::string& comment); void setComment(const std::string& comment);
//@} //@}
//! @name Accessors //! @name Accessors
//@{ //@{
std::string mimeType() const; std::string mimeType() const;
 End of changes. 3 change blocks. 
2 lines changed or deleted 14 lines changed or added


 types.hpp   types.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA. * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA.
*/ */
/*! /*!
@file types.hpp @file types.hpp
@brief Type definitions for %Exiv2 and related functionality @brief Type definitions for %Exiv2 and related functionality
@version $Rev: 3201 $ @version $Rev: 3090 $
@author Andreas Huggel (ahu) @author Andreas Huggel (ahu)
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
@date 09-Jan-04, ahu: created<BR> @date 09-Jan-04, ahu: created<BR>
11-Feb-04, ahu: isolated as a component<BR> 11-Feb-04, ahu: isolated as a component<BR>
31-Jul-04, brad: added Time, Data and String values 31-Jul-04, brad: added Time, Data and String values
*/ */
#ifndef TYPES_HPP_ #ifndef TYPES_HPP_
#define TYPES_HPP_ #define TYPES_HPP_
// ************************************************************************ *****
// included header files // included header files
#ifdef _MSC_VER #include "config.h"
# include "exv_msvc.h"
#else
# include "exv_conf.h"
#endif
#include "version.hpp" #include "version.hpp"
// + standard includes // + standard includes
#include <string> #include <string>
#include <vector> #include <vector>
#include <iosfwd> #include <iosfwd>
#include <utility> #include <utility>
#include <algorithm> #include <algorithm>
#include <sstream> #include <sstream>
 End of changes. 4 change blocks. 
8 lines changed or deleted 3 lines changed or added


 value.hpp   value.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA. * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA.
*/ */
/*! /*!
@file value.hpp @file value.hpp
@brief Value interface and concrete subclasses @brief Value interface and concrete subclasses
@version $Rev: 3201 $ @version $Rev: 3090 $
@author Andreas Huggel (ahu) @author Andreas Huggel (ahu)
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
@date 09-Jan-04, ahu: created @date 09-Jan-04, ahu: created
11-Feb-04, ahu: isolated as a component 11-Feb-04, ahu: isolated as a component
31-Jul-04, brad: added Time, Data and String values 31-Jul-04, brad: added Time, Data and String values
*/ */
#ifndef VALUE_HPP_ #ifndef VALUE_HPP_
#define VALUE_HPP_ #define VALUE_HPP_
// ************************************************************************ ***** // ************************************************************************ *****
skipping to change at line 875 skipping to change at line 875
public: public:
//! Type used to store XMP array elements. //! Type used to store XMP array elements.
typedef std::vector<std::string> ValueType; typedef std::vector<std::string> ValueType;
// DATA // DATA
std::vector<std::string> value_; //!< Stores the string valu es. std::vector<std::string> value_; //!< Stores the string valu es.
}; // class XmpArrayValue }; // class XmpArrayValue
/*! /*!
@brief %LangAltValueComparator
#1058
https://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpec
ificationPart1.pdf
XMP spec chapter B.4 (page 42) the xml:lang qualifier is to be com
pared case insensitive.
*/
struct LangAltValueComparator {
bool operator() (const std::string& str1, const std::string&
str2) const
{
int result = str1.size() < str2.size() ? 1
: str1.size() > str2.size() ? -1
: 0
;
std::string::const_iterator c1 = str1.begin();
std::string::const_iterator c2 = str2.begin();
if ( result==0 ) for (
; result==0 && c1 != str1.end()
; ++c1, ++c2
) {
result = tolower(*c1) < tolower(*c2) ? 1
: tolower(*c1) > tolower(*c2) ? -1
: 0
;
}
return result < 0 ;
}
};
/*!
@brief %Value type for XMP language alternative properties. @brief %Value type for XMP language alternative properties.
A language alternative is an array consisting of simple text values, A language alternative is an array consisting of simple text values,
each of which has a language qualifier. each of which has a language qualifier.
*/ */
class EXIV2API LangAltValue : public XmpValue { class EXIV2API LangAltValue : public XmpValue {
public: public:
//! Shortcut for a %LangAltValue auto pointer. //! Shortcut for a %LangAltValue auto pointer.
typedef std::auto_ptr<LangAltValue> AutoPtr; typedef std::auto_ptr<LangAltValue> AutoPtr;
skipping to change at line 952 skipping to change at line 981
*/ */
virtual std::ostream& write(std::ostream& os) const; virtual std::ostream& write(std::ostream& os) const;
//@} //@}
private: private:
//! Internal virtual copy constructor. //! Internal virtual copy constructor.
EXV_DLLLOCAL virtual LangAltValue* clone_() const; EXV_DLLLOCAL virtual LangAltValue* clone_() const;
public: public:
//! Type used to store language alternative arrays. //! Type used to store language alternative arrays.
typedef std::map<std::string, std::string> ValueType; typedef std::map<std::string, std::string,LangAltValueComparator> ValueType;
// DATA // DATA
/*! /*!
@brief Map to store the language alternative values. The language @brief Map to store the language alternative values. The language
qualifier is used as the key for the map entries. qualifier is used as the key for the map entries.
*/ */
ValueType value_; ValueType value_;
}; // class LangAltValue }; // class LangAltValue
/*! /*!
skipping to change at line 1065 skipping to change at line 1094
// DATA // DATA
Date date_; Date date_;
}; // class DateValue }; // class DateValue
/*! /*!
@brief %Value for simple ISO 8601 times. @brief %Value for simple ISO 8601 times.
This class is limited to handling simple time strings in the ISO 8601 This class is limited to handling simple time strings in the ISO 8601
format HHMMSS±HHMM where HHMMSS refers to local hour, minute and format HHMMSS�HHMM where HHMMSS refers to local hour, minute and
seconds and ±HHMM refers to hours and minutes ahead or behind seconds and �HHMM refers to hours and minutes ahead or behind
Universal Coordinated Time. Universal Coordinated Time.
*/ */
class EXIV2API TimeValue : public Value { class EXIV2API TimeValue : public Value {
public: public:
//! Shortcut for a %TimeValue auto pointer. //! Shortcut for a %TimeValue auto pointer.
typedef std::auto_ptr<TimeValue> AutoPtr; typedef std::auto_ptr<TimeValue> AutoPtr;
//! @name Creators //! @name Creators
//@{ //@{
//! Default constructor. //! Default constructor.
skipping to change at line 1553 skipping to change at line 1582
sizeDataArea_ = rhs.sizeDataArea_; sizeDataArea_ = rhs.sizeDataArea_;
return *this; return *this;
} }
template<typename T> template<typename T>
int ValueType<T>::read(const byte* buf, long len, ByteOrder byteOrder) int ValueType<T>::read(const byte* buf, long len, ByteOrder byteOrder)
{ {
value_.clear(); value_.clear();
long ts = TypeInfo::typeSize(typeId()); long ts = TypeInfo::typeSize(typeId());
if (len % ts != 0) len = (len / ts) * ts; if (ts != 0)
if (len % ts != 0) len = (len / ts) * ts;
for (long i = 0; i < len; i += ts) { for (long i = 0; i < len; i += ts) {
value_.push_back(getValue<T>(buf + i, byteOrder)); value_.push_back(getValue<T>(buf + i, byteOrder));
} }
return 0; return 0;
} }
template<typename T> template<typename T>
int ValueType<T>::read(const std::string& buf) int ValueType<T>::read(const std::string& buf)
{ {
std::istringstream is(buf); std::istringstream is(buf);
 End of changes. 6 change blocks. 
6 lines changed or deleted 39 lines changed or added


 version.hpp   version.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
skipping to change at line 27 skipping to change at line 27
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA. * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA.
*/ */
/*! /*!
@file version.hpp @file version.hpp
@brief Precompiler define and a function to test the %Exiv2 version. @brief Precompiler define and a function to test the %Exiv2 version.
References: Similar versioning defines are used in KDE, GTK and other References: Similar versioning defines are used in KDE, GTK and other
libraries. See http://apr.apache.org/versioning.html for accompa nying libraries. See http://apr.apache.org/versioning.html for accompa nying
guidelines. guidelines.
@version $Rev: 3201 $ @version $Rev: 3371 $
@author Andreas Huggel (ahu) @author Andreas Huggel (ahu)
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
@date 31-May-06, ahu: created @date 31-May-06, ahu: created
*/ */
#ifndef VERSION_HPP_ #ifndef VERSION_HPP_
#define VERSION_HPP_ #define VERSION_HPP_
// ************************************************************************ ***** // ************************************************************************ *****
// included header files // included header files
// + standard includes // + standard includes
#include <string> #include <string>
#include <vector>
#if EXV_HAVE_REGEX
#include <regex.h>
typedef std::vector<regex_t> exv_grep_keys_t ;
#else
typedef std::vector<std::string> exv_grep_keys_t ;
#endif
/*! /*!
@brief %Exiv2 MAJOR version number of the library used at compile-time. @brief %Exiv2 MAJOR version number of the library used at compile-time.
*/ */
#define EXIV2_MAJOR_VERSION (0) #define EXIV2_MAJOR_VERSION (0)
/*! /*!
@brief %Exiv2 MINOR version number of the library used at compile-time. @brief %Exiv2 MINOR version number of the library used at compile-time.
*/ */
#define EXIV2_MINOR_VERSION (24) #define EXIV2_MINOR_VERSION (25)
/*! /*!
@brief %Exiv2 PATCH version number of the library used at compile-time. @brief %Exiv2 PATCH version number of the library used at compile-time.
*/ */
#define EXIV2_PATCH_VERSION (0) #define EXIV2_PATCH_VERSION (0)
/*! /*!
@brief Make an integer version number for comparison from a major, minor and @brief Make an integer version number for comparison from a major, minor and
a patch version number. a patch version number.
*/ */
#define EXIV2_MAKE_VERSION(major,minor,patch) \ #define EXIV2_MAKE_VERSION(major,minor,patch) \
(((major) << 16) | ((minor) << 8) | (patch)) (((major) << 16) | ((minor) << 8) | (patch))
skipping to change at line 125 skipping to change at line 132
( EXIV2_VERSION >= EXIV2_MAKE_VERSION(major,minor,patch) ) ( EXIV2_VERSION >= EXIV2_MAKE_VERSION(major,minor,patch) )
// ************************************************************************ ***** // ************************************************************************ *****
// namespace extensions // namespace extensions
namespace Exiv2 { namespace Exiv2 {
/*! /*!
@brief Return the version of %Exiv2 available at runtime as an intege r. @brief Return the version of %Exiv2 available at runtime as an intege r.
*/ */
EXIV2API int versionNumber(); EXIV2API int versionNumber();
/*! /*!
@brief Return the version string Example: "0.24.0" (major.minor.patch ) @brief Return the version string Example: "0.25.0" (major.minor.patch )
*/ */
EXIV2API std::string versionString(); EXIV2API std::string versionString();
/*! /*!
@brief Return the version of %Exiv2 as hex string of fixed length 6. @brief Return the version of %Exiv2 as hex string of fixed length 6.
*/ */
EXIV2API std::string versionNumberHexString(); EXIV2API std::string versionNumberHexString();
/*! /*!
@brief Return the version of %Exiv2 available at runtime as a string. @brief Return the version of %Exiv2 available at runtime as a string.
*/ */
EXIV2API const char* version(); EXIV2API const char* version();
skipping to change at line 179 skipping to change at line 186
} }
else { else {
std::cout << "Installed Exiv2 version is less than 0.13\n"; std::cout << "Installed Exiv2 version is less than 0.13\n";
} }
#else #else
std::cout << "Compile-time Exiv2 version doesn't have Exiv2::testVers ion()\n"; std::cout << "Compile-time Exiv2 version doesn't have Exiv2::testVers ion()\n";
#endif #endif
@endcode @endcode
*/ */
EXIV2API bool testVersion(int major, int minor, int patch); EXIV2API bool testVersion(int major, int minor, int patch);
} // namespace Exiv2
// dumpLibraryInfo is general purpose and not in the Exiv2 namespace /*!
// used by exiv2 test suite to inspect libraries loaded at run-time @brief dumpLibraryInfo implements the exiv2 option --version --verbos
EXIV2API void dumpLibraryInfo(std::ostream& os); e
used by exiv2 test suite to inspect libraries loaded at run-ti
me
*/
EXIV2API void dumpLibraryInfo(std::ostream& os,const exv_grep_keys_t& k
eys);
} // namespace Exiv2
#endif // VERSION_HPP_ #endif // VERSION_HPP_
 End of changes. 7 change blocks. 
8 lines changed or deleted 20 lines changed or added


 xmp.hpp   xmp.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA. * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA.
*/ */
/*! /*!
@file xmp.hpp @file xmp.hpp
@brief Encoding and decoding of XMP data @brief Encoding and decoding of XMP data
@version $Rev: 3201 $ @version $Rev: 3090 $
@author Andreas Huggel (ahu) @author Andreas Huggel (ahu)
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
@date 13-Jul-07, ahu: created @date 13-Jul-07, ahu: created
*/ */
#ifndef XMP_HPP_ #ifndef XMP_HPP_
#define XMP_HPP_ #define XMP_HPP_
// ************************************************************************ ***** // ************************************************************************ *****
// included header files // included header files
#include "metadatum.hpp" #include "metadatum.hpp"
 End of changes. 2 change blocks. 
2 lines changed or deleted 2 lines changed or added


 xmpsidecar.hpp   xmpsidecar.hpp 
// ***************************************************************** -*- C+ + -*- // ***************************************************************** -*- C+ + -*-
/* /*
* Copyright (C) 2004-2013 Andreas Huggel <ahuggel@gmx.net> * Copyright (C) 2004-2015 Andreas Huggel <ahuggel@gmx.net>
* *
* This program is part of the Exiv2 distribution. * This program is part of the Exiv2 distribution.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA. * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 U SA.
*/ */
/*! /*!
@file xmpsidecar.hpp @file xmpsidecar.hpp
@brief An Image subclass to support XMP sidecar files @brief An Image subclass to support XMP sidecar files
@version $Rev: 3201 $ @version $Rev: 3090 $
@author Andreas Huggel @author Andreas Huggel
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a> <a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
@date 07-Mar-08, ahu: created @date 07-Mar-08, ahu: created
*/ */
#ifndef XMPSIDECAR_HPP_ #ifndef XMPSIDECAR_HPP_
#define XMPSIDECAR_HPP_ #define XMPSIDECAR_HPP_
// ************************************************************************ ***** // ************************************************************************ *****
// included header files // included header files
#include "image.hpp" #include "image.hpp"
 End of changes. 2 change blocks. 
2 lines changed or deleted 2 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/