MCPcopy
hub / github.com/rclone/rclone / Create

Method Create

cmd/mount2/node.go:350–384  ·  view source on GitHub ↗

Create is similar to Lookup, but should create a new child. It typically also returns a FileHandle as a reference for future reads/writes. Default is to return EROFS.

(ctx context.Context, name string, flags uint32, mode uint32, out *fuse.EntryOut)

Source from the content-addressed store, hash-verified

348// reference for future reads/writes.
349// Default is to return EROFS.
350func (n *Node) Create(ctx context.Context, name string, flags uint32, mode uint32, out *fuse.EntryOut) (node *fusefs.Inode, fh fusefs.FileHandle, fuseFlags uint32, errno syscall.Errno) {
351 defer log.Trace(n, "name=%q, flags=%#o, mode=%#o", name, flags, mode)("node=%v, fh=%v, flags=%#o, errno=%v", &node, &fh, &fuseFlags, &errno)
352 dir, ok := n.node.(*vfs.Dir)
353 if !ok {
354 return nil, nil, 0, syscall.ENOTDIR
355 }
356 // translate the fuse flags to os flags
357 osFlags := int(flags) | os.O_CREATE
358 file, err := dir.Create(name, osFlags)
359 if err != nil {
360 return nil, nil, 0, translateError(err)
361 }
362 handle, err := file.Open(osFlags)
363 if err != nil {
364 return nil, nil, 0, translateError(err)
365 }
366 fh = newFileHandle(handle, n.fsys)
367 // FIXME
368 // fh = &fusefs.WithFlags{
369 // File: fh,
370 // //FuseFlags: fuse.FOPEN_NONSEEKABLE,
371 // OpenFlags: flags,
372 // }
373
374 // Find the created node
375 vfsNode, errno := n.lookupVfsNodeInDir(name)
376 if errno != 0 {
377 return nil, nil, 0, errno
378 }
379 n.fsys.setEntryOut(vfsNode, out)
380 newNode := newNode(n.fsys, vfsNode)
381 fs.Debugf(nil, "attr=%#v", out.Attr)
382 newInode := n.NewInode(ctx, newNode, fusefs.StableAttr{Mode: out.Attr.Mode})
383 return newInode, fh, 0, 0
384}
385
386var _ = (fusefs.NodeCreater)((*Node)(nil))
387

Callers

nothing calls this directly

Implementers 2

Filevfs/file.go
Dirvfs/dir.go

Calls 9

lookupVfsNodeInDirMethod · 0.95
TraceFunction · 0.92
DebugfFunction · 0.92
newFileHandleFunction · 0.85
newNodeFunction · 0.85
setEntryOutMethod · 0.80
translateErrorFunction · 0.70
CreateMethod · 0.65
OpenMethod · 0.65

Tested by

no test coverage detected