From: Ian Jackson Date: Sat, 17 Apr 2021 19:35:00 +0000 (+0100) Subject: packetframe: Break out chunk_remaining X-Git-Tag: otter-0.6.0~537 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=4c7b5927afbbcf893f25523043be0d90c3e8620b;p=otter.git packetframe: Break out chunk_remaining Signed-off-by: Ian Jackson --- diff --git a/src/packetframe.rs b/src/packetframe.rs index 5a0d2e28..6b2c9976 100644 --- a/src/packetframe.rs +++ b/src/packetframe.rs @@ -182,22 +182,22 @@ impl FrameReader { } #[throws(ReadError)] - fn do_read(&mut self, buf: &mut [u8]) -> usize { - assert_ne!(buf.len(), 0); - let remaining = match self.state { + fn chunk_remaining<'s>(inner: &mut Fuse, state: &'s mut ReaderState) + -> &'s mut usize { + match *state { Idle => panic!(), FrameStart | InFrame(0) => { - self.state = InFrame(match match { + *state = InFrame(match match { let mut lbuf = [0u8;2]; let mut q = &mut lbuf[..]; match io::copy( - &mut (&mut self.inner).take(2), + &mut inner.take(2), &mut q, )? { // length of chunk header - 0 => { match self.state { FrameStart => throw!(RE::GoodEof), - InFrame(0) => throw!(badeof()), - _ => panic!(), } }, + 0 => { match state { FrameStart => throw!(RE::GoodEof), + InFrame(0) => throw!(badeof()), + _ => panic!(), } }, 1 => throw!(badeof()), 2 => (&lbuf[..]).read_u16::().unwrap(), _ => panic!(), @@ -209,13 +209,19 @@ impl FrameReader { x => Right(x as usize), } { // Left( end of frame ) Right( nonempty chunk len ) - Left(e) => { self.state = Idle; throw!(e); } + Left(e) => { *state = Idle; throw!(e); } Right(x) => x, }); - match self.state { InFrame(ref mut x) => x, _ => panic!() } + match *state { InFrame(ref mut x) => x, _ => panic!() } }, InFrame(ref mut remaining) => remaining, - }; + } + } + + #[throws(ReadError)] + fn do_read(&mut self, buf: &mut [u8]) -> usize { + assert_ne!(buf.len(), 0); + let remaining = Self::chunk_remaining(&mut self.inner, &mut self.state)?; //dbgc!(buf.len(), &remaining);