// Removes the inode described by req.Header.Node (doubles as rmdir) // Nota bene: this simply moves files into the Google Drive "Trash", it does not // delete them permanently. // Nota bene: there is no check preventing the removal of a directory which // contains files. func (sc *serveConn) remove(req *fuse.RemoveRequest) { if *readOnly { req.RespondError(fuse.EPERM) return } // TODO: if allow_other, require uid == invoking uid to allow writes // TODO: consider disallowing deletion of directories with contents.. but what error? pInode := uint64(req.Header.Node) parent, err := sc.db.FileByInode(pInode) if err != nil { debug.Printf("failed to get parent file: %v", err) req.RespondError(fuse.EIO) return } for _, cInode := range parent.Children { child, err := sc.db.FileByInode(cInode) if err != nil { debug.Printf("failed to get child file: %v", err) } if child.Title == req.Name { sc.service.Files.Delete(child.Id).Do() sc.db.RemoveFileById(child.Id, nil) req.Respond() return } } req.RespondError(fuse.ENOENT) }