diff options
author | rsc <devnull@localhost> | 2004-03-21 04:33:13 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2004-03-21 04:33:13 +0000 |
commit | 2277c5d7bbe1f9595fad512d8f790708473a9bf1 (patch) | |
tree | 4d653e13906f1971d3170dba6dbe0fbf92eb48d6 /src/lib9p/dirread.c | |
parent | a770daa795754cb600ad3fab2fdd2961147006c4 (diff) | |
download | plan9port-2277c5d7bbe1f9595fad512d8f790708473a9bf1.tar.gz plan9port-2277c5d7bbe1f9595fad512d8f790708473a9bf1.tar.bz2 plan9port-2277c5d7bbe1f9595fad512d8f790708473a9bf1.zip |
Small tweaks
Lots of new code imported.
Diffstat (limited to 'src/lib9p/dirread.c')
-rw-r--r-- | src/lib9p/dirread.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/lib9p/dirread.c b/src/lib9p/dirread.c new file mode 100644 index 00000000..7fb88305 --- /dev/null +++ b/src/lib9p/dirread.c @@ -0,0 +1,40 @@ +#include <u.h> +#include <libc.h> +#include <auth.h> +#include <fcall.h> +#include <thread.h> +#include <9p.h> + +void +dirread9p(Req *r, Dirgen *gen, void *aux) +{ + int start; + uchar *p, *ep; + uint rv; + Dir d; + + if(r->ifcall.offset == 0) + start = 0; + else + start = r->fid->dirindex; + + p = (uchar*)r->ofcall.data; + ep = p+r->ifcall.count; + + while(p < ep){ + memset(&d, 0, sizeof d); + if((*gen)(start, &d, aux) < 0) + break; + rv = convD2M(&d, p, ep-p); + free(d.name); + free(d.muid); + free(d.uid); + free(d.gid); + if(rv <= BIT16SZ) + break; + p += rv; + start++; + } + r->fid->dirindex = start; + r->ofcall.count = p - (uchar*)r->ofcall.data; +} |