]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Prepare for mbuffer allocation by the caller.
authorJonathan Bastien-Filiatrault <joe@x2a.org>
Sat, 15 Aug 2009 18:07:15 +0000 (14:07 -0400)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Thu, 3 Jun 2010 17:38:33 +0000 (19:38 +0200)
lib/gnutls_mbuffers.c
lib/gnutls_mbuffers.h

index 34c5e6cf4e576a3edcdac57b7d58f8fb41964c4b..32980f0f09d02d904558247d89c603213deae961 100644 (file)
@@ -68,11 +68,7 @@ _gnutls_mbuffer_enqueue (mbuffer_head_st *buf, const gnutls_datum_t *msg)
 
   bufel->msg = *msg;
 
-  buf->length++;
-  buf->byte_length += msg->size;
-
-  *(buf->tail) = bufel;
-  buf->tail = &bufel->next;
+  _gnutls_mbuffer_enqueue_mbuffer(buf, bufel);
 
   return 0;
 }
@@ -96,6 +92,18 @@ _gnutls_mbuffer_enqueue_copy (mbuffer_head_st *buf, const gnutls_datum_t *msg)
   return _gnutls_mbuffer_enqueue (buf, &msg_copy);
 }
 
+void
+_gnutls_mbuffer_enqueue_mbuffer (mbuffer_head_st *buf, mbuffer_st *bufel)
+{
+  bufel->next = NULL;
+
+  buf->length++;
+  buf->byte_length += bufel->msg.size - bufel->mark;
+
+  *(buf->tail) = bufel;
+  buf->tail = &bufel->next;
+}
+
 void
 _gnutls_mbuffer_get_head (mbuffer_head_st *buf, gnutls_datum_t *msg)
 {
@@ -162,3 +170,24 @@ _gnutls_mbuffer_remove_bytes (mbuffer_head_st *buf, size_t bytes)
 
   return 0;
 }
+
+mbuffer_st *
+_gnutls_mbuffer_alloc (size_t payload_size)
+{
+  mbuffer_st * st;
+
+  st = gnutls_malloc (payload_size+sizeof (mbuffer_st));
+  if (st == NULL)
+    {
+      gnutls_assert ();
+      return NULL;
+    }
+
+  //payload points after the mbuffer_st structure
+  st->msg.data = st + sizeof (mbuffer_st);
+  st->msg.size = payload_size;
+  st->mark = 0;
+  st->next = NULL;
+
+  return st;
+}
index 910e5b1df92dc68b30bd8ddf9a97b30cf4084703..0cb7cc3e3322430dfb5cb16dfb7f274d6e24e7eb 100644 (file)
@@ -31,7 +31,9 @@ void _gnutls_mbuffer_init (mbuffer_head_st *buf);
 void _gnutls_mbuffer_clear (mbuffer_head_st *buf);
 int  _gnutls_mbuffer_enqueue (mbuffer_head_st *buf, const gnutls_datum_t *msg);
 int  _gnutls_mbuffer_enqueue_copy (mbuffer_head_st *buf, const gnutls_datum_t *msg);
+void _gnutls_mbuffer_enqueue_mbuffer (mbuffer_head_st *buf, mbuffer_st *bufel);
 void _gnutls_mbuffer_get_head (mbuffer_head_st *buf, gnutls_datum_t *msg);
 int  _gnutls_mbuffer_remove_bytes (mbuffer_head_st *buf, size_t bytes);
+mbuffer_st* _gnutls_mbuffer_alloc (size_t payload_size);
 
 #endif