package unix
import "unsafe"
const minIovec = 8
func appendBytes(vecs []Iovec , bs [][]byte ) []Iovec {
for _ , b := range bs {
var v Iovec
v .SetLen (len (b ))
if len (b ) > 0 {
v .Base = &b [0 ]
} else {
v .Base = (*byte )(unsafe .Pointer (&_zero ))
}
vecs = append (vecs , v )
}
return vecs
}
func writevRaceDetect(iovecs []Iovec , n int ) {
if !raceenabled {
return
}
for i := 0 ; n > 0 && i < len (iovecs ); i ++ {
m := min (int (iovecs [i ].Len ), n )
n -= m
if m > 0 {
raceReadRange (unsafe .Pointer (iovecs [i ].Base ), m )
}
}
}
func readvRaceDetect(iovecs []Iovec , n int , err error ) {
if !raceenabled {
return
}
for i := 0 ; n > 0 && i < len (iovecs ); i ++ {
m := min (int (iovecs [i ].Len ), n )
n -= m
if m > 0 {
raceWriteRange (unsafe .Pointer (iovecs [i ].Base ), m )
}
}
if err == nil {
raceAcquire (unsafe .Pointer (&ioSync ))
}
}
func Readv (fd int , iovs [][]byte ) (n int , err error ) {
iovecs := make ([]Iovec , 0 , minIovec )
iovecs = appendBytes (iovecs , iovs )
n , err = readv (fd , iovecs )
readvRaceDetect (iovecs , n , err )
return n , err
}
func Preadv (fd int , iovs [][]byte , offset int64 ) (n int , err error ) {
iovecs := make ([]Iovec , 0 , minIovec )
iovecs = appendBytes (iovecs , iovs )
n , err = preadv (fd , iovecs , offset )
readvRaceDetect (iovecs , n , err )
return n , err
}
func Writev (fd int , iovs [][]byte ) (n int , err error ) {
iovecs := make ([]Iovec , 0 , minIovec )
iovecs = appendBytes (iovecs , iovs )
if raceenabled {
raceReleaseMerge (unsafe .Pointer (&ioSync ))
}
n , err = writev (fd , iovecs )
writevRaceDetect (iovecs , n )
return n , err
}
func Pwritev (fd int , iovs [][]byte , offset int64 ) (n int , err error ) {
iovecs := make ([]Iovec , 0 , minIovec )
iovecs = appendBytes (iovecs , iovs )
if raceenabled {
raceReleaseMerge (unsafe .Pointer (&ioSync ))
}
n , err = pwritev (fd , iovecs , offset )
writevRaceDetect (iovecs , n )
return n , err
}
The pages are generated with Golds v0.8.4 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .