(ctx context.Context, req *fuse.OpenRequest, res *fuse.OpenResponse)
| 364 | } |
| 365 | |
| 366 | func (n *roFileVersion) Open(ctx context.Context, req *fuse.OpenRequest, res *fuse.OpenResponse) (fs.Handle, error) { |
| 367 | roFileOpen.Incr() |
| 368 | |
| 369 | if isWriteFlags(req.Flags) { |
| 370 | return nil, fuse.EPERM |
| 371 | } |
| 372 | |
| 373 | Logger.Printf("roFile.Open: %v: content: %v dir=%v flags=%v", n.permanode, n.content, req.Dir, req.Flags) |
| 374 | r, err := schema.NewFileReader(ctx, n.fs.fetcher, n.content) |
| 375 | if err != nil { |
| 376 | roFileOpenError.Incr() |
| 377 | Logger.Printf("roFile.Open: %v", err) |
| 378 | return nil, handleEIOorEINTR(err) |
| 379 | } |
| 380 | |
| 381 | // Turn off the OpenDirectIO bit (on by default in rsc fuse server.go), |
| 382 | // else append operations don't work for some reason. |
| 383 | res.Flags &= ^fuse.OpenDirectIO |
| 384 | |
| 385 | // Read-only. |
| 386 | nod := &node{ |
| 387 | fs: n.fs, |
| 388 | blobref: n.content, |
| 389 | } |
| 390 | return &nodeReader{n: nod, fr: r}, nil |
| 391 | } |
| 392 | |
| 393 | func (n *roVersionsDir) Getxattr(ctx context.Context, req *fuse.GetxattrRequest, res *fuse.GetxattrResponse) error { |
| 394 | return n.xattr().get(req, res) |
nothing calls this directly
no test coverage detected