diff options
Diffstat (limited to 'pkg/iovec')
-rw-r--r-- | pkg/iovec/BUILD | 10 | ||||
-rw-r--r-- | pkg/iovec/iovec.go | 18 | ||||
-rw-r--r-- | pkg/iovec/iovec_max.go | 19 |
3 files changed, 30 insertions, 17 deletions
diff --git a/pkg/iovec/BUILD b/pkg/iovec/BUILD index b92a58556..e0c016fa3 100644 --- a/pkg/iovec/BUILD +++ b/pkg/iovec/BUILD @@ -4,12 +4,12 @@ package(licenses = ["notice"]) go_library( name = "iovec", - srcs = ["iovec.go"], - visibility = ["//:sandbox"], - deps = [ - "//pkg/abi/linux", - "@org_golang_x_sys//unix:go_default_library", + srcs = [ + "iovec.go", + "iovec_max.go", ], + visibility = ["//:sandbox"], + deps = ["@org_golang_x_sys//unix:go_default_library"], ) go_test( diff --git a/pkg/iovec/iovec.go b/pkg/iovec/iovec.go index 0789c74bf..f6791060f 100644 --- a/pkg/iovec/iovec.go +++ b/pkg/iovec/iovec.go @@ -20,12 +20,8 @@ package iovec import ( "golang.org/x/sys/unix" - "gvisor.dev/gvisor/pkg/abi/linux" ) -// MaxIovs is the maximum number of iovecs host platform can accept. -var MaxIovs = linux.UIO_MAXIOV - // Builder is a builder for slice of unix.Iovec. type Builder struct { iovec []unix.Iovec @@ -47,10 +43,10 @@ func (b *Builder) Add(buf []byte) { b.addByAppend(buf) return } - b.iovec = append(b.iovec, unix.Iovec{ - Base: &buf[0], - Len: uint64(len(buf)), - }) + + b.iovec = append(b.iovec, unix.Iovec{Base: &buf[0]}) + b.iovec[len(b.iovec)-1].SetLen(len(buf)) + // Keep the last buf if iovec is at max capacity. We will need to append to it // for later bufs. if len(b.iovec) == MaxIovs { @@ -61,10 +57,8 @@ func (b *Builder) Add(buf []byte) { func (b *Builder) addByAppend(buf []byte) { b.overflow = append(b.overflow, buf...) - b.iovec[len(b.iovec)-1] = unix.Iovec{ - Base: &b.overflow[0], - Len: uint64(len(b.overflow)), - } + b.iovec[len(b.iovec)-1] = unix.Iovec{Base: &b.overflow[0]} + b.iovec[len(b.iovec)-1].SetLen(len(b.overflow)) } // Build returns the final Iovec slice. The length of returned iovec will not diff --git a/pkg/iovec/iovec_max.go b/pkg/iovec/iovec_max.go new file mode 100644 index 000000000..724b256e8 --- /dev/null +++ b/pkg/iovec/iovec_max.go @@ -0,0 +1,19 @@ +// Copyright 2021 The gVisor Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package iovec + +// MaxIovs is the maximum number of iovecs host platform can accept. It +// corresponds to Linux's UIO_MAXIOV, which is not in the unix package. +const MaxIovs = 1024 |