dhtlog updates
[oweals/gnunet.git] / src / util / container_meta_data.c
index f39b1593055764b83fc71489c0497a6a9a796b66..039ba86ab2dfc4c26dca7a3194efced41aa99e3b 100644 (file)
@@ -169,6 +169,29 @@ GNUNET_CONTAINER_meta_data_destroy (struct GNUNET_CONTAINER_MetaData *md)
 }
 
 
+/**
+ * Remove all items in the container.
+ *
+ * @param md metadata to manipulate
+ */
+void 
+GNUNET_CONTAINER_meta_data_clear (struct GNUNET_CONTAINER_MetaData *md)
+{
+  struct MetaItem *item;
+
+  if (md == NULL)
+    return;
+  while (NULL != (item = md->items))
+    {
+      md->items = item->next;
+      meta_item_free (item);
+    }
+  GNUNET_free_non_null (md->sbuf);
+  memset (md, 0, sizeof (struct GNUNET_CONTAINER_MetaData));
+}
+
+
+
 /**
  * Test if two MDs are equal.  We consider them equal if
  * the meta types, formats and content match (we do not
@@ -451,6 +474,8 @@ GNUNET_CONTAINER_meta_data_iterate (const struct
 {
   struct MetaItem *pos;
 
+  if (md == NULL)
+    return 0;
   if (iter == NULL)
     return md->item_count;
   pos = md->items;
@@ -486,6 +511,8 @@ GNUNET_CONTAINER_meta_data_get_by_type (const struct GNUNET_CONTAINER_MetaData
 {
   struct MetaItem *pos;
 
+  if (md == NULL)
+    return NULL;
   pos = md->items;
   while (NULL != pos)
     {
@@ -519,6 +546,8 @@ GNUNET_CONTAINER_meta_data_get_first_by_types (const struct
   va_list args;
   enum EXTRACTOR_MetaType type;
 
+  if (md == NULL)
+    return NULL;
   ret = NULL;
   va_start (args, md);
   while (1)
@@ -551,11 +580,14 @@ GNUNET_CONTAINER_meta_data_get_thumbnail (const struct
   struct MetaItem *pos;
   struct MetaItem *match;
 
+  if (md == NULL)
+    return 0;
   match = NULL;
   pos = md->items;
   while (NULL != pos)
-    {
-      if ( (0 == strncasecmp ("image/", pos->mime_type,
+    {      
+      if ( (NULL != pos->mime_type) && 
+          (0 == strncasecmp ("image/", pos->mime_type,
                              strlen("image/"))) &&
           (pos->format == EXTRACTOR_METAFORMAT_BINARY) )
        {