| plan 9 kernel history: overview | file list | diff list |
2001/0128/port/qio.c (diff list | history)
| 2001/0128/sys/src/9/port/qio.c:779,793 – 2001/0203/sys/src/9/port/qio.c:779,788 (short | long | prev | next) | ||
| 2001/0128 | static int qwait(Queue *q) | |
| 1993/0526 | { | |
| 2001/0128 |
| |
| 1993/0526 | ||
| 1993/0528 | /* wait for data */ for(;;){ | |
| 1993/0728 |
| |
| 1997/0327 |
| |
| 2001/0203 | if(q->bfirst != nil) | |
| 1993/0728 | break; | |
| 1997/0327 |
| |
| 1993/0728 | ||
| 1993/0528 | if(q->state & Qclosed){ | |
| 1993/0908 | if(++q->eof > 3) | |
| 2001/0128/sys/src/9/port/qio.c:829,838 – 2001/0203/sys/src/9/port/qio.c:824,829 | ||
| 2001/0128 | static void qputback(Queue *q, Block *b) { | |
| 1993/0526 |
| |
| 2001/0128 | b->next = q->bfirst; if(q->bfirst == nil) q->blast = b; | |
| 2001/0128/sys/src/9/port/qio.c:928,936 – 2001/0203/sys/src/9/port/qio.c:919,930 | ||
| 1995/0714 | qread(Queue *q, void *vp, int len) { | |
| 2001/0128 | Block *b, *first, *next, **l; | |
| 2001/0203 | int m; uchar *s, *e, *p; | |
| 1995/0714 | ||
| 2001/0203 | s = p = vp; e = s+len; | |
| 2001/0128 | qlock(&q->rlock); if(waserror()){ qunlock(&q->rlock); | |
| 2001/0128/sys/src/9/port/qio.c:955,961 – 2001/0203/sys/src/9/port/qio.c:949,956 | ||
| 2001/0128 | /* if we get here, there's at least one block in the queue */ if(q->state & Qcoalesce){ /* when coalescing, 0 length blocks just go away */ | |
| 2001/0203 | b = q->bfirst; if(BLEN(b) <= 0){ | |
| 2001/0128 | freeb(qremove(q)); goto again; } | |
| 2001/0128/sys/src/9/port/qio.c:965,982 – 2001/0203/sys/src/9/port/qio.c:960,976 | ||
| 2001/0128 | * fit in the read. */ l = &first; | |
| 2001/0127 | m = BLEN(b); | |
| 2001/0128 |
| |
| 2001/0203 | p += m; | |
| 2001/0128 | b = q->bfirst; if(b == nil) break; m = BLEN(b); | |
| 2001/0203 | if(p+m > e) | |
| 2001/0128 | break; } } else { | |
| 2001/0128/sys/src/9/port/qio.c:985,1003 – 2001/0203/sys/src/9/port/qio.c:979,996 | ||
| 2001/0127 | ||
| 2001/0128 | /* copy to user space outside of the ilock */ iunlock(q); | |
| 2001/0203 | p = s; | |
| 2001/0128 | for(b = first; b != nil; b = next){ | |
| 2001/0127 | m = BLEN(b); | |
| 2001/0128 |
| |
| 2001/0203 | if(m > e - p){ m = e - p; | |
| 2001/0128 | memmove(p, b->rp, m); | |
| 2001/0203 | p += m; | |
| 2001/0128 | b->rp += m; break; } | |
| 2001/0127 | memmove(p, b->rp, m); | |
| 2001/0128 | p += m; | |
| 2001/0127 | freeb(b); | |
| 2001/0128/sys/src/9/port/qio.c:1017,1023 – 2001/0203/sys/src/9/port/qio.c:1010,1016 | ||
| 2001/0128 | poperror(); qunlock(&q->rlock); | |
| 2001/0203 | return p-s; | |
| 1995/0714 | } | |
| 1993/0528 | static int | |