Merge pull request #4247 from thaJeztah/bump_continuity
vendor: containerd/continuity, containerd/fifo, containerd/go-runc
This commit is contained in:
commit
f13ba8f2f2
@ -4,9 +4,9 @@ github.com/cespare/xxhash/v2 v2.1.1
|
|||||||
github.com/containerd/btrfs 153935315f4ab9be5bf03650a1341454b05efa5d
|
github.com/containerd/btrfs 153935315f4ab9be5bf03650a1341454b05efa5d
|
||||||
github.com/containerd/cgroups b4448137398923af7f4918b8b2ad8249172ca7a6
|
github.com/containerd/cgroups b4448137398923af7f4918b8b2ad8249172ca7a6
|
||||||
github.com/containerd/console v1.0.0
|
github.com/containerd/console v1.0.0
|
||||||
github.com/containerd/continuity 0ec596719c75bfd42908850990acea594b7593ac
|
github.com/containerd/continuity d3ef23f19fbb106bb73ffde425d07a9187e30745
|
||||||
github.com/containerd/fifo bda0ff6ed73c67bfb5e62bc9c697f146b7fd7f13
|
github.com/containerd/fifo f15a3290365b9d2627d189e619ab4008e0069caf
|
||||||
github.com/containerd/go-runc a5c2862aed5e6358b305b0e16bfce58e0549b1cd
|
github.com/containerd/go-runc 7016d3ce2328dd2cb1192b2076ebd565c4e8df0c
|
||||||
github.com/containerd/ttrpc v1.0.1
|
github.com/containerd/ttrpc v1.0.1
|
||||||
github.com/containerd/typeurl v1.0.1
|
github.com/containerd/typeurl v1.0.1
|
||||||
github.com/coreos/go-systemd/v22 v22.0.0
|
github.com/coreos/go-systemd/v22 v22.0.0
|
||||||
|
4
vendor/github.com/containerd/continuity/driver/driver.go
generated
vendored
4
vendor/github.com/containerd/continuity/driver/driver.go
generated
vendored
@ -138,6 +138,10 @@ func (d *driver) Lstat(p string) (os.FileInfo, error) {
|
|||||||
return os.Lstat(p)
|
return os.Lstat(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *driver) Readlink(p string) (string, error) {
|
||||||
|
return os.Readlink(p)
|
||||||
|
}
|
||||||
|
|
||||||
func (d *driver) Mkdir(p string, mode os.FileMode) error {
|
func (d *driver) Mkdir(p string, mode os.FileMode) error {
|
||||||
return os.Mkdir(p, mode)
|
return os.Mkdir(p, mode)
|
||||||
}
|
}
|
||||||
|
5
vendor/github.com/containerd/continuity/driver/driver_unix.go
generated
vendored
5
vendor/github.com/containerd/continuity/driver/driver_unix.go
generated
vendored
@ -131,8 +131,3 @@ func (d *driver) LSetxattr(path string, attrMap map[string][]byte) error {
|
|||||||
func (d *driver) DeviceInfo(fi os.FileInfo) (maj uint64, min uint64, err error) {
|
func (d *driver) DeviceInfo(fi os.FileInfo) (maj uint64, min uint64, err error) {
|
||||||
return devices.DeviceInfo(fi)
|
return devices.DeviceInfo(fi)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Readlink was forked on Windows to fix a Golang bug, use the "os" package here
|
|
||||||
func (d *driver) Readlink(p string) (string, error) {
|
|
||||||
return os.Readlink(p)
|
|
||||||
}
|
|
||||||
|
14
vendor/github.com/containerd/continuity/driver/driver_windows.go
generated
vendored
14
vendor/github.com/containerd/continuity/driver/driver_windows.go
generated
vendored
@ -14,12 +14,16 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// +build go1.13
|
||||||
|
|
||||||
|
// Go 1.13 is the minimally supported version for Windows.
|
||||||
|
// Earlier golang releases have bug in os.Readlink
|
||||||
|
// (see https://github.com/golang/go/issues/30463).
|
||||||
|
|
||||||
package driver
|
package driver
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/containerd/continuity/sysx"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (d *driver) Mknod(path string, mode os.FileMode, major, minor int) error {
|
func (d *driver) Mknod(path string, mode os.FileMode, major, minor int) error {
|
||||||
@ -35,9 +39,3 @@ func (d *driver) Lchmod(path string, mode os.FileMode) (err error) {
|
|||||||
// TODO: Use Window's equivalent
|
// TODO: Use Window's equivalent
|
||||||
return os.Chmod(path, mode)
|
return os.Chmod(path, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Readlink is forked in order to support Volume paths which are used
|
|
||||||
// in container layers.
|
|
||||||
func (d *driver) Readlink(p string) (string, error) {
|
|
||||||
return sysx.Readlink(p)
|
|
||||||
}
|
|
||||||
|
2
vendor/github.com/containerd/continuity/fs/copy_unix.go
generated
vendored
2
vendor/github.com/containerd/continuity/fs/copy_unix.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
// +build solaris darwin freebsd
|
// +build darwin freebsd openbsd solaris
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright The containerd Authors.
|
Copyright The containerd Authors.
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
// +build linux openbsd
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright The containerd Authors.
|
Copyright The containerd Authors.
|
||||||
|
|
26
vendor/github.com/containerd/continuity/syscallx/syscall_unix.go
generated
vendored
26
vendor/github.com/containerd/continuity/syscallx/syscall_unix.go
generated
vendored
@ -1,26 +0,0 @@
|
|||||||
// +build !windows
|
|
||||||
|
|
||||||
/*
|
|
||||||
Copyright The containerd 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 syscallx
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
// Readlink returns the destination of the named symbolic link.
|
|
||||||
func Readlink(path string, buf []byte) (n int, err error) {
|
|
||||||
return syscall.Readlink(path, buf)
|
|
||||||
}
|
|
112
vendor/github.com/containerd/continuity/syscallx/syscall_windows.go
generated
vendored
112
vendor/github.com/containerd/continuity/syscallx/syscall_windows.go
generated
vendored
@ -1,112 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The containerd 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 syscallx
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
type reparseDataBuffer struct {
|
|
||||||
ReparseTag uint32
|
|
||||||
ReparseDataLength uint16
|
|
||||||
Reserved uint16
|
|
||||||
|
|
||||||
// GenericReparseBuffer
|
|
||||||
reparseBuffer byte
|
|
||||||
}
|
|
||||||
|
|
||||||
type mountPointReparseBuffer struct {
|
|
||||||
SubstituteNameOffset uint16
|
|
||||||
SubstituteNameLength uint16
|
|
||||||
PrintNameOffset uint16
|
|
||||||
PrintNameLength uint16
|
|
||||||
PathBuffer [1]uint16
|
|
||||||
}
|
|
||||||
|
|
||||||
type symbolicLinkReparseBuffer struct {
|
|
||||||
SubstituteNameOffset uint16
|
|
||||||
SubstituteNameLength uint16
|
|
||||||
PrintNameOffset uint16
|
|
||||||
PrintNameLength uint16
|
|
||||||
Flags uint32
|
|
||||||
PathBuffer [1]uint16
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
_IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003
|
|
||||||
_SYMLINK_FLAG_RELATIVE = 1
|
|
||||||
)
|
|
||||||
|
|
||||||
// Readlink returns the destination of the named symbolic link.
|
|
||||||
func Readlink(path string, buf []byte) (n int, err error) {
|
|
||||||
fd, err := syscall.CreateFile(syscall.StringToUTF16Ptr(path), syscall.GENERIC_READ, 0, nil, syscall.OPEN_EXISTING,
|
|
||||||
syscall.FILE_FLAG_OPEN_REPARSE_POINT|syscall.FILE_FLAG_BACKUP_SEMANTICS, 0)
|
|
||||||
if err != nil {
|
|
||||||
return -1, err
|
|
||||||
}
|
|
||||||
defer syscall.CloseHandle(fd)
|
|
||||||
|
|
||||||
rdbbuf := make([]byte, syscall.MAXIMUM_REPARSE_DATA_BUFFER_SIZE)
|
|
||||||
var bytesReturned uint32
|
|
||||||
err = syscall.DeviceIoControl(fd, syscall.FSCTL_GET_REPARSE_POINT, nil, 0, &rdbbuf[0], uint32(len(rdbbuf)), &bytesReturned, nil)
|
|
||||||
if err != nil {
|
|
||||||
return -1, err
|
|
||||||
}
|
|
||||||
|
|
||||||
rdb := (*reparseDataBuffer)(unsafe.Pointer(&rdbbuf[0]))
|
|
||||||
var s string
|
|
||||||
switch rdb.ReparseTag {
|
|
||||||
case syscall.IO_REPARSE_TAG_SYMLINK:
|
|
||||||
data := (*symbolicLinkReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer))
|
|
||||||
p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0]))
|
|
||||||
s = syscall.UTF16ToString(p[data.SubstituteNameOffset/2 : (data.SubstituteNameOffset+data.SubstituteNameLength)/2])
|
|
||||||
if data.Flags&_SYMLINK_FLAG_RELATIVE == 0 {
|
|
||||||
if len(s) >= 4 && s[:4] == `\??\` {
|
|
||||||
s = s[4:]
|
|
||||||
switch {
|
|
||||||
case len(s) >= 2 && s[1] == ':': // \??\C:\foo\bar
|
|
||||||
// do nothing
|
|
||||||
case len(s) >= 4 && s[:4] == `UNC\`: // \??\UNC\foo\bar
|
|
||||||
s = `\\` + s[4:]
|
|
||||||
default:
|
|
||||||
// unexpected; do nothing
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// unexpected; do nothing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case _IO_REPARSE_TAG_MOUNT_POINT:
|
|
||||||
data := (*mountPointReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer))
|
|
||||||
p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0]))
|
|
||||||
s = syscall.UTF16ToString(p[data.SubstituteNameOffset/2 : (data.SubstituteNameOffset+data.SubstituteNameLength)/2])
|
|
||||||
if len(s) >= 4 && s[:4] == `\??\` { // \??\C:\foo\bar
|
|
||||||
if len(s) < 48 || s[:11] != `\??\Volume{` {
|
|
||||||
s = s[4:]
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// unexpected; do nothing
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
// the path is not a symlink or junction but another type of reparse
|
|
||||||
// point
|
|
||||||
return -1, syscall.ENOENT
|
|
||||||
}
|
|
||||||
n = copy(buf, []byte(s))
|
|
||||||
|
|
||||||
return n, nil
|
|
||||||
}
|
|
128
vendor/github.com/containerd/continuity/sysx/file_posix.go
generated
vendored
128
vendor/github.com/containerd/continuity/sysx/file_posix.go
generated
vendored
@ -1,128 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright The containerd 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 sysx
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
|
|
||||||
"github.com/containerd/continuity/syscallx"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Readlink returns the destination of the named symbolic link.
|
|
||||||
// If there is an error, it will be of type *PathError.
|
|
||||||
func Readlink(name string) (string, error) {
|
|
||||||
for len := 128; ; len *= 2 {
|
|
||||||
b := make([]byte, len)
|
|
||||||
n, e := fixCount(syscallx.Readlink(fixLongPath(name), b))
|
|
||||||
if e != nil {
|
|
||||||
return "", &os.PathError{Op: "readlink", Path: name, Err: e}
|
|
||||||
}
|
|
||||||
if n < len {
|
|
||||||
return string(b[0:n]), nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Many functions in package syscall return a count of -1 instead of 0.
|
|
||||||
// Using fixCount(call()) instead of call() corrects the count.
|
|
||||||
func fixCount(n int, err error) (int, error) {
|
|
||||||
if n < 0 {
|
|
||||||
n = 0
|
|
||||||
}
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// fixLongPath returns the extended-length (\\?\-prefixed) form of
|
|
||||||
// path when needed, in order to avoid the default 260 character file
|
|
||||||
// path limit imposed by Windows. If path is not easily converted to
|
|
||||||
// the extended-length form (for example, if path is a relative path
|
|
||||||
// or contains .. elements), or is short enough, fixLongPath returns
|
|
||||||
// path unmodified.
|
|
||||||
//
|
|
||||||
// See https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
|
|
||||||
func fixLongPath(path string) string {
|
|
||||||
// Do nothing (and don't allocate) if the path is "short".
|
|
||||||
// Empirically (at least on the Windows Server 2013 builder),
|
|
||||||
// the kernel is arbitrarily okay with < 248 bytes. That
|
|
||||||
// matches what the docs above say:
|
|
||||||
// "When using an API to create a directory, the specified
|
|
||||||
// path cannot be so long that you cannot append an 8.3 file
|
|
||||||
// name (that is, the directory name cannot exceed MAX_PATH
|
|
||||||
// minus 12)." Since MAX_PATH is 260, 260 - 12 = 248.
|
|
||||||
//
|
|
||||||
// The MSDN docs appear to say that a normal path that is 248 bytes long
|
|
||||||
// will work; empirically the path must be less then 248 bytes long.
|
|
||||||
if len(path) < 248 {
|
|
||||||
// Don't fix. (This is how Go 1.7 and earlier worked,
|
|
||||||
// not automatically generating the \\?\ form)
|
|
||||||
return path
|
|
||||||
}
|
|
||||||
|
|
||||||
// The extended form begins with \\?\, as in
|
|
||||||
// \\?\c:\windows\foo.txt or \\?\UNC\server\share\foo.txt.
|
|
||||||
// The extended form disables evaluation of . and .. path
|
|
||||||
// elements and disables the interpretation of / as equivalent
|
|
||||||
// to \. The conversion here rewrites / to \ and elides
|
|
||||||
// . elements as well as trailing or duplicate separators. For
|
|
||||||
// simplicity it avoids the conversion entirely for relative
|
|
||||||
// paths or paths containing .. elements. For now,
|
|
||||||
// \\server\share paths are not converted to
|
|
||||||
// \\?\UNC\server\share paths because the rules for doing so
|
|
||||||
// are less well-specified.
|
|
||||||
if len(path) >= 2 && path[:2] == `\\` {
|
|
||||||
// Don't canonicalize UNC paths.
|
|
||||||
return path
|
|
||||||
}
|
|
||||||
if !filepath.IsAbs(path) {
|
|
||||||
// Relative path
|
|
||||||
return path
|
|
||||||
}
|
|
||||||
|
|
||||||
const prefix = `\\?`
|
|
||||||
|
|
||||||
pathbuf := make([]byte, len(prefix)+len(path)+len(`\`))
|
|
||||||
copy(pathbuf, prefix)
|
|
||||||
n := len(path)
|
|
||||||
r, w := 0, len(prefix)
|
|
||||||
for r < n {
|
|
||||||
switch {
|
|
||||||
case os.IsPathSeparator(path[r]):
|
|
||||||
// empty block
|
|
||||||
r++
|
|
||||||
case path[r] == '.' && (r+1 == n || os.IsPathSeparator(path[r+1])):
|
|
||||||
// /./
|
|
||||||
r++
|
|
||||||
case r+1 < n && path[r] == '.' && path[r+1] == '.' && (r+2 == n || os.IsPathSeparator(path[r+2])):
|
|
||||||
// /../ is currently unhandled
|
|
||||||
return path
|
|
||||||
default:
|
|
||||||
pathbuf[w] = '\\'
|
|
||||||
w++
|
|
||||||
for ; r < n && !os.IsPathSeparator(path[r]); r++ {
|
|
||||||
pathbuf[w] = path[r]
|
|
||||||
w++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// A drive's root directory needs a trailing \
|
|
||||||
if w == len(`\\?\c:`) {
|
|
||||||
pathbuf[w] = '\\'
|
|
||||||
w++
|
|
||||||
}
|
|
||||||
return string(pathbuf[:w])
|
|
||||||
}
|
|
2
vendor/github.com/containerd/continuity/sysx/nodata_unix.go
generated
vendored
2
vendor/github.com/containerd/continuity/sysx/nodata_unix.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
// +build darwin freebsd
|
// +build darwin freebsd openbsd
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright The containerd Authors.
|
Copyright The containerd Authors.
|
||||||
|
72
vendor/github.com/containerd/continuity/sysx/xattr.go
generated
vendored
72
vendor/github.com/containerd/continuity/sysx/xattr.go
generated
vendored
@ -20,7 +20,6 @@ package sysx
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"syscall"
|
|
||||||
|
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
@ -66,60 +65,53 @@ func LGetxattr(path, attr string) ([]byte, error) {
|
|||||||
return getxattrAll(path, attr, unix.Lgetxattr)
|
return getxattrAll(path, attr, unix.Lgetxattr)
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultXattrBufferSize = 5
|
const defaultXattrBufferSize = 128
|
||||||
|
|
||||||
type listxattrFunc func(path string, dest []byte) (int, error)
|
type listxattrFunc func(path string, dest []byte) (int, error)
|
||||||
|
|
||||||
func listxattrAll(path string, listFunc listxattrFunc) ([]string, error) {
|
func listxattrAll(path string, listFunc listxattrFunc) ([]string, error) {
|
||||||
var p []byte // nil on first execution
|
buf := make([]byte, defaultXattrBufferSize)
|
||||||
|
n, err := listFunc(path, buf)
|
||||||
for {
|
for err == unix.ERANGE {
|
||||||
n, err := listFunc(path, p) // first call gets buffer size.
|
// Buffer too small, use zero-sized buffer to get the actual size
|
||||||
|
n, err = listFunc(path, []byte{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
buf = make([]byte, n)
|
||||||
if n > len(p) {
|
n, err = listFunc(path, buf)
|
||||||
p = make([]byte, n)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
p = p[:n]
|
|
||||||
|
|
||||||
ps := bytes.Split(bytes.TrimSuffix(p, []byte{0}), []byte{0})
|
|
||||||
var entries []string
|
|
||||||
for _, p := range ps {
|
|
||||||
s := string(p)
|
|
||||||
if s != "" {
|
|
||||||
entries = append(entries, s)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return entries, nil
|
|
||||||
}
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
ps := bytes.Split(bytes.TrimSuffix(buf[:n], []byte{0}), []byte{0})
|
||||||
|
var entries []string
|
||||||
|
for _, p := range ps {
|
||||||
|
if len(p) > 0 {
|
||||||
|
entries = append(entries, string(p))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return entries, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type getxattrFunc func(string, string, []byte) (int, error)
|
type getxattrFunc func(string, string, []byte) (int, error)
|
||||||
|
|
||||||
func getxattrAll(path, attr string, getFunc getxattrFunc) ([]byte, error) {
|
func getxattrAll(path, attr string, getFunc getxattrFunc) ([]byte, error) {
|
||||||
p := make([]byte, defaultXattrBufferSize)
|
buf := make([]byte, defaultXattrBufferSize)
|
||||||
for {
|
n, err := getFunc(path, attr, buf)
|
||||||
n, err := getFunc(path, attr, p)
|
for err == unix.ERANGE {
|
||||||
|
// Buffer too small, use zero-sized buffer to get the actual size
|
||||||
|
n, err = getFunc(path, attr, []byte{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errno, ok := err.(syscall.Errno); ok && errno == syscall.ERANGE {
|
|
||||||
p = make([]byte, len(p)*2) // this can't be ideal.
|
|
||||||
continue // try again!
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
buf = make([]byte, n)
|
||||||
// realloc to correct size and repeat
|
n, err = getFunc(path, attr, buf)
|
||||||
if n > len(p) {
|
|
||||||
p = make([]byte, n)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
return p[:n], nil
|
|
||||||
}
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return buf[:n], nil
|
||||||
}
|
}
|
||||||
|
12
vendor/github.com/containerd/fifo/errors.go
generated
vendored
12
vendor/github.com/containerd/fifo/errors.go
generated
vendored
@ -21,10 +21,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrClosed = errors.New("fifo closed")
|
ErrClosed = errors.New("fifo closed")
|
||||||
ErrCtrlClosed = errors.New("control of closed fifo")
|
ErrCtrlClosed = errors.New("control of closed fifo")
|
||||||
ErrRdFrmWRONLY = errors.New("reading from write-only fifo")
|
ErrRdFrmWRONLY = errors.New("reading from write-only fifo")
|
||||||
ErrReadClosed = errors.New("reading from a closed fifo")
|
ErrReadClosed = errors.New("reading from a closed fifo")
|
||||||
ErrWrToRDONLY = errors.New("writing to read-only fifo")
|
ErrWrToRDONLY = errors.New("writing to read-only fifo")
|
||||||
ErrWriteClosed = errors.New("writing to a closed fifo")
|
ErrWriteClosed = errors.New("writing to a closed fifo")
|
||||||
)
|
)
|
||||||
|
2
vendor/github.com/containerd/fifo/fifo.go
generated
vendored
2
vendor/github.com/containerd/fifo/fifo.go
generated
vendored
@ -17,6 +17,7 @@
|
|||||||
package fifo
|
package fifo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
@ -24,7 +25,6 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"golang.org/x/net/context"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type fifo struct {
|
type fifo struct {
|
||||||
|
9
vendor/github.com/containerd/fifo/go.mod
generated
vendored
Normal file
9
vendor/github.com/containerd/fifo/go.mod
generated
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
module github.com/containerd/fifo
|
||||||
|
|
||||||
|
go 1.13
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/pkg/errors v0.8.1
|
||||||
|
github.com/stretchr/testify v1.4.0
|
||||||
|
golang.org/x/sys v0.0.0-20191210023423-ac6580df4449
|
||||||
|
)
|
9
vendor/github.com/containerd/fifo/handle_linux.go
generated
vendored
9
vendor/github.com/containerd/fifo/handle_linux.go
generated
vendored
@ -27,6 +27,7 @@ import (
|
|||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//nolint:golint
|
||||||
const O_PATH = 010000000
|
const O_PATH = 010000000
|
||||||
|
|
||||||
type handle struct {
|
type handle struct {
|
||||||
@ -56,9 +57,10 @@ func getHandle(fn string) (*handle, error) {
|
|||||||
h := &handle{
|
h := &handle{
|
||||||
f: f,
|
f: f,
|
||||||
name: fn,
|
name: fn,
|
||||||
dev: uint64(stat.Dev),
|
//nolint:unconvert
|
||||||
ino: stat.Ino,
|
dev: uint64(stat.Dev),
|
||||||
fd: fd,
|
ino: stat.Ino,
|
||||||
|
fd: fd,
|
||||||
}
|
}
|
||||||
|
|
||||||
// check /proc just in case
|
// check /proc just in case
|
||||||
@ -83,6 +85,7 @@ func (h *handle) Path() (string, error) {
|
|||||||
if err := syscall.Stat(h.procPath(), &stat); err != nil {
|
if err := syscall.Stat(h.procPath(), &stat); err != nil {
|
||||||
return "", errors.Wrapf(err, "path %v could not be statted", h.procPath())
|
return "", errors.Wrapf(err, "path %v could not be statted", h.procPath())
|
||||||
}
|
}
|
||||||
|
//nolint:unconvert
|
||||||
if uint64(stat.Dev) != h.dev || stat.Ino != h.ino {
|
if uint64(stat.Dev) != h.dev || stat.Ino != h.ino {
|
||||||
return "", errors.Errorf("failed to verify handle %v/%v %v/%v", stat.Dev, h.dev, stat.Ino, h.ino)
|
return "", errors.Errorf("failed to verify handle %v/%v %v/%v", stat.Dev, h.dev, stat.Ino, h.ino)
|
||||||
}
|
}
|
||||||
|
2
vendor/github.com/containerd/fifo/raw.go
generated
vendored
2
vendor/github.com/containerd/fifo/raw.go
generated
vendored
@ -23,7 +23,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// SyscallConn provides raw access to the fifo's underlying filedescrptor.
|
// SyscallConn provides raw access to the fifo's underlying filedescrptor.
|
||||||
// See syscall.Conn for guarentees provided by this interface.
|
// See syscall.Conn for guarantees provided by this interface.
|
||||||
func (f *fifo) SyscallConn() (syscall.RawConn, error) {
|
func (f *fifo) SyscallConn() (syscall.RawConn, error) {
|
||||||
// deterministic check for closed
|
// deterministic check for closed
|
||||||
select {
|
select {
|
||||||
|
10
vendor/github.com/containerd/go-runc/go.mod
generated
vendored
Normal file
10
vendor/github.com/containerd/go-runc/go.mod
generated
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
module github.com/containerd/go-runc
|
||||||
|
|
||||||
|
go 1.13
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e
|
||||||
|
github.com/opencontainers/runtime-spec v1.0.1
|
||||||
|
github.com/pkg/errors v0.8.1
|
||||||
|
golang.org/x/sys v0.0.0-20191210023423-ac6580df4449
|
||||||
|
)
|
38
vendor/github.com/containerd/go-runc/runc.go
generated
vendored
38
vendor/github.com/containerd/go-runc/runc.go
generated
vendored
@ -623,32 +623,22 @@ func (r *Runc) Version(context context.Context) (Version, error) {
|
|||||||
func parseVersion(data []byte) (Version, error) {
|
func parseVersion(data []byte) (Version, error) {
|
||||||
var v Version
|
var v Version
|
||||||
parts := strings.Split(strings.TrimSpace(string(data)), "\n")
|
parts := strings.Split(strings.TrimSpace(string(data)), "\n")
|
||||||
if len(parts) != 3 {
|
|
||||||
return v, nil
|
if len(parts) > 0 {
|
||||||
}
|
if !strings.HasPrefix(parts[0], "runc version ") {
|
||||||
for i, p := range []struct {
|
return v, nil
|
||||||
dest *string
|
}
|
||||||
split string
|
v.Runc = parts[0][13:]
|
||||||
}{
|
|
||||||
{
|
for _, part := range parts[1:] {
|
||||||
dest: &v.Runc,
|
if strings.HasPrefix(part, "commit: ") {
|
||||||
split: "version ",
|
v.Commit = part[8:]
|
||||||
},
|
} else if strings.HasPrefix(part, "spec: ") {
|
||||||
{
|
v.Spec = part[6:]
|
||||||
dest: &v.Commit,
|
}
|
||||||
split: ": ",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
dest: &v.Spec,
|
|
||||||
split: ": ",
|
|
||||||
},
|
|
||||||
} {
|
|
||||||
p2 := strings.Split(parts[i], p.split)
|
|
||||||
if len(p2) != 2 {
|
|
||||||
return v, fmt.Errorf("unable to parse version line %q", parts[i])
|
|
||||||
}
|
}
|
||||||
*p.dest = p2[1]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user