Blame


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