9 // ReaddirAll reads all the directory entries for the resource fid.
10 func ReaddirAll(session Session, fid Fid) ([]Dir, error) {
11 panic("not implemented")
14 // Readdir helps one to implement the server-side of Session.Read on
17 nextfn func() (Dir, error)
18 buf *Dir // one-item buffer
23 // NewReaddir returns a new Readdir to assist implementing server-side Readdir.
24 // The codec will be used to decode messages with Dir entries. The provided
25 // function next will be called until io.EOF is returned.
26 func NewReaddir(codec Codec, next func() (Dir, error)) *Readdir {
33 // NewFixedReaddir returns a Readdir that will returned a fixed set of
35 func NewFixedReaddir(codec Codec, dir []Dir) *Readdir {
36 dirs := make([]Dir, len(dir))
37 copy(dirs, dir) // make our own copy!
39 return NewReaddir(codec,
51 func (rd *Readdir) Read(ctx context.Context, p []byte, offset int64) (n int, err error) {
52 if rd.offset != offset {
53 return 0, ErrBadoffset
70 dp, err = rd.codec.Marshal(d)
75 if len(p)+len(dp) > cap(p) {
76 // will over fill buffer. save item and exit.
85 if err == io.EOF && len(p) > 0 {
86 // Don't let io.EOF escape if we've written to p. 9p doesn't handle
91 rd.offset += int64(len(p))