commit
206514f002
@ -902,7 +902,7 @@ namespace Action {
|
||||
if (dontOverwrite(thumbPath)) return 0;
|
||||
if (Params::instance().verbose_) {
|
||||
Exiv2::DataBuf buf = exifThumb.copy();
|
||||
if (buf.size() != 0) {
|
||||
if (!buf.empty()) {
|
||||
std::cout << _("Writing thumbnail") << " (" << exifThumb.mimeType() << ", "
|
||||
<< buf.size() << " " << _("Bytes") << ") " << _("to file") << " "
|
||||
<< thumbPath << std::endl;
|
||||
@ -1150,7 +1150,7 @@ namespace Action {
|
||||
image->readMetadata();
|
||||
// clear existing profile, assign the blob and rewrite image
|
||||
image->clearIccProfile();
|
||||
if ( iccProfileBlob.size() ) {
|
||||
if (!iccProfileBlob.empty()) {
|
||||
image->setIccProfile(std::move(iccProfileBlob));
|
||||
}
|
||||
image->writeMetadata();
|
||||
|
||||
@ -1010,7 +1010,7 @@ void Params::getStdin(Exiv2::DataBuf& buf)
|
||||
}
|
||||
|
||||
// copy stdinBuf to buf
|
||||
if ( stdinBuf.size() ) {
|
||||
if (!stdinBuf.empty()) {
|
||||
buf.alloc(stdinBuf.size());
|
||||
buf.copyBytes(0,stdinBuf.c_data(),buf.size());
|
||||
}
|
||||
|
||||
@ -36,7 +36,7 @@ namespace Exiv2 {
|
||||
class EXIV2API BasicIo {
|
||||
public:
|
||||
//! BasicIo auto_ptr type
|
||||
typedef std::unique_ptr<BasicIo> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<BasicIo>;
|
||||
|
||||
//! Seek starting positions
|
||||
enum Position { beg, cur, end };
|
||||
|
||||
@ -245,7 +245,7 @@ namespace Exiv2 {
|
||||
class EXIV2API IptcKey : public Key {
|
||||
public:
|
||||
//! Shortcut for an %IptcKey auto pointer.
|
||||
typedef std::unique_ptr<IptcKey> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<IptcKey>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -322,10 +322,10 @@ namespace Exiv2 {
|
||||
/*!
|
||||
@brief typedef for string:string map
|
||||
*/
|
||||
typedef std::map<std::string,std::string> Dictionary;
|
||||
using Dictionary = std::map<std::string, std::string>;
|
||||
|
||||
// *****************************************************************************
|
||||
// free functions
|
||||
// *****************************************************************************
|
||||
// free functions
|
||||
|
||||
//! Output operator for dataSet
|
||||
EXIV2API std::ostream& operator<<(std::ostream& os, const DataSet& dataSet);
|
||||
|
||||
@ -68,7 +68,7 @@ namespace Exiv2 {
|
||||
specific way. The default handler sends the log message to
|
||||
standard error.
|
||||
*/
|
||||
typedef void (*Handler)(int, const char*);
|
||||
using Handler = void (*)(int, const char*);
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -290,10 +290,10 @@ namespace Exiv2 {
|
||||
}; // class BasicError
|
||||
|
||||
//! Error class used for exceptions (std::string based)
|
||||
typedef BasicError<char> Error;
|
||||
using Error = BasicError<char>;
|
||||
|
||||
// *****************************************************************************
|
||||
// free functions, template and inline definitions
|
||||
// *****************************************************************************
|
||||
// free functions, template and inline definitions
|
||||
|
||||
//! Return the error message for the error with code \em code.
|
||||
const char* errMsg(int code);
|
||||
|
||||
@ -354,7 +354,7 @@ namespace Exiv2 {
|
||||
}; // class ExifThumb
|
||||
|
||||
//! Container type to hold all metadata
|
||||
typedef std::list<Exifdatum> ExifMetadata;
|
||||
using ExifMetadata = std::list<Exifdatum>;
|
||||
|
||||
/*!
|
||||
@brief A container for Exif data. This is a top-level class of the %Exiv2
|
||||
@ -371,9 +371,9 @@ namespace Exiv2 {
|
||||
class EXIV2API ExifData {
|
||||
public:
|
||||
//! ExifMetadata iterator type
|
||||
typedef ExifMetadata::iterator iterator;
|
||||
using iterator = ExifMetadata::iterator;
|
||||
//! ExifMetadata const iterator type
|
||||
typedef ExifMetadata::const_iterator const_iterator;
|
||||
using const_iterator = ExifMetadata::const_iterator;
|
||||
|
||||
//! @name Manipulators
|
||||
//@{
|
||||
|
||||
@ -31,14 +31,12 @@ namespace Exiv2 {
|
||||
};
|
||||
|
||||
//! List of native previews. This is meant to be used only by the PreviewManager.
|
||||
typedef std::vector<NativePreview> NativePreviewList;
|
||||
using NativePreviewList = std::vector<NativePreview>;
|
||||
|
||||
/*!
|
||||
@brief Options for printStructure
|
||||
*/
|
||||
typedef enum { kpsNone, kpsBasic, kpsXMP, kpsRecursive
|
||||
, kpsIccProfile , kpsIptcErase
|
||||
} PrintStructureOption;
|
||||
enum PrintStructureOption { kpsNone, kpsBasic, kpsXMP, kpsRecursive, kpsIccProfile, kpsIptcErase };
|
||||
|
||||
/*!
|
||||
@brief Abstract base class defining the interface for an image. This is
|
||||
@ -53,7 +51,7 @@ namespace Exiv2 {
|
||||
class EXIV2API Image {
|
||||
public:
|
||||
//! Image auto_ptr type
|
||||
typedef std::unique_ptr<Image> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<Image>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -490,9 +488,9 @@ namespace Exiv2 {
|
||||
}; // class Image
|
||||
|
||||
//! Type for function pointer that creates new Image instances
|
||||
typedef Image::UniquePtr (*NewInstanceFct)(BasicIo::UniquePtr io, bool create);
|
||||
using NewInstanceFct = Image::UniquePtr (*)(BasicIo::UniquePtr io, bool create);
|
||||
//! Type for function pointer that checks image types
|
||||
typedef bool (*IsThisTypeFct)(BasicIo& iIo, bool advance);
|
||||
using IsThisTypeFct = bool (*)(BasicIo& iIo, bool advance);
|
||||
|
||||
/*!
|
||||
@brief Returns an Image instance of the specified type.
|
||||
|
||||
@ -25,11 +25,10 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
//! @brief typedef for prototype of handler function.
|
||||
typedef int (*ini_handler)(void* user, const char* section,
|
||||
const char* name, const char* value);
|
||||
using ini_handler = int (*)(void* user, const char* section, const char* name, const char* value);
|
||||
|
||||
//! Typedef for prototype of fgets-style reader function.
|
||||
typedef char* (*ini_reader)(char* str, int num, void* stream);
|
||||
using ini_reader = char* (*)(char* str, int num, void* stream);
|
||||
|
||||
/*!
|
||||
@brief Parse given INI-style file. May have [section]s, name=value pairs
|
||||
|
||||
@ -138,7 +138,7 @@ namespace Exiv2 {
|
||||
}; // class Iptcdatum
|
||||
|
||||
//! Container type to hold all metadata
|
||||
typedef std::vector<Iptcdatum> IptcMetadata;
|
||||
using IptcMetadata = std::vector<Iptcdatum>;
|
||||
|
||||
/*!
|
||||
@brief A container for IPTC data. This is a top-level class of the %Exiv2 library.
|
||||
@ -153,9 +153,9 @@ namespace Exiv2 {
|
||||
class EXIV2API IptcData {
|
||||
public:
|
||||
//! IptcMetadata iterator type
|
||||
typedef IptcMetadata::iterator iterator;
|
||||
using iterator = IptcMetadata::iterator;
|
||||
//! IptcMetadata const iterator type
|
||||
typedef IptcMetadata::const_iterator const_iterator;
|
||||
using const_iterator = IptcMetadata::const_iterator;
|
||||
|
||||
// Use the compiler generated constructors and assignment operator
|
||||
|
||||
|
||||
@ -27,7 +27,7 @@ namespace Exiv2 {
|
||||
class EXIV2API Key {
|
||||
public:
|
||||
//! Shortcut for a %Key auto pointer.
|
||||
typedef std::unique_ptr<Key> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<Key>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
|
||||
@ -12,11 +12,11 @@
|
||||
// namespace extensions
|
||||
namespace Exiv2 {
|
||||
|
||||
// *****************************************************************************
|
||||
// class definitions
|
||||
// *****************************************************************************
|
||||
// class definitions
|
||||
|
||||
//! Type of preview image.
|
||||
typedef int PreviewId;
|
||||
using PreviewId = int;
|
||||
|
||||
/*!
|
||||
@brief Preview image properties.
|
||||
@ -37,13 +37,14 @@ namespace Exiv2 {
|
||||
};
|
||||
|
||||
//! Container type to hold all preview images metadata.
|
||||
typedef std::vector<PreviewProperties> PreviewPropertiesList;
|
||||
using PreviewPropertiesList = std::vector<PreviewProperties>;
|
||||
|
||||
/*!
|
||||
@brief Class that holds preview image properties and data buffer.
|
||||
*/
|
||||
class EXIV2API PreviewImage {
|
||||
friend class PreviewManager;
|
||||
|
||||
public:
|
||||
//! @name Constructors
|
||||
//@{
|
||||
@ -111,10 +112,10 @@ namespace Exiv2 {
|
||||
//! Private constructor
|
||||
PreviewImage(PreviewProperties properties, DataBuf&& data);
|
||||
|
||||
PreviewProperties properties_; //!< Preview image properties
|
||||
DataBuf preview_; //!< Preview image data
|
||||
PreviewProperties properties_; //!< Preview image properties
|
||||
DataBuf preview_; //!< Preview image data
|
||||
|
||||
}; // class PreviewImage
|
||||
}; // class PreviewImage
|
||||
|
||||
/*!
|
||||
@brief Class for extracting preview images from image metadata.
|
||||
@ -142,9 +143,9 @@ namespace Exiv2 {
|
||||
//@}
|
||||
|
||||
private:
|
||||
const Image& image_;
|
||||
const Image& image_;
|
||||
|
||||
}; // class PreviewManager
|
||||
} // namespace Exiv2
|
||||
}; // class PreviewManager
|
||||
} // namespace Exiv2
|
||||
|
||||
#endif // #ifndef PREVIEW_HPP_
|
||||
#endif // #ifndef PREVIEW_HPP_
|
||||
|
||||
@ -198,7 +198,7 @@ namespace Exiv2 {
|
||||
*/
|
||||
static void unregisterNs();
|
||||
//! Type for the namespace registry
|
||||
typedef std::map<std::string, XmpNsInfo> NsRegistry;
|
||||
using NsRegistry = std::map<std::string, XmpNsInfo>;
|
||||
/*!
|
||||
@brief Get the registered namespace for a specific \em prefix from the registry.
|
||||
*/
|
||||
@ -221,7 +221,7 @@ namespace Exiv2 {
|
||||
{
|
||||
public:
|
||||
//! Shortcut for an %XmpKey auto pointer.
|
||||
typedef std::unique_ptr<XmpKey> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<XmpKey>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
|
||||
@ -12,53 +12,6 @@ namespace Exiv2
|
||||
{
|
||||
namespace Internal
|
||||
{
|
||||
// TODO: remove these custom implementations once we have C++11
|
||||
template <class T>
|
||||
struct remove_const
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct remove_const<const T>
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct remove_volatile
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
template <class T>
|
||||
struct remove_volatile<volatile T>
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
template <class T>
|
||||
struct remove_cv
|
||||
{
|
||||
typedef typename remove_const<typename remove_volatile<T>::type>::type type;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct remove_pointer
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct remove_pointer<T*>
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct remove_pointer<T* const>
|
||||
{
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
/*!
|
||||
* Common base class of all slice implementations.
|
||||
*
|
||||
@ -133,9 +86,9 @@ namespace Exiv2
|
||||
template <template <typename data_type> class storage_type, typename data_type>
|
||||
struct ConstSliceBase : SliceBase
|
||||
{
|
||||
typedef typename storage_type<data_type>::iterator iterator;
|
||||
typedef typename storage_type<data_type>::const_iterator const_iterator;
|
||||
typedef typename storage_type<data_type>::value_type value_type;
|
||||
using iterator = typename storage_type<data_type>::iterator;
|
||||
using const_iterator = typename storage_type<data_type>::const_iterator;
|
||||
using value_type = typename storage_type<data_type>::value_type;
|
||||
|
||||
/*!
|
||||
* Default constructor, requires begin to be smaller than end,
|
||||
@ -220,9 +173,9 @@ namespace Exiv2
|
||||
template <template <typename> class storage_type, typename data_type>
|
||||
struct MutableSliceBase : public ConstSliceBase<storage_type, data_type>
|
||||
{
|
||||
typedef typename ConstSliceBase<storage_type, data_type>::iterator iterator;
|
||||
typedef typename ConstSliceBase<storage_type, data_type>::const_iterator const_iterator;
|
||||
typedef typename ConstSliceBase<storage_type, data_type>::value_type value_type;
|
||||
using iterator = typename ConstSliceBase<storage_type, data_type>::iterator;
|
||||
using const_iterator = typename ConstSliceBase<storage_type, data_type>::const_iterator;
|
||||
using value_type = typename ConstSliceBase<storage_type, data_type>::value_type;
|
||||
|
||||
/*!
|
||||
* Forwards everything to the constructor of const_slice_base
|
||||
@ -248,7 +201,6 @@ namespace Exiv2
|
||||
|
||||
const value_type& at(size_t index) const
|
||||
{
|
||||
// TODO: use using base_type::at once we have C++11
|
||||
return base_type::at(index);
|
||||
}
|
||||
|
||||
@ -291,7 +243,7 @@ namespace Exiv2
|
||||
return ConstSliceBase<storage_type, const data_type>(this->storage_.data_, this->begin_, this->end_);
|
||||
}
|
||||
|
||||
typedef ConstSliceBase<storage_type, data_type> base_type;
|
||||
using base_type = ConstSliceBase<storage_type, data_type>;
|
||||
|
||||
/*!
|
||||
* Create a mutable sub-slice with the given bounds (with respect to
|
||||
@ -329,11 +281,11 @@ namespace Exiv2
|
||||
template <typename container>
|
||||
struct ContainerStorage
|
||||
{
|
||||
typedef typename container::iterator iterator;
|
||||
using iterator = typename container::iterator;
|
||||
|
||||
typedef typename container::const_iterator const_iterator;
|
||||
using const_iterator = typename container::const_iterator;
|
||||
|
||||
typedef typename Internal::remove_cv<typename container::value_type>::type value_type;
|
||||
using value_type = std::remove_cv_t<typename container::value_type>;
|
||||
|
||||
/*!
|
||||
* @throw std::out_of_range when end is larger than the container's
|
||||
@ -400,9 +352,9 @@ namespace Exiv2
|
||||
template <typename storage_type>
|
||||
struct PtrSliceStorage
|
||||
{
|
||||
typedef typename remove_cv<typename remove_pointer<storage_type>::type>::type value_type;
|
||||
typedef value_type* iterator;
|
||||
typedef const value_type* const_iterator;
|
||||
using value_type = std::remove_cv_t<std::remove_pointer_t<storage_type> >;
|
||||
using iterator = value_type*;
|
||||
using const_iterator = const value_type*;
|
||||
|
||||
/*!
|
||||
* Stores ptr and checks that it is not `NULL`. The slice's bounds
|
||||
@ -412,8 +364,7 @@ namespace Exiv2
|
||||
*/
|
||||
PtrSliceStorage(storage_type ptr, size_t /*begin*/, size_t /*end*/) : data_(ptr)
|
||||
{
|
||||
// TODO: change this to nullptr once we use C++11
|
||||
if (ptr == NULL) {
|
||||
if (!ptr) {
|
||||
throw std::invalid_argument("Null pointer passed to slice constructor");
|
||||
}
|
||||
}
|
||||
@ -502,11 +453,11 @@ namespace Exiv2
|
||||
template <typename container>
|
||||
struct Slice : public Internal::MutableSliceBase<Internal::ContainerStorage, container>
|
||||
{
|
||||
typedef typename container::iterator iterator;
|
||||
using iterator = typename container::iterator;
|
||||
|
||||
typedef typename container::const_iterator const_iterator;
|
||||
using const_iterator = typename container::const_iterator;
|
||||
|
||||
typedef typename Internal::remove_cv<typename container::value_type>::type value_type;
|
||||
using value_type = std::remove_cv_t<typename container::value_type>;
|
||||
|
||||
/*!
|
||||
* @brief Construct a slice of the container `cont` starting at `begin`
|
||||
@ -560,11 +511,11 @@ namespace Exiv2
|
||||
template <typename container>
|
||||
struct Slice<const container> : public Internal::ConstSliceBase<Internal::ContainerStorage, const container>
|
||||
{
|
||||
typedef typename container::iterator iterator;
|
||||
using iterator = typename container::iterator;
|
||||
|
||||
typedef typename container::const_iterator const_iterator;
|
||||
using const_iterator = typename container::const_iterator;
|
||||
|
||||
typedef typename Internal::remove_cv<typename container::value_type>::type value_type;
|
||||
using value_type = std::remove_cv_t<typename container::value_type>;
|
||||
|
||||
Slice(const container& cont, size_t begin, size_t end)
|
||||
: Internal::ConstSliceBase<Internal::ContainerStorage, const container>(cont, begin, end)
|
||||
|
||||
@ -24,12 +24,12 @@ namespace Exiv2 {
|
||||
// type definitions
|
||||
|
||||
//! Type for a function pointer for functions interpreting the tag value
|
||||
typedef std::ostream& (*PrintFct)(std::ostream&, const Value&, const ExifData* pExifData);
|
||||
using PrintFct = std::ostream& (*)(std::ostream&, const Value&, const ExifData* pExifData);
|
||||
//! A function returning a tag list.
|
||||
typedef const TagInfo* (*TagListFct)();
|
||||
using TagListFct = const TagInfo* (*)();
|
||||
|
||||
// *****************************************************************************
|
||||
// class definitions
|
||||
// *****************************************************************************
|
||||
// class definitions
|
||||
|
||||
//! The details of an Exif group. Groups include IFDs and binary arrays.
|
||||
struct EXIV2API GroupInfo {
|
||||
@ -106,7 +106,7 @@ namespace Exiv2 {
|
||||
class EXIV2API ExifKey : public Key {
|
||||
public:
|
||||
//! Shortcut for an %ExifKey auto pointer.
|
||||
typedef std::unique_ptr<ExifKey> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<ExifKey>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
|
||||
@ -19,9 +19,11 @@
|
||||
/*!
|
||||
@brief Macro to make calls to member functions through a pointer more readable.
|
||||
See the C++ FAQ LITE, item
|
||||
<a href="http://www.parashift.com/c++-faq-lite/pointers-to-members.html#faq-33.5" title="[33.5] How can I avoid syntax errors when calling a member function using a pointer-to-member-function?">[33.5] How can I avoid syntax errors when calling a member function using a pointer-to-member-function?</a>.
|
||||
<a href="http://www.parashift.com/c++-faq-lite/pointers-to-members.html#faq-33.5" title="[33.5] How can I avoid
|
||||
syntax errors when calling a member function using a pointer-to-member-function?">[33.5] How can I avoid syntax errors
|
||||
when calling a member function using a pointer-to-member-function?</a>.
|
||||
*/
|
||||
#define EXV_CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
|
||||
#define EXV_CALL_MEMBER_FN(object, ptrToMember) ((object).*(ptrToMember))
|
||||
|
||||
// *****************************************************************************
|
||||
// forward declarations
|
||||
@ -31,35 +33,32 @@ struct tm;
|
||||
// namespace extensions
|
||||
namespace Exiv2 {
|
||||
|
||||
// *****************************************************************************
|
||||
// type definitions
|
||||
// *****************************************************************************
|
||||
// type definitions
|
||||
|
||||
//! 1 byte unsigned integer type.
|
||||
typedef uint8_t byte;
|
||||
using byte = uint8_t;
|
||||
|
||||
//! 8 byte unsigned rational type.
|
||||
typedef std::pair<uint32_t, uint32_t> URational;
|
||||
using URational = std::pair<uint32_t, uint32_t>;
|
||||
//! 8 byte signed rational type.
|
||||
typedef std::pair<int32_t, int32_t> Rational;
|
||||
using Rational = std::pair<int32_t, int32_t>;
|
||||
|
||||
//! Type to express the byte order (little or big endian)
|
||||
enum ByteOrder
|
||||
{
|
||||
enum ByteOrder {
|
||||
invalidByteOrder,
|
||||
littleEndian,
|
||||
bigEndian,
|
||||
};
|
||||
|
||||
//! Type to indicate write method used by TIFF parsers
|
||||
enum WriteMethod
|
||||
{
|
||||
enum WriteMethod {
|
||||
wmIntrusive,
|
||||
wmNonIntrusive,
|
||||
};
|
||||
|
||||
//! An identifier for each type of metadata
|
||||
enum MetadataId
|
||||
{
|
||||
enum MetadataId {
|
||||
mdNone = 0,
|
||||
mdExif = 1,
|
||||
mdIptc = 2,
|
||||
@ -69,8 +68,7 @@ namespace Exiv2 {
|
||||
};
|
||||
|
||||
//! An identifier for each mode of metadata support
|
||||
enum AccessMode
|
||||
{
|
||||
enum AccessMode {
|
||||
amNone = 0,
|
||||
amRead = 1,
|
||||
amWrite = 2,
|
||||
@ -84,41 +82,41 @@ namespace Exiv2 {
|
||||
See Value::create. 0x0000 to 0xffff are reserved for TIFF (Exif) types.
|
||||
*/
|
||||
enum TypeId {
|
||||
unsignedByte = 1, //!< Exif BYTE type, 8-bit unsigned integer.
|
||||
asciiString = 2, //!< Exif ASCII type, 8-bit byte.
|
||||
unsignedShort = 3, //!< Exif SHORT type, 16-bit (2-byte) unsigned integer.
|
||||
unsignedLong = 4, //!< Exif LONG type, 32-bit (4-byte) unsigned integer.
|
||||
unsignedRational = 5, //!< Exif RATIONAL type, two LONGs: numerator and denominator of a fraction.
|
||||
signedByte = 6, //!< Exif SBYTE type, an 8-bit signed (twos-complement) integer.
|
||||
undefined = 7, //!< Exif UNDEFINED type, an 8-bit byte that may contain anything.
|
||||
signedShort = 8, //!< Exif SSHORT type, a 16-bit (2-byte) signed (twos-complement) integer.
|
||||
signedLong = 9, //!< Exif SLONG type, a 32-bit (4-byte) signed (twos-complement) integer.
|
||||
signedRational =10, //!< Exif SRATIONAL type, two SLONGs: numerator and denominator of a fraction.
|
||||
tiffFloat =11, //!< TIFF FLOAT type, single precision (4-byte) IEEE format.
|
||||
tiffDouble =12, //!< TIFF DOUBLE type, double precision (8-byte) IEEE format.
|
||||
tiffIfd =13, //!< TIFF IFD type, 32-bit (4-byte) unsigned integer.
|
||||
unsignedLongLong =16, //!< Exif LONG LONG type, 64-bit (8-byte) unsigned integer.
|
||||
signedLongLong =17, //!< Exif LONG LONG type, 64-bit (8-byte) signed integer.
|
||||
tiffIfd8 =18, //!< TIFF IFD type, 64-bit (8-byte) unsigned integer.
|
||||
string =0x10000, //!< IPTC string type.
|
||||
date =0x10001, //!< IPTC date type.
|
||||
time =0x10002, //!< IPTC time type.
|
||||
comment =0x10003, //!< %Exiv2 type for the Exif user comment.
|
||||
directory =0x10004, //!< %Exiv2 type for a CIFF directory.
|
||||
xmpText =0x10005, //!< XMP text type.
|
||||
xmpAlt =0x10006, //!< XMP alternative type.
|
||||
xmpBag =0x10007, //!< XMP bag type.
|
||||
xmpSeq =0x10008, //!< XMP sequence type.
|
||||
langAlt =0x10009, //!< XMP language alternative type.
|
||||
invalidTypeId =0x1fffe, //!< Invalid type id.
|
||||
lastTypeId =0x1ffff //!< Last type id.
|
||||
unsignedByte = 1, //!< Exif BYTE type, 8-bit unsigned integer.
|
||||
asciiString = 2, //!< Exif ASCII type, 8-bit byte.
|
||||
unsignedShort = 3, //!< Exif SHORT type, 16-bit (2-byte) unsigned integer.
|
||||
unsignedLong = 4, //!< Exif LONG type, 32-bit (4-byte) unsigned integer.
|
||||
unsignedRational = 5, //!< Exif RATIONAL type, two LONGs: numerator and denominator of a fraction.
|
||||
signedByte = 6, //!< Exif SBYTE type, an 8-bit signed (twos-complement) integer.
|
||||
undefined = 7, //!< Exif UNDEFINED type, an 8-bit byte that may contain anything.
|
||||
signedShort = 8, //!< Exif SSHORT type, a 16-bit (2-byte) signed (twos-complement) integer.
|
||||
signedLong = 9, //!< Exif SLONG type, a 32-bit (4-byte) signed (twos-complement) integer.
|
||||
signedRational = 10, //!< Exif SRATIONAL type, two SLONGs: numerator and denominator of a fraction.
|
||||
tiffFloat = 11, //!< TIFF FLOAT type, single precision (4-byte) IEEE format.
|
||||
tiffDouble = 12, //!< TIFF DOUBLE type, double precision (8-byte) IEEE format.
|
||||
tiffIfd = 13, //!< TIFF IFD type, 32-bit (4-byte) unsigned integer.
|
||||
unsignedLongLong = 16, //!< Exif LONG LONG type, 64-bit (8-byte) unsigned integer.
|
||||
signedLongLong = 17, //!< Exif LONG LONG type, 64-bit (8-byte) signed integer.
|
||||
tiffIfd8 = 18, //!< TIFF IFD type, 64-bit (8-byte) unsigned integer.
|
||||
string = 0x10000, //!< IPTC string type.
|
||||
date = 0x10001, //!< IPTC date type.
|
||||
time = 0x10002, //!< IPTC time type.
|
||||
comment = 0x10003, //!< %Exiv2 type for the Exif user comment.
|
||||
directory = 0x10004, //!< %Exiv2 type for a CIFF directory.
|
||||
xmpText = 0x10005, //!< XMP text type.
|
||||
xmpAlt = 0x10006, //!< XMP alternative type.
|
||||
xmpBag = 0x10007, //!< XMP bag type.
|
||||
xmpSeq = 0x10008, //!< XMP sequence type.
|
||||
langAlt = 0x10009, //!< XMP language alternative type.
|
||||
invalidTypeId = 0x1fffe, //!< Invalid type id.
|
||||
lastTypeId = 0x1ffff //!< Last type id.
|
||||
};
|
||||
|
||||
//! Container for binary data
|
||||
typedef std::vector<byte> Blob;
|
||||
using Blob = std::vector<byte>;
|
||||
|
||||
// *****************************************************************************
|
||||
// class definitions
|
||||
// *****************************************************************************
|
||||
// class definitions
|
||||
|
||||
//! Type information lookup functions. Implemented as a static class.
|
||||
class EXIV2API TypeInfo {
|
||||
@ -136,7 +134,6 @@ namespace Exiv2 {
|
||||
static TypeId typeId(const std::string& typeName);
|
||||
//! Return the size in bytes of one element of this type
|
||||
static size_t typeSize(TypeId typeId);
|
||||
|
||||
};
|
||||
|
||||
/*!
|
||||
@ -210,9 +207,9 @@ namespace Exiv2 {
|
||||
//! Returns a (read-only) C-style string pointer.
|
||||
const char* c_str(size_t offset = 0) const;
|
||||
|
||||
bool empty() const {return pData_.empty(); }
|
||||
bool empty() const { return pData_.empty(); }
|
||||
|
||||
private:
|
||||
private:
|
||||
std::vector<byte> pData_;
|
||||
};
|
||||
|
||||
@ -232,15 +229,14 @@ namespace Exiv2 {
|
||||
//! Overload of makeSlice for `const DataBuf`, returning an immutable Slice
|
||||
EXIV2API Slice<const byte*> makeSlice(const DataBuf& buf, size_t begin, size_t end);
|
||||
|
||||
// *****************************************************************************
|
||||
// free functions
|
||||
// *****************************************************************************
|
||||
// free functions
|
||||
|
||||
//! Read a 2 byte unsigned short value from the data buffer
|
||||
EXIV2API uint16_t getUShort(const byte* buf, ByteOrder byteOrder);
|
||||
//! Read a 2 byte unsigned short value from a Slice
|
||||
template <typename T>
|
||||
uint16_t getUShort(const Slice<T>& buf, ByteOrder byteOrder)
|
||||
{
|
||||
uint16_t getUShort(const Slice<T>& buf, ByteOrder byteOrder) {
|
||||
if (byteOrder == littleEndian) {
|
||||
return static_cast<byte>(buf.at(1)) << 8 | static_cast<byte>(buf.at(0));
|
||||
}
|
||||
@ -324,16 +320,14 @@ namespace Exiv2 {
|
||||
stream, prefixed with the position in the buffer adjusted by
|
||||
offset.
|
||||
*/
|
||||
EXIV2API void hexdump(std::ostream& os, const byte* buf, long len, long offset =0);
|
||||
EXIV2API void hexdump(std::ostream& os, const byte* buf, long len, long offset = 0);
|
||||
|
||||
/*!
|
||||
@brief Return true if str is a hex number starting with prefix followed
|
||||
by size hex digits, false otherwise. If size is 0, any number of
|
||||
digits is allowed and all are checked.
|
||||
*/
|
||||
EXIV2API bool isHex(const std::string& str,
|
||||
size_t size =0,
|
||||
const std::string& prefix ="");
|
||||
EXIV2API bool isHex(const std::string& str, size_t size = 0, const std::string& prefix = "");
|
||||
|
||||
/*!
|
||||
@brief Converts a string in the form "%Y:%m:%d %H:%M:%S", e.g.,
|
||||
@ -414,8 +408,8 @@ namespace Exiv2 {
|
||||
*/
|
||||
EXIV2API Rational floatToRationalCast(float f);
|
||||
|
||||
// *****************************************************************************
|
||||
// template and inline definitions
|
||||
// *****************************************************************************
|
||||
// template and inline definitions
|
||||
|
||||
/*!
|
||||
@brief Find an element that matches \em key in the array \em src.
|
||||
@ -461,22 +455,21 @@ namespace Exiv2 {
|
||||
}
|
||||
@endcode
|
||||
*/
|
||||
template<typename T, typename K, int N>
|
||||
const T* find(T (&src)[N], const K& key)
|
||||
{
|
||||
template <typename T, typename K, int N>
|
||||
const T* find(T (&src)[N], const K& key) {
|
||||
const T* rc = std::find(src, src + N, key);
|
||||
return rc == src + N ? nullptr : rc;
|
||||
}
|
||||
|
||||
//! Template used in the COUNTOF macro to determine the size of an array
|
||||
template <typename T, int N> char (&sizer(T (&)[N]))[N];
|
||||
template <typename T, int N>
|
||||
char (&sizer(T (&)[N]))[N];
|
||||
//! Macro to determine the size of an array
|
||||
#define EXV_COUNTOF(a) (sizeof(Exiv2::sizer(a)))
|
||||
|
||||
//! Utility function to convert the argument of any type to a string
|
||||
template<typename T>
|
||||
std::string toString(const T& arg)
|
||||
{
|
||||
template <typename T>
|
||||
std::string toString(const T& arg) {
|
||||
std::ostringstream os;
|
||||
os << arg;
|
||||
return os.str();
|
||||
@ -493,9 +486,8 @@ namespace Exiv2 {
|
||||
@return Returns the converted value and sets \em ok to \c true if the
|
||||
conversion was successful or \c false if not.
|
||||
*/
|
||||
template<typename T>
|
||||
T stringTo(const std::string& s, bool& ok)
|
||||
{
|
||||
template <typename T>
|
||||
T stringTo(const std::string& s, bool& ok) {
|
||||
std::istringstream is(s);
|
||||
T tmp = T();
|
||||
ok = bool(is >> tmp);
|
||||
@ -512,7 +504,7 @@ namespace Exiv2 {
|
||||
and returns \c true if it is "true", "t" or "1", and \c false if it is
|
||||
"false", "f" or "0".
|
||||
*/
|
||||
template<>
|
||||
template <>
|
||||
bool stringTo<bool>(const std::string& s, bool& ok);
|
||||
|
||||
/*!
|
||||
@ -524,8 +516,7 @@ namespace Exiv2 {
|
||||
anyway...
|
||||
*/
|
||||
template <typename IntType>
|
||||
IntType gcd(IntType n, IntType m)
|
||||
{
|
||||
IntType gcd(IntType n, IntType m) {
|
||||
// Avoid repeated construction
|
||||
IntType zero(0);
|
||||
|
||||
@ -545,16 +536,14 @@ namespace Exiv2 {
|
||||
// As n and m are now positive, we can be sure that %= returns a
|
||||
// positive value (the standard guarantees this for built-in types,
|
||||
// and we require it of user-defined types).
|
||||
for(;;) {
|
||||
if(m == zero)
|
||||
return n;
|
||||
for (;;) {
|
||||
if (m == zero) return n;
|
||||
n %= m;
|
||||
if(n == zero)
|
||||
return m;
|
||||
if (n == zero) return m;
|
||||
m %= n;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Exiv2
|
||||
} // namespace Exiv2
|
||||
|
||||
#endif // #ifndef TYPES_HPP_
|
||||
#endif // #ifndef TYPES_HPP_
|
||||
|
||||
@ -32,7 +32,7 @@ namespace Exiv2 {
|
||||
class EXIV2API Value {
|
||||
public:
|
||||
//! Shortcut for a %Value auto pointer.
|
||||
typedef std::unique_ptr<Value> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<Value>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -240,7 +240,7 @@ namespace Exiv2 {
|
||||
class EXIV2API DataValue : public Value {
|
||||
public:
|
||||
//! Shortcut for a %DataValue auto pointer.
|
||||
typedef std::unique_ptr<DataValue> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<DataValue>;
|
||||
|
||||
explicit DataValue(TypeId typeId =undefined);
|
||||
|
||||
@ -294,7 +294,7 @@ namespace Exiv2 {
|
||||
DataValue* clone_() const override;
|
||||
|
||||
//! Type used to store the data.
|
||||
typedef std::vector<byte> ValueType;
|
||||
using ValueType = std::vector<byte>;
|
||||
// DATA
|
||||
ValueType value_; //!< Stores the data value
|
||||
|
||||
@ -309,7 +309,7 @@ namespace Exiv2 {
|
||||
class EXIV2API StringValueBase : public Value {
|
||||
public:
|
||||
//! Shortcut for a %StringValueBase auto pointer.
|
||||
typedef std::unique_ptr<StringValueBase> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<StringValueBase>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -378,7 +378,7 @@ namespace Exiv2 {
|
||||
class EXIV2API StringValue : public StringValueBase {
|
||||
public:
|
||||
//! Shortcut for a %StringValue auto pointer.
|
||||
typedef std::unique_ptr<StringValue> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<StringValue>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -410,7 +410,7 @@ namespace Exiv2 {
|
||||
class EXIV2API AsciiValue : public StringValueBase {
|
||||
public:
|
||||
//! Shortcut for a %AsciiValue auto pointer.
|
||||
typedef std::unique_ptr<AsciiValue> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<AsciiValue>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -498,7 +498,7 @@ namespace Exiv2 {
|
||||
}; // class CharsetInfo
|
||||
|
||||
//! Shortcut for a %CommentValue auto pointer.
|
||||
typedef std::unique_ptr<CommentValue> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<CommentValue>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -582,7 +582,7 @@ namespace Exiv2 {
|
||||
class EXIV2API XmpValue : public Value {
|
||||
public:
|
||||
//! Shortcut for a %XmpValue auto pointer.
|
||||
typedef std::unique_ptr<XmpValue> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<XmpValue>;
|
||||
|
||||
//! XMP array types.
|
||||
enum XmpArrayType { xaNone, xaAlt, xaBag, xaSeq };
|
||||
@ -652,7 +652,7 @@ namespace Exiv2 {
|
||||
class EXIV2API XmpTextValue : public XmpValue {
|
||||
public:
|
||||
//! Shortcut for a %XmpTextValue auto pointer.
|
||||
typedef std::unique_ptr<XmpTextValue> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<XmpTextValue>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -741,7 +741,7 @@ namespace Exiv2 {
|
||||
class EXIV2API XmpArrayValue : public XmpValue {
|
||||
public:
|
||||
//! Shortcut for a %XmpArrayValue auto pointer.
|
||||
typedef std::unique_ptr<XmpArrayValue> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<XmpArrayValue>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -831,7 +831,7 @@ namespace Exiv2 {
|
||||
class EXIV2API LangAltValue : public XmpValue {
|
||||
public:
|
||||
//! Shortcut for a %LangAltValue auto pointer.
|
||||
typedef std::unique_ptr<LangAltValue> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<LangAltValue>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -901,7 +901,7 @@ namespace Exiv2 {
|
||||
|
||||
public:
|
||||
//! Type used to store language alternative arrays.
|
||||
typedef std::map<std::string, std::string,LangAltValueComparator> ValueType;
|
||||
using ValueType = std::map<std::string, std::string, LangAltValueComparator>;
|
||||
// DATA
|
||||
/*!
|
||||
@brief Map to store the language alternative values. The language
|
||||
@ -920,7 +920,7 @@ namespace Exiv2 {
|
||||
class EXIV2API DateValue : public Value {
|
||||
public:
|
||||
//! Shortcut for a %DateValue auto pointer.
|
||||
typedef std::unique_ptr<DateValue> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<DateValue>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -1011,7 +1011,7 @@ namespace Exiv2 {
|
||||
class EXIV2API TimeValue : public Value {
|
||||
public:
|
||||
//! Shortcut for a %TimeValue auto pointer.
|
||||
typedef std::unique_ptr<TimeValue> UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<TimeValue>;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -1132,7 +1132,7 @@ namespace Exiv2 {
|
||||
class ValueType : public Value {
|
||||
public:
|
||||
//! Shortcut for a %ValueType\<T\> auto pointer.
|
||||
typedef std::unique_ptr<ValueType<T> > UniquePtr;
|
||||
using UniquePtr = std::unique_ptr<ValueType<T> >;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
@ -1198,11 +1198,11 @@ namespace Exiv2 {
|
||||
//@}
|
||||
|
||||
//! Container for values
|
||||
typedef std::vector<T> ValueList;
|
||||
using ValueList = std::vector<T>;
|
||||
//! Iterator type defined for convenience.
|
||||
typedef typename std::vector<T>::iterator iterator;
|
||||
using iterator = typename std::vector<T>::iterator;
|
||||
//! Const iterator type defined for convenience.
|
||||
typedef typename std::vector<T>::const_iterator const_iterator;
|
||||
using const_iterator = typename std::vector<T>::const_iterator;
|
||||
|
||||
// DATA
|
||||
/*!
|
||||
@ -1281,24 +1281,24 @@ namespace Exiv2 {
|
||||
}; // class ValueType
|
||||
|
||||
//! Unsigned short value type
|
||||
typedef ValueType<uint16_t> UShortValue;
|
||||
using UShortValue = ValueType<uint16_t>;
|
||||
//! Unsigned long value type
|
||||
typedef ValueType<uint32_t> ULongValue;
|
||||
using ULongValue = ValueType<uint32_t>;
|
||||
//! Unsigned rational value type
|
||||
typedef ValueType<URational> URationalValue;
|
||||
using URationalValue = ValueType<URational>;
|
||||
//! Signed short value type
|
||||
typedef ValueType<int16_t> ShortValue;
|
||||
using ShortValue = ValueType<int16_t>;
|
||||
//! Signed long value type
|
||||
typedef ValueType<int32_t> LongValue;
|
||||
using LongValue = ValueType<int32_t>;
|
||||
//! Signed rational value type
|
||||
typedef ValueType<Rational> RationalValue;
|
||||
using RationalValue = ValueType<Rational>;
|
||||
//! Float value type
|
||||
typedef ValueType<float> FloatValue;
|
||||
using FloatValue = ValueType<float>;
|
||||
//! Double value type
|
||||
typedef ValueType<double> DoubleValue;
|
||||
using DoubleValue = ValueType<double>;
|
||||
|
||||
// *****************************************************************************
|
||||
// free functions, template and inline definitions
|
||||
// *****************************************************************************
|
||||
// free functions, template and inline definitions
|
||||
|
||||
/*!
|
||||
@brief Read a value of type T from the data buffer.
|
||||
|
||||
@ -133,7 +133,7 @@ namespace Exiv2 {
|
||||
}; // class Xmpdatum
|
||||
|
||||
//! Container type to hold all metadata
|
||||
typedef std::vector<Xmpdatum> XmpMetadata;
|
||||
using XmpMetadata = std::vector<Xmpdatum>;
|
||||
|
||||
/*!
|
||||
@brief A container for XMP data. This is a top-level class of
|
||||
@ -151,9 +151,9 @@ namespace Exiv2 {
|
||||
XmpData() = default;
|
||||
|
||||
//! XmpMetadata iterator type
|
||||
typedef XmpMetadata::iterator iterator;
|
||||
using iterator = XmpMetadata::iterator;
|
||||
//! XmpMetadata const iterator type
|
||||
typedef XmpMetadata::const_iterator const_iterator;
|
||||
using const_iterator = XmpMetadata::const_iterator;
|
||||
|
||||
//! @name Manipulators
|
||||
//@{
|
||||
@ -305,7 +305,7 @@ namespace Exiv2 {
|
||||
@param pLockData Pointer to the pLockData passed to initialize()
|
||||
@param lockUnlock Indicates whether to lock (true) or unlock (false)
|
||||
*/
|
||||
typedef void (*XmpLockFct)(void* pLockData, bool lockUnlock);
|
||||
using XmpLockFct = void (*)(void* pLockData, bool lockUnlock);
|
||||
|
||||
/*!
|
||||
@brief Initialize the XMP Toolkit.
|
||||
|
||||
@ -269,12 +269,12 @@ namespace Jzon
|
||||
Node *GetCopy() const override;
|
||||
|
||||
private:
|
||||
typedef std::vector<NamedNodePtr> ChildList;
|
||||
ChildList children;
|
||||
};
|
||||
using ChildList = std::vector<NamedNodePtr>;
|
||||
ChildList children;
|
||||
};
|
||||
|
||||
class JzonAPI Array : public Node
|
||||
{
|
||||
class JzonAPI Array : public Node
|
||||
{
|
||||
public:
|
||||
class iterator : public std::iterator<std::input_iterator_tag, Node>
|
||||
{
|
||||
@ -336,12 +336,12 @@ namespace Jzon
|
||||
Node *GetCopy() const override;
|
||||
|
||||
private:
|
||||
typedef std::vector<Node*> ChildList;
|
||||
ChildList children;
|
||||
};
|
||||
using ChildList = std::vector<Node *>;
|
||||
ChildList children;
|
||||
};
|
||||
|
||||
class JzonAPI FileWriter
|
||||
{
|
||||
class JzonAPI FileWriter
|
||||
{
|
||||
public:
|
||||
FileWriter(std::string filename);
|
||||
~FileWriter() = default;
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
static const Exiv2::TagInfo* findTag(const Exiv2::TagInfo* pList,uint16_t tag)
|
||||
{
|
||||
while ( pList->tag_ != 0xffff && pList->tag_ != tag ) pList++;
|
||||
return pList->tag_ != 0xffff ? pList : NULL;
|
||||
return pList->tag_ != 0xffff ? pList : nullptr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -230,7 +230,7 @@ std::string Position::toExifTimeStamp(std::string& t)
|
||||
sscanf(arg,"%d%c%d%c%d%c%d%c%d%c%d",&YY,&a,&MM,&b,&DD,&c,&HH,&d,&mm,&e,&SS1);
|
||||
}
|
||||
snprintf(result,sizeof(result),"%d/1 %d/1 %d/1",HH,mm,SS1);
|
||||
return std::string(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string Position::toExifString(double d)
|
||||
@ -238,7 +238,7 @@ std::string Position::toExifString(double d)
|
||||
char result[200];
|
||||
d *= 100;
|
||||
snprintf(result, sizeof(result), "%d/100", abs(static_cast<int>(d)));
|
||||
return std::string(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string Position::toExifString(double d,bool bRational,bool bLat)
|
||||
@ -259,7 +259,7 @@ std::string Position::toExifString(double d,bool bRational,bool bLat)
|
||||
snprintf(result,sizeof(result),"%d/1 %d/1 %d/1" ,deg,min,sec);
|
||||
else
|
||||
snprintf(result,sizeof(result),"%03d%s%02d'%02d\"%s" ,deg,gDeg,min,sec,NSEW);
|
||||
return std::string(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string Position::toString() const
|
||||
@ -268,7 +268,7 @@ std::string Position::toString() const
|
||||
std::string sLat = Position::toExifString(lat_,false,true );
|
||||
std::string sLon = Position::toExifString(lon_,false,false);
|
||||
snprintf(result,sizeof(result),"%s %s %-8.3f",sLon.c_str(),sLat.c_str(),ele_);
|
||||
return std::string(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
// defaults
|
||||
|
||||
@ -375,7 +375,8 @@ namespace Exiv2 {
|
||||
if (hKernel) {
|
||||
ReplaceFileA_t pfcn_ReplaceFileA = (ReplaceFileA_t)GetProcAddress(hKernel, "ReplaceFileA");
|
||||
if (pfcn_ReplaceFileA) {
|
||||
BOOL ret = pfcn_ReplaceFileA(pf, fileIo->path().c_str(), NULL, REPLACEFILE_IGNORE_MERGE_ERRORS, NULL, NULL);
|
||||
BOOL ret = pfcn_ReplaceFileA(pf, fileIo->path().c_str(), nullptr,
|
||||
REPLACEFILE_IGNORE_MERGE_ERRORS, nullptr, nullptr);
|
||||
if (ret == 0) {
|
||||
if (GetLastError() == ERROR_FILE_NOT_FOUND) {
|
||||
fs::rename(fileIo->path().c_str(), pf);
|
||||
@ -1834,7 +1835,8 @@ namespace Exiv2 {
|
||||
size_t curlWriter(char* data, size_t size, size_t nmemb,
|
||||
std::string* writerData)
|
||||
{
|
||||
if (writerData == NULL) return 0;
|
||||
if (writerData == nullptr)
|
||||
return 0;
|
||||
writerData->append(data, size*nmemb);
|
||||
return size * nmemb;
|
||||
}
|
||||
|
||||
@ -345,11 +345,10 @@ namespace Exiv2::Internal {
|
||||
append(blob, reinterpret_cast<const byte*>(signature_), 8);
|
||||
o += 8;
|
||||
// Pad as needed
|
||||
if (pPadding_.empty() == false) {
|
||||
if (!pPadding_.empty()) {
|
||||
assert(padded_ == offset_ - o);
|
||||
append(blob, pPadding_.data(), padded_);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
for (uint32_t i = o; i < offset_; ++i) {
|
||||
blob.push_back(0);
|
||||
++o;
|
||||
@ -1063,12 +1062,11 @@ namespace Exiv2::Internal {
|
||||
// Try the undecoded tag
|
||||
encodeBasic(image, pCrwMapping, pHead);
|
||||
}
|
||||
if (buf.size() > 0) {
|
||||
if (!buf.empty()) {
|
||||
// Write the number of shorts to the beginning of buf
|
||||
buf.write_uint16(0, static_cast<uint16_t>(buf.size()), pHead->byteOrder());
|
||||
pHead->add(pCrwMapping->crwTagId_, pCrwMapping->crwDir_, std::move(buf));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
pHead->remove(pCrwMapping->crwTagId_, pCrwMapping->crwDir_);
|
||||
}
|
||||
} // CrwMap::encodeArray
|
||||
@ -1154,10 +1152,9 @@ namespace Exiv2::Internal {
|
||||
|
||||
ExifThumbC exifThumb(image.exifData());
|
||||
DataBuf buf = exifThumb.copy();
|
||||
if (buf.size() != 0) {
|
||||
if (!buf.empty()) {
|
||||
pHead->add(pCrwMapping->crwTagId_, pCrwMapping->crwDir_, std::move(buf));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
pHead->remove(pCrwMapping->crwTagId_, pCrwMapping->crwDir_);
|
||||
}
|
||||
} // CrwMap::encode0x2008
|
||||
|
||||
@ -434,7 +434,7 @@ namespace Exiv2 {
|
||||
size_t ExifThumbC::writeFile(const std::string& path) const
|
||||
{
|
||||
auto thumbnail = Thumbnail::create(exifData_);
|
||||
if (!thumbnail.get())
|
||||
if (!thumbnail)
|
||||
return 0;
|
||||
|
||||
std::string name = path + thumbnail->extension();
|
||||
@ -448,7 +448,7 @@ namespace Exiv2 {
|
||||
const char* ExifThumbC::mimeType() const
|
||||
{
|
||||
auto thumbnail = Thumbnail::create(exifData_);
|
||||
if (!thumbnail.get())
|
||||
if (!thumbnail)
|
||||
return "";
|
||||
return thumbnail->mimeType();
|
||||
}
|
||||
|
||||
@ -354,28 +354,28 @@ namespace Exiv2 {
|
||||
{
|
||||
std::string ret("unknown");
|
||||
#if defined(WIN32)
|
||||
HANDLE processHandle = NULL;
|
||||
HANDLE processHandle = nullptr;
|
||||
processHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, GetCurrentProcessId());
|
||||
if (processHandle != NULL) {
|
||||
if (processHandle) {
|
||||
TCHAR filename[MAX_PATH];
|
||||
if (GetModuleFileNameEx(processHandle, NULL, filename, MAX_PATH) != 0) {
|
||||
if (GetModuleFileNameEx(processHandle, nullptr, filename, MAX_PATH) != 0) {
|
||||
ret = filename;
|
||||
}
|
||||
CloseHandle(processHandle);
|
||||
}
|
||||
#elif defined(__APPLE__)
|
||||
#ifdef EXV_HAVE_LIBPROC_H
|
||||
#elif defined(__APPLE__)
|
||||
#ifdef EXV_HAVE_LIBPROC_H
|
||||
const int pid = getpid();
|
||||
char pathbuf[PROC_PIDPATHINFO_MAXSIZE];
|
||||
if (proc_pidpath (pid, pathbuf, sizeof(pathbuf)) > 0) {
|
||||
ret = pathbuf;
|
||||
}
|
||||
#endif
|
||||
#elif defined(__FreeBSD__)
|
||||
#endif
|
||||
#elif defined(__FreeBSD__)
|
||||
unsigned int n;
|
||||
char buffer[PATH_MAX] = {};
|
||||
struct procstat* procstat = procstat_open_sysctl();
|
||||
struct kinfo_proc* procs = procstat ? procstat_getprocs(procstat, KERN_PROC_PID, getpid(), &n) : NULL;
|
||||
struct kinfo_proc* procs = procstat ? procstat_getprocs(procstat, KERN_PROC_PID, getpid(), &n) : nullptr;
|
||||
if ( procs ) {
|
||||
procstat_getpathname(procstat, procs, buffer, PATH_MAX);
|
||||
ret = std::string(buffer);
|
||||
@ -383,7 +383,7 @@ namespace Exiv2 {
|
||||
// release resources
|
||||
if ( procs ) procstat_freeprocs(procstat, procs);
|
||||
if ( procstat ) procstat_close(procstat);
|
||||
#elif defined(__sun__)
|
||||
#elif defined(__sun__)
|
||||
// https://stackoverflow.com/questions/47472762/on-solaris-how-to-get-the-full-path-of-executable-of-running-process-programatic
|
||||
const char* proc = Internal::stringFormat("/proc/%d/path/a.out",getpid()).c_str();
|
||||
char path[500];
|
||||
@ -392,7 +392,7 @@ namespace Exiv2 {
|
||||
path[l]=0;
|
||||
ret = path;
|
||||
}
|
||||
#elif defined(__unix__)
|
||||
#elif defined(__unix__)
|
||||
// http://stackoverflow.com/questions/606041/how-do-i-get-the-path-of-a-process-in-unix-linux
|
||||
char path[500];
|
||||
ssize_t l = readlink ("/proc/self/exe", path,sizeof(path)-1);
|
||||
@ -400,7 +400,7 @@ namespace Exiv2 {
|
||||
path[l]=0;
|
||||
ret = path;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
const size_t idxLastSeparator = ret.find_last_of(EXV_SEPARATOR_STR);
|
||||
return ret.substr(0, idxLastSeparator);
|
||||
|
||||
@ -9,5 +9,5 @@ std::string string_from_unterminated(const char* data, size_t data_length)
|
||||
return {};
|
||||
}
|
||||
const size_t StringLength = strnlen(data, data_length);
|
||||
return std::string(data, StringLength);
|
||||
return {data, StringLength};
|
||||
}
|
||||
|
||||
@ -845,8 +845,7 @@ static void boxes_check(size_t b,size_t m)
|
||||
// Update Iptc data to a new UUID box
|
||||
|
||||
DataBuf rawIptc = IptcParser::encode(iptcData_);
|
||||
if (rawIptc.size() > 0)
|
||||
{
|
||||
if (!rawIptc.empty()) {
|
||||
DataBuf boxData(8 + 16 + rawIptc.size());
|
||||
ul2Data(boxDataSize, static_cast<uint32_t>(boxData.size()), Exiv2::bigEndian);
|
||||
ul2Data(boxUUIDtype, kJp2BoxTypeUuid, Exiv2::bigEndian);
|
||||
|
||||
@ -419,7 +419,7 @@ namespace Exiv2 {
|
||||
}
|
||||
|
||||
DataBuf profile(Safe::add(iccProfile_.size(), icc_size));
|
||||
if ( iccProfile_.size() ) {
|
||||
if (!iccProfile_.empty()) {
|
||||
profile.copyBytes(0, iccProfile_.c_data(), iccProfile_.size());
|
||||
}
|
||||
profile.copyBytes(iccProfile_.size(), buf.c_data(2+14), icc_size);
|
||||
@ -606,7 +606,7 @@ namespace Exiv2 {
|
||||
enforce(start <= size, kerInvalidXmpText);
|
||||
out.write(reinterpret_cast<const char*>(&xmp[start]), size - start);
|
||||
done = !bExtXMP;
|
||||
} else if (option == kpsIccProfile && signature.compare(iccId_) == 0) {
|
||||
} else if (option == kpsIccProfile && signature == iccId_) {
|
||||
// extract ICCProfile
|
||||
if (size >= 16) {
|
||||
out.write(buf.c_str(16), size - 16);
|
||||
@ -1058,7 +1058,7 @@ namespace Exiv2 {
|
||||
uint8_t pad[2];
|
||||
pad[0] = static_cast<uint8_t>(chunk + 1);
|
||||
pad[1] = static_cast<uint8_t>(chunks);
|
||||
outIo.write((const byte*)iccId_, 12);
|
||||
outIo.write(reinterpret_cast<const byte*>(iccId_), 12);
|
||||
outIo.write((const byte*)pad, 2);
|
||||
if (outIo.write(iccProfile_.c_data(chunk * chunk_size), bytes) != bytes)
|
||||
throw Error(kerImageWriteFailed);
|
||||
|
||||
@ -81,7 +81,7 @@ namespace Exiv2::Internal {
|
||||
|
||||
#if defined(_MSC_VER) || defined(__MINGW__)
|
||||
char buffer[1024];
|
||||
if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_PROFILE, NULL, 0, buffer))) {
|
||||
if (SUCCEEDED(SHGetFolderPathA(nullptr, CSIDL_PROFILE, nullptr, 0, buffer))) {
|
||||
currentPath = buffer;
|
||||
}
|
||||
#else
|
||||
|
||||
@ -240,7 +240,7 @@ namespace Exiv2::Internal {
|
||||
|
||||
if (keySize >= 21 && memcmp("Raw profile type iptc", key, 21) == 0 && pImage->iptcData().empty()) {
|
||||
DataBuf psData = readRawProfile(arr, false);
|
||||
if (psData.size() > 0) {
|
||||
if (!psData.empty()) {
|
||||
Blob iptcBlob;
|
||||
const byte* record = nullptr;
|
||||
uint32_t sizeIptc = 0;
|
||||
@ -303,7 +303,7 @@ namespace Exiv2::Internal {
|
||||
// We look if an Adobe XMP string exist.
|
||||
|
||||
if (keySize >= 17 && memcmp("XML:com.adobe.xmp", key, 17) == 0 && pImage->xmpData().empty()) {
|
||||
if (arr.size() > 0) {
|
||||
if (!arr.empty()) {
|
||||
std::string& xmpPacket = pImage->xmpPacket();
|
||||
xmpPacket.assign(arr.c_str(), arr.size());
|
||||
std::string::size_type idx = xmpPacket.find_first_of('<');
|
||||
@ -425,7 +425,7 @@ namespace Exiv2::Internal {
|
||||
}
|
||||
} while (zlibResult == Z_BUF_ERROR);
|
||||
|
||||
return std::string(arr.c_str(), arr.size());
|
||||
return {arr.c_str(), arr.size()};
|
||||
|
||||
} // PngChunk::zlibCompress
|
||||
|
||||
|
||||
@ -39,8 +39,8 @@ const unsigned char pngBlank[] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,
|
||||
|
||||
namespace
|
||||
{
|
||||
const auto nullComp = (const Exiv2::byte*)"\0\0";
|
||||
const auto typeICCP = (const Exiv2::byte*)"iCCP";
|
||||
const auto nullComp = reinterpret_cast<const Exiv2::byte*>("\0\0");
|
||||
const auto typeICCP = reinterpret_cast<const Exiv2::byte*>("iCCP");
|
||||
inline bool compare(const char* str, const Exiv2::DataBuf& buf, size_t length)
|
||||
{
|
||||
assert(strlen(str) <= length);
|
||||
@ -342,7 +342,7 @@ namespace Exiv2 {
|
||||
#if EXIV2_DEBUG_MESSAGES
|
||||
std::cerr << Exiv2::Internal::binaryToString(makeSlice(parsedBuf.c_data(), parsedBuf.size()>50?50:parsedBuf.size(),0)) << std::endl;
|
||||
#endif
|
||||
if ( parsedBuf.size() ) {
|
||||
if (!parsedBuf.empty()) {
|
||||
if ( bExif ) {
|
||||
// create memio object with the data, then print the structure
|
||||
MemIo p(parsedBuf.c_data(6), parsedBuf.size()-6);
|
||||
@ -354,7 +354,7 @@ namespace Exiv2 {
|
||||
}
|
||||
}
|
||||
|
||||
if ( bSoft && dataBuf.size() > 0) {
|
||||
if (bSoft && !dataBuf.empty()) {
|
||||
DataBuf s(dataBuf.size()+1); // allocate buffer with an extra byte
|
||||
s.copyBytes(0,dataBuf.c_data(),dataBuf.size());// copy in the dataBuf
|
||||
s.write_uint8(dataBuf.size(), 0); // nul terminate it
|
||||
@ -621,8 +621,7 @@ namespace Exiv2 {
|
||||
{
|
||||
// Update IPTC data to a new PNG chunk
|
||||
DataBuf newPsData = Photoshop::setIptcIrb(nullptr, 0, iptcData_);
|
||||
if (newPsData.size() > 0)
|
||||
{
|
||||
if (!newPsData.empty()) {
|
||||
std::string rawIptc(newPsData.c_str(), newPsData.size());
|
||||
std::string chunk = PngChunk::makeMetadataChunk(rawIptc, mdIptc);
|
||||
if (outIo.write(reinterpret_cast<const byte*>(chunk.data()), chunk.size()) != chunk.size()) {
|
||||
@ -642,7 +641,7 @@ namespace Exiv2 {
|
||||
// calculate CRC
|
||||
uLong tmp = crc32(0L, Z_NULL, 0);
|
||||
tmp = crc32(tmp, typeICCP, 4);
|
||||
tmp = crc32(tmp, (const Bytef*)profileName_.data(), nameLength);
|
||||
tmp = crc32(tmp, reinterpret_cast<const Bytef*>(profileName_.data()), nameLength);
|
||||
tmp = crc32(tmp, nullComp, 2);
|
||||
tmp = crc32(tmp, compressed.c_data(), static_cast<uint32_t>(compressed.size()));
|
||||
byte crc[4];
|
||||
@ -682,22 +681,17 @@ namespace Exiv2 {
|
||||
} else if (!strcmp(szChunk, "tEXt") || !strcmp(szChunk, "zTXt") || !strcmp(szChunk, "iTXt") ||
|
||||
!strcmp(szChunk, "iCCP")) {
|
||||
DataBuf key = PngChunk::keyTXTChunk(chunkBuf, true);
|
||||
if (key.empty() == false && (
|
||||
compare("Raw profile type exif", key, 21) ||
|
||||
compare("Raw profile type APP1", key, 21) ||
|
||||
compare("Raw profile type iptc", key, 21) ||
|
||||
compare("Raw profile type xmp", key, 20) ||
|
||||
compare("XML:com.adobe.xmp", key, 17) ||
|
||||
compare("icc", key, 3) || // see test/data/imagemagick.png
|
||||
compare("ICC", key, 3) ||
|
||||
compare("Description", key, 11)))
|
||||
{
|
||||
if (!key.empty() &&
|
||||
(compare("Raw profile type exif", key, 21) || compare("Raw profile type APP1", key, 21) ||
|
||||
compare("Raw profile type iptc", key, 21) || compare("Raw profile type xmp", key, 20) ||
|
||||
compare("XML:com.adobe.xmp", key, 17) ||
|
||||
compare("icc", key, 3) || // see test/data/imagemagick.png
|
||||
compare("ICC", key, 3) || compare("Description", key, 11))) {
|
||||
#ifdef EXIV2_DEBUG_MESSAGES
|
||||
std::cout << "Exiv2::PngImage::doWriteMetadata: strip " << szChunk
|
||||
<< " chunk (length: " << dataOffset << ")" << std::endl;
|
||||
#endif
|
||||
} else
|
||||
{
|
||||
} else {
|
||||
#ifdef EXIV2_DEBUG_MESSAGES
|
||||
std::cout << "Exiv2::PngImage::doWriteMetadata: write " << szChunk
|
||||
<< " chunk (length: " << dataOffset << ")" << std::endl;
|
||||
|
||||
@ -1129,6 +1129,6 @@ namespace Exiv2 {
|
||||
buf = loader->getData();
|
||||
}
|
||||
|
||||
return PreviewImage(properties, std::move(buf));
|
||||
return {properties, std::move(buf)};
|
||||
}
|
||||
} // namespace Exiv2
|
||||
|
||||
@ -250,7 +250,7 @@ namespace Exiv2 {
|
||||
throw Error(kerFailedToReadImageData);
|
||||
ByteOrder bo = ExifParser::decode(exifData_, rawExif.c_data(), rawExif.size());
|
||||
setByteOrder(bo);
|
||||
if (rawExif.size() > 0 && byteOrder() == invalidByteOrder) {
|
||||
if (!rawExif.empty() && byteOrder() == invalidByteOrder) {
|
||||
#ifndef SUPPRESS_WARNINGS
|
||||
EXV_WARNING << "Failed to decode Exif metadata.\n";
|
||||
#endif
|
||||
@ -579,7 +579,7 @@ namespace Exiv2 {
|
||||
|
||||
if (iptcData.count() > 0) {
|
||||
DataBuf rawIptc = IptcParser::encode(iptcData);
|
||||
if (rawIptc.size() > 0) {
|
||||
if (!rawIptc.empty()) {
|
||||
#ifdef EXIV2_DEBUG_MESSAGES
|
||||
std::cerr << std::hex << "write: resourceId: " << kPhotoshopResourceID_IPTC_NAA << "\n";
|
||||
std::cerr << std::dec << "Writing IPTC_NAA: size: " << rawIptc.size() << "\n";
|
||||
|
||||
@ -1391,7 +1391,7 @@ namespace Exiv2::Internal {
|
||||
cryptFct = sonyTagEncipher;
|
||||
}
|
||||
DataBuf buf = cryptFct(tag(), mio.mmap(), static_cast<uint32_t>(mio.size()), pRoot_);
|
||||
if ( buf.size()) {
|
||||
if (!buf.empty()) {
|
||||
mio.seek(0,Exiv2::FileIo::beg);
|
||||
mio.write(buf.c_data(), buf.size());
|
||||
}
|
||||
@ -1522,7 +1522,7 @@ namespace Exiv2::Internal {
|
||||
if (component->tag() == 0x014a) {
|
||||
// Hack: delay writing of sub-IFD image data to get the order correct
|
||||
#ifndef SUPPRESS_WARNINGS
|
||||
if (pSubIfd != 0) {
|
||||
if (pSubIfd) {
|
||||
EXV_ERROR << "Multiple sub-IFD image data tags found\n";
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -2043,7 +2043,7 @@ namespace Exiv2::Internal {
|
||||
}
|
||||
|
||||
auto rootDir = parse(pData, size, root, pHeader);
|
||||
if (nullptr != rootDir.get()) {
|
||||
if (rootDir) {
|
||||
TiffDecoder decoder(exifData,
|
||||
iptcData,
|
||||
xmpData,
|
||||
@ -2081,7 +2081,7 @@ namespace Exiv2::Internal {
|
||||
auto parsedTree = parse(pData, size, root, pHeader);
|
||||
PrimaryGroups primaryGroups;
|
||||
findPrimaryGroups(primaryGroups, parsedTree.get());
|
||||
if (nullptr != parsedTree.get()) {
|
||||
if (parsedTree) {
|
||||
// Attempt to update existing TIFF components based on metadata entries
|
||||
TiffEncoder encoder(exifData,
|
||||
iptcData,
|
||||
@ -2096,14 +2096,14 @@ namespace Exiv2::Internal {
|
||||
}
|
||||
if (writeMethod == wmIntrusive) {
|
||||
auto createdTree = TiffCreator::create(root, ifdIdNotSet);
|
||||
if (nullptr != parsedTree.get()) {
|
||||
if (parsedTree) {
|
||||
// Copy image tags from the original image to the composite
|
||||
TiffCopier copier(createdTree.get(), root, pHeader, &primaryGroups);
|
||||
parsedTree->accept(copier);
|
||||
}
|
||||
// Add entries from metadata to composite
|
||||
TiffEncoder encoder(exifData, iptcData, xmpData, createdTree.get(), parsedTree.get() == nullptr,
|
||||
&primaryGroups, pHeader, findEncoderFct);
|
||||
TiffEncoder encoder(exifData, iptcData, xmpData, createdTree.get(), parsedTree == nullptr, &primaryGroups,
|
||||
pHeader, findEncoderFct);
|
||||
encoder.add(createdTree.get(), parsedTree.get(), root);
|
||||
// Write binary representation from the composite tree
|
||||
DataBuf header = pHeader->write();
|
||||
|
||||
@ -599,7 +599,7 @@ namespace Exiv2::Internal {
|
||||
if (pos != exifData_.end()) {
|
||||
irbKey.setIdx(pos->idx());
|
||||
}
|
||||
if (rawIptc.size() != 0 && (del || pos == exifData_.end())) {
|
||||
if (!rawIptc.empty() && (del || pos == exifData_.end())) {
|
||||
auto value = Value::create(unsignedLong);
|
||||
DataBuf buf;
|
||||
if (rawIptc.size() % 4 != 0) {
|
||||
@ -622,7 +622,7 @@ namespace Exiv2::Internal {
|
||||
pos->value().copy(irbBuf.data(), invalidByteOrder);
|
||||
irbBuf = Photoshop::setIptcIrb(irbBuf.c_data(), irbBuf.size(), iptcData_);
|
||||
exifData_.erase(pos);
|
||||
if (irbBuf.size() != 0) {
|
||||
if (!irbBuf.empty()) {
|
||||
auto value = Value::create(unsignedByte);
|
||||
value->read(irbBuf.data(), static_cast<long>(irbBuf.size()), invalidByteOrder);
|
||||
Exifdatum iptcDatum(irbKey, value.get());
|
||||
@ -815,7 +815,7 @@ namespace Exiv2::Internal {
|
||||
if (cryptFct != nullptr) {
|
||||
const byte* pData = object->pData();
|
||||
DataBuf buf = cryptFct(object->tag(), pData, size, pRoot_);
|
||||
if (buf.size() > 0) {
|
||||
if (!buf.empty()) {
|
||||
pData = buf.c_data();
|
||||
size = static_cast<int32_t>(buf.size());
|
||||
}
|
||||
@ -930,7 +930,7 @@ namespace Exiv2::Internal {
|
||||
std::cerr << "Writing data area for " << key << "\n";
|
||||
#endif
|
||||
DataBuf buf = object->pValue()->dataArea();
|
||||
if ( buf.size() > 0 ) {
|
||||
if (!buf.empty()) {
|
||||
memcpy(object->pDataArea_, buf.c_data(), buf.size());
|
||||
if (object->sizeDataArea_ > static_cast<size_t>(buf.size())) {
|
||||
memset(object->pDataArea_ + buf.size(),
|
||||
@ -1588,7 +1588,7 @@ namespace Exiv2::Internal {
|
||||
}
|
||||
}
|
||||
auto v = Value::create(typeId);
|
||||
enforce(v.get() != nullptr, kerCorruptedMetadata);
|
||||
enforce(v != nullptr, kerCorruptedMetadata);
|
||||
v->read(pData, size, byteOrder());
|
||||
|
||||
object->setValue(std::move(v));
|
||||
@ -1639,7 +1639,8 @@ namespace Exiv2::Internal {
|
||||
std::shared_ptr<DataBuf> buf = std::make_shared<DataBuf>(
|
||||
cryptFct(object->tag(), pData, size, pRoot_)
|
||||
);
|
||||
if (buf->size() > 0) object->setData(buf);
|
||||
if (!buf->empty())
|
||||
object->setData(buf);
|
||||
}
|
||||
|
||||
const ArrayDef* defs = object->def();
|
||||
@ -1689,7 +1690,7 @@ namespace Exiv2::Internal {
|
||||
if (bo == invalidByteOrder) bo = byteOrder();
|
||||
TypeId typeId = toTypeId(object->elDef()->tiffType_, object->tag(), object->group());
|
||||
auto v = Value::create(typeId);
|
||||
enforce(v.get() != nullptr, kerCorruptedMetadata);
|
||||
enforce(v != nullptr, kerCorruptedMetadata);
|
||||
v->read(pData, size, bo);
|
||||
|
||||
object->setValue(std::move(v));
|
||||
|
||||
@ -155,8 +155,8 @@ static std::vector<std::string> getLoadedLibraries()
|
||||
if ( isatty(STDIN_FILENO) ) {
|
||||
unsigned int n;
|
||||
struct procstat* procstat = procstat_open_sysctl();
|
||||
struct kinfo_proc* procs = procstat ? procstat_getprocs(procstat, KERN_PROC_PID, getpid(), &n) : NULL;
|
||||
struct filestat_list* files = procs ? procstat_getfiles(procstat, procs, true) : NULL;
|
||||
struct kinfo_proc* procs = procstat ? procstat_getprocs(procstat, KERN_PROC_PID, getpid(), &n) : nullptr;
|
||||
struct filestat_list* files = procs ? procstat_getfiles(procstat, procs, true) : nullptr;
|
||||
if ( files ) {
|
||||
filestat* entry;
|
||||
STAILQ_FOREACH(entry, files, next) {
|
||||
@ -194,7 +194,7 @@ static std::vector<std::string> getLoadedLibraries()
|
||||
}
|
||||
#endif
|
||||
if (libs.empty())
|
||||
libs.push_back("unknown");
|
||||
libs.emplace_back("unknown");
|
||||
|
||||
return libs;
|
||||
}
|
||||
|
||||
54
src/xmp.cpp
54
src/xmp.cpp
@ -570,28 +570,28 @@ namespace Exiv2 {
|
||||
pLockData_ = pLockData;
|
||||
initialized_ = SXMPMeta::Initialize();
|
||||
#ifdef EXV_ADOBE_XMPSDK
|
||||
SXMPMeta::RegisterNamespace("http://ns.adobe.com/lightroom/1.0/", "lr",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://rs.tdwg.org/dwc/index.htm", "dwc",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://purl.org/dc/terms/", "dcterms",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://www.digikam.org/ns/1.0/", "digiKam",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://www.digikam.org/ns/kipi/1.0/", "kipi",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://ns.microsoft.com/photo/1.0/", "MicrosoftPhoto",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://ns.acdsee.com/iptc/1.0/", "acdsee",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://iptc.org/std/Iptc4xmpExt/2008-02-29/", "iptcExt",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://ns.useplus.org/ldf/xmp/1.0/", "plus",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://ns.iview-multimedia.com/mediapro/1.0/", "mediapro",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://ns.microsoft.com/expressionmedia/1.0/", "expressionmedia",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://ns.microsoft.com/photo/1.2/", "MP",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://ns.microsoft.com/photo/1.2/t/RegionInfo#", "MPRI",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://ns.microsoft.com/photo/1.2/t/Region#", "MPReg",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://ns.google.com/photos/1.0/panorama/", "GPano",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://www.metadataworkinggroup.com/schemas/regions/", "mwg-rs",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://www.metadataworkinggroup.com/schemas/keywords/", "mwg-kw",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://ns.adobe.com/xmp/sType/Area#", "stArea",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://cipa.jp/exif/1.0/", "exifEX",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://ns.adobe.com/camera-raw-saved-settings/1.0/", "crss",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://www.audio/", "audio",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://www.video/", "video",NULL);
|
||||
SXMPMeta::RegisterNamespace("http://ns.adobe.com/lightroom/1.0/", "lr", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://rs.tdwg.org/dwc/index.htm", "dwc", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://purl.org/dc/terms/", "dcterms", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://www.digikam.org/ns/1.0/", "digiKam", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://www.digikam.org/ns/kipi/1.0/", "kipi", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://ns.microsoft.com/photo/1.0/", "MicrosoftPhoto", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://ns.acdsee.com/iptc/1.0/", "acdsee", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://iptc.org/std/Iptc4xmpExt/2008-02-29/", "iptcExt", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://ns.useplus.org/ldf/xmp/1.0/", "plus", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://ns.iview-multimedia.com/mediapro/1.0/", "mediapro", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://ns.microsoft.com/expressionmedia/1.0/", "expressionmedia", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://ns.microsoft.com/photo/1.2/", "MP", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://ns.microsoft.com/photo/1.2/t/RegionInfo#", "MPRI", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://ns.microsoft.com/photo/1.2/t/Region#", "MPReg", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://ns.google.com/photos/1.0/panorama/", "GPano", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://www.metadataworkinggroup.com/schemas/regions/", "mwg-rs", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://www.metadataworkinggroup.com/schemas/keywords/", "mwg-kw", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://ns.adobe.com/xmp/sType/Area#", "stArea", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://cipa.jp/exif/1.0/", "exifEX", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://ns.adobe.com/camera-raw-saved-settings/1.0/", "crss", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://www.audio/", "audio", nullptr);
|
||||
SXMPMeta::RegisterNamespace("http://www.video/", "video", nullptr);
|
||||
#else
|
||||
SXMPMeta::RegisterNamespace("http://ns.adobe.com/lightroom/1.0/", "lr");
|
||||
SXMPMeta::RegisterNamespace("http://rs.tdwg.org/dwc/index.htm", "dwc");
|
||||
@ -700,7 +700,7 @@ namespace Exiv2 {
|
||||
AutoLock autoLock(xmpLockFct_, pLockData_);
|
||||
SXMPMeta::DeleteNamespace(ns.c_str());
|
||||
#ifdef EXV_ADOBE_XMPSDK
|
||||
SXMPMeta::RegisterNamespace(ns.c_str(), prefix.c_str(),NULL);
|
||||
SXMPMeta::RegisterNamespace(ns.c_str(), prefix.c_str(), nullptr);
|
||||
#else
|
||||
SXMPMeta::RegisterNamespace(ns.c_str(), prefix.c_str());
|
||||
#endif
|
||||
@ -794,7 +794,7 @@ namespace Exiv2 {
|
||||
}
|
||||
val->value_[propValue] = text;
|
||||
}
|
||||
xmpData.add(*key.get(), val.get());
|
||||
xmpData.add(*key, val.get());
|
||||
continue;
|
||||
}
|
||||
if ( XMP_PropIsArray(opt)
|
||||
@ -825,7 +825,7 @@ namespace Exiv2 {
|
||||
printNode(schemaNs, propPath, propValue, opt);
|
||||
val->read(propValue);
|
||||
}
|
||||
xmpData.add(*key.get(), val.get());
|
||||
xmpData.add(*key, val.get());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -835,12 +835,12 @@ namespace Exiv2 {
|
||||
// Create a metadatum with only XMP options
|
||||
val->setXmpArrayType(xmpArrayType(opt));
|
||||
val->setXmpStruct(xmpStruct(opt));
|
||||
xmpData.add(*key.get(), val.get());
|
||||
xmpData.add(*key, val.get());
|
||||
continue;
|
||||
}
|
||||
if (XMP_PropIsSimple(opt) || XMP_PropIsQualifier(opt)) {
|
||||
val->read(propValue);
|
||||
xmpData.add(*key.get(), val.get());
|
||||
xmpData.add(*key, val.get());
|
||||
continue;
|
||||
}
|
||||
// Don't let any node go by unnoticed
|
||||
|
||||
Loading…
Reference in New Issue
Block a user