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/l2.go | |
parent | a16049ef805c0c08b90885a5b7dfea7f74e51c5f (diff) |
more
Diffstat (limited to 'pkg/binstruct/l2.go')
-rw-r--r-- | pkg/binstruct/l2.go | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/pkg/binstruct/l2.go b/pkg/binstruct/l2.go index 005d686..32aa313 100644 --- a/pkg/binstruct/l2.go +++ b/pkg/binstruct/l2.go @@ -16,18 +16,20 @@ type structHandler struct { } type structField struct { + typ reflect.Type tag handler name string } func (sh structHandler) Unmarshal(dat []byte) interface{} { - val := reflect.Zero(sh.typ) + val := reflect.New(sh.typ).Elem() for i, field := range sh.fields { if field.skip { continue } - val.Field(i).Set(reflect.ValueOf(field.Unmarshal(dat[field.off:]))) + fieldVal := field.Unmarshal(dat[field.off:]) + val.Field(i).Set(reflect.ValueOf(fieldVal).Convert(field.typ)) } return val.Interface() } @@ -96,6 +98,7 @@ func genStructHandler(structInfo reflect.Type) (handler, error) { curOffset += fieldTag.siz ret.fields = append(ret.fields, structField{ + typ: fieldInfo.Type, tag: fieldTag, handler: fieldHandler, name: fieldInfo.Name, |