oops - broke circular buffer
This commit is contained in:
parent
71d5bf4d08
commit
37321196a4
|
@ -219,7 +219,7 @@ console_intr(int (*getc)(void))
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if(c != 0 && input.e < input.r+INPUT_BUF){
|
if(c != 0 && input.e < input.r+INPUT_BUF){
|
||||||
input.buf[input.e++] = c;
|
input.buf[input.e++ % INPUT_BUF] = c;
|
||||||
cons_putc(c);
|
cons_putc(c);
|
||||||
if(c == '\n' || c == C('D') || input.e == input.r+INPUT_BUF){
|
if(c == '\n' || c == C('D') || input.e == input.r+INPUT_BUF){
|
||||||
input.w = input.e;
|
input.w = input.e;
|
||||||
|
@ -250,7 +250,7 @@ console_read(struct inode *ip, char *dst, int n)
|
||||||
}
|
}
|
||||||
sleep(&input.r, &input.lock);
|
sleep(&input.r, &input.lock);
|
||||||
}
|
}
|
||||||
c = input.buf[input.r++];
|
c = input.buf[input.r++ % INPUT_BUF];
|
||||||
if(c == C('D')){ // EOF
|
if(c == C('D')){ // EOF
|
||||||
if(n < target){
|
if(n < target){
|
||||||
// Save ^D for next time, to make sure
|
// Save ^D for next time, to make sure
|
||||||
|
@ -263,8 +263,6 @@ console_read(struct inode *ip, char *dst, int n)
|
||||||
--n;
|
--n;
|
||||||
if(c == '\n')
|
if(c == '\n')
|
||||||
break;
|
break;
|
||||||
if(input.r >= INPUT_BUF)
|
|
||||||
input.r = 0;
|
|
||||||
}
|
}
|
||||||
release(&input.lock);
|
release(&input.lock);
|
||||||
ilock(ip);
|
ilock(ip);
|
||||||
|
|
Loading…
Reference in a new issue