// HandleRead handles a read request assuming that data is the entire file content. // It adjusts the amount returned in resp according to req.Offset and req.Size. func HandleRead(req *fuse.ReadRequest, resp *fuse.ReadResponse, data []byte) { if req.Offset >= int64(len(data)) { data = nil } else { data = data[req.Offset:] } if len(data) > req.Size { data = data[:req.Size] } n := copy(resp.Data[:req.Size], data) resp.Data = resp.Data[:n] }
func (s staticFileNode) Read(req *fuse.ReadRequest, res *fuse.ReadResponse, intr fusefs.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 fs.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 fs.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 fusefs.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 (benchFile) Read(req *fuse.ReadRequest, resp *fuse.ReadResponse, intr fs.Intr) fuse.Error { resp.Data = resp.Data[:cap(resp.Data)] return nil }