示例#1
0
文件: common.go 项目: postfix/otaru
func otaruSetattr(fs *otaru.FileSystem, id inodedb.ID, req *bfuse.SetattrRequest) error {
	var valid otaru.ValidAttrFields
	var a otaru.Attr

	if req.Valid.Uid() {
		valid |= otaru.UidValid
		a.Uid = req.Uid
	}
	if req.Valid.Gid() {
		valid |= otaru.GidValid
		a.Gid = req.Gid
	}
	if req.Valid.Mode() {
		valid |= otaru.PermModeValid
		a.PermMode = uint16(req.Mode & os.ModePerm)
	}
	if req.Valid.Atime() {
		// otaru fs doesn't keep atime. set mtime instead.
		valid |= otaru.ModifiedTValid
		a.ModifiedT = req.Atime
	}
	if req.Valid.Mtime() {
		valid |= otaru.ModifiedTValid
		a.ModifiedT = req.Mtime
	}

	if valid != 0 {
		if err := fs.SetAttr(id, a, valid); err != nil {
			return err
		}
	}

	return nil
}