Beispiel #1
0
func (t *Fs) putCtl(datc <-chan []byte) error {
	ctl, err := nchan.String(datc)
	if err != nil {
		return fmt.Errorf("/Ctl: %s", err)
	}
	if cp, ok := t.root.(Ctler); ok {
		ok, err = cp.PutCtl(ctl)
		if ok {
			return err
		}
	}
	return t.Ctl(ctl)
}
Beispiel #2
0
func (t *Fs) putCtl(datc <-chan []byte) (int, error) {
	// no lock on root.d (race)
	if !t.NoPermCheck && (!t.root.d.CanWalk(t.ai) || !ctldir.CanWrite(t.ai)) {
		return 0, fmt.Errorf("/Ctl: %s", dbg.ErrPerm)
	}
	ctl, err := nchan.String(datc)
	if err != nil {
		return 0, fmt.Errorf("/Ctl: %s", err)
	}
	if err := t.Ctl(ctl); err != nil {
		return 0, err
	}
	return len(ctl), nil
}
Beispiel #3
0
func (fs *Cfs) putCtl(dc <-chan []byte) error {
	if !fs.NoPermCheck && !ctldir.CanWrite(fs.ai) {
		return fmt.Errorf("/Ctl: %s", dbg.ErrPerm)
	}
	ctl, err := nchan.String(dc)
	if err != nil {
		return fmt.Errorf("/Ctl: %s", err)
	}
	if strings.HasPrefix(ctl, "pass ") {
		nctl := ctl[5:]
		fs.dprintf("pass ctl <%s>\n", nctl)
		return zx.PutAll(fs.rfs, "/Ctl", nil, []byte(nctl))
	}
	fs.dprintf("ctl <%s>\n", ctl)
	if ctl == "sync" {
		fs.cache.Sync(nil)
		return nil
	}
	return fs.Ctl(ctl)
}