$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;
