mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #39072 from thaJeztah/small_bumps
Various minor vendoring bumps
This commit is contained in:
commit
3b3b95c6ae
31 changed files with 430 additions and 901 deletions
17
vendor.conf
17
vendor.conf
|
@ -71,8 +71,7 @@ github.com/vbatts/tar-split 620714a4c508c880ac1bdda9c837
|
||||||
github.com/opencontainers/go-digest 279bed98673dd5bef374d3b6e4b09e2af76183bf # v1.0.0-rc1
|
github.com/opencontainers/go-digest 279bed98673dd5bef374d3b6e4b09e2af76183bf # v1.0.0-rc1
|
||||||
|
|
||||||
# get go-zfs packages
|
# get go-zfs packages
|
||||||
github.com/mistifyio/go-zfs 22c9b32c84eb0d0c6f4043b6e90fc94073de92fa
|
github.com/mistifyio/go-zfs f784269be439d704d3dfa1906f45dd848fed2beb
|
||||||
github.com/pborman/uuid a97ce2ca70fa5a848076093f05e639a89ca34d06 # v1.0
|
|
||||||
|
|
||||||
google.golang.org/grpc 7a6a684ca69eb4cae85ad0a484f2e531598c047b # v1.12.2
|
google.golang.org/grpc 7a6a684ca69eb4cae85ad0a484f2e531598c047b # v1.12.2
|
||||||
|
|
||||||
|
@ -89,7 +88,7 @@ github.com/seccomp/libseccomp-golang 32f571b70023028bd57d9288c20e
|
||||||
# libcontainer deps (see src/github.com/opencontainers/runc/Godeps/Godeps.json)
|
# libcontainer deps (see src/github.com/opencontainers/runc/Godeps/Godeps.json)
|
||||||
github.com/coreos/go-systemd 39ca1b05acc7ad1220e09f133283b8859a8b71ab # v17
|
github.com/coreos/go-systemd 39ca1b05acc7ad1220e09f133283b8859a8b71ab # v17
|
||||||
github.com/godbus/dbus 5f6efc7ef2759c81b7ba876593971bfce311eab3 # v4.0.0
|
github.com/godbus/dbus 5f6efc7ef2759c81b7ba876593971bfce311eab3 # v4.0.0
|
||||||
github.com/syndtr/gocapability 2c00daeb6c3b45114c80ac44119e7b8801fdd852
|
github.com/syndtr/gocapability d98352740cb2c55f81556b63d4a1ec64c5a319c2
|
||||||
github.com/golang/protobuf aa810b61a9c79d51363740d207bb46cf8e620ed5 # v1.2.0
|
github.com/golang/protobuf aa810b61a9c79d51363740d207bb46cf8e620ed5 # v1.2.0
|
||||||
|
|
||||||
# gelf logging driver deps
|
# gelf logging driver deps
|
||||||
|
@ -121,12 +120,12 @@ google.golang.org/genproto 694d95ba50e67b2e363f3483057d
|
||||||
|
|
||||||
# containerd
|
# containerd
|
||||||
github.com/containerd/containerd ceba56893a76f22cf0126c46d835c80fb3833408
|
github.com/containerd/containerd ceba56893a76f22cf0126c46d835c80fb3833408
|
||||||
github.com/containerd/fifo 3d5202aec260678c48179c56f40e6f38a095738c
|
github.com/containerd/fifo a9fb20d87448d386e6d50b1f2e1fa70dcf0de43c
|
||||||
github.com/containerd/continuity 004b46473808b3e7a4a3049c20e4376c91eb966d
|
github.com/containerd/continuity 004b46473808b3e7a4a3049c20e4376c91eb966d
|
||||||
github.com/containerd/cgroups 4994991857f9b0ae8dc439551e8bebdbb4bf66c1
|
github.com/containerd/cgroups 4994991857f9b0ae8dc439551e8bebdbb4bf66c1
|
||||||
github.com/containerd/console c12b1e7919c14469339a5d38f2f8ed9b64a9de23
|
github.com/containerd/console c12b1e7919c14469339a5d38f2f8ed9b64a9de23
|
||||||
github.com/containerd/go-runc 5a6d9f37cfa36b15efba46dc7ea349fa9b7143c3
|
github.com/containerd/go-runc 7d11b49dc0769f6dbb0d1b19f3d48524d1bad9ad
|
||||||
github.com/containerd/typeurl a93fcdb778cd272c6e9b3028b2f42d813e785d40
|
github.com/containerd/typeurl 2a93cfde8c20b23de8eb84a5adbc234ddf7a9e8d
|
||||||
github.com/containerd/ttrpc f02858b1457c5ca3aaec3a0803eb0d59f96e41d6
|
github.com/containerd/ttrpc f02858b1457c5ca3aaec3a0803eb0d59f96e41d6
|
||||||
github.com/gogo/googleapis 08a7655d27152912db7aaf4f983275eaf8d128ef
|
github.com/gogo/googleapis 08a7655d27152912db7aaf4f983275eaf8d128ef
|
||||||
|
|
||||||
|
@ -140,17 +139,17 @@ golang.org/x/crypto 38d8ce5564a5b71b2e3a00553993
|
||||||
golang.org/x/time fbb02b2291d28baffd63558aa44b4b56f178d650
|
golang.org/x/time fbb02b2291d28baffd63558aa44b4b56f178d650
|
||||||
github.com/hashicorp/go-memdb cb9a474f84cc5e41b273b20c6927680b2a8776ad
|
github.com/hashicorp/go-memdb cb9a474f84cc5e41b273b20c6927680b2a8776ad
|
||||||
github.com/hashicorp/go-immutable-radix 826af9ccf0feeee615d546d69b11f8e98da8c8f1 git://github.com/tonistiigi/go-immutable-radix.git
|
github.com/hashicorp/go-immutable-radix 826af9ccf0feeee615d546d69b11f8e98da8c8f1 git://github.com/tonistiigi/go-immutable-radix.git
|
||||||
github.com/hashicorp/golang-lru 0fb14efe8c47ae851c0034ed7a448854d3d34cf3
|
github.com/hashicorp/golang-lru 7087cb70de9f7a8bc0a10c375cb0d2280a8edf9c # v0.5.1
|
||||||
github.com/coreos/pkg 3ac0863d7acf3bc44daf49afef8919af12f704ef # v3
|
github.com/coreos/pkg 3ac0863d7acf3bc44daf49afef8919af12f704ef # v3
|
||||||
github.com/pivotal-golang/clock 3fd3c1944c59d9742e1cd333672181cd1a6f9fa0
|
github.com/pivotal-golang/clock 3fd3c1944c59d9742e1cd333672181cd1a6f9fa0
|
||||||
|
|
||||||
# prometheus
|
# prometheus
|
||||||
github.com/prometheus/client_golang c5b7fccd204277076155f10851dad72b76a49317 # v0.8.0
|
github.com/prometheus/client_golang c5b7fccd204277076155f10851dad72b76a49317 # v0.8.0
|
||||||
github.com/beorn7/perks 3a771d992973f24aa725d07868b467d1ddfceafb
|
github.com/beorn7/perks e7f67b54abbeac9c40a31de0f81159e4cafebd6a
|
||||||
github.com/prometheus/client_model 6f3806018612930941127f2a7c6c453ba2c527d2
|
github.com/prometheus/client_model 6f3806018612930941127f2a7c6c453ba2c527d2
|
||||||
github.com/prometheus/common 7600349dcfe1abd18d72d3a1770870d9800a7801
|
github.com/prometheus/common 7600349dcfe1abd18d72d3a1770870d9800a7801
|
||||||
github.com/prometheus/procfs 7d6f385de8bea29190f15ba9931442a0eaef9af7
|
github.com/prometheus/procfs 7d6f385de8bea29190f15ba9931442a0eaef9af7
|
||||||
github.com/matttproud/golang_protobuf_extensions 3247c84500bff8d9fb6d579d800f20b3e091582c # v1.0.0
|
github.com/matttproud/golang_protobuf_extensions c12348ce28de40eed0136aa2b644d0ee0650e56c # v1.0.1
|
||||||
github.com/pkg/errors 645ef00459ed84a119197bfb8d8205042c6df63d # v0.8.0
|
github.com/pkg/errors 645ef00459ed84a119197bfb8d8205042c6df63d # v0.8.0
|
||||||
github.com/grpc-ecosystem/go-grpc-prometheus c225b8c3b01faf2899099b768856a9e916e5087b # v1.2.0
|
github.com/grpc-ecosystem/go-grpc-prometheus c225b8c3b01faf2899099b768856a9e916e5087b # v1.2.0
|
||||||
|
|
||||||
|
|
116
vendor/github.com/containerd/fifo/raw.go
generated
vendored
Normal file
116
vendor/github.com/containerd/fifo/raw.go
generated
vendored
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
// +build go1.12
|
||||||
|
|
||||||
|
/*
|
||||||
|
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 fifo
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SyscallConn provides raw access to the fifo's underlying filedescrptor.
|
||||||
|
// See syscall.Conn for guarentees provided by this interface.
|
||||||
|
func (f *fifo) SyscallConn() (syscall.RawConn, error) {
|
||||||
|
// deterministic check for closed
|
||||||
|
select {
|
||||||
|
case <-f.closed:
|
||||||
|
return nil, errors.New("fifo closed")
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
select {
|
||||||
|
case <-f.closed:
|
||||||
|
return nil, errors.New("fifo closed")
|
||||||
|
case <-f.opened:
|
||||||
|
return f.file.SyscallConn()
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not opened and not closed, this means open is non-blocking AND it's not open yet
|
||||||
|
// Use rawConn to deal with non-blocking open.
|
||||||
|
rc := &rawConn{f: f, ready: make(chan struct{})}
|
||||||
|
go func() {
|
||||||
|
select {
|
||||||
|
case <-f.closed:
|
||||||
|
return
|
||||||
|
case <-f.opened:
|
||||||
|
rc.raw, rc.err = f.file.SyscallConn()
|
||||||
|
close(rc.ready)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
return rc, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type rawConn struct {
|
||||||
|
f *fifo
|
||||||
|
ready chan struct{}
|
||||||
|
raw syscall.RawConn
|
||||||
|
err error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *rawConn) Control(f func(fd uintptr)) error {
|
||||||
|
select {
|
||||||
|
case <-r.f.closed:
|
||||||
|
return errors.New("control of closed fifo")
|
||||||
|
case <-r.ready:
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.err != nil {
|
||||||
|
return r.err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.raw.Control(f)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *rawConn) Read(f func(fd uintptr) (done bool)) error {
|
||||||
|
if r.f.flag&syscall.O_WRONLY > 0 {
|
||||||
|
return errors.New("reading from write-only fifo")
|
||||||
|
}
|
||||||
|
|
||||||
|
select {
|
||||||
|
case <-r.f.closed:
|
||||||
|
return errors.New("reading of a closed fifo")
|
||||||
|
case <-r.ready:
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.err != nil {
|
||||||
|
return r.err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.raw.Read(f)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *rawConn) Write(f func(fd uintptr) (done bool)) error {
|
||||||
|
if r.f.flag&(syscall.O_WRONLY|syscall.O_RDWR) == 0 {
|
||||||
|
return errors.New("writing to read-only fifo")
|
||||||
|
}
|
||||||
|
|
||||||
|
select {
|
||||||
|
case <-r.f.closed:
|
||||||
|
return errors.New("writing to a closed fifo")
|
||||||
|
case <-r.ready:
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.err != nil {
|
||||||
|
return r.err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.raw.Write(f)
|
||||||
|
}
|
12
vendor/github.com/containerd/fifo/readme.md
generated
vendored
12
vendor/github.com/containerd/fifo/readme.md
generated
vendored
|
@ -1,6 +1,7 @@
|
||||||
### fifo
|
### fifo
|
||||||
|
|
||||||
[](https://travis-ci.org/containerd/fifo)
|
[](https://travis-ci.org/containerd/fifo)
|
||||||
|
[](https://codecov.io/gh/containerd/fifo)
|
||||||
|
|
||||||
Go package for handling fifos in a sane way.
|
Go package for handling fifos in a sane way.
|
||||||
|
|
||||||
|
@ -30,3 +31,14 @@ func (f *fifo) Write(b []byte) (int, error)
|
||||||
// before open(2) has returned and fifo was never opened.
|
// before open(2) has returned and fifo was never opened.
|
||||||
func (f *fifo) Close() error
|
func (f *fifo) Close() error
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Project details
|
||||||
|
|
||||||
|
The fifo is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE).
|
||||||
|
As a containerd sub-project, you will find the:
|
||||||
|
|
||||||
|
* [Project governance](https://github.com/containerd/project/blob/master/GOVERNANCE.md),
|
||||||
|
* [Maintainers](https://github.com/containerd/project/blob/master/MAINTAINERS),
|
||||||
|
* and [Contributing guidelines](https://github.com/containerd/project/blob/master/CONTRIBUTING.md)
|
||||||
|
|
||||||
|
information in our [`containerd/project`](https://github.com/containerd/project) repository.
|
||||||
|
|
13
vendor/github.com/containerd/go-runc/README.md
generated
vendored
13
vendor/github.com/containerd/go-runc/README.md
generated
vendored
|
@ -1,7 +1,7 @@
|
||||||
# go-runc
|
# go-runc
|
||||||
|
|
||||||
[](https://travis-ci.org/containerd/go-runc)
|
[](https://travis-ci.org/containerd/go-runc)
|
||||||
|
[](https://codecov.io/gh/containerd/go-runc)
|
||||||
|
|
||||||
This is a package for consuming the [runc](https://github.com/opencontainers/runc) binary in your Go applications.
|
This is a package for consuming the [runc](https://github.com/opencontainers/runc) binary in your Go applications.
|
||||||
It tries to expose all the settings and features of the runc CLI. If there is something missing then add it, its opensource!
|
It tries to expose all the settings and features of the runc CLI. If there is something missing then add it, its opensource!
|
||||||
|
@ -12,3 +12,14 @@ or greater.
|
||||||
## Docs
|
## Docs
|
||||||
|
|
||||||
Docs can be found at [godoc.org](https://godoc.org/github.com/containerd/go-runc).
|
Docs can be found at [godoc.org](https://godoc.org/github.com/containerd/go-runc).
|
||||||
|
|
||||||
|
## Project details
|
||||||
|
|
||||||
|
The go-runc is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE).
|
||||||
|
As a containerd sub-project, you will find the:
|
||||||
|
|
||||||
|
* [Project governance](https://github.com/containerd/project/blob/master/GOVERNANCE.md),
|
||||||
|
* [Maintainers](https://github.com/containerd/project/blob/master/MAINTAINERS),
|
||||||
|
* and [Contributing guidelines](https://github.com/containerd/project/blob/master/CONTRIBUTING.md)
|
||||||
|
|
||||||
|
information in our [`containerd/project`](https://github.com/containerd/project) repository.
|
||||||
|
|
18
vendor/github.com/containerd/typeurl/LICENSE
generated
vendored
18
vendor/github.com/containerd/typeurl/LICENSE
generated
vendored
|
@ -1,6 +1,7 @@
|
||||||
|
|
||||||
Apache License
|
Apache License
|
||||||
Version 2.0, January 2004
|
Version 2.0, January 2004
|
||||||
http://www.apache.org/licenses/
|
https://www.apache.org/licenses/
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
@ -175,24 +176,13 @@
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
Copyright The containerd Authors
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
|
10
vendor/github.com/containerd/typeurl/README.md
generated
vendored
10
vendor/github.com/containerd/typeurl/README.md
generated
vendored
|
@ -7,3 +7,13 @@
|
||||||
A Go package for managing the registration, marshaling, and unmarshaling of encoded types.
|
A Go package for managing the registration, marshaling, and unmarshaling of encoded types.
|
||||||
|
|
||||||
This package helps when types are sent over a GRPC API and marshaled as a [protobuf.Any]().
|
This package helps when types are sent over a GRPC API and marshaled as a [protobuf.Any]().
|
||||||
|
|
||||||
|
## Project details
|
||||||
|
|
||||||
|
**typeurl** is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE).
|
||||||
|
As a containerd sub-project, you will find the:
|
||||||
|
* [Project governance](https://github.com/containerd/project/blob/master/GOVERNANCE.md),
|
||||||
|
* [Maintainers](https://github.com/containerd/project/blob/master/MAINTAINERS),
|
||||||
|
* and [Contributing guidelines](https://github.com/containerd/project/blob/master/CONTRIBUTING.md)
|
||||||
|
|
||||||
|
information in our [`containerd/project`](https://github.com/containerd/project) repository.
|
||||||
|
|
83
vendor/github.com/containerd/typeurl/doc.go
generated
vendored
Normal file
83
vendor/github.com/containerd/typeurl/doc.go
generated
vendored
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
/*
|
||||||
|
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 typeurl
|
||||||
|
|
||||||
|
// Package typeurl assists with managing the registration, marshaling, and
|
||||||
|
// unmarshaling of types encoded as protobuf.Any.
|
||||||
|
//
|
||||||
|
// A protobuf.Any is a proto message that can contain any arbitrary data. It
|
||||||
|
// consists of two components, a TypeUrl and a Value, and its proto definition
|
||||||
|
// looks like this:
|
||||||
|
//
|
||||||
|
// message Any {
|
||||||
|
// string type_url = 1;
|
||||||
|
// bytes value = 2;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// The TypeUrl is used to distinguish the contents from other proto.Any
|
||||||
|
// messages. This typeurl library manages these URLs to enable automagic
|
||||||
|
// marshaling and unmarshaling of the contents.
|
||||||
|
//
|
||||||
|
// For example, consider this go struct:
|
||||||
|
//
|
||||||
|
// type Foo struct {
|
||||||
|
// Field1 string
|
||||||
|
// Field2 string
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// To use typeurl, types must first be registered. This is typically done in
|
||||||
|
// the init function
|
||||||
|
//
|
||||||
|
// func init() {
|
||||||
|
// typeurl.Register(&Foo{}, "Foo")
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// This will register the type Foo with the url path "Foo". The arguments to
|
||||||
|
// Register are variadic, and are used to construct a url path. Consider this
|
||||||
|
// example, from the github.com/containerd/containerd/client package:
|
||||||
|
//
|
||||||
|
// func init() {
|
||||||
|
// const prefix = "types.containerd.io"
|
||||||
|
// // register TypeUrls for commonly marshaled external types
|
||||||
|
// major := strconv.Itoa(specs.VersionMajor)
|
||||||
|
// typeurl.Register(&specs.Spec{}, prefix, "opencontainers/runtime-spec", major, "Spec")
|
||||||
|
// // this function has more Register calls, which are elided.
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// This registers several types under a more complex url, which ends up mapping
|
||||||
|
// to `types.containerd.io/opencontainers/runtime-spec/1/Spec` (or some other
|
||||||
|
// value for major).
|
||||||
|
//
|
||||||
|
// Once a type is registered, it can be marshaled to a proto.Any message simply
|
||||||
|
// by calling `MarshalAny`, like this:
|
||||||
|
//
|
||||||
|
// foo := &Foo{Field1: "value1", Field2: "value2"}
|
||||||
|
// anyFoo, err := typeurl.MarshalAny(foo)
|
||||||
|
//
|
||||||
|
// MarshalAny will resolve the correct URL for the type. If the type in
|
||||||
|
// question implements the proto.Message interface, then it will be marshaled
|
||||||
|
// as a proto message. Otherwise, it will be marshaled as json. This means that
|
||||||
|
// typeurl will work on any arbitrary data, whether or not it has a proto
|
||||||
|
// definition, as long as it can be serialized to json.
|
||||||
|
//
|
||||||
|
// To unmarshal, the process is simply inverse:
|
||||||
|
//
|
||||||
|
// iface, err := typeurl.UnmarshalAny(anyFoo)
|
||||||
|
// foo := iface.(*Foo)
|
||||||
|
//
|
||||||
|
// The correct type is automatically chosen from the type registry, and the
|
||||||
|
// returned interface can be cast straight to that type.
|
5
vendor/github.com/containerd/typeurl/types.go
generated
vendored
5
vendor/github.com/containerd/typeurl/types.go
generated
vendored
|
@ -78,7 +78,10 @@ func Is(any *types.Any, v interface{}) bool {
|
||||||
return any.TypeUrl == url
|
return any.TypeUrl == url
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalAny marshals the value v into an any with the correct TypeUrl
|
// MarshalAny marshals the value v into an any with the correct TypeUrl.
|
||||||
|
// If the provided object is already a proto.Any message, then it will be
|
||||||
|
// returned verbatim. If it is of type proto.Message, it will be marshaled as a
|
||||||
|
// protocol buffer. Otherwise, the object will be marshaled to json.
|
||||||
func MarshalAny(v interface{}) (*types.Any, error) {
|
func MarshalAny(v interface{}) (*types.Any, error) {
|
||||||
var marshal func(v interface{}) ([]byte, error)
|
var marshal func(v interface{}) ([]byte, error)
|
||||||
switch t := v.(type) {
|
switch t := v.(type) {
|
||||||
|
|
45
vendor/github.com/hashicorp/golang-lru/simplelru/lru_interface.go
generated
vendored
45
vendor/github.com/hashicorp/golang-lru/simplelru/lru_interface.go
generated
vendored
|
@ -1,37 +1,36 @@
|
||||||
package simplelru
|
package simplelru
|
||||||
|
|
||||||
|
|
||||||
// LRUCache is the interface for simple LRU cache.
|
// LRUCache is the interface for simple LRU cache.
|
||||||
type LRUCache interface {
|
type LRUCache interface {
|
||||||
// Adds a value to the cache, returns true if an eviction occurred and
|
// Adds a value to the cache, returns true if an eviction occurred and
|
||||||
// updates the "recently used"-ness of the key.
|
// updates the "recently used"-ness of the key.
|
||||||
Add(key, value interface{}) bool
|
Add(key, value interface{}) bool
|
||||||
|
|
||||||
// Returns key's value from the cache and
|
// Returns key's value from the cache and
|
||||||
// updates the "recently used"-ness of the key. #value, isFound
|
// updates the "recently used"-ness of the key. #value, isFound
|
||||||
Get(key interface{}) (value interface{}, ok bool)
|
Get(key interface{}) (value interface{}, ok bool)
|
||||||
|
|
||||||
// Check if a key exsists in cache without updating the recent-ness.
|
// Check if a key exsists in cache without updating the recent-ness.
|
||||||
Contains(key interface{}) (ok bool)
|
Contains(key interface{}) (ok bool)
|
||||||
|
|
||||||
// Returns key's value without updating the "recently used"-ness of the key.
|
// Returns key's value without updating the "recently used"-ness of the key.
|
||||||
Peek(key interface{}) (value interface{}, ok bool)
|
Peek(key interface{}) (value interface{}, ok bool)
|
||||||
|
|
||||||
// Removes a key from the cache.
|
// Removes a key from the cache.
|
||||||
Remove(key interface{}) bool
|
Remove(key interface{}) bool
|
||||||
|
|
||||||
// Removes the oldest entry from cache.
|
// Removes the oldest entry from cache.
|
||||||
RemoveOldest() (interface{}, interface{}, bool)
|
RemoveOldest() (interface{}, interface{}, bool)
|
||||||
|
|
||||||
// Returns the oldest entry from the cache. #key, value, isFound
|
// Returns the oldest entry from the cache. #key, value, isFound
|
||||||
GetOldest() (interface{}, interface{}, bool)
|
GetOldest() (interface{}, interface{}, bool)
|
||||||
|
|
||||||
// Returns a slice of the keys in the cache, from oldest to newest.
|
// Returns a slice of the keys in the cache, from oldest to newest.
|
||||||
Keys() []interface{}
|
Keys() []interface{}
|
||||||
|
|
||||||
// Returns the number of items in the cache.
|
// Returns the number of items in the cache.
|
||||||
Len() int
|
Len() int
|
||||||
|
|
||||||
// Clear all cache entries
|
// Clear all cache entries
|
||||||
Purge()
|
Purge()
|
||||||
}
|
}
|
||||||
|
|
2
vendor/github.com/mistifyio/go-zfs/README.md
generated
vendored
2
vendor/github.com/mistifyio/go-zfs/README.md
generated
vendored
|
@ -29,7 +29,7 @@ The tests have decent examples for most functions.
|
||||||
|
|
||||||
```go
|
```go
|
||||||
//assuming a zpool named test
|
//assuming a zpool named test
|
||||||
//error handling ommitted
|
//error handling omitted
|
||||||
|
|
||||||
|
|
||||||
f, err := zfs.CreateFilesystem("test/snapshot-test", nil)
|
f, err := zfs.CreateFilesystem("test/snapshot-test", nil)
|
||||||
|
|
22
vendor/github.com/mistifyio/go-zfs/utils.go
generated
vendored
22
vendor/github.com/mistifyio/go-zfs/utils.go
generated
vendored
|
@ -11,7 +11,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pborman/uuid"
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
type command struct {
|
type command struct {
|
||||||
|
@ -38,7 +38,7 @@ func (c *command) Run(arg ...string) ([][]string, error) {
|
||||||
}
|
}
|
||||||
cmd.Stderr = &stderr
|
cmd.Stderr = &stderr
|
||||||
|
|
||||||
id := uuid.New()
|
id := uuid.New().String()
|
||||||
joinedArgs := strings.Join(cmd.Args, " ")
|
joinedArgs := strings.Join(cmd.Args, " ")
|
||||||
|
|
||||||
logger.Log([]string{"ID:" + id, "START", joinedArgs})
|
logger.Log([]string{"ID:" + id, "START", joinedArgs})
|
||||||
|
@ -48,7 +48,7 @@ func (c *command) Run(arg ...string) ([][]string, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, &Error{
|
return nil, &Error{
|
||||||
Err: err,
|
Err: err,
|
||||||
Debug: strings.Join([]string{cmd.Path, joinedArgs}, " "),
|
Debug: strings.Join([]string{cmd.Path, joinedArgs[1:]}, " "),
|
||||||
Stderr: stderr.String(),
|
Stderr: stderr.String(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,20 +118,24 @@ func (ds *Dataset) parseLine(line []string) error {
|
||||||
if err = setUint(&ds.Quota, line[8]); err != nil {
|
if err = setUint(&ds.Quota, line[8]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err = setUint(&ds.Referenced, line[9]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if runtime.GOOS == "solaris" {
|
if runtime.GOOS == "solaris" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = setUint(&ds.Written, line[9]); err != nil {
|
if err = setUint(&ds.Written, line[10]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err = setUint(&ds.Logicalused, line[10]); err != nil {
|
if err = setUint(&ds.Logicalused, line[11]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err = setUint(&ds.Usedbydataset, line[11]); err != nil {
|
if err = setUint(&ds.Usedbydataset, line[12]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,7 +341,11 @@ func (z *Zpool) parseLine(line []string) error {
|
||||||
err = setUint(&z.Free, val)
|
err = setUint(&z.Free, val)
|
||||||
case "fragmentation":
|
case "fragmentation":
|
||||||
// Trim trailing "%" before parsing uint
|
// Trim trailing "%" before parsing uint
|
||||||
err = setUint(&z.Fragmentation, val[:len(val)-1])
|
i := strings.Index(val, "%")
|
||||||
|
if i < 0 {
|
||||||
|
i = len(val)
|
||||||
|
}
|
||||||
|
err = setUint(&z.Fragmentation, val[:i])
|
||||||
case "readonly":
|
case "readonly":
|
||||||
z.ReadOnly = val == "on"
|
z.ReadOnly = val == "on"
|
||||||
case "freeing":
|
case "freeing":
|
||||||
|
|
2
vendor/github.com/mistifyio/go-zfs/utils_notsolaris.go
generated
vendored
2
vendor/github.com/mistifyio/go-zfs/utils_notsolaris.go
generated
vendored
|
@ -7,7 +7,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// List of ZFS properties to retrieve from zfs list command on a non-Solaris platform
|
// List of ZFS properties to retrieve from zfs list command on a non-Solaris platform
|
||||||
var dsPropList = []string{"name", "origin", "used", "available", "mountpoint", "compression", "type", "volsize", "quota", "written", "logicalused", "usedbydataset"}
|
var dsPropList = []string{"name", "origin", "used", "available", "mountpoint", "compression", "type", "volsize", "quota", "referenced", "written", "logicalused", "usedbydataset"}
|
||||||
|
|
||||||
var dsPropListOptions = strings.Join(dsPropList, ",")
|
var dsPropListOptions = strings.Join(dsPropList, ",")
|
||||||
|
|
||||||
|
|
2
vendor/github.com/mistifyio/go-zfs/utils_solaris.go
generated
vendored
2
vendor/github.com/mistifyio/go-zfs/utils_solaris.go
generated
vendored
|
@ -7,7 +7,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// List of ZFS properties to retrieve from zfs list command on a Solaris platform
|
// List of ZFS properties to retrieve from zfs list command on a Solaris platform
|
||||||
var dsPropList = []string{"name", "origin", "used", "available", "mountpoint", "compression", "type", "volsize", "quota"}
|
var dsPropList = []string{"name", "origin", "used", "available", "mountpoint", "compression", "type", "volsize", "quota", "referenced"}
|
||||||
|
|
||||||
var dsPropListOptions = strings.Join(dsPropList, ",")
|
var dsPropListOptions = strings.Join(dsPropList, ",")
|
||||||
|
|
||||||
|
|
3
vendor/github.com/mistifyio/go-zfs/zfs.go
generated
vendored
3
vendor/github.com/mistifyio/go-zfs/zfs.go
generated
vendored
|
@ -35,6 +35,7 @@ type Dataset struct {
|
||||||
Logicalused uint64
|
Logicalused uint64
|
||||||
Usedbydataset uint64
|
Usedbydataset uint64
|
||||||
Quota uint64
|
Quota uint64
|
||||||
|
Referenced uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
// InodeType is the type of inode as reported by Diff
|
// InodeType is the type of inode as reported by Diff
|
||||||
|
@ -307,7 +308,7 @@ func (d *Dataset) SetProperty(key, val string) error {
|
||||||
// A full list of available ZFS properties may be found here:
|
// A full list of available ZFS properties may be found here:
|
||||||
// https://www.freebsd.org/cgi/man.cgi?zfs(8).
|
// https://www.freebsd.org/cgi/man.cgi?zfs(8).
|
||||||
func (d *Dataset) GetProperty(key string) (string, error) {
|
func (d *Dataset) GetProperty(key string) (string, error) {
|
||||||
out, err := zfs("get", key, d.Name)
|
out, err := zfs("get", "-H", key, d.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
27
vendor/github.com/pborman/uuid/LICENSE
generated
vendored
27
vendor/github.com/pborman/uuid/LICENSE
generated
vendored
|
@ -1,27 +0,0 @@
|
||||||
Copyright (c) 2009,2014 Google Inc. All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, this list of conditions and the following disclaimer
|
|
||||||
in the documentation and/or other materials provided with the
|
|
||||||
distribution.
|
|
||||||
* Neither the name of Google Inc. nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
13
vendor/github.com/pborman/uuid/README.md
generated
vendored
13
vendor/github.com/pborman/uuid/README.md
generated
vendored
|
@ -1,13 +0,0 @@
|
||||||
This project was automatically exported from code.google.com/p/go-uuid
|
|
||||||
|
|
||||||
# uuid 
|
|
||||||
The uuid package generates and inspects UUIDs based on [RFC 412](http://tools.ietf.org/html/rfc4122) and DCE 1.1: Authentication and Security Services.
|
|
||||||
|
|
||||||
###### Install
|
|
||||||
`go get github.com/pborman/uuid`
|
|
||||||
|
|
||||||
###### Documentation
|
|
||||||
[](http://godoc.org/github.com/pborman/uuid)
|
|
||||||
|
|
||||||
Full `go doc` style documentation for the package can be viewed online without installing this package by using the GoDoc site here:
|
|
||||||
http://godoc.org/github.com/pborman/uuid
|
|
84
vendor/github.com/pborman/uuid/dce.go
generated
vendored
84
vendor/github.com/pborman/uuid/dce.go
generated
vendored
|
@ -1,84 +0,0 @@
|
||||||
// Copyright 2011 Google Inc. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package uuid
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/binary"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Domain represents a Version 2 domain
|
|
||||||
type Domain byte
|
|
||||||
|
|
||||||
// Domain constants for DCE Security (Version 2) UUIDs.
|
|
||||||
const (
|
|
||||||
Person = Domain(0)
|
|
||||||
Group = Domain(1)
|
|
||||||
Org = Domain(2)
|
|
||||||
)
|
|
||||||
|
|
||||||
// NewDCESecurity returns a DCE Security (Version 2) UUID.
|
|
||||||
//
|
|
||||||
// The domain should be one of Person, Group or Org.
|
|
||||||
// On a POSIX system the id should be the users UID for the Person
|
|
||||||
// domain and the users GID for the Group. The meaning of id for
|
|
||||||
// the domain Org or on non-POSIX systems is site defined.
|
|
||||||
//
|
|
||||||
// For a given domain/id pair the same token may be returned for up to
|
|
||||||
// 7 minutes and 10 seconds.
|
|
||||||
func NewDCESecurity(domain Domain, id uint32) UUID {
|
|
||||||
uuid := NewUUID()
|
|
||||||
if uuid != nil {
|
|
||||||
uuid[6] = (uuid[6] & 0x0f) | 0x20 // Version 2
|
|
||||||
uuid[9] = byte(domain)
|
|
||||||
binary.BigEndian.PutUint32(uuid[0:], id)
|
|
||||||
}
|
|
||||||
return uuid
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewDCEPerson returns a DCE Security (Version 2) UUID in the person
|
|
||||||
// domain with the id returned by os.Getuid.
|
|
||||||
//
|
|
||||||
// NewDCEPerson(Person, uint32(os.Getuid()))
|
|
||||||
func NewDCEPerson() UUID {
|
|
||||||
return NewDCESecurity(Person, uint32(os.Getuid()))
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewDCEGroup returns a DCE Security (Version 2) UUID in the group
|
|
||||||
// domain with the id returned by os.Getgid.
|
|
||||||
//
|
|
||||||
// NewDCEGroup(Group, uint32(os.Getgid()))
|
|
||||||
func NewDCEGroup() UUID {
|
|
||||||
return NewDCESecurity(Group, uint32(os.Getgid()))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Domain returns the domain for a Version 2 UUID or false.
|
|
||||||
func (uuid UUID) Domain() (Domain, bool) {
|
|
||||||
if v, _ := uuid.Version(); v != 2 {
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
return Domain(uuid[9]), true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Id returns the id for a Version 2 UUID or false.
|
|
||||||
func (uuid UUID) Id() (uint32, bool) {
|
|
||||||
if v, _ := uuid.Version(); v != 2 {
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
return binary.BigEndian.Uint32(uuid[0:4]), true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d Domain) String() string {
|
|
||||||
switch d {
|
|
||||||
case Person:
|
|
||||||
return "Person"
|
|
||||||
case Group:
|
|
||||||
return "Group"
|
|
||||||
case Org:
|
|
||||||
return "Org"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("Domain%d", int(d))
|
|
||||||
}
|
|
8
vendor/github.com/pborman/uuid/doc.go
generated
vendored
8
vendor/github.com/pborman/uuid/doc.go
generated
vendored
|
@ -1,8 +0,0 @@
|
||||||
// Copyright 2011 Google Inc. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// The uuid package generates and inspects UUIDs.
|
|
||||||
//
|
|
||||||
// UUIDs are based on RFC 4122 and DCE 1.1: Authentication and Security Services.
|
|
||||||
package uuid
|
|
53
vendor/github.com/pborman/uuid/hash.go
generated
vendored
53
vendor/github.com/pborman/uuid/hash.go
generated
vendored
|
@ -1,53 +0,0 @@
|
||||||
// Copyright 2011 Google Inc. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package uuid
|
|
||||||
|
|
||||||
import (
|
|
||||||
"crypto/md5"
|
|
||||||
"crypto/sha1"
|
|
||||||
"hash"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Well known Name Space IDs and UUIDs
|
|
||||||
var (
|
|
||||||
NameSpace_DNS = Parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
|
|
||||||
NameSpace_URL = Parse("6ba7b811-9dad-11d1-80b4-00c04fd430c8")
|
|
||||||
NameSpace_OID = Parse("6ba7b812-9dad-11d1-80b4-00c04fd430c8")
|
|
||||||
NameSpace_X500 = Parse("6ba7b814-9dad-11d1-80b4-00c04fd430c8")
|
|
||||||
NIL = Parse("00000000-0000-0000-0000-000000000000")
|
|
||||||
)
|
|
||||||
|
|
||||||
// NewHash returns a new UUID derived from the hash of space concatenated with
|
|
||||||
// data generated by h. The hash should be at least 16 byte in length. The
|
|
||||||
// first 16 bytes of the hash are used to form the UUID. The version of the
|
|
||||||
// UUID will be the lower 4 bits of version. NewHash is used to implement
|
|
||||||
// NewMD5 and NewSHA1.
|
|
||||||
func NewHash(h hash.Hash, space UUID, data []byte, version int) UUID {
|
|
||||||
h.Reset()
|
|
||||||
h.Write(space)
|
|
||||||
h.Write([]byte(data))
|
|
||||||
s := h.Sum(nil)
|
|
||||||
uuid := make([]byte, 16)
|
|
||||||
copy(uuid, s)
|
|
||||||
uuid[6] = (uuid[6] & 0x0f) | uint8((version&0xf)<<4)
|
|
||||||
uuid[8] = (uuid[8] & 0x3f) | 0x80 // RFC 4122 variant
|
|
||||||
return uuid
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewMD5 returns a new MD5 (Version 3) UUID based on the
|
|
||||||
// supplied name space and data.
|
|
||||||
//
|
|
||||||
// NewHash(md5.New(), space, data, 3)
|
|
||||||
func NewMD5(space UUID, data []byte) UUID {
|
|
||||||
return NewHash(md5.New(), space, data, 3)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewSHA1 returns a new SHA1 (Version 5) UUID based on the
|
|
||||||
// supplied name space and data.
|
|
||||||
//
|
|
||||||
// NewHash(sha1.New(), space, data, 5)
|
|
||||||
func NewSHA1(space UUID, data []byte) UUID {
|
|
||||||
return NewHash(sha1.New(), space, data, 5)
|
|
||||||
}
|
|
34
vendor/github.com/pborman/uuid/json.go
generated
vendored
34
vendor/github.com/pborman/uuid/json.go
generated
vendored
|
@ -1,34 +0,0 @@
|
||||||
// Copyright 2014 Google Inc. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package uuid
|
|
||||||
|
|
||||||
import "errors"
|
|
||||||
|
|
||||||
func (u UUID) MarshalJSON() ([]byte, error) {
|
|
||||||
if len(u) != 16 {
|
|
||||||
return []byte(`""`), nil
|
|
||||||
}
|
|
||||||
var js [38]byte
|
|
||||||
js[0] = '"'
|
|
||||||
encodeHex(js[1:], u)
|
|
||||||
js[37] = '"'
|
|
||||||
return js[:], nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (u *UUID) UnmarshalJSON(data []byte) error {
|
|
||||||
if string(data) == `""` {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if data[0] != '"' {
|
|
||||||
return errors.New("invalid UUID format")
|
|
||||||
}
|
|
||||||
data = data[1 : len(data)-1]
|
|
||||||
uu := Parse(string(data))
|
|
||||||
if uu == nil {
|
|
||||||
return errors.New("invalid UUID format")
|
|
||||||
}
|
|
||||||
*u = uu
|
|
||||||
return nil
|
|
||||||
}
|
|
117
vendor/github.com/pborman/uuid/node.go
generated
vendored
117
vendor/github.com/pborman/uuid/node.go
generated
vendored
|
@ -1,117 +0,0 @@
|
||||||
// Copyright 2011 Google Inc. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package uuid
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
nodeMu sync.Mutex
|
|
||||||
interfaces []net.Interface // cached list of interfaces
|
|
||||||
ifname string // name of interface being used
|
|
||||||
nodeID []byte // hardware for version 1 UUIDs
|
|
||||||
)
|
|
||||||
|
|
||||||
// NodeInterface returns the name of the interface from which the NodeID was
|
|
||||||
// derived. The interface "user" is returned if the NodeID was set by
|
|
||||||
// SetNodeID.
|
|
||||||
func NodeInterface() string {
|
|
||||||
defer nodeMu.Unlock()
|
|
||||||
nodeMu.Lock()
|
|
||||||
return ifname
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetNodeInterface selects the hardware address to be used for Version 1 UUIDs.
|
|
||||||
// If name is "" then the first usable interface found will be used or a random
|
|
||||||
// Node ID will be generated. If a named interface cannot be found then false
|
|
||||||
// is returned.
|
|
||||||
//
|
|
||||||
// SetNodeInterface never fails when name is "".
|
|
||||||
func SetNodeInterface(name string) bool {
|
|
||||||
defer nodeMu.Unlock()
|
|
||||||
nodeMu.Lock()
|
|
||||||
return setNodeInterface(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func setNodeInterface(name string) bool {
|
|
||||||
if interfaces == nil {
|
|
||||||
var err error
|
|
||||||
interfaces, err = net.Interfaces()
|
|
||||||
if err != nil && name != "" {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, ifs := range interfaces {
|
|
||||||
if len(ifs.HardwareAddr) >= 6 && (name == "" || name == ifs.Name) {
|
|
||||||
if setNodeID(ifs.HardwareAddr) {
|
|
||||||
ifname = ifs.Name
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// We found no interfaces with a valid hardware address. If name
|
|
||||||
// does not specify a specific interface generate a random Node ID
|
|
||||||
// (section 4.1.6)
|
|
||||||
if name == "" {
|
|
||||||
if nodeID == nil {
|
|
||||||
nodeID = make([]byte, 6)
|
|
||||||
}
|
|
||||||
randomBits(nodeID)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// NodeID returns a slice of a copy of the current Node ID, setting the Node ID
|
|
||||||
// if not already set.
|
|
||||||
func NodeID() []byte {
|
|
||||||
defer nodeMu.Unlock()
|
|
||||||
nodeMu.Lock()
|
|
||||||
if nodeID == nil {
|
|
||||||
setNodeInterface("")
|
|
||||||
}
|
|
||||||
nid := make([]byte, 6)
|
|
||||||
copy(nid, nodeID)
|
|
||||||
return nid
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetNodeID sets the Node ID to be used for Version 1 UUIDs. The first 6 bytes
|
|
||||||
// of id are used. If id is less than 6 bytes then false is returned and the
|
|
||||||
// Node ID is not set.
|
|
||||||
func SetNodeID(id []byte) bool {
|
|
||||||
defer nodeMu.Unlock()
|
|
||||||
nodeMu.Lock()
|
|
||||||
if setNodeID(id) {
|
|
||||||
ifname = "user"
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func setNodeID(id []byte) bool {
|
|
||||||
if len(id) < 6 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if nodeID == nil {
|
|
||||||
nodeID = make([]byte, 6)
|
|
||||||
}
|
|
||||||
copy(nodeID, id)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// NodeID returns the 6 byte node id encoded in uuid. It returns nil if uuid is
|
|
||||||
// not valid. The NodeID is only well defined for version 1 and 2 UUIDs.
|
|
||||||
func (uuid UUID) NodeID() []byte {
|
|
||||||
if len(uuid) != 16 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
node := make([]byte, 6)
|
|
||||||
copy(node, uuid[10:])
|
|
||||||
return node
|
|
||||||
}
|
|
58
vendor/github.com/pborman/uuid/sql.go
generated
vendored
58
vendor/github.com/pborman/uuid/sql.go
generated
vendored
|
@ -1,58 +0,0 @@
|
||||||
// Copyright 2015 Google Inc. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package uuid
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Scan implements sql.Scanner so UUIDs can be read from databases transparently
|
|
||||||
// Currently, database types that map to string and []byte are supported. Please
|
|
||||||
// consult database-specific driver documentation for matching types.
|
|
||||||
func (uuid *UUID) Scan(src interface{}) error {
|
|
||||||
switch src.(type) {
|
|
||||||
case string:
|
|
||||||
// if an empty UUID comes from a table, we return a null UUID
|
|
||||||
if src.(string) == "" {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// see uuid.Parse for required string format
|
|
||||||
parsed := Parse(src.(string))
|
|
||||||
|
|
||||||
if parsed == nil {
|
|
||||||
return errors.New("Scan: invalid UUID format")
|
|
||||||
}
|
|
||||||
|
|
||||||
*uuid = parsed
|
|
||||||
case []byte:
|
|
||||||
b := src.([]byte)
|
|
||||||
|
|
||||||
// if an empty UUID comes from a table, we return a null UUID
|
|
||||||
if len(b) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// assumes a simple slice of bytes if 16 bytes
|
|
||||||
// otherwise attempts to parse
|
|
||||||
if len(b) == 16 {
|
|
||||||
*uuid = UUID(b)
|
|
||||||
} else {
|
|
||||||
u := Parse(string(b))
|
|
||||||
|
|
||||||
if u == nil {
|
|
||||||
return errors.New("Scan: invalid UUID format")
|
|
||||||
}
|
|
||||||
|
|
||||||
*uuid = u
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("Scan: unable to scan type %T into UUID", src)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
132
vendor/github.com/pborman/uuid/time.go
generated
vendored
132
vendor/github.com/pborman/uuid/time.go
generated
vendored
|
@ -1,132 +0,0 @@
|
||||||
// Copyright 2014 Google Inc. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package uuid
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/binary"
|
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Time represents a time as the number of 100's of nanoseconds since 15 Oct
|
|
||||||
// 1582.
|
|
||||||
type Time int64
|
|
||||||
|
|
||||||
const (
|
|
||||||
lillian = 2299160 // Julian day of 15 Oct 1582
|
|
||||||
unix = 2440587 // Julian day of 1 Jan 1970
|
|
||||||
epoch = unix - lillian // Days between epochs
|
|
||||||
g1582 = epoch * 86400 // seconds between epochs
|
|
||||||
g1582ns100 = g1582 * 10000000 // 100s of a nanoseconds between epochs
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
timeMu sync.Mutex
|
|
||||||
lasttime uint64 // last time we returned
|
|
||||||
clock_seq uint16 // clock sequence for this run
|
|
||||||
|
|
||||||
timeNow = time.Now // for testing
|
|
||||||
)
|
|
||||||
|
|
||||||
// UnixTime converts t the number of seconds and nanoseconds using the Unix
|
|
||||||
// epoch of 1 Jan 1970.
|
|
||||||
func (t Time) UnixTime() (sec, nsec int64) {
|
|
||||||
sec = int64(t - g1582ns100)
|
|
||||||
nsec = (sec % 10000000) * 100
|
|
||||||
sec /= 10000000
|
|
||||||
return sec, nsec
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetTime returns the current Time (100s of nanoseconds since 15 Oct 1582) and
|
|
||||||
// clock sequence as well as adjusting the clock sequence as needed. An error
|
|
||||||
// is returned if the current time cannot be determined.
|
|
||||||
func GetTime() (Time, uint16, error) {
|
|
||||||
defer timeMu.Unlock()
|
|
||||||
timeMu.Lock()
|
|
||||||
return getTime()
|
|
||||||
}
|
|
||||||
|
|
||||||
func getTime() (Time, uint16, error) {
|
|
||||||
t := timeNow()
|
|
||||||
|
|
||||||
// If we don't have a clock sequence already, set one.
|
|
||||||
if clock_seq == 0 {
|
|
||||||
setClockSequence(-1)
|
|
||||||
}
|
|
||||||
now := uint64(t.UnixNano()/100) + g1582ns100
|
|
||||||
|
|
||||||
// If time has gone backwards with this clock sequence then we
|
|
||||||
// increment the clock sequence
|
|
||||||
if now <= lasttime {
|
|
||||||
clock_seq = ((clock_seq + 1) & 0x3fff) | 0x8000
|
|
||||||
}
|
|
||||||
lasttime = now
|
|
||||||
return Time(now), clock_seq, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClockSequence returns the current clock sequence, generating one if not
|
|
||||||
// already set. The clock sequence is only used for Version 1 UUIDs.
|
|
||||||
//
|
|
||||||
// The uuid package does not use global static storage for the clock sequence or
|
|
||||||
// the last time a UUID was generated. Unless SetClockSequence a new random
|
|
||||||
// clock sequence is generated the first time a clock sequence is requested by
|
|
||||||
// ClockSequence, GetTime, or NewUUID. (section 4.2.1.1) sequence is generated
|
|
||||||
// for
|
|
||||||
func ClockSequence() int {
|
|
||||||
defer timeMu.Unlock()
|
|
||||||
timeMu.Lock()
|
|
||||||
return clockSequence()
|
|
||||||
}
|
|
||||||
|
|
||||||
func clockSequence() int {
|
|
||||||
if clock_seq == 0 {
|
|
||||||
setClockSequence(-1)
|
|
||||||
}
|
|
||||||
return int(clock_seq & 0x3fff)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetClockSeq sets the clock sequence to the lower 14 bits of seq. Setting to
|
|
||||||
// -1 causes a new sequence to be generated.
|
|
||||||
func SetClockSequence(seq int) {
|
|
||||||
defer timeMu.Unlock()
|
|
||||||
timeMu.Lock()
|
|
||||||
setClockSequence(seq)
|
|
||||||
}
|
|
||||||
|
|
||||||
func setClockSequence(seq int) {
|
|
||||||
if seq == -1 {
|
|
||||||
var b [2]byte
|
|
||||||
randomBits(b[:]) // clock sequence
|
|
||||||
seq = int(b[0])<<8 | int(b[1])
|
|
||||||
}
|
|
||||||
old_seq := clock_seq
|
|
||||||
clock_seq = uint16(seq&0x3fff) | 0x8000 // Set our variant
|
|
||||||
if old_seq != clock_seq {
|
|
||||||
lasttime = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Time returns the time in 100s of nanoseconds since 15 Oct 1582 encoded in
|
|
||||||
// uuid. It returns false if uuid is not valid. The time is only well defined
|
|
||||||
// for version 1 and 2 UUIDs.
|
|
||||||
func (uuid UUID) Time() (Time, bool) {
|
|
||||||
if len(uuid) != 16 {
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
time := int64(binary.BigEndian.Uint32(uuid[0:4]))
|
|
||||||
time |= int64(binary.BigEndian.Uint16(uuid[4:6])) << 32
|
|
||||||
time |= int64(binary.BigEndian.Uint16(uuid[6:8])&0xfff) << 48
|
|
||||||
return Time(time), true
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClockSequence returns the clock sequence encoded in uuid. It returns false
|
|
||||||
// if uuid is not valid. The clock sequence is only well defined for version 1
|
|
||||||
// and 2 UUIDs.
|
|
||||||
func (uuid UUID) ClockSequence() (int, bool) {
|
|
||||||
if len(uuid) != 16 {
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
return int(binary.BigEndian.Uint16(uuid[8:10])) & 0x3fff, true
|
|
||||||
}
|
|
43
vendor/github.com/pborman/uuid/util.go
generated
vendored
43
vendor/github.com/pborman/uuid/util.go
generated
vendored
|
@ -1,43 +0,0 @@
|
||||||
// Copyright 2011 Google Inc. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package uuid
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io"
|
|
||||||
)
|
|
||||||
|
|
||||||
// randomBits completely fills slice b with random data.
|
|
||||||
func randomBits(b []byte) {
|
|
||||||
if _, err := io.ReadFull(rander, b); err != nil {
|
|
||||||
panic(err.Error()) // rand should never fail
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// xvalues returns the value of a byte as a hexadecimal digit or 255.
|
|
||||||
var xvalues = [256]byte{
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
|
||||||
}
|
|
||||||
|
|
||||||
// xtob converts the the first two hex bytes of x into a byte.
|
|
||||||
func xtob(x string) (byte, bool) {
|
|
||||||
b1 := xvalues[x[0]]
|
|
||||||
b2 := xvalues[x[1]]
|
|
||||||
return (b1 << 4) | b2, b1 != 255 && b2 != 255
|
|
||||||
}
|
|
176
vendor/github.com/pborman/uuid/uuid.go
generated
vendored
176
vendor/github.com/pborman/uuid/uuid.go
generated
vendored
|
@ -1,176 +0,0 @@
|
||||||
// Copyright 2011 Google Inc. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package uuid
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"crypto/rand"
|
|
||||||
"encoding/hex"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A UUID is a 128 bit (16 byte) Universal Unique IDentifier as defined in RFC
|
|
||||||
// 4122.
|
|
||||||
type UUID []byte
|
|
||||||
|
|
||||||
// A Version represents a UUIDs version.
|
|
||||||
type Version byte
|
|
||||||
|
|
||||||
// A Variant represents a UUIDs variant.
|
|
||||||
type Variant byte
|
|
||||||
|
|
||||||
// Constants returned by Variant.
|
|
||||||
const (
|
|
||||||
Invalid = Variant(iota) // Invalid UUID
|
|
||||||
RFC4122 // The variant specified in RFC4122
|
|
||||||
Reserved // Reserved, NCS backward compatibility.
|
|
||||||
Microsoft // Reserved, Microsoft Corporation backward compatibility.
|
|
||||||
Future // Reserved for future definition.
|
|
||||||
)
|
|
||||||
|
|
||||||
var rander = rand.Reader // random function
|
|
||||||
|
|
||||||
// New returns a new random (version 4) UUID as a string. It is a convenience
|
|
||||||
// function for NewRandom().String().
|
|
||||||
func New() string {
|
|
||||||
return NewRandom().String()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse decodes s into a UUID or returns nil. Both the UUID form of
|
|
||||||
// xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and
|
|
||||||
// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx are decoded.
|
|
||||||
func Parse(s string) UUID {
|
|
||||||
if len(s) == 36+9 {
|
|
||||||
if strings.ToLower(s[:9]) != "urn:uuid:" {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
s = s[9:]
|
|
||||||
} else if len(s) != 36 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
var uuid [16]byte
|
|
||||||
for i, x := range [16]int{
|
|
||||||
0, 2, 4, 6,
|
|
||||||
9, 11,
|
|
||||||
14, 16,
|
|
||||||
19, 21,
|
|
||||||
24, 26, 28, 30, 32, 34} {
|
|
||||||
if v, ok := xtob(s[x:]); !ok {
|
|
||||||
return nil
|
|
||||||
} else {
|
|
||||||
uuid[i] = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return uuid[:]
|
|
||||||
}
|
|
||||||
|
|
||||||
// Equal returns true if uuid1 and uuid2 are equal.
|
|
||||||
func Equal(uuid1, uuid2 UUID) bool {
|
|
||||||
return bytes.Equal(uuid1, uuid2)
|
|
||||||
}
|
|
||||||
|
|
||||||
// String returns the string form of uuid, xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
|
||||||
// , or "" if uuid is invalid.
|
|
||||||
func (uuid UUID) String() string {
|
|
||||||
if len(uuid) != 16 {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
var buf [36]byte
|
|
||||||
encodeHex(buf[:], uuid)
|
|
||||||
return string(buf[:])
|
|
||||||
}
|
|
||||||
|
|
||||||
// URN returns the RFC 2141 URN form of uuid,
|
|
||||||
// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, or "" if uuid is invalid.
|
|
||||||
func (uuid UUID) URN() string {
|
|
||||||
if len(uuid) != 16 {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
var buf [36 + 9]byte
|
|
||||||
copy(buf[:], "urn:uuid:")
|
|
||||||
encodeHex(buf[9:], uuid)
|
|
||||||
return string(buf[:])
|
|
||||||
}
|
|
||||||
|
|
||||||
func encodeHex(dst []byte, uuid UUID) {
|
|
||||||
hex.Encode(dst[:], uuid[:4])
|
|
||||||
dst[8] = '-'
|
|
||||||
hex.Encode(dst[9:13], uuid[4:6])
|
|
||||||
dst[13] = '-'
|
|
||||||
hex.Encode(dst[14:18], uuid[6:8])
|
|
||||||
dst[18] = '-'
|
|
||||||
hex.Encode(dst[19:23], uuid[8:10])
|
|
||||||
dst[23] = '-'
|
|
||||||
hex.Encode(dst[24:], uuid[10:])
|
|
||||||
}
|
|
||||||
|
|
||||||
// Variant returns the variant encoded in uuid. It returns Invalid if
|
|
||||||
// uuid is invalid.
|
|
||||||
func (uuid UUID) Variant() Variant {
|
|
||||||
if len(uuid) != 16 {
|
|
||||||
return Invalid
|
|
||||||
}
|
|
||||||
switch {
|
|
||||||
case (uuid[8] & 0xc0) == 0x80:
|
|
||||||
return RFC4122
|
|
||||||
case (uuid[8] & 0xe0) == 0xc0:
|
|
||||||
return Microsoft
|
|
||||||
case (uuid[8] & 0xe0) == 0xe0:
|
|
||||||
return Future
|
|
||||||
default:
|
|
||||||
return Reserved
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Version returns the version of uuid. It returns false if uuid is not
|
|
||||||
// valid.
|
|
||||||
func (uuid UUID) Version() (Version, bool) {
|
|
||||||
if len(uuid) != 16 {
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
return Version(uuid[6] >> 4), true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v Version) String() string {
|
|
||||||
if v > 15 {
|
|
||||||
return fmt.Sprintf("BAD_VERSION_%d", v)
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("VERSION_%d", v)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v Variant) String() string {
|
|
||||||
switch v {
|
|
||||||
case RFC4122:
|
|
||||||
return "RFC4122"
|
|
||||||
case Reserved:
|
|
||||||
return "Reserved"
|
|
||||||
case Microsoft:
|
|
||||||
return "Microsoft"
|
|
||||||
case Future:
|
|
||||||
return "Future"
|
|
||||||
case Invalid:
|
|
||||||
return "Invalid"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("BadVariant%d", int(v))
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetRand sets the random number generator to r, which implents io.Reader.
|
|
||||||
// If r.Read returns an error when the package requests random data then
|
|
||||||
// a panic will be issued.
|
|
||||||
//
|
|
||||||
// Calling SetRand with nil sets the random number generator to the default
|
|
||||||
// generator.
|
|
||||||
func SetRand(r io.Reader) {
|
|
||||||
if r == nil {
|
|
||||||
rander = rand.Reader
|
|
||||||
return
|
|
||||||
}
|
|
||||||
rander = r
|
|
||||||
}
|
|
41
vendor/github.com/pborman/uuid/version1.go
generated
vendored
41
vendor/github.com/pborman/uuid/version1.go
generated
vendored
|
@ -1,41 +0,0 @@
|
||||||
// Copyright 2011 Google Inc. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package uuid
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/binary"
|
|
||||||
)
|
|
||||||
|
|
||||||
// NewUUID returns a Version 1 UUID based on the current NodeID and clock
|
|
||||||
// sequence, and the current time. If the NodeID has not been set by SetNodeID
|
|
||||||
// or SetNodeInterface then it will be set automatically. If the NodeID cannot
|
|
||||||
// be set NewUUID returns nil. If clock sequence has not been set by
|
|
||||||
// SetClockSequence then it will be set automatically. If GetTime fails to
|
|
||||||
// return the current NewUUID returns nil.
|
|
||||||
func NewUUID() UUID {
|
|
||||||
if nodeID == nil {
|
|
||||||
SetNodeInterface("")
|
|
||||||
}
|
|
||||||
|
|
||||||
now, seq, err := GetTime()
|
|
||||||
if err != nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
uuid := make([]byte, 16)
|
|
||||||
|
|
||||||
time_low := uint32(now & 0xffffffff)
|
|
||||||
time_mid := uint16((now >> 32) & 0xffff)
|
|
||||||
time_hi := uint16((now >> 48) & 0x0fff)
|
|
||||||
time_hi |= 0x1000 // Version 1
|
|
||||||
|
|
||||||
binary.BigEndian.PutUint32(uuid[0:], time_low)
|
|
||||||
binary.BigEndian.PutUint16(uuid[4:], time_mid)
|
|
||||||
binary.BigEndian.PutUint16(uuid[6:], time_hi)
|
|
||||||
binary.BigEndian.PutUint16(uuid[8:], seq)
|
|
||||||
copy(uuid[10:], nodeID)
|
|
||||||
|
|
||||||
return uuid
|
|
||||||
}
|
|
25
vendor/github.com/pborman/uuid/version4.go
generated
vendored
25
vendor/github.com/pborman/uuid/version4.go
generated
vendored
|
@ -1,25 +0,0 @@
|
||||||
// Copyright 2011 Google Inc. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package uuid
|
|
||||||
|
|
||||||
// Random returns a Random (Version 4) UUID or panics.
|
|
||||||
//
|
|
||||||
// The strength of the UUIDs is based on the strength of the crypto/rand
|
|
||||||
// package.
|
|
||||||
//
|
|
||||||
// A note about uniqueness derived from from the UUID Wikipedia entry:
|
|
||||||
//
|
|
||||||
// Randomly generated UUIDs have 122 random bits. One's annual risk of being
|
|
||||||
// hit by a meteorite is estimated to be one chance in 17 billion, that
|
|
||||||
// means the probability is about 0.00000000006 (6 × 10−11),
|
|
||||||
// equivalent to the odds of creating a few tens of trillions of UUIDs in a
|
|
||||||
// year and having one duplicate.
|
|
||||||
func NewRandom() UUID {
|
|
||||||
uuid := make([]byte, 16)
|
|
||||||
randomBits([]byte(uuid))
|
|
||||||
uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4
|
|
||||||
uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10
|
|
||||||
return uuid
|
|
||||||
}
|
|
91
vendor/github.com/syndtr/gocapability/capability/capability.go
generated
vendored
91
vendor/github.com/syndtr/gocapability/capability/capability.go
generated
vendored
|
@ -10,42 +10,42 @@ package capability
|
||||||
type Capabilities interface {
|
type Capabilities interface {
|
||||||
// Get check whether a capability present in the given
|
// Get check whether a capability present in the given
|
||||||
// capabilities set. The 'which' value should be one of EFFECTIVE,
|
// capabilities set. The 'which' value should be one of EFFECTIVE,
|
||||||
// PERMITTED, INHERITABLE or BOUNDING.
|
// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.
|
||||||
Get(which CapType, what Cap) bool
|
Get(which CapType, what Cap) bool
|
||||||
|
|
||||||
// Empty check whether all capability bits of the given capabilities
|
// Empty check whether all capability bits of the given capabilities
|
||||||
// set are zero. The 'which' value should be one of EFFECTIVE,
|
// set are zero. The 'which' value should be one of EFFECTIVE,
|
||||||
// PERMITTED, INHERITABLE or BOUNDING.
|
// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.
|
||||||
Empty(which CapType) bool
|
Empty(which CapType) bool
|
||||||
|
|
||||||
// Full check whether all capability bits of the given capabilities
|
// Full check whether all capability bits of the given capabilities
|
||||||
// set are one. The 'which' value should be one of EFFECTIVE,
|
// set are one. The 'which' value should be one of EFFECTIVE,
|
||||||
// PERMITTED, INHERITABLE or BOUNDING.
|
// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.
|
||||||
Full(which CapType) bool
|
Full(which CapType) bool
|
||||||
|
|
||||||
// Set sets capabilities of the given capabilities sets. The
|
// Set sets capabilities of the given capabilities sets. The
|
||||||
// 'which' value should be one or combination (OR'ed) of EFFECTIVE,
|
// 'which' value should be one or combination (OR'ed) of EFFECTIVE,
|
||||||
// PERMITTED, INHERITABLE or BOUNDING.
|
// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.
|
||||||
Set(which CapType, caps ...Cap)
|
Set(which CapType, caps ...Cap)
|
||||||
|
|
||||||
// Unset unsets capabilities of the given capabilities sets. The
|
// Unset unsets capabilities of the given capabilities sets. The
|
||||||
// 'which' value should be one or combination (OR'ed) of EFFECTIVE,
|
// 'which' value should be one or combination (OR'ed) of EFFECTIVE,
|
||||||
// PERMITTED, INHERITABLE or BOUNDING.
|
// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.
|
||||||
Unset(which CapType, caps ...Cap)
|
Unset(which CapType, caps ...Cap)
|
||||||
|
|
||||||
// Fill sets all bits of the given capabilities kind to one. The
|
// Fill sets all bits of the given capabilities kind to one. The
|
||||||
// 'kind' value should be one or combination (OR'ed) of CAPS or
|
// 'kind' value should be one or combination (OR'ed) of CAPS,
|
||||||
// BOUNDS.
|
// BOUNDS or AMBS.
|
||||||
Fill(kind CapType)
|
Fill(kind CapType)
|
||||||
|
|
||||||
// Clear sets all bits of the given capabilities kind to zero. The
|
// Clear sets all bits of the given capabilities kind to zero. The
|
||||||
// 'kind' value should be one or combination (OR'ed) of CAPS or
|
// 'kind' value should be one or combination (OR'ed) of CAPS,
|
||||||
// BOUNDS.
|
// BOUNDS or AMBS.
|
||||||
Clear(kind CapType)
|
Clear(kind CapType)
|
||||||
|
|
||||||
// String return current capabilities state of the given capabilities
|
// String return current capabilities state of the given capabilities
|
||||||
// set as string. The 'which' value should be one of EFFECTIVE,
|
// set as string. The 'which' value should be one of EFFECTIVE,
|
||||||
// PERMITTED, INHERITABLE or BOUNDING.
|
// PERMITTED, INHERITABLE BOUNDING or AMBIENT
|
||||||
StringCap(which CapType) string
|
StringCap(which CapType) string
|
||||||
|
|
||||||
// String return current capabilities state as string.
|
// String return current capabilities state as string.
|
||||||
|
@ -60,13 +60,74 @@ type Capabilities interface {
|
||||||
Apply(kind CapType) error
|
Apply(kind CapType) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewPid create new initialized Capabilities object for given pid when it
|
// NewPid initializes a new Capabilities object for given pid when
|
||||||
// is nonzero, or for the current pid if pid is 0
|
// it is nonzero, or for the current process if pid is 0.
|
||||||
|
//
|
||||||
|
// Deprecated: Replace with NewPid2. For example, replace:
|
||||||
|
//
|
||||||
|
// c, err := NewPid(0)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// with:
|
||||||
|
//
|
||||||
|
// c, err := NewPid2(0)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// err = c.Load()
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
func NewPid(pid int) (Capabilities, error) {
|
func NewPid(pid int) (Capabilities, error) {
|
||||||
|
c, err := newPid(pid)
|
||||||
|
if err != nil {
|
||||||
|
return c, err
|
||||||
|
}
|
||||||
|
err = c.Load()
|
||||||
|
return c, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewPid2 initializes a new Capabilities object for given pid when
|
||||||
|
// it is nonzero, or for the current process if pid is 0. This
|
||||||
|
// does not load the process's current capabilities; to do that you
|
||||||
|
// must call Load explicitly.
|
||||||
|
func NewPid2(pid int) (Capabilities, error) {
|
||||||
return newPid(pid)
|
return newPid(pid)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFile create new initialized Capabilities object for given named file.
|
// NewFile initializes a new Capabilities object for given file path.
|
||||||
func NewFile(name string) (Capabilities, error) {
|
//
|
||||||
return newFile(name)
|
// Deprecated: Replace with NewFile2. For example, replace:
|
||||||
|
//
|
||||||
|
// c, err := NewFile(path)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// with:
|
||||||
|
//
|
||||||
|
// c, err := NewFile2(path)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// err = c.Load()
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
func NewFile(path string) (Capabilities, error) {
|
||||||
|
c, err := newFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return c, err
|
||||||
|
}
|
||||||
|
err = c.Load()
|
||||||
|
return c, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewFile2 creates a new initialized Capabilities object for given
|
||||||
|
// file path. This does not load the process's current capabilities;
|
||||||
|
// to do that you must call Load explicitly.
|
||||||
|
func NewFile2(path string) (Capabilities, error) {
|
||||||
|
return newFile(path)
|
||||||
}
|
}
|
||||||
|
|
64
vendor/github.com/syndtr/gocapability/capability/capability_linux.go
generated
vendored
64
vendor/github.com/syndtr/gocapability/capability/capability_linux.go
generated
vendored
|
@ -103,21 +103,17 @@ func newPid(pid int) (c Capabilities, err error) {
|
||||||
case linuxCapVer1:
|
case linuxCapVer1:
|
||||||
p := new(capsV1)
|
p := new(capsV1)
|
||||||
p.hdr.version = capVers
|
p.hdr.version = capVers
|
||||||
p.hdr.pid = pid
|
p.hdr.pid = int32(pid)
|
||||||
c = p
|
c = p
|
||||||
case linuxCapVer2, linuxCapVer3:
|
case linuxCapVer2, linuxCapVer3:
|
||||||
p := new(capsV3)
|
p := new(capsV3)
|
||||||
p.hdr.version = capVers
|
p.hdr.version = capVers
|
||||||
p.hdr.pid = pid
|
p.hdr.pid = int32(pid)
|
||||||
c = p
|
c = p
|
||||||
default:
|
default:
|
||||||
err = errUnknownVers
|
err = errUnknownVers
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = c.Load()
|
|
||||||
if err != nil {
|
|
||||||
c = nil
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,9 +231,10 @@ func (c *capsV1) Apply(kind CapType) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type capsV3 struct {
|
type capsV3 struct {
|
||||||
hdr capHeader
|
hdr capHeader
|
||||||
data [2]capData
|
data [2]capData
|
||||||
bounds [2]uint32
|
bounds [2]uint32
|
||||||
|
ambient [2]uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *capsV3) Get(which CapType, what Cap) bool {
|
func (c *capsV3) Get(which CapType, what Cap) bool {
|
||||||
|
@ -256,6 +253,8 @@ func (c *capsV3) Get(which CapType, what Cap) bool {
|
||||||
return (1<<uint(what))&c.data[i].inheritable != 0
|
return (1<<uint(what))&c.data[i].inheritable != 0
|
||||||
case BOUNDING:
|
case BOUNDING:
|
||||||
return (1<<uint(what))&c.bounds[i] != 0
|
return (1<<uint(what))&c.bounds[i] != 0
|
||||||
|
case AMBIENT:
|
||||||
|
return (1<<uint(what))&c.ambient[i] != 0
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
|
@ -275,6 +274,9 @@ func (c *capsV3) getData(which CapType, dest []uint32) {
|
||||||
case BOUNDING:
|
case BOUNDING:
|
||||||
dest[0] = c.bounds[0]
|
dest[0] = c.bounds[0]
|
||||||
dest[1] = c.bounds[1]
|
dest[1] = c.bounds[1]
|
||||||
|
case AMBIENT:
|
||||||
|
dest[0] = c.ambient[0]
|
||||||
|
dest[1] = c.ambient[1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -313,6 +315,9 @@ func (c *capsV3) Set(which CapType, caps ...Cap) {
|
||||||
if which&BOUNDING != 0 {
|
if which&BOUNDING != 0 {
|
||||||
c.bounds[i] |= 1 << uint(what)
|
c.bounds[i] |= 1 << uint(what)
|
||||||
}
|
}
|
||||||
|
if which&AMBIENT != 0 {
|
||||||
|
c.ambient[i] |= 1 << uint(what)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -336,6 +341,9 @@ func (c *capsV3) Unset(which CapType, caps ...Cap) {
|
||||||
if which&BOUNDING != 0 {
|
if which&BOUNDING != 0 {
|
||||||
c.bounds[i] &= ^(1 << uint(what))
|
c.bounds[i] &= ^(1 << uint(what))
|
||||||
}
|
}
|
||||||
|
if which&AMBIENT != 0 {
|
||||||
|
c.ambient[i] &= ^(1 << uint(what))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -353,6 +361,10 @@ func (c *capsV3) Fill(kind CapType) {
|
||||||
c.bounds[0] = 0xffffffff
|
c.bounds[0] = 0xffffffff
|
||||||
c.bounds[1] = 0xffffffff
|
c.bounds[1] = 0xffffffff
|
||||||
}
|
}
|
||||||
|
if kind&AMBS == AMBS {
|
||||||
|
c.ambient[0] = 0xffffffff
|
||||||
|
c.ambient[1] = 0xffffffff
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *capsV3) Clear(kind CapType) {
|
func (c *capsV3) Clear(kind CapType) {
|
||||||
|
@ -369,6 +381,10 @@ func (c *capsV3) Clear(kind CapType) {
|
||||||
c.bounds[0] = 0
|
c.bounds[0] = 0
|
||||||
c.bounds[1] = 0
|
c.bounds[1] = 0
|
||||||
}
|
}
|
||||||
|
if kind&AMBS == AMBS {
|
||||||
|
c.ambient[0] = 0
|
||||||
|
c.ambient[1] = 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *capsV3) StringCap(which CapType) (ret string) {
|
func (c *capsV3) StringCap(which CapType) (ret string) {
|
||||||
|
@ -408,7 +424,11 @@ func (c *capsV3) Load() (err error) {
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(line, "CapB") {
|
if strings.HasPrefix(line, "CapB") {
|
||||||
fmt.Sscanf(line[4:], "nd: %08x%08x", &c.bounds[1], &c.bounds[0])
|
fmt.Sscanf(line[4:], "nd: %08x%08x", &c.bounds[1], &c.bounds[0])
|
||||||
break
|
continue
|
||||||
|
}
|
||||||
|
if strings.HasPrefix(line, "CapA") {
|
||||||
|
fmt.Sscanf(line[4:], "mb: %08x%08x", &c.ambient[1], &c.ambient[0])
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
f.Close()
|
f.Close()
|
||||||
|
@ -442,7 +462,25 @@ func (c *capsV3) Apply(kind CapType) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if kind&CAPS == CAPS {
|
if kind&CAPS == CAPS {
|
||||||
return capset(&c.hdr, &c.data[0])
|
err = capset(&c.hdr, &c.data[0])
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if kind&AMBS == AMBS {
|
||||||
|
for i := Cap(0); i <= CAP_LAST_CAP; i++ {
|
||||||
|
action := pr_CAP_AMBIENT_LOWER
|
||||||
|
if c.Get(AMBIENT, i) {
|
||||||
|
action = pr_CAP_AMBIENT_RAISE
|
||||||
|
}
|
||||||
|
err := prctl(pr_CAP_AMBIENT, action, uintptr(i), 0, 0)
|
||||||
|
// Ignore EINVAL as not supported on kernels before 4.3
|
||||||
|
if errno, ok := err.(syscall.Errno); ok && errno == syscall.EINVAL {
|
||||||
|
err = nil
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
@ -450,10 +488,6 @@ func (c *capsV3) Apply(kind CapType) (err error) {
|
||||||
|
|
||||||
func newFile(path string) (c Capabilities, err error) {
|
func newFile(path string) (c Capabilities, err error) {
|
||||||
c = &capsFile{path: path}
|
c = &capsFile{path: path}
|
||||||
err = c.Load()
|
|
||||||
if err != nil {
|
|
||||||
c = nil
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
vendor/github.com/syndtr/gocapability/capability/enum.go
generated
vendored
4
vendor/github.com/syndtr/gocapability/capability/enum.go
generated
vendored
|
@ -20,6 +20,8 @@ func (c CapType) String() string {
|
||||||
return "bounding"
|
return "bounding"
|
||||||
case CAPS:
|
case CAPS:
|
||||||
return "caps"
|
return "caps"
|
||||||
|
case AMBIENT:
|
||||||
|
return "ambient"
|
||||||
}
|
}
|
||||||
return "unknown"
|
return "unknown"
|
||||||
}
|
}
|
||||||
|
@ -29,9 +31,11 @@ const (
|
||||||
PERMITTED
|
PERMITTED
|
||||||
INHERITABLE
|
INHERITABLE
|
||||||
BOUNDING
|
BOUNDING
|
||||||
|
AMBIENT
|
||||||
|
|
||||||
CAPS = EFFECTIVE | PERMITTED | INHERITABLE
|
CAPS = EFFECTIVE | PERMITTED | INHERITABLE
|
||||||
BOUNDS = BOUNDING
|
BOUNDS = BOUNDING
|
||||||
|
AMBS = AMBIENT
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:generate go run enumgen/gen.go
|
//go:generate go run enumgen/gen.go
|
||||||
|
|
11
vendor/github.com/syndtr/gocapability/capability/syscall_linux.go
generated
vendored
11
vendor/github.com/syndtr/gocapability/capability/syscall_linux.go
generated
vendored
|
@ -13,7 +13,7 @@ import (
|
||||||
|
|
||||||
type capHeader struct {
|
type capHeader struct {
|
||||||
version uint32
|
version uint32
|
||||||
pid int
|
pid int32
|
||||||
}
|
}
|
||||||
|
|
||||||
type capData struct {
|
type capData struct {
|
||||||
|
@ -38,6 +38,15 @@ func capset(hdr *capHeader, data *capData) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// not yet in syscall
|
||||||
|
const (
|
||||||
|
pr_CAP_AMBIENT = 47
|
||||||
|
pr_CAP_AMBIENT_IS_SET = uintptr(1)
|
||||||
|
pr_CAP_AMBIENT_RAISE = uintptr(2)
|
||||||
|
pr_CAP_AMBIENT_LOWER = uintptr(3)
|
||||||
|
pr_CAP_AMBIENT_CLEAR_ALL = uintptr(4)
|
||||||
|
)
|
||||||
|
|
||||||
func prctl(option int, arg2, arg3, arg4, arg5 uintptr) (err error) {
|
func prctl(option int, arg2, arg3, arg4, arg5 uintptr) (err error) {
|
||||||
_, _, e1 := syscall.Syscall6(syscall.SYS_PRCTL, uintptr(option), arg2, arg3, arg4, arg5, 0)
|
_, _, e1 := syscall.Syscall6(syscall.SYS_PRCTL, uintptr(option), arg2, arg3, arg4, arg5, 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue