diff src/pipe.c @ 37:fb3e5a2f76c1

fix
author mir3636
date Fri, 22 Feb 2019 22:36:17 +0900
parents d4e5846ddb48
children
line wrap: on
line diff
--- a/src/pipe.c	Fri Feb 22 22:15:33 2019 +0900
+++ b/src/pipe.c	Fri Feb 22 22:36:17 2019 +0900
@@ -119,6 +119,7 @@
 __code cbc_piperead3(){
     struct pipe *p = proc->cbc_arg.cbc_console_arg.p;
     int i = proc->cbc_arg.cbc_console_arg.i;
+    __code(*next)(int ret) = proc->cbc_arg.cbc_console_arg.next;
     release(&p->lock);
 
     goto next(i);
@@ -129,10 +130,7 @@
     int n = proc->cbc_arg.cbc_console_arg.n;
     struct pipe *p = proc->cbc_arg.cbc_console_arg.p;
     char *addr = proc->cbc_arg.cbc_console_arg.addr;
-    if (i < n) {
-        if(p->nread == p->nwrite) {
-            break;
-        }
+    if (i < n && !(p->nread == p->nwrite)) {
         addr[i] = p->data[p->nread++ % PIPESIZE];
         i ++;
         proc->cbc_arg.cbc_console_arg.i = i;
@@ -146,6 +144,7 @@
 
 __code cbc_piperead1(){
     struct pipe *p = proc->cbc_arg.cbc_console_arg.p;
+    __code(*next)(int ret) = proc->cbc_arg.cbc_console_arg.next;
     if (p->nread == p->nwrite && p->writeopen){
         if(proc->killed){
             release(&p->lock);
@@ -166,6 +165,7 @@
     proc->cbc_arg.cbc_console_arg.n = n;
     proc->cbc_arg.cbc_console_arg.p = p;
     proc->cbc_arg.cbc_console_arg.addr = addr;
+    proc->cbc_arg.cbc_console_arg.next = next;
     goto cbc_piperead1();
 }