func (d *Dir) Create(ctx context.Context, req *fuse.CreateRequest, resp *fuse.CreateResponse) (fs.Node, fs.Handle, error) { d.Lock() defer d.Unlock() log.Printf("(*Dir) Create, name=%s", req.Name) if exists := d.exists(req.Name); exists { log.Println("Create open ERR: EEXIST") return nil, nil, fuse.EEXIST } path := filepath.Join(d.path, req.Name) fHandler, err := os.OpenFile(path, int(req.Flags), req.Mode) if err != nil { log.Println("Create open ERR: ", err) return nil, nil, err } n := d.fs.newFile(path, req.Mode) n.fs = d.fs n.handler = fHandler resp.Attr = n.attr return n, n, nil }
// Creates a regular file in dir with the attributes supplied in req func (dir *Directory) Create(req *fuse.CreateRequest, resp *fuse.CreateResponse, intr fs.Intr) (fs.Node, fs.Handle, fuse.Error) { if strings.Contains(req.Name, "@") { return nil, nil, fuse.EPERM } filesystem.Lock(dir) defer filesystem.Unlock(dir) util.P_out(req.String()) rval := new(File) rval.InitFile(req.Name, req.Mode, dir) rval.Attrs.Gid = req.Gid rval.Attrs.Uid = req.Uid dir.setChild(rval) resp.Attr = rval.Attr() resp.Node = fuse.NodeID(rval.Attr().Inode) rval.dirty = true dir.dirty = true return rval, rval, nil }