162 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
// Copyright 2009 The Go9p Authors.  All rights reserved.
 | 
						|
// Use of this source code is governed by a BSD-style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
package go9p
 | 
						|
 | 
						|
import "fmt"
 | 
						|
 | 
						|
func permToString(perm uint32) string {
 | 
						|
	ret := ""
 | 
						|
 | 
						|
	if perm&DMDIR != 0 {
 | 
						|
		ret += "d"
 | 
						|
	}
 | 
						|
 | 
						|
	if perm&DMAPPEND != 0 {
 | 
						|
		ret += "a"
 | 
						|
	}
 | 
						|
 | 
						|
	if perm&DMAUTH != 0 {
 | 
						|
		ret += "A"
 | 
						|
	}
 | 
						|
 | 
						|
	if perm&DMEXCL != 0 {
 | 
						|
		ret += "l"
 | 
						|
	}
 | 
						|
 | 
						|
	if perm&DMTMP != 0 {
 | 
						|
		ret += "t"
 | 
						|
	}
 | 
						|
 | 
						|
	if perm&DMDEVICE != 0 {
 | 
						|
		ret += "D"
 | 
						|
	}
 | 
						|
 | 
						|
	if perm&DMSOCKET != 0 {
 | 
						|
		ret += "S"
 | 
						|
	}
 | 
						|
 | 
						|
	if perm&DMNAMEDPIPE != 0 {
 | 
						|
		ret += "P"
 | 
						|
	}
 | 
						|
 | 
						|
	if perm&DMSYMLINK != 0 {
 | 
						|
		ret += "L"
 | 
						|
	}
 | 
						|
 | 
						|
	ret += fmt.Sprintf("%o", perm&0777)
 | 
						|
	return ret
 | 
						|
}
 | 
						|
 | 
						|
func (qid *Qid) String() string {
 | 
						|
	b := ""
 | 
						|
	if qid.Type&QTDIR != 0 {
 | 
						|
		b += "d"
 | 
						|
	}
 | 
						|
	if qid.Type&QTAPPEND != 0 {
 | 
						|
		b += "a"
 | 
						|
	}
 | 
						|
	if qid.Type&QTAUTH != 0 {
 | 
						|
		b += "A"
 | 
						|
	}
 | 
						|
	if qid.Type&QTEXCL != 0 {
 | 
						|
		b += "l"
 | 
						|
	}
 | 
						|
	if qid.Type&QTTMP != 0 {
 | 
						|
		b += "t"
 | 
						|
	}
 | 
						|
	if qid.Type&QTSYMLINK != 0 {
 | 
						|
		b += "L"
 | 
						|
	}
 | 
						|
 | 
						|
	return fmt.Sprintf("(%x %x '%s')", qid.Path, qid.Version, b)
 | 
						|
}
 | 
						|
 | 
						|
func (d *Dir) String() string {
 | 
						|
	ret := fmt.Sprintf("'%s' '%s' '%s' '%s' q ", d.Name, d.Uid, d.Gid, d.Muid)
 | 
						|
	ret += d.Qid.String() + " m " + permToString(d.Mode)
 | 
						|
	ret += fmt.Sprintf(" at %d mt %d l %d t %d d %d", d.Atime, d.Mtime,
 | 
						|
		d.Length, d.Type, d.Dev)
 | 
						|
 | 
						|
	/* dotu ? */
 | 
						|
	ret += " ext " + d.Ext
 | 
						|
 | 
						|
	return ret
 | 
						|
}
 | 
						|
 | 
						|
