| 213 | var _ fusefs.HandleReader = (*nodeReader)(nil) |
| 214 | |
| 215 | func (nr *nodeReader) Read(ctx context.Context, req *fuse.ReadRequest, res *fuse.ReadResponse) error { |
| 216 | Logger.Printf("CAMLI nodeReader READ on %v: %#v", nr.n.blobref, req) |
| 217 | if req.Offset >= nr.fr.Size() { |
| 218 | return nil |
| 219 | } |
| 220 | size := req.Size |
| 221 | if int64(size)+req.Offset >= nr.fr.Size() { |
| 222 | size -= int((int64(size) + req.Offset) - nr.fr.Size()) |
| 223 | } |
| 224 | buf := make([]byte, size) |
| 225 | n, err := nr.fr.ReadAt(buf, req.Offset) |
| 226 | if err == io.EOF { |
| 227 | err = nil |
| 228 | } |
| 229 | if err != nil { |
| 230 | Logger.Printf("camli read on %v at %d: %v", nr.n.blobref, req.Offset, err) |
| 231 | return fuse.EIO |
| 232 | } |
| 233 | res.Data = buf[:n] |
| 234 | return nil |
| 235 | } |
| 236 | |
| 237 | var _ fusefs.HandleReleaser = (*nodeReader)(nil) |
| 238 | |