mirror of
https://github.com/opencontainers/runc.git
synced 2025-10-04 23:23:09 +08:00
Merge pull request #2242 from AkihiroSuda/vendor-systemd
vendor: update go-systemd and godbus
This commit is contained in:
4
go.mod
4
go.mod
@@ -6,10 +6,10 @@ require (
|
|||||||
github.com/checkpoint-restore/go-criu v0.0.0-20181120144056-17b0214f6c48
|
github.com/checkpoint-restore/go-criu v0.0.0-20181120144056-17b0214f6c48
|
||||||
github.com/cilium/ebpf v0.0.0-20191025125908-95b36a581eed
|
github.com/cilium/ebpf v0.0.0-20191025125908-95b36a581eed
|
||||||
github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50
|
github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50
|
||||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e
|
github.com/coreos/go-systemd/v22 v22.0.0
|
||||||
github.com/cyphar/filepath-securejoin v0.2.2
|
github.com/cyphar/filepath-securejoin v0.2.2
|
||||||
github.com/docker/go-units v0.3.3
|
github.com/docker/go-units v0.3.3
|
||||||
github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f
|
github.com/godbus/dbus/v5 v5.0.3
|
||||||
github.com/golang/protobuf v1.0.0
|
github.com/golang/protobuf v1.0.0
|
||||||
github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618
|
github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618
|
||||||
github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559
|
github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559
|
||||||
|
8
go.sum
8
go.sum
@@ -4,16 +4,16 @@ github.com/cilium/ebpf v0.0.0-20191025125908-95b36a581eed h1:/UgmF+cZTm9kp4uJ122
|
|||||||
github.com/cilium/ebpf v0.0.0-20191025125908-95b36a581eed/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg=
|
github.com/cilium/ebpf v0.0.0-20191025125908-95b36a581eed/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg=
|
||||||
github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50 h1:WMpHmC6AxwWb9hMqhudkqG7A/p14KiMnl6d3r1iUMjU=
|
github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50 h1:WMpHmC6AxwWb9hMqhudkqG7A/p14KiMnl6d3r1iUMjU=
|
||||||
github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
||||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8=
|
github.com/coreos/go-systemd/v22 v22.0.0 h1:XJIw/+VlJ+87J+doOxznsAWIdmWuViOVhkQamW5YV28=
|
||||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
|
||||||
github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg=
|
github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg=
|
||||||
github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
|
github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/docker/go-units v0.3.3 h1:Xk8S3Xj5sLGlG5g67hJmYMmUgXv5N4PhkjJHHqrwnTk=
|
github.com/docker/go-units v0.3.3 h1:Xk8S3Xj5sLGlG5g67hJmYMmUgXv5N4PhkjJHHqrwnTk=
|
||||||
github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||||
github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f h1:zlOR3rOlPAVvtfuxGKoghCmop5B0TRyu/ZieziZuGiM=
|
github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME=
|
||||||
github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
|
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||||
github.com/golang/protobuf v1.0.0 h1:lsek0oXi8iFE9L+EXARyHIjU5rlWIhhTkjDz3vHhWWQ=
|
github.com/golang/protobuf v1.0.0 h1:lsek0oXi8iFE9L+EXARyHIjU5rlWIhhTkjDz3vHhWWQ=
|
||||||
github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
|
||||||
|
@@ -13,8 +13,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
systemdDbus "github.com/coreos/go-systemd/dbus"
|
systemdDbus "github.com/coreos/go-systemd/v22/dbus"
|
||||||
"github.com/godbus/dbus"
|
dbus "github.com/godbus/dbus/v5"
|
||||||
"github.com/opencontainers/runc/libcontainer/cgroups"
|
"github.com/opencontainers/runc/libcontainer/cgroups"
|
||||||
"github.com/opencontainers/runc/libcontainer/cgroups/fs"
|
"github.com/opencontainers/runc/libcontainer/cgroups/fs"
|
||||||
"github.com/opencontainers/runc/libcontainer/configs"
|
"github.com/opencontainers/runc/libcontainer/configs"
|
||||||
|
@@ -12,7 +12,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
systemdDbus "github.com/coreos/go-systemd/dbus"
|
systemdDbus "github.com/coreos/go-systemd/v22/dbus"
|
||||||
"github.com/opencontainers/runc/libcontainer/cgroups"
|
"github.com/opencontainers/runc/libcontainer/cgroups"
|
||||||
"github.com/opencontainers/runc/libcontainer/cgroups/fs2"
|
"github.com/opencontainers/runc/libcontainer/cgroups/fs2"
|
||||||
"github.com/opencontainers/runc/libcontainer/configs"
|
"github.com/opencontainers/runc/libcontainer/configs"
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
package configs
|
package configs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
systemdDbus "github.com/coreos/go-systemd/dbus"
|
systemdDbus "github.com/coreos/go-systemd/v22/dbus"
|
||||||
)
|
)
|
||||||
|
|
||||||
type FreezerState string
|
type FreezerState string
|
||||||
|
@@ -13,8 +13,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
systemdDbus "github.com/coreos/go-systemd/dbus"
|
systemdDbus "github.com/coreos/go-systemd/v22/dbus"
|
||||||
"github.com/godbus/dbus"
|
dbus "github.com/godbus/dbus/v5"
|
||||||
"github.com/opencontainers/runc/libcontainer/cgroups"
|
"github.com/opencontainers/runc/libcontainer/cgroups"
|
||||||
"github.com/opencontainers/runc/libcontainer/configs"
|
"github.com/opencontainers/runc/libcontainer/configs"
|
||||||
"github.com/opencontainers/runc/libcontainer/seccomp"
|
"github.com/opencontainers/runc/libcontainer/seccomp"
|
||||||
|
@@ -9,7 +9,7 @@ import (
|
|||||||
|
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
|
|
||||||
"github.com/godbus/dbus"
|
dbus "github.com/godbus/dbus/v5"
|
||||||
"github.com/opencontainers/runc/libcontainer/configs"
|
"github.com/opencontainers/runc/libcontainer/configs"
|
||||||
"github.com/opencontainers/runc/libcontainer/configs/validate"
|
"github.com/opencontainers/runc/libcontainer/configs/validate"
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
|
@@ -19,7 +19,7 @@ import (
|
|||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
selinux "github.com/opencontainers/selinux/go-selinux"
|
selinux "github.com/opencontainers/selinux/go-selinux"
|
||||||
|
|
||||||
"github.com/coreos/go-systemd/activation"
|
"github.com/coreos/go-systemd/v22/activation"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
@@ -67,7 +67,7 @@ func TLSListeners(tlsConfig *tls.Config) ([]net.Listener, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if tlsConfig != nil && err == nil {
|
if tlsConfig != nil {
|
||||||
for i, l := range listeners {
|
for i, l := range listeners {
|
||||||
// Activate TLS only for TCP sockets
|
// Activate TLS only for TCP sockets
|
||||||
if l.Addr().Network() == "tcp" {
|
if l.Addr().Network() == "tcp" {
|
||||||
@@ -88,7 +88,7 @@ func TLSListenersWithNames(tlsConfig *tls.Config) (map[string][]net.Listener, er
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if tlsConfig != nil && err == nil {
|
if tlsConfig != nil {
|
||||||
for _, ll := range listeners {
|
for _, ll := range listeners {
|
||||||
// Activate TLS only for TCP sockets
|
// Activate TLS only for TCP sockets
|
||||||
for i, l := range ll {
|
for i, l := range ll {
|
@@ -23,7 +23,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/godbus/dbus"
|
"github.com/godbus/dbus/v5"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
@@ -20,7 +20,7 @@ import (
|
|||||||
"path"
|
"path"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/godbus/dbus"
|
"github.com/godbus/dbus/v5"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *Conn) jobComplete(signal *dbus.Signal) {
|
func (c *Conn) jobComplete(signal *dbus.Signal) {
|
||||||
@@ -197,6 +197,12 @@ func (c *Conn) GetUnitPathProperties(path dbus.ObjectPath) (map[string]interface
|
|||||||
return c.getProperties(path, "org.freedesktop.systemd1.Unit")
|
return c.getProperties(path, "org.freedesktop.systemd1.Unit")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetAllProperties takes the (unescaped) unit name and returns all of its dbus object properties.
|
||||||
|
func (c *Conn) GetAllProperties(unit string) (map[string]interface{}, error) {
|
||||||
|
path := unitPath(unit)
|
||||||
|
return c.getProperties(path, "")
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Conn) getProperty(unit string, dbusInterface string, propertyName string) (*Property, error) {
|
func (c *Conn) getProperty(unit string, dbusInterface string, propertyName string) (*Property, error) {
|
||||||
var err error
|
var err error
|
||||||
var prop dbus.Variant
|
var prop dbus.Variant
|
@@ -15,7 +15,7 @@
|
|||||||
package dbus
|
package dbus
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/godbus/dbus"
|
"github.com/godbus/dbus/v5"
|
||||||
)
|
)
|
||||||
|
|
||||||
// From the systemd docs:
|
// From the systemd docs:
|
||||||
@@ -56,7 +56,7 @@ type execStart struct {
|
|||||||
// http://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=
|
// http://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=
|
||||||
func PropExecStart(command []string, uncleanIsFailure bool) Property {
|
func PropExecStart(command []string, uncleanIsFailure bool) Property {
|
||||||
execStarts := []execStart{
|
execStarts := []execStart{
|
||||||
execStart{
|
{
|
||||||
Path: command[0],
|
Path: command[0],
|
||||||
Args: command,
|
Args: command,
|
||||||
UncleanIsFailure: uncleanIsFailure,
|
UncleanIsFailure: uncleanIsFailure,
|
@@ -19,7 +19,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/godbus/dbus"
|
"github.com/godbus/dbus/v5"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
46
vendor/github.com/godbus/dbus/.travis.yml
generated
vendored
46
vendor/github.com/godbus/dbus/.travis.yml
generated
vendored
@@ -1,46 +0,0 @@
|
|||||||
dist: precise
|
|
||||||
language: go
|
|
||||||
go_import_path: github.com/godbus/dbus
|
|
||||||
sudo: true
|
|
||||||
|
|
||||||
go:
|
|
||||||
- 1.7.3
|
|
||||||
- 1.8.7
|
|
||||||
- 1.9.5
|
|
||||||
- 1.10.1
|
|
||||||
- tip
|
|
||||||
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
matrix:
|
|
||||||
- TARGET=amd64
|
|
||||||
- TARGET=arm64
|
|
||||||
- TARGET=arm
|
|
||||||
- TARGET=386
|
|
||||||
- TARGET=ppc64le
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
fast_finish: true
|
|
||||||
allow_failures:
|
|
||||||
- go: tip
|
|
||||||
exclude:
|
|
||||||
- go: tip
|
|
||||||
env: TARGET=arm
|
|
||||||
- go: tip
|
|
||||||
env: TARGET=arm64
|
|
||||||
- go: tip
|
|
||||||
env: TARGET=386
|
|
||||||
- go: tip
|
|
||||||
env: TARGET=ppc64le
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- dbus
|
|
||||||
- dbus-x11
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
|
|
||||||
script:
|
|
||||||
- go test -v -race ./... # Run all the tests with the race detector enabled
|
|
||||||
- go vet ./... # go vet is the official Go static analyzer
|
|
1
vendor/github.com/godbus/dbus/go.mod
generated
vendored
1
vendor/github.com/godbus/dbus/go.mod
generated
vendored
@@ -1 +0,0 @@
|
|||||||
module github.com/godbus/dbus
|
|
50
vendor/github.com/godbus/dbus/v5/.travis.yml
generated
vendored
Normal file
50
vendor/github.com/godbus/dbus/v5/.travis.yml
generated
vendored
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
dist: bionic
|
||||||
|
language: go
|
||||||
|
go_import_path: github.com/godbus/dbus
|
||||||
|
|
||||||
|
go:
|
||||||
|
- 1.11.x
|
||||||
|
- 1.12.x
|
||||||
|
- 1.13.x
|
||||||
|
- tip
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
fast_finish: true
|
||||||
|
allow_failures:
|
||||||
|
- go: tip
|
||||||
|
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- dbus
|
||||||
|
- dbus-x11
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- export GO111MODULE=on
|
||||||
|
|
||||||
|
script:
|
||||||
|
- go test -v -race -mod=readonly ./... # Run all the tests with the race detector enabled
|
||||||
|
- go vet ./... # go vet is the official Go static analyzer
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
include:
|
||||||
|
# The build matrix doesn't cover build stages, so manually expand
|
||||||
|
# the jobs with anchors
|
||||||
|
- &multiarch
|
||||||
|
stage: "Multiarch Test"
|
||||||
|
go: 1.11.x
|
||||||
|
env: TARGETS="386 arm arm64 ppc64le"
|
||||||
|
before_install:
|
||||||
|
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||||
|
script:
|
||||||
|
- |
|
||||||
|
set -e
|
||||||
|
for target in $TARGETS; do
|
||||||
|
printf "\e[1mRunning test suite under ${target}.\e[0m\n"
|
||||||
|
GOARCH="$target" go test -v ./...
|
||||||
|
printf "\n\n"
|
||||||
|
done
|
||||||
|
- <<: *multiarch
|
||||||
|
go: 1.12.x
|
||||||
|
- <<: *multiarch
|
||||||
|
go: 1.13.x
|
0
vendor/github.com/godbus/dbus/LICENSE → vendor/github.com/godbus/dbus/v5/LICENSE
generated
vendored
0
vendor/github.com/godbus/dbus/LICENSE → vendor/github.com/godbus/dbus/v5/LICENSE
generated
vendored
4
vendor/github.com/godbus/dbus/auth.go → vendor/github.com/godbus/dbus/v5/auth.go
generated
vendored
4
vendor/github.com/godbus/dbus/auth.go → vendor/github.com/godbus/dbus/v5/auth.go
generated
vendored
@@ -77,7 +77,7 @@ func (conn *Conn) Auth(methods []Auth) error {
|
|||||||
for _, m := range methods {
|
for _, m := range methods {
|
||||||
if name, data, status := m.FirstData(); bytes.Equal(v, name) {
|
if name, data, status := m.FirstData(); bytes.Equal(v, name) {
|
||||||
var ok bool
|
var ok bool
|
||||||
err = authWriteLine(conn.transport, []byte("AUTH"), []byte(v), data)
|
err = authWriteLine(conn.transport, []byte("AUTH"), v, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -127,7 +127,7 @@ func (conn *Conn) Auth(methods []Auth) error {
|
|||||||
// tryAuth tries to authenticate with m as the mechanism, using state as the
|
// tryAuth tries to authenticate with m as the mechanism, using state as the
|
||||||
// initial authState and in for reading input. It returns (nil, true) on
|
// initial authState and in for reading input. It returns (nil, true) on
|
||||||
// success, (nil, false) on a REJECTED and (someErr, false) if some other
|
// success, (nil, false) on a REJECTED and (someErr, false) if some other
|
||||||
// error occured.
|
// error occurred.
|
||||||
func (conn *Conn) tryAuth(m Auth, state authState, in *bufio.Reader) (error, bool) {
|
func (conn *Conn) tryAuth(m Auth, state authState, in *bufio.Reader) (error, bool) {
|
||||||
for {
|
for {
|
||||||
s, err := authReadLine(in)
|
s, err := authReadLine(in)
|
@@ -60,7 +60,7 @@ func (a authCookieSha1) HandleData(data []byte) ([]byte, AuthStatus) {
|
|||||||
|
|
||||||
// getCookie searches for the cookie identified by id in context and returns
|
// getCookie searches for the cookie identified by id in context and returns
|
||||||
// the cookie content or nil. (Since HandleData can't return a specific error,
|
// the cookie content or nil. (Since HandleData can't return a specific error,
|
||||||
// but only whether an error occured, this function also doesn't bother to
|
// but only whether an error occurred, this function also doesn't bother to
|
||||||
// return an error.)
|
// return an error.)
|
||||||
func (a authCookieSha1) getCookie(context, id []byte) []byte {
|
func (a authCookieSha1) getCookie(context, id []byte) []byte {
|
||||||
file, err := os.Open(a.home + "/.dbus-keyrings/" + string(context))
|
file, err := os.Open(a.home + "/.dbus-keyrings/" + string(context))
|
0
vendor/github.com/godbus/dbus/call.go → vendor/github.com/godbus/dbus/v5/call.go
generated
vendored
0
vendor/github.com/godbus/dbus/call.go → vendor/github.com/godbus/dbus/v5/call.go
generated
vendored
141
vendor/github.com/godbus/dbus/conn.go → vendor/github.com/godbus/dbus/v5/conn.go
generated
vendored
141
vendor/github.com/godbus/dbus/conn.go → vendor/github.com/godbus/dbus/v5/conn.go
generated
vendored
@@ -5,7 +5,6 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
@@ -31,6 +30,12 @@ var ErrClosed = errors.New("dbus: connection closed by user")
|
|||||||
type Conn struct {
|
type Conn struct {
|
||||||
transport
|
transport
|
||||||
|
|
||||||
|
ctx context.Context
|
||||||
|
cancelCtx context.CancelFunc
|
||||||
|
|
||||||
|
closeOnce sync.Once
|
||||||
|
closeErr error
|
||||||
|
|
||||||
busObj BusObject
|
busObj BusObject
|
||||||
unixFD bool
|
unixFD bool
|
||||||
uuid string
|
uuid string
|
||||||
@@ -38,6 +43,8 @@ type Conn struct {
|
|||||||
handler Handler
|
handler Handler
|
||||||
signalHandler SignalHandler
|
signalHandler SignalHandler
|
||||||
serialGen SerialGenerator
|
serialGen SerialGenerator
|
||||||
|
inInt Interceptor
|
||||||
|
outInt Interceptor
|
||||||
|
|
||||||
names *nameTracker
|
names *nameTracker
|
||||||
calls *callTracker
|
calls *callTracker
|
||||||
@@ -134,6 +141,8 @@ func SystemBus() (conn *Conn, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SystemBusPrivate returns a new private connection to the system bus.
|
// SystemBusPrivate returns a new private connection to the system bus.
|
||||||
|
// Note: this connection is not ready to use. One must perform Auth and Hello
|
||||||
|
// on the connection before it is useable.
|
||||||
func SystemBusPrivate(opts ...ConnOption) (*Conn, error) {
|
func SystemBusPrivate(opts ...ConnOption) (*Conn, error) {
|
||||||
return Dial(getSystemBusPlatformAddress(), opts...)
|
return Dial(getSystemBusPlatformAddress(), opts...)
|
||||||
}
|
}
|
||||||
@@ -188,6 +197,33 @@ func WithSerialGenerator(gen SerialGenerator) ConnOption {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Interceptor intercepts incoming and outgoing messages.
|
||||||
|
type Interceptor func(msg *Message)
|
||||||
|
|
||||||
|
// WithIncomingInterceptor sets the given interceptor for incoming messages.
|
||||||
|
func WithIncomingInterceptor(interceptor Interceptor) ConnOption {
|
||||||
|
return func(conn *Conn) error {
|
||||||
|
conn.inInt = interceptor
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithOutgoingInterceptor sets the given interceptor for outgoing messages.
|
||||||
|
func WithOutgoingInterceptor(interceptor Interceptor) ConnOption {
|
||||||
|
return func(conn *Conn) error {
|
||||||
|
conn.outInt = interceptor
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithContext overrides the default context for the connection.
|
||||||
|
func WithContext(ctx context.Context) ConnOption {
|
||||||
|
return func(conn *Conn) error {
|
||||||
|
conn.ctx = ctx
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NewConn creates a new private *Conn from an already established connection.
|
// NewConn creates a new private *Conn from an already established connection.
|
||||||
func NewConn(conn io.ReadWriteCloser, opts ...ConnOption) (*Conn, error) {
|
func NewConn(conn io.ReadWriteCloser, opts ...ConnOption) (*Conn, error) {
|
||||||
return newConn(genericTransport{conn}, opts...)
|
return newConn(genericTransport{conn}, opts...)
|
||||||
@@ -209,6 +245,15 @@ func newConn(tr transport, opts ...ConnOption) (*Conn, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if conn.ctx == nil {
|
||||||
|
conn.ctx = context.Background()
|
||||||
|
}
|
||||||
|
conn.ctx, conn.cancelCtx = context.WithCancel(conn.ctx)
|
||||||
|
go func() {
|
||||||
|
<-conn.ctx.Done()
|
||||||
|
conn.Close()
|
||||||
|
}()
|
||||||
|
|
||||||
conn.calls = newCallTracker()
|
conn.calls = newCallTracker()
|
||||||
if conn.handler == nil {
|
if conn.handler == nil {
|
||||||
conn.handler = NewDefaultHandler()
|
conn.handler = NewDefaultHandler()
|
||||||
@@ -235,6 +280,7 @@ func (conn *Conn) BusObject() BusObject {
|
|||||||
// and the channels passed to Eavesdrop and Signal are closed. This method must
|
// and the channels passed to Eavesdrop and Signal are closed. This method must
|
||||||
// not be called on shared connections.
|
// not be called on shared connections.
|
||||||
func (conn *Conn) Close() error {
|
func (conn *Conn) Close() error {
|
||||||
|
conn.closeOnce.Do(func() {
|
||||||
conn.outHandler.close()
|
conn.outHandler.close()
|
||||||
if term, ok := conn.signalHandler.(Terminator); ok {
|
if term, ok := conn.signalHandler.(Terminator); ok {
|
||||||
term.Terminate()
|
term.Terminate()
|
||||||
@@ -250,12 +296,22 @@ func (conn *Conn) Close() error {
|
|||||||
}
|
}
|
||||||
conn.eavesdroppedLck.Unlock()
|
conn.eavesdroppedLck.Unlock()
|
||||||
|
|
||||||
return conn.transport.Close()
|
conn.cancelCtx()
|
||||||
|
|
||||||
|
conn.closeErr = conn.transport.Close()
|
||||||
|
})
|
||||||
|
return conn.closeErr
|
||||||
|
}
|
||||||
|
|
||||||
|
// Context returns the context associated with the connection. The
|
||||||
|
// context will be cancelled when the connection is closed.
|
||||||
|
func (conn *Conn) Context() context.Context {
|
||||||
|
return conn.ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
// Eavesdrop causes conn to send all incoming messages to the given channel
|
// Eavesdrop causes conn to send all incoming messages to the given channel
|
||||||
// without further processing. Method replies, errors and signals will not be
|
// without further processing. Method replies, errors and signals will not be
|
||||||
// sent to the appropiate channels and method calls will not be handled. If nil
|
// sent to the appropriate channels and method calls will not be handled. If nil
|
||||||
// is passed, the normal behaviour is restored.
|
// is passed, the normal behaviour is restored.
|
||||||
//
|
//
|
||||||
// The caller has to make sure that ch is sufficiently buffered;
|
// The caller has to make sure that ch is sufficiently buffered;
|
||||||
@@ -267,7 +323,7 @@ func (conn *Conn) Eavesdrop(ch chan<- *Message) {
|
|||||||
conn.eavesdroppedLck.Unlock()
|
conn.eavesdroppedLck.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSerial returns an unused serial.
|
// getSerial returns an unused serial.
|
||||||
func (conn *Conn) getSerial() uint32 {
|
func (conn *Conn) getSerial() uint32 {
|
||||||
return conn.serialGen.GetSerial()
|
return conn.serialGen.GetSerial()
|
||||||
}
|
}
|
||||||
@@ -292,7 +348,7 @@ func (conn *Conn) inWorker() {
|
|||||||
msg, err := conn.ReadMessage()
|
msg, err := conn.ReadMessage()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if _, ok := err.(InvalidMessageError); !ok {
|
if _, ok := err.(InvalidMessageError); !ok {
|
||||||
// Some read error occured (usually EOF); we can't really do
|
// Some read error occurred (usually EOF); we can't really do
|
||||||
// anything but to shut down all stuff and returns errors to all
|
// anything but to shut down all stuff and returns errors to all
|
||||||
// pending replies.
|
// pending replies.
|
||||||
conn.Close()
|
conn.Close()
|
||||||
@@ -321,6 +377,10 @@ func (conn *Conn) inWorker() {
|
|||||||
// Ignore it.
|
// Ignore it.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if conn.inInt != nil {
|
||||||
|
conn.inInt(msg)
|
||||||
|
}
|
||||||
switch msg.Type {
|
switch msg.Type {
|
||||||
case TypeError:
|
case TypeError:
|
||||||
conn.serialGen.RetireSerial(conn.calls.handleDBusError(msg))
|
conn.serialGen.RetireSerial(conn.calls.handleDBusError(msg))
|
||||||
@@ -381,13 +441,10 @@ func (conn *Conn) Object(dest string, path ObjectPath) BusObject {
|
|||||||
return &Object{conn, dest, path}
|
return &Object{conn, dest, path}
|
||||||
}
|
}
|
||||||
|
|
||||||
// outWorker runs in an own goroutine, encoding and sending messages that are
|
|
||||||
// sent to conn.out.
|
|
||||||
func (conn *Conn) sendMessage(msg *Message) {
|
|
||||||
conn.sendMessageAndIfClosed(msg, func() {})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (conn *Conn) sendMessageAndIfClosed(msg *Message, ifClosed func()) {
|
func (conn *Conn) sendMessageAndIfClosed(msg *Message, ifClosed func()) {
|
||||||
|
if conn.outInt != nil {
|
||||||
|
conn.outInt(msg)
|
||||||
|
}
|
||||||
err := conn.outHandler.sendAndIfClosed(msg, ifClosed)
|
err := conn.outHandler.sendAndIfClosed(msg, ifClosed)
|
||||||
conn.calls.handleSendError(msg, err)
|
conn.calls.handleSendError(msg, err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -483,7 +540,7 @@ func (conn *Conn) sendError(err error, dest string, serial uint32) {
|
|||||||
if len(e.Body) > 0 {
|
if len(e.Body) > 0 {
|
||||||
msg.Headers[FieldSignature] = MakeVariant(SignatureOf(e.Body...))
|
msg.Headers[FieldSignature] = MakeVariant(SignatureOf(e.Body...))
|
||||||
}
|
}
|
||||||
conn.sendMessage(msg)
|
conn.sendMessageAndIfClosed(msg, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// sendReply creates a method reply message corresponding to the parameters and
|
// sendReply creates a method reply message corresponding to the parameters and
|
||||||
@@ -501,33 +558,54 @@ func (conn *Conn) sendReply(dest string, serial uint32, values ...interface{}) {
|
|||||||
if len(values) > 0 {
|
if len(values) > 0 {
|
||||||
msg.Headers[FieldSignature] = MakeVariant(SignatureOf(values...))
|
msg.Headers[FieldSignature] = MakeVariant(SignatureOf(values...))
|
||||||
}
|
}
|
||||||
conn.sendMessage(msg)
|
conn.sendMessageAndIfClosed(msg, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (conn *Conn) defaultSignalAction(fn func(h *defaultSignalHandler, ch chan<- *Signal), ch chan<- *Signal) {
|
// AddMatchSignal registers the given match rule to receive broadcast
|
||||||
if !isDefaultSignalHandler(conn.signalHandler) {
|
// signals based on their contents.
|
||||||
return
|
func (conn *Conn) AddMatchSignal(options ...MatchOption) error {
|
||||||
}
|
options = append([]MatchOption{withMatchType("signal")}, options...)
|
||||||
handler := conn.signalHandler.(*defaultSignalHandler)
|
return conn.busObj.Call(
|
||||||
fn(handler, ch)
|
"org.freedesktop.DBus.AddMatch", 0,
|
||||||
|
formatMatchOptions(options),
|
||||||
|
).Store()
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveMatchSignal removes the first rule that matches previously registered with AddMatchSignal.
|
||||||
|
func (conn *Conn) RemoveMatchSignal(options ...MatchOption) error {
|
||||||
|
options = append([]MatchOption{withMatchType("signal")}, options...)
|
||||||
|
return conn.busObj.Call(
|
||||||
|
"org.freedesktop.DBus.RemoveMatch", 0,
|
||||||
|
formatMatchOptions(options),
|
||||||
|
).Store()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Signal registers the given channel to be passed all received signal messages.
|
// Signal registers the given channel to be passed all received signal messages.
|
||||||
// The caller has to make sure that ch is sufficiently buffered; if a message
|
|
||||||
// arrives when a write to c is not possible, it is discarded.
|
|
||||||
//
|
//
|
||||||
// Multiple of these channels can be registered at the same time.
|
// Multiple of these channels can be registered at the same time.
|
||||||
//
|
//
|
||||||
// These channels are "overwritten" by Eavesdrop; i.e., if there currently is a
|
// These channels are "overwritten" by Eavesdrop; i.e., if there currently is a
|
||||||
// channel for eavesdropped messages, this channel receives all signals, and
|
// channel for eavesdropped messages, this channel receives all signals, and
|
||||||
// none of the channels passed to Signal will receive any signals.
|
// none of the channels passed to Signal will receive any signals.
|
||||||
|
//
|
||||||
|
// Panics if the signal handler is not a `SignalRegistrar`.
|
||||||
func (conn *Conn) Signal(ch chan<- *Signal) {
|
func (conn *Conn) Signal(ch chan<- *Signal) {
|
||||||
conn.defaultSignalAction((*defaultSignalHandler).addSignal, ch)
|
handler, ok := conn.signalHandler.(SignalRegistrar)
|
||||||
|
if !ok {
|
||||||
|
panic("cannot use this method with a non SignalRegistrar handler")
|
||||||
|
}
|
||||||
|
handler.AddSignal(ch)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveSignal removes the given channel from the list of the registered channels.
|
// RemoveSignal removes the given channel from the list of the registered channels.
|
||||||
|
//
|
||||||
|
// Panics if the signal handler is not a `SignalRegistrar`.
|
||||||
func (conn *Conn) RemoveSignal(ch chan<- *Signal) {
|
func (conn *Conn) RemoveSignal(ch chan<- *Signal) {
|
||||||
conn.defaultSignalAction((*defaultSignalHandler).removeSignal, ch)
|
handler, ok := conn.signalHandler.(SignalRegistrar)
|
||||||
|
if !ok {
|
||||||
|
panic("cannot use this method with a non SignalRegistrar handler")
|
||||||
|
}
|
||||||
|
handler.RemoveSignal(ch)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SupportsUnixFDs returns whether the underlying transport supports passing of
|
// SupportsUnixFDs returns whether the underlying transport supports passing of
|
||||||
@@ -614,18 +692,6 @@ func getTransport(address string) (transport, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// dereferenceAll returns a slice that, assuming that vs is a slice of pointers
|
|
||||||
// of arbitrary types, containes the values that are obtained from dereferencing
|
|
||||||
// all elements in vs.
|
|
||||||
func dereferenceAll(vs []interface{}) []interface{} {
|
|
||||||
for i := range vs {
|
|
||||||
v := reflect.ValueOf(vs[i])
|
|
||||||
v = v.Elem()
|
|
||||||
vs[i] = v.Interface()
|
|
||||||
}
|
|
||||||
return vs
|
|
||||||
}
|
|
||||||
|
|
||||||
// getKey gets a key from a the list of keys. Returns "" on error / not found...
|
// getKey gets a key from a the list of keys. Returns "" on error / not found...
|
||||||
func getKey(s, key string) string {
|
func getKey(s, key string) string {
|
||||||
for _, keyEqualsValue := range strings.Split(s, ",") {
|
for _, keyEqualsValue := range strings.Split(s, ",") {
|
||||||
@@ -650,7 +716,9 @@ func (h *outputHandler) sendAndIfClosed(msg *Message, ifClosed func()) error {
|
|||||||
h.closed.lck.RLock()
|
h.closed.lck.RLock()
|
||||||
defer h.closed.lck.RUnlock()
|
defer h.closed.lck.RUnlock()
|
||||||
if h.closed.isClosed {
|
if h.closed.isClosed {
|
||||||
|
if ifClosed != nil {
|
||||||
ifClosed()
|
ifClosed()
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
h.sendLck.Lock()
|
h.sendLck.Lock()
|
||||||
@@ -801,7 +869,6 @@ func (tracker *callTracker) finalize(sn uint32) {
|
|||||||
delete(tracker.calls, sn)
|
delete(tracker.calls, sn)
|
||||||
c.ContextCancel()
|
c.ContextCancel()
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tracker *callTracker) finalizeWithBody(sn uint32, body []interface{}) {
|
func (tracker *callTracker) finalizeWithBody(sn uint32, body []interface{}) {
|
||||||
@@ -815,7 +882,6 @@ func (tracker *callTracker) finalizeWithBody(sn uint32, body []interface{}) {
|
|||||||
c.Body = body
|
c.Body = body
|
||||||
c.done()
|
c.done()
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tracker *callTracker) finalizeWithError(sn uint32, err error) {
|
func (tracker *callTracker) finalizeWithError(sn uint32, err error) {
|
||||||
@@ -829,7 +895,6 @@ func (tracker *callTracker) finalizeWithError(sn uint32, err error) {
|
|||||||
c.Err = err
|
c.Err = err
|
||||||
c.done()
|
c.done()
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tracker *callTracker) finalizeAllWithError(err error) {
|
func (tracker *callTracker) finalizeAllWithError(err error) {
|
@@ -14,8 +14,10 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var execCommand = exec.Command
|
||||||
|
|
||||||
func getSessionBusPlatformAddress() (string, error) {
|
func getSessionBusPlatformAddress() (string, error) {
|
||||||
cmd := exec.Command("dbus-launch")
|
cmd := execCommand("dbus-launch")
|
||||||
b, err := cmd.CombinedOutput()
|
b, err := cmd.CombinedOutput()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -25,7 +27,7 @@ func getSessionBusPlatformAddress() (string, error) {
|
|||||||
i := bytes.IndexByte(b, '=')
|
i := bytes.IndexByte(b, '=')
|
||||||
j := bytes.IndexByte(b, '\n')
|
j := bytes.IndexByte(b, '\n')
|
||||||
|
|
||||||
if i == -1 || j == -1 {
|
if i == -1 || j == -1 || i > j {
|
||||||
return "", errors.New("dbus: couldn't determine address of session bus")
|
return "", errors.New("dbus: couldn't determine address of session bus")
|
||||||
}
|
}
|
||||||
|
|
@@ -4,7 +4,6 @@ package dbus
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"fmt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const defaultSystemBusAddress = "unix:path=/var/run/dbus/system_bus_socket"
|
const defaultSystemBusAddress = "unix:path=/var/run/dbus/system_bus_socket"
|
||||||
@@ -12,7 +11,7 @@ const defaultSystemBusAddress = "unix:path=/var/run/dbus/system_bus_socket"
|
|||||||
func getSystemBusPlatformAddress() string {
|
func getSystemBusPlatformAddress() string {
|
||||||
address := os.Getenv("DBUS_SYSTEM_BUS_ADDRESS")
|
address := os.Getenv("DBUS_SYSTEM_BUS_ADDRESS")
|
||||||
if address != "" {
|
if address != "" {
|
||||||
return fmt.Sprintf("unix:path=%s", address)
|
return address
|
||||||
}
|
}
|
||||||
return defaultSystemBusAddress
|
return defaultSystemBusAddress
|
||||||
}
|
}
|
1
vendor/github.com/godbus/dbus/dbus.go → vendor/github.com/godbus/dbus/v5/dbus.go
generated
vendored
1
vendor/github.com/godbus/dbus/dbus.go → vendor/github.com/godbus/dbus/v5/dbus.go
generated
vendored
@@ -87,6 +87,7 @@ func setDest(dest, src reflect.Value) error {
|
|||||||
}
|
}
|
||||||
if isVariant(src.Type()) && !isVariant(dest.Type()) {
|
if isVariant(src.Type()) && !isVariant(dest.Type()) {
|
||||||
src = getVariantValue(src)
|
src = getVariantValue(src)
|
||||||
|
return store(dest, src)
|
||||||
}
|
}
|
||||||
if !src.Type().ConvertibleTo(dest.Type()) {
|
if !src.Type().ConvertibleTo(dest.Type()) {
|
||||||
return fmt.Errorf(
|
return fmt.Errorf(
|
53
vendor/github.com/godbus/dbus/decoder.go → vendor/github.com/godbus/dbus/v5/decoder.go
generated
vendored
53
vendor/github.com/godbus/dbus/decoder.go → vendor/github.com/godbus/dbus/v5/decoder.go
generated
vendored
@@ -188,8 +188,14 @@ func (dec *decoder) decode(s string, depth int) interface{} {
|
|||||||
if depth >= 64 {
|
if depth >= 64 {
|
||||||
panic(FormatError("input exceeds container depth limit"))
|
panic(FormatError("input exceeds container depth limit"))
|
||||||
}
|
}
|
||||||
|
sig := s[1:]
|
||||||
length := dec.decode("u", depth).(uint32)
|
length := dec.decode("u", depth).(uint32)
|
||||||
v := reflect.MakeSlice(reflect.SliceOf(typeFor(s[1:])), 0, int(length))
|
// capacity can be determined only for fixed-size element types
|
||||||
|
var capacity int
|
||||||
|
if s := sigByteSize(sig); s != 0 {
|
||||||
|
capacity = int(length) / s
|
||||||
|
}
|
||||||
|
v := reflect.MakeSlice(reflect.SliceOf(typeFor(sig)), 0, capacity)
|
||||||
// Even for empty arrays, the correct padding must be included
|
// Even for empty arrays, the correct padding must be included
|
||||||
align := alignment(typeFor(s[1:]))
|
align := alignment(typeFor(s[1:]))
|
||||||
if len(s) > 1 && s[1] == '(' {
|
if len(s) > 1 && s[1] == '(' {
|
||||||
@@ -227,6 +233,51 @@ func (dec *decoder) decode(s string, depth int) interface{} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sigByteSize tries to calculates size of the given signature in bytes.
|
||||||
|
//
|
||||||
|
// It returns zero when it can't, for example when it contains non-fixed size
|
||||||
|
// types such as strings, maps and arrays that require reading of the transmitted
|
||||||
|
// data, for that we would need to implement the unread method for Decoder first.
|
||||||
|
func sigByteSize(sig string) int {
|
||||||
|
var total int
|
||||||
|
for offset := 0; offset < len(sig); {
|
||||||
|
switch sig[offset] {
|
||||||
|
case 'y':
|
||||||
|
total += 1
|
||||||
|
offset += 1
|
||||||
|
case 'n', 'q':
|
||||||
|
total += 2
|
||||||
|
offset += 1
|
||||||
|
case 'b', 'i', 'u', 'h':
|
||||||
|
total += 4
|
||||||
|
offset += 1
|
||||||
|
case 'x', 't', 'd':
|
||||||
|
total += 8
|
||||||
|
offset += 1
|
||||||
|
case '(':
|
||||||
|
i := 1
|
||||||
|
depth := 1
|
||||||
|
for i < len(sig[offset:]) && depth != 0 {
|
||||||
|
if sig[offset+i] == '(' {
|
||||||
|
depth++
|
||||||
|
} else if sig[offset+i] == ')' {
|
||||||
|
depth--
|
||||||
|
}
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
s := sigByteSize(sig[offset+1 : offset+i-1])
|
||||||
|
if s == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
total += s
|
||||||
|
offset += i
|
||||||
|
default:
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return total
|
||||||
|
}
|
||||||
|
|
||||||
// A FormatError is an error in the wire format.
|
// A FormatError is an error in the wire format.
|
||||||
type FormatError string
|
type FormatError string
|
||||||
|
|
@@ -47,7 +47,7 @@ func (h *defaultHandler) introspectPath(path ObjectPath) string {
|
|||||||
subpath := make(map[string]struct{})
|
subpath := make(map[string]struct{})
|
||||||
var xml bytes.Buffer
|
var xml bytes.Buffer
|
||||||
xml.WriteString("<node>")
|
xml.WriteString("<node>")
|
||||||
for obj, _ := range h.objects {
|
for obj := range h.objects {
|
||||||
p := string(path)
|
p := string(path)
|
||||||
if p != "/" {
|
if p != "/" {
|
||||||
p += "/"
|
p += "/"
|
||||||
@@ -57,7 +57,7 @@ func (h *defaultHandler) introspectPath(path ObjectPath) string {
|
|||||||
subpath[node_name] = struct{}{}
|
subpath[node_name] = struct{}{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for s, _ := range subpath {
|
for s := range subpath {
|
||||||
xml.WriteString("\n\t<node name=\"" + s + "\"/>")
|
xml.WriteString("\n\t<node name=\"" + s + "\"/>")
|
||||||
}
|
}
|
||||||
xml.WriteString("\n</node>")
|
xml.WriteString("\n</node>")
|
||||||
@@ -234,88 +234,95 @@ func (obj *exportedIntf) isFallbackInterface() bool {
|
|||||||
//
|
//
|
||||||
// Deprecated: this is the default value, don't use it, it will be unexported.
|
// Deprecated: this is the default value, don't use it, it will be unexported.
|
||||||
func NewDefaultSignalHandler() *defaultSignalHandler {
|
func NewDefaultSignalHandler() *defaultSignalHandler {
|
||||||
return &defaultSignalHandler{
|
return &defaultSignalHandler{}
|
||||||
closeChan: make(chan struct{}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func isDefaultSignalHandler(handler SignalHandler) bool {
|
|
||||||
_, ok := handler.(*defaultSignalHandler)
|
|
||||||
return ok
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type defaultSignalHandler struct {
|
type defaultSignalHandler struct {
|
||||||
sync.RWMutex
|
mu sync.RWMutex
|
||||||
closed bool
|
closed bool
|
||||||
signals []chan<- *Signal
|
signals []*signalChannelData
|
||||||
closeChan chan struct{}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sh *defaultSignalHandler) DeliverSignal(intf, name string, signal *Signal) {
|
func (sh *defaultSignalHandler) DeliverSignal(intf, name string, signal *Signal) {
|
||||||
sh.RLock()
|
sh.mu.RLock()
|
||||||
defer sh.RUnlock()
|
defer sh.mu.RUnlock()
|
||||||
if sh.closed {
|
if sh.closed {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, ch := range sh.signals {
|
for _, scd := range sh.signals {
|
||||||
select {
|
scd.deliver(signal)
|
||||||
case ch <- signal:
|
|
||||||
case <-sh.closeChan:
|
|
||||||
return
|
|
||||||
default:
|
|
||||||
go func() {
|
|
||||||
select {
|
|
||||||
case ch <- signal:
|
|
||||||
case <-sh.closeChan:
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
}()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (sh *defaultSignalHandler) Init() error {
|
|
||||||
sh.Lock()
|
|
||||||
sh.signals = make([]chan<- *Signal, 0)
|
|
||||||
sh.closeChan = make(chan struct{})
|
|
||||||
sh.Unlock()
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sh *defaultSignalHandler) Terminate() {
|
func (sh *defaultSignalHandler) Terminate() {
|
||||||
sh.Lock()
|
sh.mu.Lock()
|
||||||
if !sh.closed {
|
defer sh.mu.Unlock()
|
||||||
close(sh.closeChan)
|
|
||||||
}
|
|
||||||
sh.closed = true
|
|
||||||
for _, ch := range sh.signals {
|
|
||||||
close(ch)
|
|
||||||
}
|
|
||||||
sh.signals = nil
|
|
||||||
sh.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (sh *defaultSignalHandler) addSignal(ch chan<- *Signal) {
|
|
||||||
sh.Lock()
|
|
||||||
defer sh.Unlock()
|
|
||||||
if sh.closed {
|
if sh.closed {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
sh.signals = append(sh.signals, ch)
|
|
||||||
|
|
||||||
|
for _, scd := range sh.signals {
|
||||||
|
scd.close()
|
||||||
|
close(scd.ch)
|
||||||
|
}
|
||||||
|
sh.closed = true
|
||||||
|
sh.signals = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sh *defaultSignalHandler) removeSignal(ch chan<- *Signal) {
|
func (sh *defaultSignalHandler) AddSignal(ch chan<- *Signal) {
|
||||||
sh.Lock()
|
sh.mu.Lock()
|
||||||
defer sh.Unlock()
|
defer sh.mu.Unlock()
|
||||||
|
if sh.closed {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
sh.signals = append(sh.signals, &signalChannelData{
|
||||||
|
ch: ch,
|
||||||
|
done: make(chan struct{}),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *defaultSignalHandler) RemoveSignal(ch chan<- *Signal) {
|
||||||
|
sh.mu.Lock()
|
||||||
|
defer sh.mu.Unlock()
|
||||||
if sh.closed {
|
if sh.closed {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for i := len(sh.signals) - 1; i >= 0; i-- {
|
for i := len(sh.signals) - 1; i >= 0; i-- {
|
||||||
if ch == sh.signals[i] {
|
if ch == sh.signals[i].ch {
|
||||||
|
sh.signals[i].close()
|
||||||
copy(sh.signals[i:], sh.signals[i+1:])
|
copy(sh.signals[i:], sh.signals[i+1:])
|
||||||
sh.signals[len(sh.signals)-1] = nil
|
sh.signals[len(sh.signals)-1] = nil
|
||||||
sh.signals = sh.signals[:len(sh.signals)-1]
|
sh.signals = sh.signals[:len(sh.signals)-1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type signalChannelData struct {
|
||||||
|
wg sync.WaitGroup
|
||||||
|
ch chan<- *Signal
|
||||||
|
done chan struct{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (scd *signalChannelData) deliver(signal *Signal) {
|
||||||
|
select {
|
||||||
|
case scd.ch <- signal:
|
||||||
|
case <-scd.done:
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
scd.wg.Add(1)
|
||||||
|
go scd.deferredDeliver(signal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (scd *signalChannelData) deferredDeliver(signal *Signal) {
|
||||||
|
select {
|
||||||
|
case scd.ch <- signal:
|
||||||
|
case <-scd.done:
|
||||||
|
}
|
||||||
|
scd.wg.Done()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (scd *signalChannelData) close() {
|
||||||
|
close(scd.done)
|
||||||
|
scd.wg.Wait() // wait until all spawned goroutines return
|
||||||
|
}
|
2
vendor/github.com/godbus/dbus/doc.go → vendor/github.com/godbus/dbus/v5/doc.go
generated
vendored
2
vendor/github.com/godbus/dbus/doc.go → vendor/github.com/godbus/dbus/v5/doc.go
generated
vendored
@@ -61,7 +61,7 @@ Handling Unix file descriptors deserves special mention. To use them, you should
|
|||||||
first check that they are supported on a connection by calling SupportsUnixFDs.
|
first check that they are supported on a connection by calling SupportsUnixFDs.
|
||||||
If it returns true, all method of Connection will translate messages containing
|
If it returns true, all method of Connection will translate messages containing
|
||||||
UnixFD's to messages that are accompanied by the given file descriptors with the
|
UnixFD's to messages that are accompanied by the given file descriptors with the
|
||||||
UnixFD values being substituted by the correct indices. Similarily, the indices
|
UnixFD values being substituted by the correct indices. Similarly, the indices
|
||||||
of incoming messages are automatically resolved. It shouldn't be necessary to use
|
of incoming messages are automatically resolved. It shouldn't be necessary to use
|
||||||
UnixFDIndex.
|
UnixFDIndex.
|
||||||
|
|
@@ -60,7 +60,7 @@ func (enc *encoder) binwrite(v interface{}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Encode encodes the given values to the underyling reader. All written values
|
// Encode encodes the given values to the underlying reader. All written values
|
||||||
// are aligned properly as required by the D-Bus spec.
|
// are aligned properly as required by the D-Bus spec.
|
||||||
func (enc *encoder) Encode(vs ...interface{}) (err error) {
|
func (enc *encoder) Encode(vs ...interface{}) (err error) {
|
||||||
defer func() {
|
defer func() {
|
2
vendor/github.com/godbus/dbus/export.go → vendor/github.com/godbus/dbus/v5/export.go
generated
vendored
2
vendor/github.com/godbus/dbus/export.go → vendor/github.com/godbus/dbus/v5/export.go
generated
vendored
@@ -171,7 +171,7 @@ func (conn *Conn) handleCall(msg *Message) {
|
|||||||
}
|
}
|
||||||
reply.Headers[FieldSignature] = MakeVariant(SignatureOf(reply.Body...))
|
reply.Headers[FieldSignature] = MakeVariant(SignatureOf(reply.Body...))
|
||||||
|
|
||||||
conn.sendMessage(reply)
|
conn.sendMessageAndIfClosed(reply, nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
3
vendor/github.com/godbus/dbus/v5/go.mod
generated
vendored
Normal file
3
vendor/github.com/godbus/dbus/v5/go.mod
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
module github.com/godbus/dbus/v5
|
||||||
|
|
||||||
|
go 1.12
|
0
vendor/github.com/godbus/dbus/v5/go.sum
generated
vendored
Normal file
0
vendor/github.com/godbus/dbus/v5/go.sum
generated
vendored
Normal file
62
vendor/github.com/godbus/dbus/v5/match.go
generated
vendored
Normal file
62
vendor/github.com/godbus/dbus/v5/match.go
generated
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
package dbus
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MatchOption specifies option for dbus routing match rule. Options can be constructed with WithMatch* helpers.
|
||||||
|
// For full list of available options consult
|
||||||
|
// https://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-routing-match-rules
|
||||||
|
type MatchOption struct {
|
||||||
|
key string
|
||||||
|
value string
|
||||||
|
}
|
||||||
|
|
||||||
|
func formatMatchOptions(options []MatchOption) string {
|
||||||
|
items := make([]string, 0, len(options))
|
||||||
|
for _, option := range options {
|
||||||
|
items = append(items, option.key+"='"+option.value+"'")
|
||||||
|
}
|
||||||
|
return strings.Join(items, ",")
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMatchOption creates match option with given key and value
|
||||||
|
func WithMatchOption(key, value string) MatchOption {
|
||||||
|
return MatchOption{key, value}
|
||||||
|
}
|
||||||
|
|
||||||
|
// doesn't make sense to export this option because clients can only
|
||||||
|
// subscribe to messages with signal type.
|
||||||
|
func withMatchType(typ string) MatchOption {
|
||||||
|
return WithMatchOption("type", typ)
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMatchSender sets sender match option.
|
||||||
|
func WithMatchSender(sender string) MatchOption {
|
||||||
|
return WithMatchOption("sender", sender)
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMatchSender sets interface match option.
|
||||||
|
func WithMatchInterface(iface string) MatchOption {
|
||||||
|
return WithMatchOption("interface", iface)
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMatchMember sets member match option.
|
||||||
|
func WithMatchMember(member string) MatchOption {
|
||||||
|
return WithMatchOption("member", member)
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMatchObjectPath creates match option that filters events based on given path
|
||||||
|
func WithMatchObjectPath(path ObjectPath) MatchOption {
|
||||||
|
return WithMatchOption("path", string(path))
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMatchPathNamespace sets path_namespace match option.
|
||||||
|
func WithMatchPathNamespace(namespace ObjectPath) MatchOption {
|
||||||
|
return WithMatchOption("path_namespace", string(namespace))
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMatchDestination sets destination match option.
|
||||||
|
func WithMatchDestination(destination string) MatchOption {
|
||||||
|
return WithMatchOption("destination", destination)
|
||||||
|
}
|
62
vendor/github.com/godbus/dbus/object.go → vendor/github.com/godbus/dbus/v5/object.go
generated
vendored
62
vendor/github.com/godbus/dbus/object.go → vendor/github.com/godbus/dbus/v5/object.go
generated
vendored
@@ -16,6 +16,7 @@ type BusObject interface {
|
|||||||
AddMatchSignal(iface, member string, options ...MatchOption) *Call
|
AddMatchSignal(iface, member string, options ...MatchOption) *Call
|
||||||
RemoveMatchSignal(iface, member string, options ...MatchOption) *Call
|
RemoveMatchSignal(iface, member string, options ...MatchOption) *Call
|
||||||
GetProperty(p string) (Variant, error)
|
GetProperty(p string) (Variant, error)
|
||||||
|
SetProperty(p string, v interface{}) error
|
||||||
Destination() string
|
Destination() string
|
||||||
Path() ObjectPath
|
Path() ObjectPath
|
||||||
}
|
}
|
||||||
@@ -37,41 +38,16 @@ func (o *Object) CallWithContext(ctx context.Context, method string, flags Flags
|
|||||||
return <-o.createCall(ctx, method, flags, make(chan *Call, 1), args...).Done
|
return <-o.createCall(ctx, method, flags, make(chan *Call, 1), args...).Done
|
||||||
}
|
}
|
||||||
|
|
||||||
// MatchOption specifies option for dbus routing match rule. Options can be constructed with WithMatch* helpers.
|
|
||||||
// For full list of available options consult
|
|
||||||
// https://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-routing-match-rules
|
|
||||||
type MatchOption struct {
|
|
||||||
key string
|
|
||||||
value string
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithMatchOption creates match option with given key and value
|
|
||||||
func WithMatchOption(key, value string) MatchOption {
|
|
||||||
return MatchOption{key, value}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithMatchObjectPath creates match option that filters events based on given path
|
|
||||||
func WithMatchObjectPath(path ObjectPath) MatchOption {
|
|
||||||
return MatchOption{"path", string(path)}
|
|
||||||
}
|
|
||||||
|
|
||||||
func formatMatchOptions(options []MatchOption) string {
|
|
||||||
items := make([]string, 0, len(options))
|
|
||||||
for _, option := range options {
|
|
||||||
items = append(items, option.key+"='"+option.value+"'")
|
|
||||||
}
|
|
||||||
|
|
||||||
return strings.Join(items, ",")
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddMatchSignal subscribes BusObject to signals from specified interface,
|
// AddMatchSignal subscribes BusObject to signals from specified interface,
|
||||||
// method (member). Additional filter rules can be added via WithMatch* option constructors.
|
// method (member). Additional filter rules can be added via WithMatch* option constructors.
|
||||||
// Note: To filter events by object path you have to specify this path via an option.
|
// Note: To filter events by object path you have to specify this path via an option.
|
||||||
|
//
|
||||||
|
// Deprecated: use (*Conn) AddMatchSignal instead.
|
||||||
func (o *Object) AddMatchSignal(iface, member string, options ...MatchOption) *Call {
|
func (o *Object) AddMatchSignal(iface, member string, options ...MatchOption) *Call {
|
||||||
base := []MatchOption{
|
base := []MatchOption{
|
||||||
{"type", "signal"},
|
withMatchType("signal"),
|
||||||
{"interface", iface},
|
WithMatchInterface(iface),
|
||||||
{"member", member},
|
WithMatchMember(member),
|
||||||
}
|
}
|
||||||
|
|
||||||
options = append(base, options...)
|
options = append(base, options...)
|
||||||
@@ -84,11 +60,13 @@ func (o *Object) AddMatchSignal(iface, member string, options ...MatchOption) *C
|
|||||||
|
|
||||||
// RemoveMatchSignal unsubscribes BusObject from signals from specified interface,
|
// RemoveMatchSignal unsubscribes BusObject from signals from specified interface,
|
||||||
// method (member). Additional filter rules can be added via WithMatch* option constructors
|
// method (member). Additional filter rules can be added via WithMatch* option constructors
|
||||||
|
//
|
||||||
|
// Deprecated: use (*Conn) RemoveMatchSignal instead.
|
||||||
func (o *Object) RemoveMatchSignal(iface, member string, options ...MatchOption) *Call {
|
func (o *Object) RemoveMatchSignal(iface, member string, options ...MatchOption) *Call {
|
||||||
base := []MatchOption{
|
base := []MatchOption{
|
||||||
{"type", "signal"},
|
withMatchType("signal"),
|
||||||
{"interface", iface},
|
WithMatchInterface(iface),
|
||||||
{"member", member},
|
WithMatchMember(member),
|
||||||
}
|
}
|
||||||
|
|
||||||
options = append(base, options...)
|
options = append(base, options...)
|
||||||
@@ -146,7 +124,7 @@ func (o *Object) createCall(ctx context.Context, method string, flags Flags, ch
|
|||||||
}
|
}
|
||||||
if msg.Flags&FlagNoReplyExpected == 0 {
|
if msg.Flags&FlagNoReplyExpected == 0 {
|
||||||
if ch == nil {
|
if ch == nil {
|
||||||
ch = make(chan *Call, 10)
|
ch = make(chan *Call, 1)
|
||||||
} else if cap(ch) == 0 {
|
} else if cap(ch) == 0 {
|
||||||
panic("dbus: unbuffered channel passed to (*Object).Go")
|
panic("dbus: unbuffered channel passed to (*Object).Go")
|
||||||
}
|
}
|
||||||
@@ -187,7 +165,7 @@ func (o *Object) createCall(ctx context.Context, method string, flags Flags, ch
|
|||||||
return call
|
return call
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetProperty calls org.freedesktop.DBus.Properties.GetProperty on the given
|
// GetProperty calls org.freedesktop.DBus.Properties.Get on the given
|
||||||
// object. The property name must be given in interface.member notation.
|
// object. The property name must be given in interface.member notation.
|
||||||
func (o *Object) GetProperty(p string) (Variant, error) {
|
func (o *Object) GetProperty(p string) (Variant, error) {
|
||||||
idx := strings.LastIndex(p, ".")
|
idx := strings.LastIndex(p, ".")
|
||||||
@@ -208,6 +186,20 @@ func (o *Object) GetProperty(p string) (Variant, error) {
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetProperty calls org.freedesktop.DBus.Properties.Set on the given
|
||||||
|
// object. The property name must be given in interface.member notation.
|
||||||
|
func (o *Object) SetProperty(p string, v interface{}) error {
|
||||||
|
idx := strings.LastIndex(p, ".")
|
||||||
|
if idx == -1 || idx+1 == len(p) {
|
||||||
|
return errors.New("dbus: invalid property " + p)
|
||||||
|
}
|
||||||
|
|
||||||
|
iface := p[:idx]
|
||||||
|
prop := p[idx+1:]
|
||||||
|
|
||||||
|
return o.Call("org.freedesktop.DBus.Properties.Set", 0, iface, prop, v).Err
|
||||||
|
}
|
||||||
|
|
||||||
// Destination returns the destination that calls on (o *Object) are sent to.
|
// Destination returns the destination that calls on (o *Object) are sent to.
|
||||||
func (o *Object) Destination() string {
|
func (o *Object) Destination() string {
|
||||||
return o.dest
|
return o.dest
|
@@ -77,6 +77,14 @@ type SignalHandler interface {
|
|||||||
DeliverSignal(iface, name string, signal *Signal)
|
DeliverSignal(iface, name string, signal *Signal)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SignalRegistrar manages signal delivery channels.
|
||||||
|
//
|
||||||
|
// This is an optional set of methods for `SignalHandler`.
|
||||||
|
type SignalRegistrar interface {
|
||||||
|
AddSignal(ch chan<- *Signal)
|
||||||
|
RemoveSignal(ch chan<- *Signal)
|
||||||
|
}
|
||||||
|
|
||||||
// A DBusError is used to convert a generic object to a D-Bus error.
|
// A DBusError is used to convert a generic object to a D-Bus error.
|
||||||
//
|
//
|
||||||
// Any custom error mechanism may implement this interface to provide
|
// Any custom error mechanism may implement this interface to provide
|
0
vendor/github.com/godbus/dbus/sig.go → vendor/github.com/godbus/dbus/v5/sig.go
generated
vendored
0
vendor/github.com/godbus/dbus/sig.go → vendor/github.com/godbus/dbus/v5/sig.go
generated
vendored
@@ -1,5 +1,3 @@
|
|||||||
//+build !windows
|
|
||||||
|
|
||||||
package dbus
|
package dbus
|
||||||
|
|
||||||
import (
|
import (
|
@@ -203,7 +203,7 @@ func (t *unixTransport) SendMessage(msg *Message) error {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := msg.EncodeTo(t, nativeEndian); err != nil {
|
if err := msg.EncodeTo(t, nativeEndian); err != nil {
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
@@ -26,7 +26,7 @@ func MakeVariantWithSignature(v interface{}, s Signature) Variant {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ParseVariant parses the given string as a variant as described at
|
// ParseVariant parses the given string as a variant as described at
|
||||||
// https://developer.gnome.org/glib/unstable/gvariant-text.html. If sig is not
|
// https://developer.gnome.org/glib/stable/gvariant-text.html. If sig is not
|
||||||
// empty, it is taken to be the expected signature for the variant.
|
// empty, it is taken to be the expected signature for the variant.
|
||||||
func ParseVariant(s string, sig Signature) (Variant, error) {
|
func ParseVariant(s string, sig Signature) (Variant, error) {
|
||||||
tokens := varLex(s)
|
tokens := varLex(s)
|
||||||
@@ -129,7 +129,7 @@ func (v Variant) Signature() Signature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation of the underlying value of v as
|
// String returns the string representation of the underlying value of v as
|
||||||
// described at https://developer.gnome.org/glib/unstable/gvariant-text.html.
|
// described at https://developer.gnome.org/glib/stable/gvariant-text.html.
|
||||||
func (v Variant) String() string {
|
func (v Variant) String() string {
|
||||||
s, unamb := v.format()
|
s, unamb := v.format()
|
||||||
if !unamb {
|
if !unamb {
|
@@ -51,7 +51,7 @@ func varLex(s string) []varToken {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l *varLexer) accept(valid string) bool {
|
func (l *varLexer) accept(valid string) bool {
|
||||||
if strings.IndexRune(valid, l.next()) >= 0 {
|
if strings.ContainsRune(valid, l.next()) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
l.backup()
|
l.backup()
|
||||||
@@ -214,17 +214,17 @@ func varLexNumber(l *varLexer) lexState {
|
|||||||
digits = "01234567"
|
digits = "01234567"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for strings.IndexRune(digits, l.next()) >= 0 {
|
for strings.ContainsRune(digits, l.next()) {
|
||||||
}
|
}
|
||||||
l.backup()
|
l.backup()
|
||||||
if l.accept(".") {
|
if l.accept(".") {
|
||||||
for strings.IndexRune(digits, l.next()) >= 0 {
|
for strings.ContainsRune(digits, l.next()) {
|
||||||
}
|
}
|
||||||
l.backup()
|
l.backup()
|
||||||
}
|
}
|
||||||
if l.accept("eE") {
|
if l.accept("eE") {
|
||||||
l.accept("+-")
|
l.accept("+-")
|
||||||
for strings.IndexRune("0123456789", l.next()) >= 0 {
|
for strings.ContainsRune("0123456789", l.next()) {
|
||||||
}
|
}
|
||||||
l.backup()
|
l.backup()
|
||||||
}
|
}
|
10
vendor/modules.txt
vendored
10
vendor/modules.txt
vendored
@@ -10,19 +10,19 @@ github.com/cilium/ebpf/internal/unix
|
|||||||
# github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50
|
# github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50
|
||||||
## explicit
|
## explicit
|
||||||
github.com/containerd/console
|
github.com/containerd/console
|
||||||
# github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e
|
# github.com/coreos/go-systemd/v22 v22.0.0
|
||||||
## explicit
|
## explicit
|
||||||
github.com/coreos/go-systemd/activation
|
github.com/coreos/go-systemd/v22/activation
|
||||||
github.com/coreos/go-systemd/dbus
|
github.com/coreos/go-systemd/v22/dbus
|
||||||
# github.com/cyphar/filepath-securejoin v0.2.2
|
# github.com/cyphar/filepath-securejoin v0.2.2
|
||||||
## explicit
|
## explicit
|
||||||
github.com/cyphar/filepath-securejoin
|
github.com/cyphar/filepath-securejoin
|
||||||
# github.com/docker/go-units v0.3.3
|
# github.com/docker/go-units v0.3.3
|
||||||
## explicit
|
## explicit
|
||||||
github.com/docker/go-units
|
github.com/docker/go-units
|
||||||
# github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f
|
# github.com/godbus/dbus/v5 v5.0.3
|
||||||
## explicit
|
## explicit
|
||||||
github.com/godbus/dbus
|
github.com/godbus/dbus/v5
|
||||||
# github.com/golang/protobuf v1.0.0
|
# github.com/golang/protobuf v1.0.0
|
||||||
## explicit
|
## explicit
|
||||||
github.com/golang/protobuf/proto
|
github.com/golang/protobuf/proto
|
||||||
|
Reference in New Issue
Block a user