Blob


1 package p9p
3 import (
4 "errors"
5 "fmt"
6 )
8 // MessageRerror provides both a Go error type and message type.
9 type MessageRerror struct {
10 Ename string
11 }
13 // 9p wire errors returned by Session interface methods
14 var (
15 ErrBadattach = new9pError("unknown specifier in attach")
16 ErrBadoffset = new9pError("bad offset")
17 ErrBadcount = new9pError("bad count")
18 ErrBotch = new9pError("9P protocol botch")
19 ErrCreatenondir = new9pError("create in non-directory")
20 ErrDupfid = new9pError("duplicate fid")
21 ErrDuptag = new9pError("duplicate tag")
22 ErrIsdir = new9pError("is a directory")
23 ErrNocreate = new9pError("create prohibited")
24 ErrNomem = new9pError("out of memory")
25 ErrNoremove = new9pError("remove prohibited")
26 ErrNostat = new9pError("stat prohibited")
27 ErrNotfound = new9pError("file not found")
28 ErrNowrite = new9pError("write prohibited")
29 ErrNowstat = new9pError("wstat prohibited")
30 ErrPerm = new9pError("permission denied")
31 ErrUnknownfid = new9pError("unknown fid")
32 ErrBaddir = new9pError("bad directory in wstat")
33 ErrWalknodir = new9pError("walk in non-directory")
35 // extra errors not part of the normal protocol
37 ErrTimeout = new9pError("fcall timeout") // returned when timing out on the fcall
38 ErrUnknownTag = new9pError("unknown tag")
39 ErrUnknownMsg = new9pError("unknown message") // returned when encountering unknown message type
40 ErrUnexpectedMsg = new9pError("unexpected message") // returned when an unexpected message is encountered
41 ErrWalkLimit = new9pError("too many wnames in walk")
42 ErrClosed = errors.New("closed")
43 )
45 // new9pError returns a new 9p error ready for the wire.
46 func new9pError(s string) error {
47 return MessageRerror{Ename: s}
48 }
50 // Type ensures that 9p errors can be transparently used as a 9p message in an
51 // Fcall.
52 func (MessageRerror) Type() FcallType {
53 return Rerror
54 }
56 func (e MessageRerror) Error() string {
57 return fmt.Sprintf("9p: %v", e.Ename)
58 }