chiark
/
gitweb
/
~mdw
/
secnet
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
slip: Buffer management (max_start_pad) fixes
[secnet]
/
slip.c
diff --git
a/slip.c
b/slip.c
index 5eb8dbdb1239e72698eb52d0f53d108af2e2f607..9e63cb3cd6f3714c37524ca10f1e66f70c6cf9a1 100644
(file)
--- 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 };
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]) {
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;
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) {
}
} 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");
}
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);
} else if (outputchr != OUTPUT_NOTHING) {
if (st->buff->size < st->buff->len) {
buf_append_uint8(st->buff,outputchr);