aboutsummaryrefslogtreecommitdiffstats
path: root/prog/encoding.go
diff options
context:
space:
mode:
Diffstat (limited to 'prog/encoding.go')
-rw-r--r--prog/encoding.go12
1 files changed, 12 insertions, 0 deletions
diff --git a/prog/encoding.go b/prog/encoding.go
index 936e896a1..95e312662 100644
--- a/prog/encoding.go
+++ b/prog/encoding.go
@@ -287,6 +287,12 @@ func (target *Target) parseArg(typ Type, p *parser, vars map[string]Arg) (Arg, e
if err != nil {
return nil, fmt.Errorf("data arg has bad value '%v'", val)
}
+ if !typ.Varlen() {
+ if diff := int(typ.Size()) - len(data); diff > 0 {
+ data = append(data, make([]byte, diff)...)
+ }
+ data = data[:typ.Size()]
+ }
arg = MakeDataArg(typ, data)
case '{':
t1, ok := typ.(*StructType)
@@ -336,6 +342,12 @@ func (target *Target) parseArg(typ Type, p *parser, vars map[string]Arg) (Arg, e
}
}
p.Parse(']')
+ if t1.Kind == ArrayRangeLen && t1.RangeBegin == t1.RangeEnd {
+ for uint64(len(inner)) < t1.RangeBegin {
+ inner = append(inner, defaultArg(t1.Type))
+ }
+ inner = inner[:t1.RangeBegin]
+ }
arg = MakeGroupArg(typ, inner)
case '@':
t1, ok := typ.(*UnionType)