From: Jonathan Bastien-Filiatrault Date: Sat, 15 Aug 2009 18:07:15 +0000 (-0400) Subject: Prepare for mbuffer allocation by the caller. X-Git-Tag: gnutls_2_11_3~319 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3404a413106394af03ceee9cf11dfd3e9c0789a3;p=thirdparty%2Fgnutls.git Prepare for mbuffer allocation by the caller. --- diff --git a/lib/gnutls_mbuffers.c b/lib/gnutls_mbuffers.c index 34c5e6cf4e..32980f0f09 100644 --- a/lib/gnutls_mbuffers.c +++ b/lib/gnutls_mbuffers.c @@ -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; +} diff --git a/lib/gnutls_mbuffers.h b/lib/gnutls_mbuffers.h index 910e5b1df9..0cb7cc3e33 100644 --- a/lib/gnutls_mbuffers.h +++ b/lib/gnutls_mbuffers.h @@ -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