func (fc *Fcall) String() string {
 | 
						|
	ret := ""
 | 
						|
 | 
						|
	switch fc.Type {
 | 
						|
	default:
 | 
						|
		ret = fmt.Sprintf("invalid call: %d", fc.Type)
 | 
						|
	case Tversion:
 | 
						|
		ret = fmt.Sprintf("Tversion tag %d msize %d version '%s'", fc.Tag, fc.Msize, fc.Version)
 | 
						|
	case Rversion:
 | 
						|
		ret = fmt.Sprintf("Rversion tag %d msize %d version '%s'", fc.Tag, fc.Msize, fc.Version)
 | 
						|
	case Tauth:
 | 
						|
		ret = fmt.Sprintf("Tauth tag %d afid %d uname '%s' nuname %d aname '%s'",
 | 
						|
			fc.Tag, fc.Afid, fc.Uname, fc.Unamenum, fc.Aname)
 | 
						|
	case Rauth:
 | 
						|
		ret = fmt.Sprintf("Rauth tag %d aqid %v", fc.Tag, &fc.Qid)
 | 
						|
	case Rattach:
 | 
						|
		ret = fmt.Sprintf("Rattach tag %d aqid %v", fc.Tag, &fc.Qid)
 | 
						|
	case Tattach:
 | 
						|
		ret = fmt.Sprintf("Tattach tag %d fid %d afid %d uname '%s' nuname %d aname '%s'",
 | 
						|
			fc.Tag, fc.Fid, fc.Afid, fc.Uname, fc.Unamenum, fc.Aname)
 | 
						|
	case Tflush:
 | 
						|
		ret = fmt.Sprintf("Tflush tag %d oldtag %d", fc.Tag, fc.Oldtag)
 | 
						|
	case Rerror:
 | 
						|
		ret = fmt.Sprintf("Rerror tag %d ename '%s' ecode %d", fc.Tag, fc.Error, fc.Errornum)
 | 
						|
	case Twalk:
 | 
						|
		ret = fmt.Sprintf("Twalk tag %d fid %d newfid %d ", fc.Tag, fc.Fid, fc.Newfid)
 | 
						|
		for i := 0; i < len(fc.Wname); i++ {
 | 
						|
			ret += fmt.Sprintf("%d:'%s' ", i, fc.Wname[i])
 | 
						|
		}
 | 
						|
	case Rwalk:
 | 
						|
		ret = fmt.Sprintf("Rwalk tag %d ", fc.Tag)
 | 
						|
		for i := 0; i < len(fc.Wqid); i++ {
 | 
						|
			ret += fmt.Sprintf("%v ", &fc.Wqid[i])
 | 
						|
		}
 | 
						|
	case Topen:
 | 
						|
		ret = fmt.Sprintf("Topen tag %d fid %d mode %x", fc.Tag, fc.Fid, fc.Mode)
 | 
						|
	case Ropen:
 | 
						|
		ret = fmt.Sprintf("Ropen tag %d qid %v iounit %d", fc.Tag, &fc.Qid, fc.Iounit)
 | 
						|
	case Rcreate:
 | 
						|
		ret = fmt.Sprintf("Rcreate tag %d qid %v iounit %d", fc.Tag, &fc.Qid, fc.Iounit)
 | 
						|
	case Tcreate:
 | 
						|
		ret = fmt.Sprintf("Tcreate tag %d fid %d name '%s' perm ", fc.Tag, fc.Fid, fc.Name)
 | 
						|
		ret += permToString(fc.Perm)
 | 
						|
		ret += fmt.Sprintf(" mode %x ", fc.Mode)
 | 
						|
	case Tread:
 | 
						|
		ret = fmt.Sprintf("Tread tag %d fid %d offset %d count %d", fc.Tag, fc.Fid, fc.Offset, fc.Count)
 | 
						|
	case Rread:
 | 
						|
		ret = fmt.Sprintf("Rread tag %d count %d", fc.Tag, fc.Count)
 | 
						|
	case Twrite:
 | 
						|
		ret = fmt.Sprintf("Twrite tag %d fid %d offset %d count %d", fc.Tag, fc.Fid, fc.Offset, fc.Count)
 | 
						|
	case Rwrite:
 | 
						|
		ret = fmt.Sprintf("Rwrite tag %d count %d", fc.Tag, fc.Count)
 | 
						|
	case Tclunk:
 | 
						|
		ret = fmt.Sprintf("Tclunk tag %d fid %d", fc.Tag, fc.Fid)
 | 
						|
	case Rclunk:
 | 
						|
		ret = fmt.Sprintf("Rclunk tag %d", fc.Tag)
 | 
						|
	case Tremove:
 | 
						|
		ret = fmt.Sprintf("Tremove tag %d fid %d", fc.Tag, fc.Fid)
 | 
						|
	case Tstat:
 | 
						|
		ret = fmt.Sprintf("Tstat tag %d fid %d", fc.Tag, fc.Fid)
 | 
						|
	case Rstat:
 | 
						|
		ret = fmt.Sprintf("Rstat tag %d st (%v)", fc.Tag, &fc.Dir)
 | 
						|
	case Twstat:
 | 
						|
		ret = fmt.Sprintf("Twstat tag %d fid %d st (%v)", fc.Tag, fc.Fid, &fc.Dir)
 | 
						|
	case Rflush:
 | 
						|
		ret = fmt.Sprintf("Rflush tag %d", fc.Tag)
 | 
						|
	case Rremove:
 | 
						|
		ret = fmt.Sprintf("Rremove tag %d", fc.Tag)
 | 
						|
	case Rwstat:
 | 
						|
		ret = fmt.Sprintf("Rwstat tag %d", fc.Tag)
 | 
						|
	}
 | 
						|
 | 
						|
	return ret
 | 
						|
}
 |