From 03275eb0787a1e7b1c429a509acd558fc84e2cc6 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sun, 22 Oct 2000 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2000-10-22 --- "bitsy/dev\302\265c.c" | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git "a/bitsy/dev\302\265c.c" "b/bitsy/dev\302\265c.c" index 848c3e775d688b5ccb31a5528bb09b20661c8020..049e372b9efae920ad02fb63c36fd2db0fe86f4c 100644 --- "a/bitsy/dev\302\265c.c" +++ "b/bitsy/dev\302\265c.c" @@ -78,35 +78,30 @@ int ctlr.buf[ctlr.n++] = (uchar)ch; for(;;){ - /* message hasn't started yet */ + /* message hasn't started yet? */ if(ctlr.buf[0] != SOF){ - ctlr.n = 0; - break; + p = memchr(ctlr.buf, SOF, ctlr.n); + if(p == nil){ + ctlr.n = 0; + break; + } else { + ctlr.n -= p-ctlr.buf; + memmove(ctlr.buf, p, ctlr.n); + } } - /* if it's too short, wait */ + /* whole msg? */ len = ctlr.buf[1] & 0xf; if(ctlr.n < 3 || ctlr.n < len+3) break; /* check the sum */ - ctlr.buf[0] = ~SOF; + ctlr.buf[0] = ~SOF; /* make sure we process this msg exactly once */ cksum = 0; for(i = 1; i < len+2; i++) cksum += ctlr.buf[i]; - - /* ignore bad checksums */ - if(ctlr.buf[len+2] != cksum){ - p = memchr(ctlr.buf+1, SOF, ctlr.n); - if(p == nil){ - ctlr.n = 0; - break; - } else { - ctlr.n -= p-ctlr.buf; - memmove(ctlr.buf, p, ctlr.n); - continue; - } - } + if(ctlr.buf[len+2] != cksum) + continue; /* parse resulting message */ p = ctlr.buf+2; @@ -190,6 +185,7 @@ _sendmsg(uchar id, uchar *data, int len) serialµcputs(buf, p-buf); } +/* the tsleep takes care of lost acks */ static void sendmsgwithack(uchar id, uchar *data, int len) {