diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/lib9p/dirread.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/lib9p/dirread.c')
-rwxr-xr-x | sys/src/lib9p/dirread.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/sys/src/lib9p/dirread.c b/sys/src/lib9p/dirread.c new file mode 100755 index 000000000..7fb883050 --- /dev/null +++ b/sys/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; +} |