# HG changeset patch # User Matt Johnston # Date 1447948331 -28800 # Node ID 1397a677cb5c84fe1c2eda9c1baa297f3bcdbb0d # Parent b0f351edf370713f7a6fa1638d2f549dc8214dc3 lazy allocation of circbuffer diff -r b0f351edf370 -r 1397a677cb5c circbuffer.c --- 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]; }