diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-12-13 20:12:13 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-12-17 11:39:14 +0100 |
| commit | 8ef00507063baf3fa681bb53113cb33adda5e4d7 (patch) | |
| tree | 90f5be39889c5e064c92f16d9649627e84933820 /prog/validation.go | |
| parent | eaeccee1d7f7a3f22e842309f21e3b118bd95254 (diff) | |
prog: don't serialize output data args
Fixes #188
We now will write just ""/1000 to denote a 1000-byte output buffer.
Also we now don't store 1000-byte buffer in memory just to denote size.
Old format is still parsed.
Diffstat (limited to 'prog/validation.go')
| -rw-r--r-- | prog/validation.go | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/prog/validation.go b/prog/validation.go index e1f083b2a..d0f6d0bd2 100644 --- a/prog/validation.go +++ b/prog/validation.go @@ -68,10 +68,9 @@ func (c *Call) validate(ctx *validCtx) error { return fmt.Errorf("syscall %v: output arg '%v'/'%v' has non default value '%+v'", c.Meta.Name, a.Type().FieldName(), a.Type().Name(), a) } case *DataArg: - for _, v := range a.Data { - if v != 0 { - return fmt.Errorf("syscall %v: output arg '%v' has data", c.Meta.Name, a.Type().Name()) - } + if len(a.data) != 0 { + return fmt.Errorf("syscall %v: output arg '%v' has data", + c.Meta.Name, a.Type().Name()) } } } @@ -123,9 +122,9 @@ func (c *Call) validate(ctx *validCtx) error { case *DataArg: switch typ1.Kind { case BufferString: - if typ1.TypeSize != 0 && uint64(len(a.Data)) != typ1.TypeSize { + if typ1.TypeSize != 0 && a.Size() != typ1.TypeSize { return fmt.Errorf("syscall %v: string arg '%v' has size %v, which should be %v", - c.Meta.Name, a.Type().Name(), len(a.Data), typ1.TypeSize) + c.Meta.Name, a.Type().Name(), a.Size(), typ1.TypeSize) } } default: @@ -178,10 +177,9 @@ func (c *Call) validate(ctx *validCtx) error { } case *DataArg: typ1 := a.Type() - if !typ1.Varlen() && typ1.Size() != uint64(len(a.Data)) { + if !typ1.Varlen() && typ1.Size() != a.Size() { return fmt.Errorf("syscall %v: data arg %v has wrong size %v, want %v", - c.Meta.Name, arg.Type().Name(), - len(a.Data), typ1.Size()) + c.Meta.Name, arg.Type().Name(), a.Size(), typ1.Size()) } switch typ1 := a.Type().(type) { case *ArrayType: |
