1*9a747e4fSDavid du Colombier #include <u.h>
2*9a747e4fSDavid du Colombier #include <libc.h>
3*9a747e4fSDavid du Colombier #include <auth.h>
4*9a747e4fSDavid du Colombier #include <fcall.h>
5*9a747e4fSDavid du Colombier #include <thread.h>
6*9a747e4fSDavid du Colombier #include <9p.h>
7*9a747e4fSDavid du Colombier
8*9a747e4fSDavid du Colombier void
dirread9p(Req * r,Dirgen * gen,void * aux)9*9a747e4fSDavid du Colombier dirread9p(Req *r, Dirgen *gen, void *aux)
10*9a747e4fSDavid du Colombier {
11*9a747e4fSDavid du Colombier int start;
12*9a747e4fSDavid du Colombier uchar *p, *ep;
13*9a747e4fSDavid du Colombier uint rv;
14*9a747e4fSDavid du Colombier Dir d;
15*9a747e4fSDavid du Colombier
16*9a747e4fSDavid du Colombier if(r->ifcall.offset == 0)
17*9a747e4fSDavid du Colombier start = 0;
18*9a747e4fSDavid du Colombier else
19*9a747e4fSDavid du Colombier start = r->fid->dirindex;
20*9a747e4fSDavid du Colombier
21*9a747e4fSDavid du Colombier p = (uchar*)r->ofcall.data;
22*9a747e4fSDavid du Colombier ep = p+r->ifcall.count;
23*9a747e4fSDavid du Colombier
24*9a747e4fSDavid du Colombier while(p < ep){
25*9a747e4fSDavid du Colombier memset(&d, 0, sizeof d);
26*9a747e4fSDavid du Colombier if((*gen)(start, &d, aux) < 0)
27*9a747e4fSDavid du Colombier break;
28*9a747e4fSDavid du Colombier rv = convD2M(&d, p, ep-p);
29*9a747e4fSDavid du Colombier free(d.name);
30*9a747e4fSDavid du Colombier free(d.muid);
31*9a747e4fSDavid du Colombier free(d.uid);
32*9a747e4fSDavid du Colombier free(d.gid);
33*9a747e4fSDavid du Colombier if(rv <= BIT16SZ)
34*9a747e4fSDavid du Colombier break;
35*9a747e4fSDavid du Colombier p += rv;
36*9a747e4fSDavid du Colombier start++;
37*9a747e4fSDavid du Colombier }
38*9a747e4fSDavid du Colombier r->fid->dirindex = start;
39*9a747e4fSDavid du Colombier r->ofcall.count = p - (uchar*)r->ofcall.data;
40*9a747e4fSDavid du Colombier }
41