head 1.2; access; symbols pkgsrc-2013Q2:1.2.0.8 pkgsrc-2013Q2-base:1.2 pkgsrc-2012Q4:1.2.0.6 pkgsrc-2012Q4-base:1.2 pkgsrc-2011Q4:1.2.0.4 pkgsrc-2011Q4-base:1.2 pkgsrc-2011Q2:1.2.0.2 pkgsrc-2011Q2-base:1.2 pkgsrc-2010Q4:1.1.0.2 pkgsrc-2010Q4-base:1.1; locks; strict; comment @# @; 1.2 date 2011.01.12.18.46.36; author drochner; state dead; branches; next 1.1; 1.1 date 2010.12.03.16.51.04; author drochner; state Exp; branches; next ; desc @@ 1.2 log @update to 0.3.0 changes: -bugfixes -adaption to exiv2-0.21 API @ text @$NetBSD: patch-ad,v 1.1 2010/12/03 16:51:04 drochner Exp $ --- gexiv2/gexiv2-metadata-iptc.cpp.orig 2010-09-10 21:52:54.000000000 +0000 +++ gexiv2/gexiv2-metadata-iptc.cpp @@@@ -23,7 +23,7 @@@@ gboolean gexiv2_metadata_has_iptc (GExiv g_return_val_if_fail(GEXIV2_IS_METADATA (self), FALSE); g_return_val_if_fail(self->priv->image.get() != NULL, FALSE); - return ! (self->priv->image->iptcData().empty ()); + return ! (self->priv->image->iptcData().empty()); } gboolean gexiv2_metadata_has_iptc_tag(GExiv2Metadata *self, const gchar* tag) { @@@@ -34,7 +34,7 @@@@ gboolean gexiv2_metadata_has_iptc_tag(GE Exiv2::IptcData &iptc_data = self->priv->image->iptcData(); for (Exiv2::IptcData::iterator it = iptc_data.begin(); it != iptc_data.end(); ++it) { - if (g_ascii_strcasecmp(tag, it->key().c_str()) == 0) + if (it->count() > 0 && g_ascii_strcasecmp(tag, it->key().c_str()) == 0) return true; } @@@@ -52,7 +52,7 @@@@ gboolean gexiv2_metadata_clear_iptc_tag( Exiv2::IptcData::iterator it = iptc_data.begin(); while (it != iptc_data.end()) { - if (g_ascii_strcasecmp(tag, it->key().c_str()) == 0) { + if (it->count() > 0 && g_ascii_strcasecmp(tag, it->key().c_str()) == 0) { it = iptc_data.erase(it); erased = true; } else { @@@@ -84,8 +84,10 @@@@ gchar** gexiv2_metadata_get_iptc_tags (G gint count = 0; for (Exiv2::IptcData::iterator it = iptc_data.begin(); it != iptc_data.end(); ++it) { - list = g_slist_prepend (list, g_strdup (it->key ().c_str ())); - count = count + 1; + if (it->count() > 0) { + list = g_slist_prepend (list, g_strdup (it->key ().c_str ())); + count++; + } } data = g_new (gchar*, count + 1); @@@@ -98,7 +100,6 @@@@ gchar** gexiv2_metadata_get_iptc_tags (G return data; } - gchar* gexiv2_metadata_get_iptc_tag_string (GExiv2Metadata *self, const gchar* tag) { g_return_val_if_fail(GEXIV2_IS_METADATA (self), NULL); g_return_val_if_fail(tag != NULL, NULL); @@@@ -108,7 +109,10 @@@@ gchar* gexiv2_metadata_get_iptc_tag_stri try { Exiv2::IptcData::iterator it = iptc_data.findKey(Exiv2::IptcKey(tag)); - if (it != iptc_data.end ()) + while (it != iptc_data.end() && it->count() == 0) + it++; + + if (it != iptc_data.end()) return g_strdup (it->toString ().c_str ()); } catch (Exiv2::Error& e) { LOG_ERROR(e); @@@@ -126,7 +130,10 @@@@ gchar* gexiv2_metadata_get_iptc_tag_inte try { Exiv2::IptcData::iterator it = iptc_data.findKey(Exiv2::IptcKey(tag)); - if (it != iptc_data.end ()) { + while (it != iptc_data.end() && it->count() == 0) + it++; + + if (it != iptc_data.end()) { std::ostringstream os; it->write (os); @@@@ -172,9 +179,9 @@@@ gchar** gexiv2_metadata_get_iptc_tag_mul try { Exiv2::IptcKey key (tag); for (Exiv2::IptcData::iterator it = iptc_data.begin(); it != iptc_data.end(); ++it) { - if (key.key () == it->key ()) { + if (it->count() > 0 && key.key () == it->key ()) { list = g_slist_prepend (list, g_strdup (it->toString ().c_str ())); - count ++; + count++; } } @@@@ -207,7 +214,7 @@@@ gboolean gexiv2_metadata_set_iptc_tag_mu Exiv2::IptcKey iptc_key(tag); Exiv2::IptcData::iterator iptc_it = iptc_data.begin(); while (iptc_it != iptc_data.end()) { - if (iptc_key.key () == iptc_it->key ()) + if (iptc_it->count() > 0 && iptc_key.key () == iptc_it->key ()) iptc_it = iptc_data.erase (iptc_it); else ++iptc_it; @ 1.1 log @add patch from upstream (trac changeset 2260) to fix crash when importing photos with weird Exif tags (upstream ticket #2514) bump PKGREVISION @ text @d1 1 a1 1 $NetBSD$ @