summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsc <rsc>2007-08-30 18:20:53 +0000
committerrsc <rsc>2007-08-30 18:20:53 +0000
commit37321196a4d2a3893422a9f628de41a8a128b47f (patch)
treee818fc01a351a35401efa07856189f747359903f
parent71d5bf4d08b3ce328fe403f464f4ec95f2d8ca29 (diff)
downloadxv6-labs-37321196a4d2a3893422a9f628de41a8a128b47f.tar.gz
xv6-labs-37321196a4d2a3893422a9f628de41a8a128b47f.tar.bz2
xv6-labs-37321196a4d2a3893422a9f628de41a8a128b47f.zip
oops - broke circular buffer
-rw-r--r--console.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/console.c b/console.c
index 236beaa..486dfe9 100644
--- a/console.c
+++ b/console.c
@@ -219,7 +219,7 @@ console_intr(int (*getc)(void))
break;
default:
if(c != 0 && input.e < input.r+INPUT_BUF){
- input.buf[input.e++] = c;
+ input.buf[input.e++ % INPUT_BUF] = c;
cons_putc(c);
if(c == '\n' || c == C('D') || input.e == input.r+INPUT_BUF){
input.w = input.e;
@@ -250,7 +250,7 @@ console_read(struct inode *ip, char *dst, int n)
}
sleep(&input.r, &input.lock);
}
- c = input.buf[input.r++];
+ c = input.buf[input.r++ % INPUT_BUF];
if(c == C('D')){ // EOF
if(n < target){
// Save ^D for next time, to make sure
@@ -263,8 +263,6 @@ console_read(struct inode *ip, char *dst, int n)
--n;
if(c == '\n')
break;
- if(input.r >= INPUT_BUF)
- input.r = 0;
}
release(&input.lock);
ilock(ip);