Mercurial > dropbear
diff circbuffer.c @ 1167:1397a677cb5c
lazy allocation of circbuffer
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Thu, 19 Nov 2015 23:52:11 +0800 |
parents | acf444bcb115 |
children | 06d52bcb8094 |
line wrap: on
line diff
--- a/circbuffer.c Thu Nov 19 22:39:32 2015 +0800 +++ b/circbuffer.c Thu Nov 19 23:52:11 2015 +0800 @@ -37,9 +37,8 @@ } cbuf = (circbuffer*)m_malloc(sizeof(circbuffer)); - if (size > 0) { - cbuf->data = (unsigned char*)m_malloc(size); - } + /* data is malloced on first write */ + cbuf->data = NULL; cbuf->used = 0; cbuf->readpos = 0; cbuf->writepos = 0; @@ -50,8 +49,10 @@ void cbuf_free(circbuffer * cbuf) { - m_burn(cbuf->data, cbuf->size); - m_free(cbuf->data); + if (cbuf->data) { + m_burn(cbuf->data, cbuf->size); + m_free(cbuf->data); + } m_free(cbuf); } @@ -106,6 +107,11 @@ dropbear_exit("Bad cbuf write"); } + if (!cbuf->data) { + /* lazy allocation */ + cbuf->data = (unsigned char*)m_malloc(cbuf->size); + } + return &cbuf->data[cbuf->writepos]; }