X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/6af9a9842664ba88d89a67b300c1b0970bcf43ee..a28d65a5e8624c92be4fc3c4a9d8a0d46d92dcc5:/slip.c diff --git a/slip.c b/slip.c index 5eb8dbd..9e63cb3 100644 --- a/slip.c +++ b/slip.c @@ -79,6 +79,9 @@ static void slip_unstuff(struct slip *st, uint8_t *buf, uint32_t l) int outputchr; enum { OUTPUT_END = 256, OUTPUT_NOTHING = 257 }; + if (!st->buff->size) + buffer_init(st->buff,calculate_max_start_pad()); + if (st->pending_esc) { st->pending_esc=False; switch(buf[i]) { @@ -115,7 +118,7 @@ static void slip_unstuff(struct slip *st, uint8_t *buf, uint32_t l) if (st->ignoring_packet) { if (outputchr == OUTPUT_END) { st->ignoring_packet=False; - buffer_init(st->buff,calculate_max_start_pad()); + st->buff->size=0; } } else { if (outputchr == OUTPUT_END) { @@ -123,7 +126,7 @@ static void slip_unstuff(struct slip *st, uint8_t *buf, uint32_t l) st->netlink_to_tunnel(&st->nl,st->buff); BUF_ALLOC(st->buff,"userv_afterpoll"); } - buffer_init(st->buff,calculate_max_start_pad()); + st->buff->size=0; } else if (outputchr != OUTPUT_NOTHING) { if (st->buff->size < st->buff->len) { buf_append_uint8(st->buff,outputchr);