diff --git a/src/gopheros/kernel/kfmt/ringbuf.go b/src/gopheros/kernel/kfmt/ringbuf.go index c377dbc..2bd5baa 100644 --- a/src/gopheros/kernel/kfmt/ringbuf.go +++ b/src/gopheros/kernel/kfmt/ringbuf.go @@ -40,9 +40,10 @@ func (rb *ringBuffer) Read(p []byte) (n int, err error) { n = pLen } - for i := 0; i < n; i, rb.rIndex = i+1, rb.rIndex+1 { - p[i] = rb.buffer[rb.rIndex] - } + copy(p, rb.buffer[rb.rIndex:rb.rIndex+n]) + rb.rIndex += n + + return n, nil case rb.rIndex > rb.wIndex: // Read up to min(len(buf) - rIndex, len(p)) bytes n = len(rb.buffer) - rb.rIndex @@ -50,17 +51,15 @@ func (rb *ringBuffer) Read(p []byte) (n int, err error) { n = pLen } - for i := 0; i < n; i, rb.rIndex = i+1, rb.rIndex+1 { - p[i] = rb.buffer[rb.rIndex] - } + copy(p, rb.buffer[rb.rIndex:rb.rIndex+n]) + rb.rIndex += n if rb.rIndex == len(rb.buffer) { rb.rIndex = 0 } + return n, nil default: // rIndex == wIndex - n, err = 0, io.EOF + return 0, io.EOF } - - return n, err }