diff options
author | anon5 <anon5clam@protonmail.com> | 2021-02-23 12:26:35 +0000 |
---|---|---|
committer | anon5 <anon5clam@protonmail.com> | 2021-02-23 12:26:35 +0000 |
commit | 01053f26be694cad073d2243728b7ab40365e1f3 (patch) | |
tree | ad69b653d3564bde02d0bd0dfda7a52dd6d2b363 | |
parent | 1c1d58d864cb769e19d1bcfb0ec1968e7bf2ee62 (diff) | |
download | mt-01053f26be694cad073d2243728b7ab40365e1f3.tar.xz |
Use sentinal correctly
-rw-r--r-- | inv.go | 40 |
1 files changed, 19 insertions, 21 deletions
@@ -6,15 +6,6 @@ import ( "reflect" ) -type sentinal struct { - err error -} - -func (s *sentinal) ret(err error) { - s.err = err - panic(s) -} - type Inv []NamedInvList type NamedInvList struct { @@ -46,12 +37,7 @@ func (i Inv) Serialize(w io.Writer) error { func (i *Inv) Deserialize(r io.Reader) (err error) { s := new(sentinal) - defer func() { - r := recover() - if r, ok := r.(sentinal); ok { - err = r.err - } - }() + defer s.recover(&err) old := *i *i = nil @@ -119,12 +105,7 @@ func (l InvList) Serialize(w io.Writer) error { func (i *InvList) Deserialize(r io.Reader) (err error) { s := new(sentinal) - defer func() { - r := recover() - if r, ok := r.(sentinal); ok { - err = r.err - } - }() + defer s.recover(&err) if _, err := fmt.Fscanf(r, "Width %d\n", &i.Width); err != nil { s.ret(err) @@ -190,3 +171,20 @@ func readCmdLn(r io.Reader, cmds map[string]interface{}) error { return nil } + +type sentinal struct { + err error +} + +func (s *sentinal) ret(err error) { + s.err = err + panic(s) +} + +func (s *sentinal) recover(p *error) { + if r := recover(); r == s { + *p = s.err + } else { + panic(r) + } +} |