X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=slip.c;h=9e63cb3cd6f3714c37524ca10f1e66f70c6cf9a1;hb=34d3bf4cdcb2d2938c3b92573f66815e4d9392ac;hp=a4529262bd1b913de9ec6d40d317cf3583d9d703;hpb=e8a0782f42c256c06905e0006ba4473b08ba3bf7;p=secnet.git diff --git a/slip.c b/slip.c index a452926..9e63cb3 100644 --- a/slip.c +++ b/slip.c @@ -7,6 +7,7 @@ #include "util.h" #include "netlink.h" #include "process.h" +#include "unaligned.h" #include #include #include @@ -78,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]) { @@ -114,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,st->nl.max_start_pad); + st->buff->size=0; } } else { if (outputchr == OUTPUT_END) { @@ -122,10 +126,10 @@ 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,st->nl.max_start_pad); + st->buff->size=0; } else if (outputchr != OUTPUT_NOTHING) { if (st->buff->size < st->buff->len) { - *(uint8_t *)buf_append(st->buff,1)=outputchr; + buf_append_uint8(st->buff,outputchr); } else { Message(M_WARNING, "userv_afterpoll: dropping overlong" " SLIP packet\n"); @@ -229,7 +233,8 @@ static void userv_userv_callback(void *sst, pid_t pid, int status) fatal("%s: userv exited unexpectedly: uncaught signal %d", st->slip.nl.name,WTERMSIG(status)); } else { - fatal("%s: userv stopped unexpectedly"); + fatal("%s: userv stopped unexpectedly", + st->slip.nl.name); } } Message(M_WARNING,"%s: userv subprocess died with status %d\n",