func (s staticFileNode) Read(req *fuse.ReadRequest, res *fuse.ReadResponse, intr fuse.Intr) fuse.Error { if req.Offset > int64(len(s)) { return nil } s = s[req.Offset:] size := req.Size if size > len(s) { size = len(s) } res.Data = make([]byte, size) copy(res.Data, s) return nil }
func (s *stat) Read(req *fuse.ReadRequest, res *fuse.ReadResponse, intr fuse.Intr) fuse.Error { c := s.content() if req.Offset > int64(len(c)) { return nil } c = c[req.Offset:] size := req.Size if size > len(c) { size = len(c) } res.Data = make([]byte, size) copy(res.Data, c) return nil }
func (h *mutFileHandle) Read(req *fuse.ReadRequest, res *fuse.ReadResponse, intr fuse.Intr) fuse.Error { if h.tmp == nil { log.Printf("Read called on camli mutFileHandle without a tempfile set") return fuse.EIO } buf := make([]byte, req.Size) n, err := h.tmp.ReadAt(buf, req.Offset) if err == io.EOF { err = nil } if err != nil { log.Printf("mutFileHandle.Read: %v", err) return fuse.EIO } res.Data = buf[:n] return nil }
func (nr *nodeReader) Read(req *fuse.ReadRequest, res *fuse.ReadResponse, intr fuse.Intr) fuse.Error { log.Printf("CAMLI nodeReader READ on %v: %#v", nr.n.blobref, req) if req.Offset >= nr.fr.Size() { return nil } size := req.Size if int64(size)+req.Offset >= nr.fr.Size() { size -= int((int64(size) + req.Offset) - nr.fr.Size()) } buf := make([]byte, size) n, err := nr.fr.ReadAt(buf, req.Offset) if err == io.EOF { err = nil } if err != nil { log.Printf("camli read on %v at %d: %v", nr.n.blobref, req.Offset, err) return fuse.EIO } res.Data = buf[:n] return nil }
func (nr *nodeReader) Read(req *fuse.ReadRequest, res *fuse.ReadResponse, intr fuse.Intr) fuse.Error { log.Printf("CAMLI nodeReader READ on %v: %#v", nr.n.blobref, req) // TODO: this isn't incredibly efficient, creating a new // FileReader for each read chunk. We could do better here // and re-use a locked pool of readers, trying to find the one // with a current offset <= req.Offset first. fr, err := nr.ss.NewFileReader(nr.n.fs.fetcher) if err != nil { panic(err) } fr.Skip(uint64(req.Offset)) buf := make([]byte, req.Size) n, err := fr.Read(buf) if err != nil && err != io.EOF { log.Printf("camli read on %v at %d: %v", nr.n.blobref, req.Offset, err) return fuse.EIO } res.Data = buf[:n] return nil }