提交 37321196 创建 作者: rsc's avatar rsc

oops - broke circular buffer

上级 71d5bf4d
...@@ -219,7 +219,7 @@ console_intr(int (*getc)(void)) ...@@ -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) ...@@ -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) ...@@ -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);
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论