Blame


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