int
GNUNET_BIO_read_close (struct GNUNET_BIO_ReadHandle *h, char **emsg)
{
- *emsg = h->emsg;
+ int err;
+
+ err = (NULL == h->emsg) ? GNUNET_OK : GNUNET_SYSERR;
+ if (emsg != NULL)
+ *emsg = h->emsg;
+ else
+ GNUNET_free_non_null (h->emsg);
GNUNET_DISK_file_close (h->fd);
GNUNET_free (h);
- return (NULL == *emsg) ? GNUNET_OK : GNUNET_SYSERR;
+ return err;
}
uint32_t big;
if (GNUNET_OK != GNUNET_BIO_read_int32 (h, &big))
- return GNUNET_SYSERR;
+ {
+ GNUNET_free_non_null (h->emsg);
+ GNUNET_asprintf (&h->emsg,
+ _("Error reading length of string `%s'"),
+ what);
+ return GNUNET_SYSERR;
+ }
if (big == 0)
{
*result = NULL;
if (GNUNET_BIO_read_int32 (h, (int32_t *) &size) != GNUNET_OK)
return GNUNET_SYSERR;
+ if (size == 0)
+ {
+ *result = NULL;
+ return GNUNET_OK;
+ }
if (size > MAX_META_DATA)
{
GNUNET_asprintf (&h->emsg,
{
ssize_t size;
char *buf;
-
+
+ if (m == NULL)
+ return GNUNET_BIO_write_int32 (h, 0);
buf = NULL;
size = GNUNET_CONTAINER_meta_data_serialize (m,
&buf,