Mercurial > hg > Members > innparusu > xv6-rpi
diff src/pipe.c @ 35:ad1d3b268e2d
update
author | mir3636 |
---|---|
date | Fri, 22 Feb 2019 16:32:51 +0900 |
parents | 83c23a36980d |
children | d4e5846ddb48 |
line wrap: on
line diff
--- a/src/pipe.c Thu Feb 14 23:33:57 2019 +0900 +++ b/src/pipe.c Fri Feb 22 16:32:51 2019 +0900 @@ -116,6 +116,34 @@ return n; } +int cbc_piperead(struct pipe *p, char *addr, int n, __code (*next)(int ret)) +{ + int i; + + acquire(&p->lock); + + while(p->nread == p->nwrite && p->writeopen){ //DOC: pipe-empty + if(proc->killed){ + release(&p->lock); + goto next(-1); + } + + sleep(&p->nread, &p->lock); //DOC: piperead-sleep*/ + } + + for(i = 0; i < n; i++){ //DOC: piperead-copy + if(p->nread == p->nwrite) { + break; + } + + addr[i] = p->data[p->nread++ % PIPESIZE]; + } + + goto cbc_wakeup(&p->nwrite); //DOC: piperead-wakeup + release(&p->lock); + + return i; +} int piperead(struct pipe *p, char *addr, int n) { int i;