+
+ // if packet doesn't fit, expand buffer
+ if(buf->outbufp && nreal > buf->outbuflen - buf->outpos)
+ {
+ size_t newsize = 1;
+ while(nreal + buf->outpos > newsize)
+ newsize <<= 1;
+
+ {
+ char *newbuf = d0_malloc(newsize);
+ if(buf->outbuf)
+ {
+ memcpy(newbuf, buf->outbuf, buf->outbuflen);
+ d0_free(buf->outbuf);
+ }
+ buf->outbuf = newbuf;
+ *buf->outbufp = newbuf;
+ buf->outbuflen = newsize;
+ }
+ }
+