*
* @param md metadata to extend
* @param plugin_name name of the plugin that produced this value;
- * special values can be used (i.e. '<zlib>' for zlib being
+ * special values can be used (i.e. '<zlib>' for zlib being
* used in the main libextractor library and yielding
* meta data).
* @param type libextractor-type describing the meta data
}
pos = pos->next;
}
- if (match == NULL)
+ if ( (match == NULL) ||
+ (match->data_size == 0) )
return 0;
*thumb = GNUNET_malloc (match->data_size);
memcpy (*thumb, match->data, match->data_size);
*
* @param cls closure, our meta data container
* @param plugin_name name of the plugin that produced this value;
- * special values can be used (i.e. '<zlib>' for zlib being
+ * special values can be used (i.e. '<zlib>' for zlib being
* used in the main libextractor library and yielding
* meta data).
* @param type libextractor-type describing the meta data
if (md->sbuf != NULL)
{
/* try to use serialization cache */
- if (md->sbuf_size < max)
+ if (md->sbuf_size <= max)
{
if (NULL == *target)
*target = GNUNET_malloc (md->sbuf_size);
off -= pos->data_size;
memcpy (&mdata[off], pos->data, pos->data_size);
off -= plen;
- memcpy (&mdata[off], pos->plugin_name, plen);
+ if (pos->plugin_name != NULL)
+ memcpy (&mdata[off], pos->plugin_name, plen);
off -= mlen;
- memcpy (&mdata[off], pos->mime_type, mlen);
+ if (pos->mime_type != NULL)
+ memcpy (&mdata[off], pos->mime_type, mlen);
i++;
pos = pos->next;
}
GNUNET_assert (off == 0);
+ clen = 0;
+ cdata = NULL;
left = size;
+ pos = md->items;
for (i=0;i<md->item_count;i++)
{
comp = GNUNET_NO;
of making the API look strange. */
vmd = (struct GNUNET_CONTAINER_MetaData*) md;
hdr = GNUNET_malloc (left + sizeof (struct MetaDataHeader));
+ hdr->size = htonl (left);
hdr->entries = htonl (md->item_count);
if (GNUNET_YES == comp)
{
- hdr->size = htonl (clen);
+ GNUNET_assert (clen < left);
hdr->version = htonl (2 | HEADER_COMPRESSED);
memcpy (&hdr[1],
cdata,
}
else
{
- hdr->size = htonl (left);
hdr->version = htonl (2);
memcpy (&hdr[1],
&ent[0],
*target = (char*) hdr;
}
hdr->version = htonl (2 | HEADER_COMPRESSED);
- hdr->entries = htonl (md->item_count - i);
hdr->size = htonl (left);
- memcpy (&target[sizeof(struct MetaDataHeader)],
+ hdr->entries = htonl (md->item_count - i);
+ memcpy (&(*target)[sizeof(struct MetaDataHeader)],
cdata,
clen);
GNUNET_free (cdata);
}
else
{
- hdr = (struct MetaDataHeader*) target;
+ hdr = (struct MetaDataHeader*) *target;
if (hdr == NULL)
{
hdr = GNUNET_malloc (left + sizeof (struct MetaDataHeader));
hdr->version = htonl (2);
hdr->entries = htonl (md->item_count - i);
hdr->size = htonl (left);
- memcpy (&target[sizeof(struct MetaDataHeader)],
+ memcpy (&(*target)[sizeof(struct MetaDataHeader)],
&ent[i],
left);
GNUNET_free (ent);
if (pos->plugin_name != NULL)
left -= strlen (pos->plugin_name) + 1;
if (pos->mime_type != NULL)
- left -= strlen (pos->mime_type) + 1;
+ left -= strlen (pos->mime_type) + 1;
+ pos = pos->next;
}
GNUNET_free (ent);
/* nothing fit, only write header! */
- hdr = (struct MetaDataHeader*) target;
+ hdr = (struct MetaDataHeader*) *target;
if (hdr == NULL)
{
hdr = GNUNET_malloc (sizeof (struct MetaDataHeader));