diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-05-10 04:46:06 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-05-10 04:46:06 -0600 |
commit | 2744e0700ca6fe956f569d47010fd4e693fedcfa (patch) | |
tree | 17cc6eb920ece3700a10a86ed465d4a0947d32c4 /pkg/binstruct/l3.go | |
parent | a16049ef805c0c08b90885a5b7dfea7f74e51c5f (diff) |
more
Diffstat (limited to 'pkg/binstruct/l3.go')
-rw-r--r-- | pkg/binstruct/l3.go | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/pkg/binstruct/l3.go b/pkg/binstruct/l3.go index f9fb8b1..1ccaaf0 100644 --- a/pkg/binstruct/l3.go +++ b/pkg/binstruct/l3.go @@ -21,12 +21,14 @@ func getHandler(typ reflect.Type) (handler, error) { return h, nil } -func Unmarshal(dat []byte, dst interface{}) error { - _dst := reflect.ValueOf(dst) - if _dst.Kind() != reflect.Ptr { - return fmt.Errorf("not a pointer: %v", _dst.Type()) +func Unmarshal(dat []byte, dstPtr interface{}) error { + _dstPtr := reflect.ValueOf(dstPtr) + if _dstPtr.Kind() != reflect.Ptr { + return fmt.Errorf("not a pointer: %v", _dstPtr.Type()) } - handler, err := getHandler(_dst.Type().Elem()) + + dst := _dstPtr.Elem() + handler, err := getHandler(dst.Type()) if err != nil { return err } @@ -35,7 +37,7 @@ func Unmarshal(dat []byte, dst interface{}) error { handler.Size(), len(dat)) } val := handler.Unmarshal(dat[:handler.Size()]) - _dst.Elem().Set(reflect.ValueOf(val)) + dst.Set(reflect.ValueOf(val).Convert(dst.Type())) return nil } |