summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoranon5 <anon5clam@protonmail.com>2021-02-23 12:26:35 +0000
committeranon5 <anon5clam@protonmail.com>2021-02-23 12:26:35 +0000
commit01053f26be694cad073d2243728b7ab40365e1f3 (patch)
treead69b653d3564bde02d0bd0dfda7a52dd6d2b363
parent1c1d58d864cb769e19d1bcfb0ec1968e7bf2ee62 (diff)
downloadmt-01053f26be694cad073d2243728b7ab40365e1f3.tar.xz
Use sentinal correctly
-rw-r--r--inv.go40
1 files changed, 19 insertions, 21 deletions
diff --git a/inv.go b/inv.go
index 5113ee3..309a9bf 100644
--- a/inv.go
+++ b/inv.go
@@ -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)
+ }
+}