├── Gopkg.lock
├── Gopkg.toml
├── LICENSE.md
├── README.md
├── color.go
├── color_0.go
├── color_256.go
├── color_truecolor.go
├── examples
├── banner
│ └── main.go
└── print
│ └── main.go
├── img
├── kubicorn.png
└── logo.png
├── output.go
├── output_windows.go
├── print.go
├── vendor
├── github.com
│ ├── CrowdSurge
│ │ └── banner
│ │ │ ├── README.md
│ │ │ ├── banner.go
│ │ │ ├── example
│ │ │ └── main.go
│ │ │ └── fonts
│ │ │ └── ogre.go
│ └── mattn
│ │ ├── go-colorable
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── _example
│ │ │ ├── escape-seq
│ │ │ │ └── main.go
│ │ │ ├── logrus
│ │ │ │ └── main.go
│ │ │ └── title
│ │ │ │ └── main.go
│ │ ├── colorable_appengine.go
│ │ ├── colorable_others.go
│ │ ├── colorable_test.go
│ │ ├── colorable_windows.go
│ │ └── noncolorable.go
│ │ └── go-isatty
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── example_test.go
│ │ ├── isatty_appengine.go
│ │ ├── isatty_bsd.go
│ │ ├── isatty_linux.go
│ │ ├── isatty_others.go
│ │ ├── isatty_others_test.go
│ │ ├── isatty_solaris.go
│ │ ├── isatty_windows.go
│ │ └── isatty_windows_test.go
└── golang.org
│ └── x
│ └── sys
│ ├── .gitattributes
│ ├── .gitignore
│ ├── AUTHORS
│ ├── CONTRIBUTING.md
│ ├── CONTRIBUTORS
│ ├── LICENSE
│ ├── PATENTS
│ ├── README
│ ├── codereview.cfg
│ ├── plan9
│ ├── asm.s
│ ├── asm_plan9_386.s
│ ├── asm_plan9_amd64.s
│ ├── const_plan9.go
│ ├── dir_plan9.go
│ ├── env_plan9.go
│ ├── env_unset.go
│ ├── errors_plan9.go
│ ├── mkall.sh
│ ├── mkerrors.sh
│ ├── mksyscall.pl
│ ├── mksysnum_plan9.sh
│ ├── pwd_go15_plan9.go
│ ├── pwd_plan9.go
│ ├── race.go
│ ├── race0.go
│ ├── str.go
│ ├── syscall.go
│ ├── syscall_plan9.go
│ ├── syscall_test.go
│ ├── zsyscall_plan9_386.go
│ ├── zsyscall_plan9_amd64.go
│ └── zsysnum_plan9.go
│ ├── unix
│ ├── .gitignore
│ ├── README.md
│ ├── asm_darwin_386.s
│ ├── asm_darwin_amd64.s
│ ├── asm_darwin_arm.s
│ ├── asm_darwin_arm64.s
│ ├── asm_dragonfly_amd64.s
│ ├── asm_freebsd_386.s
│ ├── asm_freebsd_amd64.s
│ ├── asm_freebsd_arm.s
│ ├── asm_linux_386.s
│ ├── asm_linux_amd64.s
│ ├── asm_linux_arm.s
│ ├── asm_linux_arm64.s
│ ├── asm_linux_mips64x.s
│ ├── asm_linux_mipsx.s
│ ├── asm_linux_ppc64x.s
│ ├── asm_linux_s390x.s
│ ├── asm_netbsd_386.s
│ ├── asm_netbsd_amd64.s
│ ├── asm_netbsd_arm.s
│ ├── asm_openbsd_386.s
│ ├── asm_openbsd_amd64.s
│ ├── asm_openbsd_arm.s
│ ├── asm_solaris_amd64.s
│ ├── bluetooth_linux.go
│ ├── cap_freebsd.go
│ ├── constants.go
│ ├── creds_test.go
│ ├── dev_linux.go
│ ├── dev_linux_test.go
│ ├── dirent.go
│ ├── endian_big.go
│ ├── endian_little.go
│ ├── env_unix.go
│ ├── env_unset.go
│ ├── errors_freebsd_386.go
│ ├── errors_freebsd_amd64.go
│ ├── errors_freebsd_arm.go
│ ├── export_test.go
│ ├── file_unix.go
│ ├── flock.go
│ ├── flock_linux_32bit.go
│ ├── gccgo.go
│ ├── gccgo_c.c
│ ├── gccgo_linux_amd64.go
│ ├── gccgo_linux_sparc64.go
│ ├── linux
│ │ ├── Dockerfile
│ │ ├── mkall.go
│ │ ├── mksysnum.pl
│ │ └── types.go
│ ├── mkall.sh
│ ├── mkerrors.sh
│ ├── mkpost.go
│ ├── mksyscall.pl
│ ├── mksyscall_solaris.pl
│ ├── mksysctl_openbsd.pl
│ ├── mksysnum_darwin.pl
│ ├── mksysnum_dragonfly.pl
│ ├── mksysnum_freebsd.pl
│ ├── mksysnum_netbsd.pl
│ ├── mksysnum_openbsd.pl
│ ├── mmap_unix_test.go
│ ├── openbsd_pledge.go
│ ├── openbsd_test.go
│ ├── race.go
│ ├── race0.go
│ ├── sockcmsg_linux.go
│ ├── sockcmsg_unix.go
│ ├── str.go
│ ├── syscall.go
│ ├── syscall_bsd.go
│ ├── syscall_bsd_test.go
│ ├── syscall_darwin.go
│ ├── syscall_darwin_386.go
│ ├── syscall_darwin_amd64.go
│ ├── syscall_darwin_arm.go
│ ├── syscall_darwin_arm64.go
│ ├── syscall_dragonfly.go
│ ├── syscall_dragonfly_amd64.go
│ ├── syscall_freebsd.go
│ ├── syscall_freebsd_386.go
│ ├── syscall_freebsd_amd64.go
│ ├── syscall_freebsd_arm.go
│ ├── syscall_freebsd_test.go
│ ├── syscall_linux.go
│ ├── syscall_linux_386.go
│ ├── syscall_linux_amd64.go
│ ├── syscall_linux_amd64_gc.go
│ ├── syscall_linux_arm.go
│ ├── syscall_linux_arm64.go
│ ├── syscall_linux_mips64x.go
│ ├── syscall_linux_mipsx.go
│ ├── syscall_linux_ppc64x.go
│ ├── syscall_linux_s390x.go
│ ├── syscall_linux_sparc64.go
│ ├── syscall_linux_test.go
│ ├── syscall_netbsd.go
│ ├── syscall_netbsd_386.go
│ ├── syscall_netbsd_amd64.go
│ ├── syscall_netbsd_arm.go
│ ├── syscall_no_getwd.go
│ ├── syscall_openbsd.go
│ ├── syscall_openbsd_386.go
│ ├── syscall_openbsd_amd64.go
│ ├── syscall_openbsd_arm.go
│ ├── syscall_solaris.go
│ ├── syscall_solaris_amd64.go
│ ├── syscall_solaris_test.go
│ ├── syscall_test.go
│ ├── syscall_unix.go
│ ├── syscall_unix_gc.go
│ ├── syscall_unix_test.go
│ ├── types_darwin.go
│ ├── types_dragonfly.go
│ ├── types_freebsd.go
│ ├── types_netbsd.go
│ ├── types_openbsd.go
│ ├── types_solaris.go
│ ├── zerrors_darwin_386.go
│ ├── zerrors_darwin_amd64.go
│ ├── zerrors_darwin_arm.go
│ ├── zerrors_darwin_arm64.go
│ ├── zerrors_dragonfly_amd64.go
│ ├── zerrors_freebsd_386.go
│ ├── zerrors_freebsd_amd64.go
│ ├── zerrors_freebsd_arm.go
│ ├── zerrors_linux_386.go
│ ├── zerrors_linux_amd64.go
│ ├── zerrors_linux_arm.go
│ ├── zerrors_linux_arm64.go
│ ├── zerrors_linux_mips.go
│ ├── zerrors_linux_mips64.go
│ ├── zerrors_linux_mips64le.go
│ ├── zerrors_linux_mipsle.go
│ ├── zerrors_linux_ppc64.go
│ ├── zerrors_linux_ppc64le.go
│ ├── zerrors_linux_s390x.go
│ ├── zerrors_linux_sparc64.go
│ ├── zerrors_netbsd_386.go
│ ├── zerrors_netbsd_amd64.go
│ ├── zerrors_netbsd_arm.go
│ ├── zerrors_openbsd_386.go
│ ├── zerrors_openbsd_amd64.go
│ ├── zerrors_openbsd_arm.go
│ ├── zerrors_solaris_amd64.go
│ ├── zsyscall_darwin_386.go
│ ├── zsyscall_darwin_amd64.go
│ ├── zsyscall_darwin_arm.go
│ ├── zsyscall_darwin_arm64.go
│ ├── zsyscall_dragonfly_amd64.go
│ ├── zsyscall_freebsd_386.go
│ ├── zsyscall_freebsd_amd64.go
│ ├── zsyscall_freebsd_arm.go
│ ├── zsyscall_linux_386.go
│ ├── zsyscall_linux_amd64.go
│ ├── zsyscall_linux_arm.go
│ ├── zsyscall_linux_arm64.go
│ ├── zsyscall_linux_mips.go
│ ├── zsyscall_linux_mips64.go
│ ├── zsyscall_linux_mips64le.go
│ ├── zsyscall_linux_mipsle.go
│ ├── zsyscall_linux_ppc64.go
│ ├── zsyscall_linux_ppc64le.go
│ ├── zsyscall_linux_s390x.go
│ ├── zsyscall_linux_sparc64.go
│ ├── zsyscall_netbsd_386.go
│ ├── zsyscall_netbsd_amd64.go
│ ├── zsyscall_netbsd_arm.go
│ ├── zsyscall_openbsd_386.go
│ ├── zsyscall_openbsd_amd64.go
│ ├── zsyscall_openbsd_arm.go
│ ├── zsyscall_solaris_amd64.go
│ ├── zsysctl_openbsd.go
│ ├── zsysnum_darwin_386.go
│ ├── zsysnum_darwin_amd64.go
│ ├── zsysnum_darwin_arm.go
│ ├── zsysnum_darwin_arm64.go
│ ├── zsysnum_dragonfly_amd64.go
│ ├── zsysnum_freebsd_386.go
│ ├── zsysnum_freebsd_amd64.go
│ ├── zsysnum_freebsd_arm.go
│ ├── zsysnum_linux_386.go
│ ├── zsysnum_linux_amd64.go
│ ├── zsysnum_linux_arm.go
│ ├── zsysnum_linux_arm64.go
│ ├── zsysnum_linux_mips.go
│ ├── zsysnum_linux_mips64.go
│ ├── zsysnum_linux_mips64le.go
│ ├── zsysnum_linux_mipsle.go
│ ├── zsysnum_linux_ppc64.go
│ ├── zsysnum_linux_ppc64le.go
│ ├── zsysnum_linux_s390x.go
│ ├── zsysnum_linux_sparc64.go
│ ├── zsysnum_netbsd_386.go
│ ├── zsysnum_netbsd_amd64.go
│ ├── zsysnum_netbsd_arm.go
│ ├── zsysnum_openbsd_386.go
│ ├── zsysnum_openbsd_amd64.go
│ ├── zsysnum_openbsd_arm.go
│ ├── zsysnum_solaris_amd64.go
│ ├── ztypes_darwin_386.go
│ ├── ztypes_darwin_amd64.go
│ ├── ztypes_darwin_arm.go
│ ├── ztypes_darwin_arm64.go
│ ├── ztypes_dragonfly_amd64.go
│ ├── ztypes_freebsd_386.go
│ ├── ztypes_freebsd_amd64.go
│ ├── ztypes_freebsd_arm.go
│ ├── ztypes_linux_386.go
│ ├── ztypes_linux_amd64.go
│ ├── ztypes_linux_arm.go
│ ├── ztypes_linux_arm64.go
│ ├── ztypes_linux_mips.go
│ ├── ztypes_linux_mips64.go
│ ├── ztypes_linux_mips64le.go
│ ├── ztypes_linux_mipsle.go
│ ├── ztypes_linux_ppc64.go
│ ├── ztypes_linux_ppc64le.go
│ ├── ztypes_linux_s390x.go
│ ├── ztypes_linux_sparc64.go
│ ├── ztypes_netbsd_386.go
│ ├── ztypes_netbsd_amd64.go
│ ├── ztypes_netbsd_arm.go
│ ├── ztypes_openbsd_386.go
│ ├── ztypes_openbsd_amd64.go
│ ├── ztypes_openbsd_arm.go
│ └── ztypes_solaris_amd64.go
│ └── windows
│ ├── asm_windows_386.s
│ ├── asm_windows_amd64.s
│ ├── dll_windows.go
│ ├── env_unset.go
│ ├── env_windows.go
│ ├── eventlog.go
│ ├── exec_windows.go
│ ├── memory_windows.go
│ ├── mksyscall.go
│ ├── race.go
│ ├── race0.go
│ ├── registry
│ ├── export_test.go
│ ├── key.go
│ ├── mksyscall.go
│ ├── registry_test.go
│ ├── syscall.go
│ ├── value.go
│ └── zsyscall_windows.go
│ ├── security_windows.go
│ ├── service.go
│ ├── str.go
│ ├── svc
│ ├── debug
│ │ ├── log.go
│ │ └── service.go
│ ├── event.go
│ ├── eventlog
│ │ ├── install.go
│ │ ├── log.go
│ │ └── log_test.go
│ ├── example
│ │ ├── beep.go
│ │ ├── install.go
│ │ ├── main.go
│ │ ├── manage.go
│ │ └── service.go
│ ├── go12.c
│ ├── go12.go
│ ├── go13.go
│ ├── mgr
│ │ ├── config.go
│ │ ├── mgr.go
│ │ ├── mgr_test.go
│ │ └── service.go
│ ├── security.go
│ ├── service.go
│ ├── svc_test.go
│ ├── sys_386.s
│ └── sys_amd64.s
│ ├── syscall.go
│ ├── syscall_test.go
│ ├── syscall_windows.go
│ ├── syscall_windows_test.go
│ ├── types_windows.go
│ ├── types_windows_386.go
│ ├── types_windows_amd64.go
│ └── zsyscall_windows.go
└── writer.go
/Gopkg.lock:
--------------------------------------------------------------------------------
1 | # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
2 |
3 |
4 | [[projects]]
5 | branch = "master"
6 | name = "github.com/CrowdSurge/banner"
7 | packages = [".","fonts"]
8 | revision = "8c0e79dc5ff70fb2919f0d662f44fd72ccdf9be2"
9 |
10 | [[projects]]
11 | name = "github.com/mattn/go-colorable"
12 | packages = ["."]
13 | revision = "167de6bfdfba052fa6b2d3664c8f5272e23c9072"
14 | version = "v0.0.9"
15 |
16 | [[projects]]
17 | name = "github.com/mattn/go-isatty"
18 | packages = ["."]
19 | revision = "fc9e8d8ef48496124e79ae0df75490096eccf6fe"
20 | version = "v0.0.2"
21 |
22 | [[projects]]
23 | branch = "master"
24 | name = "golang.org/x/sys"
25 | packages = ["unix"]
26 | revision = "e42485b6e20ae7d2304ec72e535b103ed350cc02"
27 |
28 | [solve-meta]
29 | analyzer-name = "dep"
30 | analyzer-version = 1
31 | inputs-digest = "62e505d253abb5182341a550e55ec60aa59bfd5411fd080c9cc4852a14cd5ef7"
32 | solver-name = "gps-cdcl"
33 | solver-version = 1
34 |
--------------------------------------------------------------------------------
/Gopkg.toml:
--------------------------------------------------------------------------------
1 |
2 | ## Gopkg.toml example (these lines may be deleted)
3 |
4 | ## "metadata" defines metadata about the project that could be used by other independent
5 | ## systems. The metadata defined here will be ignored by dep.
6 | # [metadata]
7 | # key1 = "value that convey data to other systems"
8 | # system1-data = "value that is used by a system"
9 | # system2-data = "value that is used by another system"
10 |
11 | ## "required" lists a set of packages (not projects) that must be included in
12 | ## Gopkg.lock. This list is merged with the set of packages imported by the current
13 | ## project. Use it when your project needs a package it doesn't explicitly import -
14 | ## including "main" packages.
15 | # required = ["github.com/user/thing/cmd/thing"]
16 |
17 | ## "ignored" lists a set of packages (not projects) that are ignored when
18 | ## dep statically analyzes source code. Ignored packages can be in this project,
19 | ## or in a dependency.
20 | # ignored = ["github.com/user/project/badpkg"]
21 |
22 | ## Constraints are rules for how directly imported projects
23 | ## may be incorporated into the depgraph. They are respected by
24 | ## dep whether coming from the Gopkg.toml of the current project or a dependency.
25 | # [[constraint]]
26 | ## Required: the root import path of the project being constrained.
27 | # name = "github.com/user/project"
28 | #
29 | ## Recommended: the version constraint to enforce for the project.
30 | ## Only one of "branch", "version" or "revision" can be specified.
31 | # version = "1.0.0"
32 | # branch = "master"
33 | # revision = "abc123"
34 | #
35 | ## Optional: an alternate location (URL or import path) for the project's source.
36 | # source = "https://github.com/myfork/package.git"
37 | #
38 | ## "metadata" defines metadata about the dependency or override that could be used
39 | ## by other independent systems. The metadata defined here will be ignored by dep.
40 | # [metadata]
41 | # key1 = "value that convey data to other systems"
42 | # system1-data = "value that is used by a system"
43 | # system2-data = "value that is used by another system"
44 |
45 | ## Overrides have the same structure as [[constraint]], but supersede all
46 | ## [[constraint]] declarations from all projects. Only [[override]] from
47 | ## the current project's are applied.
48 | ##
49 | ## Overrides are a sledgehammer. Use them only as a last resort.
50 | # [[override]]
51 | ## Required: the root import path of the project being constrained.
52 | # name = "github.com/user/project"
53 | #
54 | ## Optional: specifying a version constraint override will cause all other
55 | ## constraints on this project to be ignored; only the overridden constraint
56 | ## need be satisfied.
57 | ## Again, only one of "branch", "version" or "revision" can be specified.
58 | # version = "1.0.0"
59 | # branch = "master"
60 | # revision = "abc123"
61 | #
62 | ## Optional: specifying an alternate source location as an override will
63 | ## enforce that the alternate location is used for that project, regardless of
64 | ## what source location any dependent projects specify.
65 | # source = "https://github.com/myfork/package.git"
66 |
67 |
68 |
69 | [[constraint]]
70 | branch = "master"
71 | name = "github.com/CrowdSurge/banner"
72 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # lolgopher
2 |
3 |

4 |
5 | Rainbow Writer implementation for Golang
6 |
7 | Based on https://github.com/busyloop/lolcat.
8 |
9 |
Proudly packaged with Golang [dep](https://github.com/golang/dep)
10 |
11 | ## Installing
12 |
13 | ```
14 | $ go get github.com/kris-nova/lolgopher
15 | ```
16 |
17 | ##### From Source
18 |
19 | ```
20 | cd $GOPATH/src/github.com/kris-nova/lolgopher
21 | go install .
22 | ```
23 |
--------------------------------------------------------------------------------
/color.go:
--------------------------------------------------------------------------------
1 | package lol
2 |
3 | // colorer is an interface that can be used to colorize an io.Writer. Each
4 | // colorer is designed to support a specific terminal color schema (256, 0, etc).
5 | type colorer interface {
6 |
7 | // Rainbow will calculate the current color spectrum for RGB colors only.
8 | // Each implementation other than truecolor will need to implement rainbow
9 | // and handle it accordingly.
10 | rainbow(freq float64, i float64)
11 |
12 | // Return the ASCII escape code for this color for this particular byte
13 | format() []byte
14 |
15 | // Reset the most recent ASCII code opened
16 | reset() []byte
17 | }
18 |
--------------------------------------------------------------------------------
/color_0.go:
--------------------------------------------------------------------------------
1 | package lol
2 |
3 | type color0 struct {
4 | R, G, B uint8
5 | }
6 |
7 | func (c *color0) rainbow(freq float64, i float64) {
8 | // No calculation for no color support
9 | }
10 |
11 | func (c *color0) format() []byte {
12 | return []byte("")
13 | }
14 |
15 | func (c *color0) reset() []byte {
16 | return []byte("")
17 | }
18 |
19 | func New0Colorer() colorer {
20 | return &color0{}
21 | }
22 |
--------------------------------------------------------------------------------
/color_256.go:
--------------------------------------------------------------------------------
1 | package lol
2 |
3 | import (
4 | "fmt"
5 | "math"
6 | )
7 |
8 | type color256 struct {
9 | R, G, B uint8
10 | }
11 |
12 | func (c *color256) rainbow(freq float64, i float64) {
13 | c.R = uint8(math.Floor(math.Sin(freq*i+0)*127)) + 128
14 | c.G = uint8(math.Floor(math.Sin(freq*i+2.0*math.Pi/3.0)*127)) + 128
15 | c.B = uint8(math.Floor(math.Sin(freq*i+4.0*math.Pi/3.0)*127)) + 128
16 | }
17 |
18 | func (c *color256) format() []byte {
19 |
20 | // Support for grayscale colors
21 | if c.R == c.G && c.G == c.B && int(c.R) > 232 {
22 | return []byte(fmt.Sprintf("\x1b[38;5;%dm", int(c.R)))
23 | }
24 |
25 | // Math for 256: We use the closest value possible
26 | r6 := (uint16(c.R) * 3) / 255
27 | g6 := (uint16(c.G) * 3) / 255
28 | b6 := (uint16(c.B) * 3) / 255
29 | i := 36*r6 + 6*g6 + b6
30 | return []byte(fmt.Sprintf("\x1b[38;5;%dm", i))
31 | }
32 |
33 | func (c *color256) reset() []byte {
34 | return []byte("\x1b[0m")
35 | }
36 |
37 | func New256Colorer() colorer {
38 | return &color256{}
39 | }
40 |
--------------------------------------------------------------------------------
/color_truecolor.go:
--------------------------------------------------------------------------------
1 | package lol
2 |
3 | import (
4 | "fmt"
5 | "math"
6 | )
7 |
8 | type truecolor struct {
9 | R, G, B uint8
10 | }
11 |
12 | func (c *truecolor) rainbow(freq float64, i float64) {
13 | c.R = uint8(math.Floor(math.Sin(freq*i+0)*127)) + 128
14 | c.G = uint8(math.Floor(math.Sin(freq*i+2.0*math.Pi/3.0)*127)) + 128
15 | c.B = uint8(math.Floor(math.Sin(freq*i+4.0*math.Pi/3.0)*127)) + 128
16 | }
17 |
18 | func (c *truecolor) format() []byte {
19 | return []byte(fmt.Sprintf("\x1b[38;2;%d;%d;%dm", c.R, c.G, c.B))
20 | }
21 |
22 | func (c *truecolor) reset() []byte {
23 | return []byte("\x1b[0m")
24 | }
25 |
26 | func newTruecolorColorer() colorer {
27 | return &truecolor{}
28 | }
29 |
--------------------------------------------------------------------------------
/examples/banner/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/CrowdSurge/banner"
5 | lol "github.com/kris-nova/lolgopher"
6 | )
7 |
8 | func main() {
9 | w := lol.NewLolWriter()
10 | w.Write([]byte(banner.PrintS("lolgopher")))
11 | }
12 |
--------------------------------------------------------------------------------
/examples/print/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | lol "github.com/kris-nova/lolgopher"
5 | )
6 |
7 | func main() {
8 | lol.Printf("Testing testing %d%d%d\n", 1, 2, 3)
9 | lol.Println("trololololololololololololololololololol")
10 | lol.Println("trololololololololololololololololololol")
11 | lol.Println("trololololololololololololololololololol")
12 | lol.Println("trololololololololololololololololololol")
13 | lol.Println("trololololololololololololololololololol")
14 | lol.Println("trololololololololololololololololololol")
15 | lol.Println("trololololololololololololololololololol")
16 | lol.Println("trololololololololololololololololololol")
17 | lol.Println("trololololololololololololololololololol")
18 | lol.Println("trololololololololololololololololololol")
19 | lol.Println("trololololololololololololololololololol")
20 | lol.Println("trololololololololololololololololololol")
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/img/kubicorn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krisnova/lolgopher/73f0047e8b6513d9faa72eac7fb0c6d094b30830/img/kubicorn.png
--------------------------------------------------------------------------------
/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/krisnova/lolgopher/73f0047e8b6513d9faa72eac7fb0c6d094b30830/img/logo.png
--------------------------------------------------------------------------------
/output.go:
--------------------------------------------------------------------------------
1 | // +build !windows
2 |
3 | package lol
4 |
5 | import "os"
6 |
7 | var stdout = os.Stdout
8 |
--------------------------------------------------------------------------------
/output_windows.go:
--------------------------------------------------------------------------------
1 | // +build windows
2 |
3 | package lol
4 |
5 | import colorable "github.com/mattn/go-colorable"
6 |
7 | var stdout = colorable.NewColorableStdout()
8 |
--------------------------------------------------------------------------------
/print.go:
--------------------------------------------------------------------------------
1 | package lol
2 |
3 | import (
4 | "fmt"
5 | )
6 |
7 | var w = &Writer{Output: stdout, ColorMode: ColorMode256}
8 |
9 | func Println(a ...interface{}) (n int, err error) {
10 | return fmt.Fprintln(w, a...)
11 | }
12 |
13 | func Printf(format string, a ...interface{}) (n int, err error) {
14 | return fmt.Fprintf(w, format, a...)
15 | }
16 |
--------------------------------------------------------------------------------
/vendor/github.com/CrowdSurge/banner/README.md:
--------------------------------------------------------------------------------
1 | ```
2 | _
3 | | |__ __ _ _ __ _ __ ___ _ __
4 | | '_ \ / _` || '_ \ | '_ \ / _ \| '__|
5 | | |_) || (_| || | | || | | || __/| |
6 | |_.__/ \__,_||_| |_||_| |_| \___||_|
7 |
8 | ```
9 |
10 | Just a little golang lib to generate ASCII art banners from text. Written in pure go, doesn't use any external dependencies.
11 |
12 | See the examples for how to use it.
13 |
14 | ## TODO
15 | - add support for capitol letters, numbers symbols
16 | - graceful line wrapping
--------------------------------------------------------------------------------
/vendor/github.com/CrowdSurge/banner/banner.go:
--------------------------------------------------------------------------------
1 | package banner
2 |
3 | import (
4 | "fmt"
5 | "github.com/CrowdSurge/banner/fonts"
6 | "strings"
7 | )
8 |
9 | var joker = `
10 | ___
11 | / _ \
12 | \// /
13 | \/
14 | ()
15 | `
16 |
17 | var jokerInf letterInfos
18 | var jokerLines []string
19 |
20 | func init() {
21 | a, b := processOne(joker)
22 | jokerInf = b
23 | jokerLines = a
24 | }
25 |
26 | type letterInfos struct {
27 | lineNum int
28 | maxWidth int
29 | }
30 |
31 | type Banner struct {
32 | font map[string][]string
33 | info map[string]letterInfos
34 | }
35 |
36 | func processOne(s string) ([]string, letterInfos) {
37 | lines := strings.Split(s, "\n")
38 | maxw := 0
39 | for i, line := range lines {
40 | if len(line) > maxw {
41 | maxw = len(line)
42 | }
43 | lines[i] = line
44 | }
45 | return lines, letterInfos{
46 | len(lines),
47 | maxw,
48 | }
49 | }
50 |
51 | func process(m map[string]string) (map[string][]string, map[string]letterInfos) {
52 | tr := map[string][]string{}
53 | inf := map[string]letterInfos{}
54 | for k, v := range m {
55 | a, b := processOne(v)
56 | tr[k] = a
57 | inf[k] = b
58 | }
59 | return tr, inf
60 | }
61 |
62 | func NewBanner(m map[string]string) Banner {
63 | trimmed, infos := process(m)
64 | return Banner{trimmed, infos}
65 | }
66 |
67 | func padRight(s string, width int) string {
68 | if len(s) < width {
69 | s += strings.Repeat(" ", width-len(s))
70 | }
71 | return s
72 | }
73 |
74 | func (b Banner) getOne(s string) ([]string, letterInfos) {
75 | linf, ok := b.info[s]
76 | if !ok {
77 | joker, okj := b.info["?"]
78 | if okj {
79 | return b.font["?"], joker
80 | }
81 | return jokerLines, jokerInf
82 | }
83 | return b.font[s], linf
84 | }
85 |
86 | func (b Banner) print(text string, printOut bool) string {
87 | bannerMaxHeight := 0
88 | // Calculating max height of banner
89 | for _, v := range text {
90 | _, linf := b.getOne(string(v))
91 | if linf.lineNum > bannerMaxHeight {
92 | bannerMaxHeight = linf.lineNum
93 | }
94 | }
95 | ret := ""
96 | // Render
97 | for i := 0; i < bannerMaxHeight-1; i++ {
98 | thisLin := ""
99 | for _, v := range text {
100 | lines, linf := b.getOne(string(v))
101 | if linf.lineNum <= i {
102 | thisLin += padRight("", linf.maxWidth)
103 | } else {
104 | thisLin += padRight(lines[i], linf.maxWidth)
105 | }
106 | }
107 | if printOut {
108 | fmt.Println(thisLin)
109 | } else {
110 | ret += thisLin + "\n"
111 | }
112 | }
113 | return ret
114 | }
115 |
116 | func (b Banner) PrintS(text string) string {
117 | return b.print(text, false)
118 | }
119 |
120 | func (b Banner) Print(text string) {
121 | b.print(text, true)
122 | }
123 |
124 | func Print(s string) {
125 | NewBanner(fonts.Ogre).Print(s)
126 | }
127 |
128 | func PrintS(s string) string {
129 | return NewBanner(fonts.Ogre).PrintS(s)
130 | }
131 |
--------------------------------------------------------------------------------
/vendor/github.com/CrowdSurge/banner/example/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/CrowdSurge/banner"
5 | )
6 |
7 | func main() {
8 | banner.Print("abcdefghijkl")
9 | banner.Print("mnopqrstuvwxyz")
10 | banner.Print("1234567890?-_.")
11 | }
12 |
--------------------------------------------------------------------------------
/vendor/github.com/CrowdSurge/banner/fonts/ogre.go:
--------------------------------------------------------------------------------
1 | package fonts
2 |
3 | var Ogre = map[string]string{
4 | "a": `
5 |
6 | __ _
7 | / _` + "`" + ` |
8 | | (_| |
9 | \__,_|
10 | `,
11 | "b": `
12 | _
13 | | |__
14 | | '_ \
15 | | |_) |
16 | |_.__/
17 | `,
18 | "c": `
19 |
20 | ___
21 | / __|
22 | | (__
23 | \___|
24 | `,
25 | "d": `
26 | _
27 | __| |
28 | / _` + "`" + ` |
29 | | (_| |
30 | \__,_|
31 | `,
32 | "e": `
33 |
34 | ___
35 | / _ \
36 | | __/
37 | \___|
38 | `,
39 | "f": `
40 | __
41 | / _|
42 | | |_
43 | | _|
44 | |_|
45 | `,
46 | "g": `
47 |
48 | __ _
49 | / _` + "`" + ` |
50 | | (_| |
51 | \__, |
52 | |___/
53 | `,
54 | "h": `
55 | _
56 | | |__
57 | | '_ \
58 | | | | |
59 | |_| |_|
60 | `,
61 | "i": `
62 | _
63 | (_)
64 | | |
65 | | |
66 | |_|
67 | `,
68 | "j": `
69 | _
70 | (_)
71 | | |
72 | | |
73 | _/ |
74 | |__/
75 |
76 | `,
77 | "k": `
78 | _
79 | | | __
80 | | |/ /
81 | | <
82 | |_|\_\
83 | `,
84 | "l": `
85 | _
86 | | |
87 | | |
88 | | |
89 | |_|
90 | `,
91 | "m": `
92 |
93 | _ __ ___
94 | | '_ ` + "`" + ` _ \
95 | | | | | | |
96 | |_| |_| |_|
97 | `,
98 | "n": `
99 |
100 | _ __
101 | | '_ \
102 | | | | |
103 | |_| |_|
104 | `,
105 | "o": `
106 |
107 | ___
108 | / _ \
109 | | (_) |
110 | \___/
111 | `,
112 | "p": `
113 |
114 | _ __
115 | | '_ \
116 | | |_) |
117 | | .__/
118 | |_|
119 | `,
120 | "q": `
121 |
122 | __ _
123 | / _` + "`" + ` |
124 | | (_| |
125 | \__, |
126 | |_|
127 | `,
128 | "r": `
129 |
130 | _ __
131 | | '__|
132 | | |
133 | |_|
134 | `,
135 | "s": `
136 |
137 | ___
138 | / __|
139 | \__ \
140 | |___/
141 | `,
142 | "t": `
143 | _
144 | | |_
145 | | __|
146 | | |_
147 | \__|
148 | `,
149 | "u": `
150 |
151 | _ _
152 | | | | |
153 | | |_| |
154 | \__,_|
155 | `,
156 | "v": `
157 |
158 | __ __
159 | \ \ / /
160 | \ V /
161 | \_/
162 | `,
163 | "w": `
164 |
165 | __ __ __
166 | \ \ / \ / /
167 | \ V /\ V /
168 | \_/ \_/
169 | `,
170 | "x": `
171 |
172 | __ __
173 | \ \/ /
174 | > <
175 | /_/\_\
176 | `,
177 | "y": `
178 |
179 | _ _
180 | | | | |
181 | | |_| |
182 | \__, |
183 | |___/
184 | `,
185 | "z": `
186 |
187 | ____
188 | |_ /
189 | / /
190 | /___|
191 | `,
192 | "?": `
193 | ___
194 | / _ \
195 | \// /
196 | \/
197 | ()
198 | `,
199 | ".": `
200 |
201 |
202 |
203 | _
204 | (_)
205 | `,
206 | "-": `
207 |
208 |
209 | ____
210 | |____|
211 |
212 | `,
213 | " ": `
214 |
215 |
216 |
217 |
218 | `,
219 | }
220 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-colorable/.travis.yml:
--------------------------------------------------------------------------------
1 | language: go
2 | go:
3 | - tip
4 |
5 | before_install:
6 | - go get github.com/mattn/goveralls
7 | - go get golang.org/x/tools/cmd/cover
8 | script:
9 | - $HOME/gopath/bin/goveralls -repotoken xnXqRGwgW3SXIguzxf90ZSK1GPYZPaGrw
10 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-colorable/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Yasuhiro Matsumoto
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-colorable/README.md:
--------------------------------------------------------------------------------
1 | # go-colorable
2 |
3 | [](http://godoc.org/github.com/mattn/go-colorable)
4 | [](https://travis-ci.org/mattn/go-colorable)
5 | [](https://coveralls.io/github/mattn/go-colorable?branch=master)
6 | [](https://goreportcard.com/report/mattn/go-colorable)
7 |
8 | Colorable writer for windows.
9 |
10 | For example, most of logger packages doesn't show colors on windows. (I know we can do it with ansicon. But I don't want.)
11 | This package is possible to handle escape sequence for ansi color on windows.
12 |
13 | ## Too Bad!
14 |
15 | 
16 |
17 |
18 | ## So Good!
19 |
20 | 
21 |
22 | ## Usage
23 |
24 | ```go
25 | logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true})
26 | logrus.SetOutput(colorable.NewColorableStdout())
27 |
28 | logrus.Info("succeeded")
29 | logrus.Warn("not correct")
30 | logrus.Error("something error")
31 | logrus.Fatal("panic")
32 | ```
33 |
34 | You can compile above code on non-windows OSs.
35 |
36 | ## Installation
37 |
38 | ```
39 | $ go get github.com/mattn/go-colorable
40 | ```
41 |
42 | # License
43 |
44 | MIT
45 |
46 | # Author
47 |
48 | Yasuhiro Matsumoto (a.k.a mattn)
49 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-colorable/_example/escape-seq/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "bufio"
5 | "fmt"
6 |
7 | "github.com/mattn/go-colorable"
8 | )
9 |
10 | func main() {
11 | stdOut := bufio.NewWriter(colorable.NewColorableStdout())
12 |
13 | fmt.Fprint(stdOut, "\x1B[3GMove to 3rd Column\n")
14 | fmt.Fprint(stdOut, "\x1B[1;2HMove to 2nd Column on 1st Line\n")
15 | stdOut.Flush()
16 | }
17 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-colorable/_example/logrus/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/mattn/go-colorable"
5 | "github.com/sirupsen/logrus"
6 | )
7 |
8 | func main() {
9 | logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true})
10 | logrus.SetOutput(colorable.NewColorableStdout())
11 |
12 | logrus.Info("succeeded")
13 | logrus.Warn("not correct")
14 | logrus.Error("something error")
15 | logrus.Fatal("panic")
16 | }
17 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-colorable/_example/title/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "os"
6 | . "github.com/mattn/go-colorable"
7 | )
8 |
9 | func main() {
10 | out := NewColorableStdout()
11 | fmt.Fprint(out, "\x1B]0;TITLE Changed\007(See title and hit any key)")
12 | var c [1]byte
13 | os.Stdin.Read(c[:])
14 | }
15 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-colorable/colorable_appengine.go:
--------------------------------------------------------------------------------
1 | // +build appengine
2 |
3 | package colorable
4 |
5 | import (
6 | "io"
7 | "os"
8 |
9 | _ "github.com/mattn/go-isatty"
10 | )
11 |
12 | // NewColorable return new instance of Writer which handle escape sequence.
13 | func NewColorable(file *os.File) io.Writer {
14 | if file == nil {
15 | panic("nil passed instead of *os.File to NewColorable()")
16 | }
17 |
18 | return file
19 | }
20 |
21 | // NewColorableStdout return new instance of Writer which handle escape sequence for stdout.
22 | func NewColorableStdout() io.Writer {
23 | return os.Stdout
24 | }
25 |
26 | // NewColorableStderr return new instance of Writer which handle escape sequence for stderr.
27 | func NewColorableStderr() io.Writer {
28 | return os.Stderr
29 | }
30 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-colorable/colorable_others.go:
--------------------------------------------------------------------------------
1 | // +build !windows
2 | // +build !appengine
3 |
4 | package colorable
5 |
6 | import (
7 | "io"
8 | "os"
9 |
10 | _ "github.com/mattn/go-isatty"
11 | )
12 |
13 | // NewColorable return new instance of Writer which handle escape sequence.
14 | func NewColorable(file *os.File) io.Writer {
15 | if file == nil {
16 | panic("nil passed instead of *os.File to NewColorable()")
17 | }
18 |
19 | return file
20 | }
21 |
22 | // NewColorableStdout return new instance of Writer which handle escape sequence for stdout.
23 | func NewColorableStdout() io.Writer {
24 | return os.Stdout
25 | }
26 |
27 | // NewColorableStderr return new instance of Writer which handle escape sequence for stderr.
28 | func NewColorableStderr() io.Writer {
29 | return os.Stderr
30 | }
31 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-colorable/colorable_test.go:
--------------------------------------------------------------------------------
1 | package colorable
2 |
3 | import (
4 | "bytes"
5 | "os"
6 | "runtime"
7 | "testing"
8 | )
9 |
10 | // checkEncoding checks that colorable is output encoding agnostic as long as
11 | // the encoding is a superset of ASCII. This implies that one byte not part of
12 | // an ANSI sequence must give exactly one byte in output
13 | func checkEncoding(t *testing.T, data []byte) {
14 | // Send non-UTF8 data to colorable
15 | b := bytes.NewBuffer(make([]byte, 0, 10))
16 | if b.Len() != 0 {
17 | t.FailNow()
18 | }
19 | // TODO move colorable wrapping outside the test
20 | c := NewNonColorable(b)
21 | c.Write(data)
22 | if b.Len() != len(data) {
23 | t.Fatalf("%d bytes expected, got %d", len(data), b.Len())
24 | }
25 | }
26 |
27 | func TestEncoding(t *testing.T) {
28 | checkEncoding(t, []byte{}) // Empty
29 | checkEncoding(t, []byte(`abc`)) // "abc"
30 | checkEncoding(t, []byte(`é`)) // "é" in UTF-8
31 | checkEncoding(t, []byte{233}) // 'é' in Latin-1
32 | }
33 |
34 | func TestNonColorable(t *testing.T) {
35 | var buf bytes.Buffer
36 | want := "hello"
37 | NewNonColorable(&buf).Write([]byte("\x1b[0m" + want + "\x1b[2J"))
38 | got := buf.String()
39 | if got != "hello" {
40 | t.Fatalf("want %q but %q", want, got)
41 | }
42 |
43 | buf.Reset()
44 | NewNonColorable(&buf).Write([]byte("\x1b["))
45 | got = buf.String()
46 | if got != "" {
47 | t.Fatalf("want %q but %q", "", got)
48 | }
49 | }
50 |
51 | func TestNonColorableNil(t *testing.T) {
52 | paniced := false
53 | func() {
54 | defer func() {
55 | recover()
56 | paniced = true
57 | }()
58 | NewNonColorable(nil)
59 | NewColorable(nil)
60 | }()
61 |
62 | if !paniced {
63 | t.Fatalf("should panic")
64 | }
65 | }
66 |
67 | func TestColorable(t *testing.T) {
68 | if runtime.GOOS == "windows" {
69 | t.Skipf("skip this test on windows")
70 | }
71 | _, ok := NewColorableStdout().(*os.File)
72 | if !ok {
73 | t.Fatalf("should os.Stdout on UNIX")
74 | }
75 | _, ok = NewColorableStderr().(*os.File)
76 | if !ok {
77 | t.Fatalf("should os.Stdout on UNIX")
78 | }
79 | _, ok = NewColorable(os.Stdout).(*os.File)
80 | if !ok {
81 | t.Fatalf("should os.Stdout on UNIX")
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-colorable/noncolorable.go:
--------------------------------------------------------------------------------
1 | package colorable
2 |
3 | import (
4 | "bytes"
5 | "io"
6 | )
7 |
8 | // NonColorable hold writer but remove escape sequence.
9 | type NonColorable struct {
10 | out io.Writer
11 | }
12 |
13 | // NewNonColorable return new instance of Writer which remove escape sequence from Writer.
14 | func NewNonColorable(w io.Writer) io.Writer {
15 | return &NonColorable{out: w}
16 | }
17 |
18 | // Write write data on console
19 | func (w *NonColorable) Write(data []byte) (n int, err error) {
20 | er := bytes.NewReader(data)
21 | var bw [1]byte
22 | loop:
23 | for {
24 | c1, err := er.ReadByte()
25 | if err != nil {
26 | break loop
27 | }
28 | if c1 != 0x1b {
29 | bw[0] = c1
30 | w.out.Write(bw[:])
31 | continue
32 | }
33 | c2, err := er.ReadByte()
34 | if err != nil {
35 | break loop
36 | }
37 | if c2 != 0x5b {
38 | continue
39 | }
40 |
41 | var buf bytes.Buffer
42 | for {
43 | c, err := er.ReadByte()
44 | if err != nil {
45 | break loop
46 | }
47 | if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {
48 | break
49 | }
50 | buf.Write([]byte(string(c)))
51 | }
52 | }
53 |
54 | return len(data), nil
55 | }
56 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/.travis.yml:
--------------------------------------------------------------------------------
1 | language: go
2 | go:
3 | - tip
4 |
5 | before_install:
6 | - go get github.com/mattn/goveralls
7 | - go get golang.org/x/tools/cmd/cover
8 | script:
9 | - $HOME/gopath/bin/goveralls -repotoken 3gHdORO5k5ziZcWMBxnd9LrMZaJs8m9x5
10 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) Yasuhiro MATSUMOTO
2 |
3 | MIT License (Expat)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/README.md:
--------------------------------------------------------------------------------
1 | # go-isatty
2 |
3 | [](http://godoc.org/github.com/mattn/go-isatty)
4 | [](https://travis-ci.org/mattn/go-isatty)
5 | [](https://coveralls.io/github/mattn/go-isatty?branch=master)
6 | [](https://goreportcard.com/report/mattn/go-isatty)
7 |
8 | isatty for golang
9 |
10 | ## Usage
11 |
12 | ```go
13 | package main
14 |
15 | import (
16 | "fmt"
17 | "github.com/mattn/go-isatty"
18 | "os"
19 | )
20 |
21 | func main() {
22 | if isatty.IsTerminal(os.Stdout.Fd()) {
23 | fmt.Println("Is Terminal")
24 | } else if isatty.IsCygwinTerminal(os.Stdout.Fd()) {
25 | fmt.Println("Is Cygwin/MSYS2 Terminal")
26 | } else {
27 | fmt.Println("Is Not Terminal")
28 | }
29 | }
30 | ```
31 |
32 | ## Installation
33 |
34 | ```
35 | $ go get github.com/mattn/go-isatty
36 | ```
37 |
38 | ## License
39 |
40 | MIT
41 |
42 | ## Author
43 |
44 | Yasuhiro Matsumoto (a.k.a mattn)
45 |
46 | ## Thanks
47 |
48 | * k-takata: base idea for IsCygwinTerminal
49 |
50 | https://github.com/k-takata/go-iscygpty
51 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/doc.go:
--------------------------------------------------------------------------------
1 | // Package isatty implements interface to isatty
2 | package isatty
3 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/example_test.go:
--------------------------------------------------------------------------------
1 | package isatty_test
2 |
3 | import (
4 | "fmt"
5 | "os"
6 |
7 | "github.com/mattn/go-isatty"
8 | )
9 |
10 | func Example() {
11 | if isatty.IsTerminal(os.Stdout.Fd()) {
12 | fmt.Println("Is Terminal")
13 | } else if isatty.IsCygwinTerminal(os.Stdout.Fd()) {
14 | fmt.Println("Is Cygwin/MSYS2 Terminal")
15 | } else {
16 | fmt.Println("Is Not Terminal")
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/isatty_appengine.go:
--------------------------------------------------------------------------------
1 | // +build appengine
2 |
3 | package isatty
4 |
5 | // IsTerminal returns true if the file descriptor is terminal which
6 | // is always false on on appengine classic which is a sandboxed PaaS.
7 | func IsTerminal(fd uintptr) bool {
8 | return false
9 | }
10 |
11 | // IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2
12 | // terminal. This is also always false on this environment.
13 | func IsCygwinTerminal(fd uintptr) bool {
14 | return false
15 | }
16 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/isatty_bsd.go:
--------------------------------------------------------------------------------
1 | // +build darwin freebsd openbsd netbsd dragonfly
2 | // +build !appengine
3 |
4 | package isatty
5 |
6 | import (
7 | "syscall"
8 | "unsafe"
9 | )
10 |
11 | const ioctlReadTermios = syscall.TIOCGETA
12 |
13 | // IsTerminal return true if the file descriptor is terminal.
14 | func IsTerminal(fd uintptr) bool {
15 | var termios syscall.Termios
16 | _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)
17 | return err == 0
18 | }
19 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/isatty_linux.go:
--------------------------------------------------------------------------------
1 | // +build linux
2 | // +build !appengine
3 |
4 | package isatty
5 |
6 | import (
7 | "syscall"
8 | "unsafe"
9 | )
10 |
11 | const ioctlReadTermios = syscall.TCGETS
12 |
13 | // IsTerminal return true if the file descriptor is terminal.
14 | func IsTerminal(fd uintptr) bool {
15 | var termios syscall.Termios
16 | _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)
17 | return err == 0
18 | }
19 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/isatty_others.go:
--------------------------------------------------------------------------------
1 | // +build !windows
2 | // +build !appengine
3 |
4 | package isatty
5 |
6 | // IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2
7 | // terminal. This is also always false on this environment.
8 | func IsCygwinTerminal(fd uintptr) bool {
9 | return false
10 | }
11 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/isatty_others_test.go:
--------------------------------------------------------------------------------
1 | // +build !windows
2 |
3 | package isatty
4 |
5 | import (
6 | "os"
7 | "testing"
8 | )
9 |
10 | func TestTerminal(t *testing.T) {
11 | // test for non-panic
12 | IsTerminal(os.Stdout.Fd())
13 | }
14 |
15 | func TestCygwinPipeName(t *testing.T) {
16 | if IsCygwinTerminal(os.Stdout.Fd()) {
17 | t.Fatal("should be false always")
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/isatty_solaris.go:
--------------------------------------------------------------------------------
1 | // +build solaris
2 | // +build !appengine
3 |
4 | package isatty
5 |
6 | import (
7 | "golang.org/x/sys/unix"
8 | )
9 |
10 | // IsTerminal returns true if the given file descriptor is a terminal.
11 | // see: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c
12 | func IsTerminal(fd uintptr) bool {
13 | var termio unix.Termio
14 | err := unix.IoctlSetTermio(int(fd), unix.TCGETA, &termio)
15 | return err == nil
16 | }
17 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/isatty_windows.go:
--------------------------------------------------------------------------------
1 | // +build windows
2 | // +build !appengine
3 |
4 | package isatty
5 |
6 | import (
7 | "strings"
8 | "syscall"
9 | "unicode/utf16"
10 | "unsafe"
11 | )
12 |
13 | const (
14 | fileNameInfo uintptr = 2
15 | fileTypePipe = 3
16 | )
17 |
18 | var (
19 | kernel32 = syscall.NewLazyDLL("kernel32.dll")
20 | procGetConsoleMode = kernel32.NewProc("GetConsoleMode")
21 | procGetFileInformationByHandleEx = kernel32.NewProc("GetFileInformationByHandleEx")
22 | procGetFileType = kernel32.NewProc("GetFileType")
23 | )
24 |
25 | func init() {
26 | // Check if GetFileInformationByHandleEx is available.
27 | if procGetFileInformationByHandleEx.Find() != nil {
28 | procGetFileInformationByHandleEx = nil
29 | }
30 | }
31 |
32 | // IsTerminal return true if the file descriptor is terminal.
33 | func IsTerminal(fd uintptr) bool {
34 | var st uint32
35 | r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0)
36 | return r != 0 && e == 0
37 | }
38 |
39 | // Check pipe name is used for cygwin/msys2 pty.
40 | // Cygwin/MSYS2 PTY has a name like:
41 | // \{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master
42 | func isCygwinPipeName(name string) bool {
43 | token := strings.Split(name, "-")
44 | if len(token) < 5 {
45 | return false
46 | }
47 |
48 | if token[0] != `\msys` && token[0] != `\cygwin` {
49 | return false
50 | }
51 |
52 | if token[1] == "" {
53 | return false
54 | }
55 |
56 | if !strings.HasPrefix(token[2], "pty") {
57 | return false
58 | }
59 |
60 | if token[3] != `from` && token[3] != `to` {
61 | return false
62 | }
63 |
64 | if token[4] != "master" {
65 | return false
66 | }
67 |
68 | return true
69 | }
70 |
71 | // IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2
72 | // terminal.
73 | func IsCygwinTerminal(fd uintptr) bool {
74 | if procGetFileInformationByHandleEx == nil {
75 | return false
76 | }
77 |
78 | // Cygwin/msys's pty is a pipe.
79 | ft, _, e := syscall.Syscall(procGetFileType.Addr(), 1, fd, 0, 0)
80 | if ft != fileTypePipe || e != 0 {
81 | return false
82 | }
83 |
84 | var buf [2 + syscall.MAX_PATH]uint16
85 | r, _, e := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(),
86 | 4, fd, fileNameInfo, uintptr(unsafe.Pointer(&buf)),
87 | uintptr(len(buf)*2), 0, 0)
88 | if r == 0 || e != 0 {
89 | return false
90 | }
91 |
92 | l := *(*uint32)(unsafe.Pointer(&buf))
93 | return isCygwinPipeName(string(utf16.Decode(buf[2 : 2+l/2])))
94 | }
95 |
--------------------------------------------------------------------------------
/vendor/github.com/mattn/go-isatty/isatty_windows_test.go:
--------------------------------------------------------------------------------
1 | // +build windows
2 |
3 | package isatty
4 |
5 | import (
6 | "testing"
7 | )
8 |
9 | func TestCygwinPipeName(t *testing.T) {
10 | tests := []struct {
11 | name string
12 | result bool
13 | }{
14 | {``, false},
15 | {`\msys-`, false},
16 | {`\cygwin-----`, false},
17 | {`\msys-x-PTY5-pty1-from-master`, false},
18 | {`\cygwin-x-PTY5-from-master`, false},
19 | {`\cygwin-x-pty2-from-toaster`, false},
20 | {`\cygwin--pty2-from-master`, false},
21 | {`\\cygwin-x-pty2-from-master`, false},
22 | {`\cygwin-x-pty2-from-master-`, true}, // for the feature
23 | {`\cygwin-e022582115c10879-pty4-from-master`, true},
24 | {`\msys-e022582115c10879-pty4-to-master`, true},
25 | {`\cygwin-e022582115c10879-pty4-to-master`, true},
26 | }
27 |
28 | for _, test := range tests {
29 | want := test.result
30 | got := isCygwinPipeName(test.name)
31 | if want != got {
32 | t.Fatalf("isatty(%q): got %v, want %v:", test.name, got, want)
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/.gitattributes:
--------------------------------------------------------------------------------
1 | # Treat all files in this repo as binary, with no git magic updating
2 | # line endings. Windows users contributing to Go will need to use a
3 | # modern version of git and editors capable of LF line endings.
4 | #
5 | # We'll prevent accidental CRLF line endings from entering the repo
6 | # via the git-review gofmt checks.
7 | #
8 | # See golang.org/issue/9281
9 |
10 | * -text
11 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/.gitignore:
--------------------------------------------------------------------------------
1 | # Add no patterns to .hgignore except for files generated by the build.
2 | last-change
3 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/AUTHORS:
--------------------------------------------------------------------------------
1 | # This source code refers to The Go Authors for copyright purposes.
2 | # The master list of authors is in the main Go distribution,
3 | # visible at http://tip.golang.org/AUTHORS.
4 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to Go
2 |
3 | Go is an open source project.
4 |
5 | It is the work of hundreds of contributors. We appreciate your help!
6 |
7 |
8 | ## Filing issues
9 |
10 | When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions:
11 |
12 | 1. What version of Go are you using (`go version`)?
13 | 2. What operating system and processor architecture are you using?
14 | 3. What did you do?
15 | 4. What did you expect to see?
16 | 5. What did you see instead?
17 |
18 | General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker.
19 | The gophers there will answer or ask you to file an issue if you've tripped over a bug.
20 |
21 | ## Contributing code
22 |
23 | Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html)
24 | before sending patches.
25 |
26 | **We do not accept GitHub pull requests**
27 | (we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review).
28 |
29 | Unless otherwise noted, the Go source files are distributed under
30 | the BSD-style license found in the LICENSE file.
31 |
32 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/CONTRIBUTORS:
--------------------------------------------------------------------------------
1 | # This source code was written by the Go contributors.
2 | # The master list of contributors is in the main Go distribution,
3 | # visible at http://tip.golang.org/CONTRIBUTORS.
4 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2009 The Go Authors. All rights reserved.
2 |
3 | Redistribution and use in source and binary forms, with or without
4 | modification, are permitted provided that the following conditions are
5 | met:
6 |
7 | * Redistributions of source code must retain the above copyright
8 | notice, this list of conditions and the following disclaimer.
9 | * Redistributions in binary form must reproduce the above
10 | copyright notice, this list of conditions and the following disclaimer
11 | in the documentation and/or other materials provided with the
12 | distribution.
13 | * Neither the name of Google Inc. nor the names of its
14 | contributors may be used to endorse or promote products derived from
15 | this software without specific prior written permission.
16 |
17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/PATENTS:
--------------------------------------------------------------------------------
1 | Additional IP Rights Grant (Patents)
2 |
3 | "This implementation" means the copyrightable works distributed by
4 | Google as part of the Go project.
5 |
6 | Google hereby grants to You a perpetual, worldwide, non-exclusive,
7 | no-charge, royalty-free, irrevocable (except as stated in this section)
8 | patent license to make, have made, use, offer to sell, sell, import,
9 | transfer and otherwise run, modify and propagate the contents of this
10 | implementation of Go, where such license applies only to those patent
11 | claims, both currently owned or controlled by Google and acquired in
12 | the future, licensable by Google that are necessarily infringed by this
13 | implementation of Go. This grant does not include claims that would be
14 | infringed only as a consequence of further modification of this
15 | implementation. If you or your agent or exclusive licensee institute or
16 | order or agree to the institution of patent litigation against any
17 | entity (including a cross-claim or counterclaim in a lawsuit) alleging
18 | that this implementation of Go or any code incorporated within this
19 | implementation of Go constitutes direct or contributory patent
20 | infringement, or inducement of patent infringement, then any patent
21 | rights granted to you under this License for this implementation of Go
22 | shall terminate as of the date such litigation is filed.
23 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/README:
--------------------------------------------------------------------------------
1 | This repository holds supplemental Go packages for low-level interactions with the operating system.
2 |
3 | To submit changes to this repository, see http://golang.org/doc/contribute.html.
4 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/codereview.cfg:
--------------------------------------------------------------------------------
1 | issuerepo: golang/go
2 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/plan9/asm.s:
--------------------------------------------------------------------------------
1 | // Copyright 2014 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | #include "textflag.h"
6 |
7 | TEXT ·use(SB),NOSPLIT,$0
8 | RET
9 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/plan9/asm_plan9_386.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | #include "textflag.h"
6 |
7 | //
8 | // System call support for 386, Plan 9
9 | //
10 |
11 | // Just jump to package syscall's implementation for all these functions.
12 | // The runtime may know about them.
13 |
14 | TEXT ·Syscall(SB),NOSPLIT,$0-32
15 | JMP syscall·Syscall(SB)
16 |
17 | TEXT ·Syscall6(SB),NOSPLIT,$0-44
18 | JMP syscall·Syscall6(SB)
19 |
20 | TEXT ·RawSyscall(SB),NOSPLIT,$0-28
21 | JMP syscall·RawSyscall(SB)
22 |
23 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
24 | JMP syscall·RawSyscall6(SB)
25 |
26 | TEXT ·seek(SB),NOSPLIT,$0-36
27 | JMP syscall·seek(SB)
28 |
29 | TEXT ·exit(SB),NOSPLIT,$4-4
30 | JMP syscall·exit(SB)
31 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | #include "textflag.h"
6 |
7 | //
8 | // System call support for amd64, Plan 9
9 | //
10 |
11 | // Just jump to package syscall's implementation for all these functions.
12 | // The runtime may know about them.
13 |
14 | TEXT ·Syscall(SB),NOSPLIT,$0-64
15 | JMP syscall·Syscall(SB)
16 |
17 | TEXT ·Syscall6(SB),NOSPLIT,$0-88
18 | JMP syscall·Syscall6(SB)
19 |
20 | TEXT ·RawSyscall(SB),NOSPLIT,$0-56
21 | JMP syscall·RawSyscall(SB)
22 |
23 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
24 | JMP syscall·RawSyscall6(SB)
25 |
26 | TEXT ·seek(SB),NOSPLIT,$0-56
27 | JMP syscall·seek(SB)
28 |
29 | TEXT ·exit(SB),NOSPLIT,$8-8
30 | JMP syscall·exit(SB)
31 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/plan9/const_plan9.go:
--------------------------------------------------------------------------------
1 | package plan9
2 |
3 | // Plan 9 Constants
4 |
5 | // Open modes
6 | const (
7 | O_RDONLY = 0
8 | O_WRONLY = 1
9 | O_RDWR = 2
10 | O_TRUNC = 16
11 | O_CLOEXEC = 32
12 | O_EXCL = 0x1000
13 | )
14 |
15 | // Rfork flags
16 | const (
17 | RFNAMEG = 1 << 0
18 | RFENVG = 1 << 1
19 | RFFDG = 1 << 2
20 | RFNOTEG = 1 << 3
21 | RFPROC = 1 << 4
22 | RFMEM = 1 << 5
23 | RFNOWAIT = 1 << 6
24 | RFCNAMEG = 1 << 10
25 | RFCENVG = 1 << 11
26 | RFCFDG = 1 << 12
27 | RFREND = 1 << 13
28 | RFNOMNT = 1 << 14
29 | )
30 |
31 | // Qid.Type bits
32 | const (
33 | QTDIR = 0x80
34 | QTAPPEND = 0x40
35 | QTEXCL = 0x20
36 | QTMOUNT = 0x10
37 | QTAUTH = 0x08
38 | QTTMP = 0x04
39 | QTFILE = 0x00
40 | )
41 |
42 | // Dir.Mode bits
43 | const (
44 | DMDIR = 0x80000000
45 | DMAPPEND = 0x40000000
46 | DMEXCL = 0x20000000
47 | DMMOUNT = 0x10000000
48 | DMAUTH = 0x08000000
49 | DMTMP = 0x04000000
50 | DMREAD = 0x4
51 | DMWRITE = 0x2
52 | DMEXEC = 0x1
53 | )
54 |
55 | const (
56 | STATMAX = 65535
57 | ERRMAX = 128
58 | STATFIXLEN = 49
59 | )
60 |
61 | // Mount and bind flags
62 | const (
63 | MREPL = 0x0000
64 | MBEFORE = 0x0001
65 | MAFTER = 0x0002
66 | MORDER = 0x0003
67 | MCREATE = 0x0004
68 | MCACHE = 0x0010
69 | MMASK = 0x0017
70 | )
71 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/plan9/env_plan9.go:
--------------------------------------------------------------------------------
1 | // Copyright 2011 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // Plan 9 environment variables.
6 |
7 | package plan9
8 |
9 | import (
10 | "syscall"
11 | )
12 |
13 | func Getenv(key string) (value string, found bool) {
14 | return syscall.Getenv(key)
15 | }
16 |
17 | func Setenv(key, value string) error {
18 | return syscall.Setenv(key, value)
19 | }
20 |
21 | func Clearenv() {
22 | syscall.Clearenv()
23 | }
24 |
25 | func Environ() []string {
26 | return syscall.Environ()
27 | }
28 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/plan9/env_unset.go:
--------------------------------------------------------------------------------
1 | // Copyright 2014 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build go1.4
6 |
7 | package plan9
8 |
9 | import "syscall"
10 |
11 | func Unsetenv(key string) error {
12 | // This was added in Go 1.4.
13 | return syscall.Unsetenv(key)
14 | }
15 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/plan9/errors_plan9.go:
--------------------------------------------------------------------------------
1 | // Copyright 2011 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | package plan9
6 |
7 | import "syscall"
8 |
9 | // Constants
10 | const (
11 | // Invented values to support what package os expects.
12 | O_CREAT = 0x02000
13 | O_APPEND = 0x00400
14 | O_NOCTTY = 0x00000
15 | O_NONBLOCK = 0x00000
16 | O_SYNC = 0x00000
17 | O_ASYNC = 0x00000
18 |
19 | S_IFMT = 0x1f000
20 | S_IFIFO = 0x1000
21 | S_IFCHR = 0x2000
22 | S_IFDIR = 0x4000
23 | S_IFBLK = 0x6000
24 | S_IFREG = 0x8000
25 | S_IFLNK = 0xa000
26 | S_IFSOCK = 0xc000
27 | )
28 |
29 | // Errors
30 | var (
31 | EINVAL = syscall.NewError("bad arg in system call")
32 | ENOTDIR = syscall.NewError("not a directory")
33 | EISDIR = syscall.NewError("file is a directory")
34 | ENOENT = syscall.NewError("file does not exist")
35 | EEXIST = syscall.NewError("file already exists")
36 | EMFILE = syscall.NewError("no free file descriptors")
37 | EIO = syscall.NewError("i/o error")
38 | ENAMETOOLONG = syscall.NewError("file name too long")
39 | EINTR = syscall.NewError("interrupted")
40 | EPERM = syscall.NewError("permission denied")
41 | EBUSY = syscall.NewError("no free devices")
42 | ETIMEDOUT = syscall.NewError("connection timed out")
43 | EPLAN9 = syscall.NewError("not supported by plan 9")
44 |
45 | // The following errors do not correspond to any
46 | // Plan 9 system messages. Invented to support
47 | // what package os and others expect.
48 | EACCES = syscall.NewError("access permission denied")
49 | EAFNOSUPPORT = syscall.NewError("address family not supported by protocol")
50 | )
51 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # Copyright 2009 The Go Authors. All rights reserved.
3 | # Use of this source code is governed by a BSD-style
4 | # license that can be found in the LICENSE file.
5 |
6 | COMMAND="mksysnum_plan9.sh $@"
7 |
8 | cat <= 10 {
16 | buf[i] = byte(val%10 + '0')
17 | i--
18 | val /= 10
19 | }
20 | buf[i] = byte(val + '0')
21 | return string(buf[i:])
22 | }
23 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/plan9/syscall.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build plan9
6 |
7 | // Package plan9 contains an interface to the low-level operating system
8 | // primitives. OS details vary depending on the underlying system, and
9 | // by default, godoc will display the OS-specific documentation for the current
10 | // system. If you want godoc to display documentation for another
11 | // system, set $GOOS and $GOARCH to the desired system. For example, if
12 | // you want to view documentation for freebsd/arm on linux/amd64, set $GOOS
13 | // to freebsd and $GOARCH to arm.
14 | // The primary use of this package is inside other packages that provide a more
15 | // portable interface to the system, such as "os", "time" and "net". Use
16 | // those packages rather than this one if you can.
17 | // For details of the functions and data types in this package consult
18 | // the manuals for the appropriate operating system.
19 | // These calls return err == nil to indicate success; otherwise
20 | // err represents an operating system error describing the failure and
21 | // holds a value of type syscall.ErrorString.
22 | package plan9 // import "golang.org/x/sys/plan9"
23 |
24 | import "unsafe"
25 |
26 | // ByteSliceFromString returns a NUL-terminated slice of bytes
27 | // containing the text of s. If s contains a NUL byte at any
28 | // location, it returns (nil, EINVAL).
29 | func ByteSliceFromString(s string) ([]byte, error) {
30 | for i := 0; i < len(s); i++ {
31 | if s[i] == 0 {
32 | return nil, EINVAL
33 | }
34 | }
35 | a := make([]byte, len(s)+1)
36 | copy(a, s)
37 | return a, nil
38 | }
39 |
40 | // BytePtrFromString returns a pointer to a NUL-terminated array of
41 | // bytes containing the text of s. If s contains a NUL byte at any
42 | // location, it returns (nil, EINVAL).
43 | func BytePtrFromString(s string) (*byte, error) {
44 | a, err := ByteSliceFromString(s)
45 | if err != nil {
46 | return nil, err
47 | }
48 | return &a[0], nil
49 | }
50 |
51 | // Single-word zero for use when we need a valid pointer to 0 bytes.
52 | // See mksyscall.pl.
53 | var _zero uintptr
54 |
55 | func (ts *Timespec) Unix() (sec int64, nsec int64) {
56 | return int64(ts.Sec), int64(ts.Nsec)
57 | }
58 |
59 | func (tv *Timeval) Unix() (sec int64, nsec int64) {
60 | return int64(tv.Sec), int64(tv.Usec) * 1000
61 | }
62 |
63 | func (ts *Timespec) Nano() int64 {
64 | return int64(ts.Sec)*1e9 + int64(ts.Nsec)
65 | }
66 |
67 | func (tv *Timeval) Nano() int64 {
68 | return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000
69 | }
70 |
71 | // use is a no-op, but the compiler cannot see that it is.
72 | // Calling use(p) ensures that p is kept live until that point.
73 | //go:noescape
74 | func use(p unsafe.Pointer)
75 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/plan9/syscall_test.go:
--------------------------------------------------------------------------------
1 | // Copyright 2013 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build plan9
6 |
7 | package plan9_test
8 |
9 | import (
10 | "testing"
11 |
12 | "golang.org/x/sys/plan9"
13 | )
14 |
15 | func testSetGetenv(t *testing.T, key, value string) {
16 | err := plan9.Setenv(key, value)
17 | if err != nil {
18 | t.Fatalf("Setenv failed to set %q: %v", value, err)
19 | }
20 | newvalue, found := plan9.Getenv(key)
21 | if !found {
22 | t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value)
23 | }
24 | if newvalue != value {
25 | t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value)
26 | }
27 | }
28 |
29 | func TestEnv(t *testing.T) {
30 | testSetGetenv(t, "TESTENV", "AVALUE")
31 | // make sure TESTENV gets set to "", not deleted
32 | testSetGetenv(t, "TESTENV", "")
33 | }
34 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go:
--------------------------------------------------------------------------------
1 | // mksysnum_plan9.sh /opt/plan9/sys/src/libc/9syscall/sys.h
2 | // MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
3 |
4 | package plan9
5 |
6 | const (
7 | SYS_SYSR1 = 0
8 | SYS_BIND = 2
9 | SYS_CHDIR = 3
10 | SYS_CLOSE = 4
11 | SYS_DUP = 5
12 | SYS_ALARM = 6
13 | SYS_EXEC = 7
14 | SYS_EXITS = 8
15 | SYS_FAUTH = 10
16 | SYS_SEGBRK = 12
17 | SYS_OPEN = 14
18 | SYS_OSEEK = 16
19 | SYS_SLEEP = 17
20 | SYS_RFORK = 19
21 | SYS_PIPE = 21
22 | SYS_CREATE = 22
23 | SYS_FD2PATH = 23
24 | SYS_BRK_ = 24
25 | SYS_REMOVE = 25
26 | SYS_NOTIFY = 28
27 | SYS_NOTED = 29
28 | SYS_SEGATTACH = 30
29 | SYS_SEGDETACH = 31
30 | SYS_SEGFREE = 32
31 | SYS_SEGFLUSH = 33
32 | SYS_RENDEZVOUS = 34
33 | SYS_UNMOUNT = 35
34 | SYS_SEMACQUIRE = 37
35 | SYS_SEMRELEASE = 38
36 | SYS_SEEK = 39
37 | SYS_FVERSION = 40
38 | SYS_ERRSTR = 41
39 | SYS_STAT = 42
40 | SYS_FSTAT = 43
41 | SYS_WSTAT = 44
42 | SYS_FWSTAT = 45
43 | SYS_MOUNT = 46
44 | SYS_AWAIT = 47
45 | SYS_PREAD = 50
46 | SYS_PWRITE = 51
47 | SYS_TSEMACQUIRE = 52
48 | SYS_NSEC = 53
49 | )
50 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/.gitignore:
--------------------------------------------------------------------------------
1 | _obj/
2 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_darwin_386.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System call support for 386, Darwin
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-28
17 | JMP syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-40
20 | JMP syscall·Syscall6(SB)
21 |
22 | TEXT ·Syscall9(SB),NOSPLIT,$0-52
23 | JMP syscall·Syscall9(SB)
24 |
25 | TEXT ·RawSyscall(SB),NOSPLIT,$0-28
26 | JMP syscall·RawSyscall(SB)
27 |
28 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
29 | JMP syscall·RawSyscall6(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System call support for AMD64, Darwin
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-56
17 | JMP syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-80
20 | JMP syscall·Syscall6(SB)
21 |
22 | TEXT ·Syscall9(SB),NOSPLIT,$0-104
23 | JMP syscall·Syscall9(SB)
24 |
25 | TEXT ·RawSyscall(SB),NOSPLIT,$0-56
26 | JMP syscall·RawSyscall(SB)
27 |
28 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
29 | JMP syscall·RawSyscall6(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_darwin_arm.s:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 | // +build arm,darwin
7 |
8 | #include "textflag.h"
9 |
10 | //
11 | // System call support for ARM, Darwin
12 | //
13 |
14 | // Just jump to package syscall's implementation for all these functions.
15 | // The runtime may know about them.
16 |
17 | TEXT ·Syscall(SB),NOSPLIT,$0-28
18 | B syscall·Syscall(SB)
19 |
20 | TEXT ·Syscall6(SB),NOSPLIT,$0-40
21 | B syscall·Syscall6(SB)
22 |
23 | TEXT ·Syscall9(SB),NOSPLIT,$0-52
24 | B syscall·Syscall9(SB)
25 |
26 | TEXT ·RawSyscall(SB),NOSPLIT,$0-28
27 | B syscall·RawSyscall(SB)
28 |
29 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
30 | B syscall·RawSyscall6(SB)
31 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 | // +build arm64,darwin
7 |
8 | #include "textflag.h"
9 |
10 | //
11 | // System call support for AMD64, Darwin
12 | //
13 |
14 | // Just jump to package syscall's implementation for all these functions.
15 | // The runtime may know about them.
16 |
17 | TEXT ·Syscall(SB),NOSPLIT,$0-56
18 | B syscall·Syscall(SB)
19 |
20 | TEXT ·Syscall6(SB),NOSPLIT,$0-80
21 | B syscall·Syscall6(SB)
22 |
23 | TEXT ·Syscall9(SB),NOSPLIT,$0-104
24 | B syscall·Syscall9(SB)
25 |
26 | TEXT ·RawSyscall(SB),NOSPLIT,$0-56
27 | B syscall·RawSyscall(SB)
28 |
29 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
30 | B syscall·RawSyscall6(SB)
31 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System call support for AMD64, DragonFly
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-64
17 | JMP syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-88
20 | JMP syscall·Syscall6(SB)
21 |
22 | TEXT ·Syscall9(SB),NOSPLIT,$0-112
23 | JMP syscall·Syscall9(SB)
24 |
25 | TEXT ·RawSyscall(SB),NOSPLIT,$0-64
26 | JMP syscall·RawSyscall(SB)
27 |
28 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-88
29 | JMP syscall·RawSyscall6(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_freebsd_386.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System call support for 386, FreeBSD
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-28
17 | JMP syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-40
20 | JMP syscall·Syscall6(SB)
21 |
22 | TEXT ·Syscall9(SB),NOSPLIT,$0-52
23 | JMP syscall·Syscall9(SB)
24 |
25 | TEXT ·RawSyscall(SB),NOSPLIT,$0-28
26 | JMP syscall·RawSyscall(SB)
27 |
28 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
29 | JMP syscall·RawSyscall6(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System call support for AMD64, FreeBSD
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-56
17 | JMP syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-80
20 | JMP syscall·Syscall6(SB)
21 |
22 | TEXT ·Syscall9(SB),NOSPLIT,$0-104
23 | JMP syscall·Syscall9(SB)
24 |
25 | TEXT ·RawSyscall(SB),NOSPLIT,$0-56
26 | JMP syscall·RawSyscall(SB)
27 |
28 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
29 | JMP syscall·RawSyscall6(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System call support for ARM, FreeBSD
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-28
17 | B syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-40
20 | B syscall·Syscall6(SB)
21 |
22 | TEXT ·Syscall9(SB),NOSPLIT,$0-52
23 | B syscall·Syscall9(SB)
24 |
25 | TEXT ·RawSyscall(SB),NOSPLIT,$0-28
26 | B syscall·RawSyscall(SB)
27 |
28 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
29 | B syscall·RawSyscall6(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_linux_386.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System calls for 386, Linux
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-28
17 | JMP syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-40
20 | JMP syscall·Syscall6(SB)
21 |
22 | TEXT ·RawSyscall(SB),NOSPLIT,$0-28
23 | JMP syscall·RawSyscall(SB)
24 |
25 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
26 | JMP syscall·RawSyscall6(SB)
27 |
28 | TEXT ·socketcall(SB),NOSPLIT,$0-36
29 | JMP syscall·socketcall(SB)
30 |
31 | TEXT ·rawsocketcall(SB),NOSPLIT,$0-36
32 | JMP syscall·rawsocketcall(SB)
33 |
34 | TEXT ·seek(SB),NOSPLIT,$0-28
35 | JMP syscall·seek(SB)
36 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_linux_amd64.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System calls for AMD64, Linux
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-56
17 | JMP syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-80
20 | JMP syscall·Syscall6(SB)
21 |
22 | TEXT ·RawSyscall(SB),NOSPLIT,$0-56
23 | JMP syscall·RawSyscall(SB)
24 |
25 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
26 | JMP syscall·RawSyscall6(SB)
27 |
28 | TEXT ·gettimeofday(SB),NOSPLIT,$0-16
29 | JMP syscall·gettimeofday(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_linux_arm.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System calls for arm, Linux
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-28
17 | B syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-40
20 | B syscall·Syscall6(SB)
21 |
22 | TEXT ·RawSyscall(SB),NOSPLIT,$0-28
23 | B syscall·RawSyscall(SB)
24 |
25 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
26 | B syscall·RawSyscall6(SB)
27 |
28 | TEXT ·seek(SB),NOSPLIT,$0-32
29 | B syscall·seek(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_linux_arm64.s:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build linux
6 | // +build arm64
7 | // +build !gccgo
8 |
9 | #include "textflag.h"
10 |
11 | // Just jump to package syscall's implementation for all these functions.
12 | // The runtime may know about them.
13 |
14 | TEXT ·Syscall(SB),NOSPLIT,$0-56
15 | B syscall·Syscall(SB)
16 |
17 | TEXT ·Syscall6(SB),NOSPLIT,$0-80
18 | B syscall·Syscall6(SB)
19 |
20 | TEXT ·RawSyscall(SB),NOSPLIT,$0-56
21 | B syscall·RawSyscall(SB)
22 |
23 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
24 | B syscall·RawSyscall6(SB)
25 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build linux
6 | // +build mips64 mips64le
7 | // +build !gccgo
8 |
9 | #include "textflag.h"
10 |
11 | //
12 | // System calls for mips64, Linux
13 | //
14 |
15 | // Just jump to package syscall's implementation for all these functions.
16 | // The runtime may know about them.
17 |
18 | TEXT ·Syscall(SB),NOSPLIT,$0-56
19 | JMP syscall·Syscall(SB)
20 |
21 | TEXT ·Syscall6(SB),NOSPLIT,$0-80
22 | JMP syscall·Syscall6(SB)
23 |
24 | TEXT ·RawSyscall(SB),NOSPLIT,$0-56
25 | JMP syscall·RawSyscall(SB)
26 |
27 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
28 | JMP syscall·RawSyscall6(SB)
29 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s:
--------------------------------------------------------------------------------
1 | // Copyright 2016 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build linux
6 | // +build mips mipsle
7 | // +build !gccgo
8 |
9 | #include "textflag.h"
10 |
11 | //
12 | // System calls for mips, Linux
13 | //
14 |
15 | // Just jump to package syscall's implementation for all these functions.
16 | // The runtime may know about them.
17 |
18 | TEXT ·Syscall(SB),NOSPLIT,$0-28
19 | JMP syscall·Syscall(SB)
20 |
21 | TEXT ·Syscall6(SB),NOSPLIT,$0-40
22 | JMP syscall·Syscall6(SB)
23 |
24 | TEXT ·Syscall9(SB),NOSPLIT,$0-52
25 | JMP syscall·Syscall9(SB)
26 |
27 | TEXT ·RawSyscall(SB),NOSPLIT,$0-28
28 | JMP syscall·RawSyscall(SB)
29 |
30 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
31 | JMP syscall·RawSyscall6(SB)
32 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s:
--------------------------------------------------------------------------------
1 | // Copyright 2014 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build linux
6 | // +build ppc64 ppc64le
7 | // +build !gccgo
8 |
9 | #include "textflag.h"
10 |
11 | //
12 | // System calls for ppc64, Linux
13 | //
14 |
15 | // Just jump to package syscall's implementation for all these functions.
16 | // The runtime may know about them.
17 |
18 | TEXT ·Syscall(SB),NOSPLIT,$0-56
19 | BR syscall·Syscall(SB)
20 |
21 | TEXT ·Syscall6(SB),NOSPLIT,$0-80
22 | BR syscall·Syscall6(SB)
23 |
24 | TEXT ·RawSyscall(SB),NOSPLIT,$0-56
25 | BR syscall·RawSyscall(SB)
26 |
27 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
28 | BR syscall·RawSyscall6(SB)
29 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_linux_s390x.s:
--------------------------------------------------------------------------------
1 | // Copyright 2016 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build s390x
6 | // +build linux
7 | // +build !gccgo
8 |
9 | #include "textflag.h"
10 |
11 | //
12 | // System calls for s390x, Linux
13 | //
14 |
15 | // Just jump to package syscall's implementation for all these functions.
16 | // The runtime may know about them.
17 |
18 | TEXT ·Syscall(SB),NOSPLIT,$0-56
19 | BR syscall·Syscall(SB)
20 |
21 | TEXT ·Syscall6(SB),NOSPLIT,$0-80
22 | BR syscall·Syscall6(SB)
23 |
24 | TEXT ·RawSyscall(SB),NOSPLIT,$0-56
25 | BR syscall·RawSyscall(SB)
26 |
27 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
28 | BR syscall·RawSyscall6(SB)
29 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_netbsd_386.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System call support for 386, NetBSD
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-28
17 | JMP syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-40
20 | JMP syscall·Syscall6(SB)
21 |
22 | TEXT ·Syscall9(SB),NOSPLIT,$0-52
23 | JMP syscall·Syscall9(SB)
24 |
25 | TEXT ·RawSyscall(SB),NOSPLIT,$0-28
26 | JMP syscall·RawSyscall(SB)
27 |
28 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
29 | JMP syscall·RawSyscall6(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System call support for AMD64, NetBSD
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-56
17 | JMP syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-80
20 | JMP syscall·Syscall6(SB)
21 |
22 | TEXT ·Syscall9(SB),NOSPLIT,$0-104
23 | JMP syscall·Syscall9(SB)
24 |
25 | TEXT ·RawSyscall(SB),NOSPLIT,$0-56
26 | JMP syscall·RawSyscall(SB)
27 |
28 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
29 | JMP syscall·RawSyscall6(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s:
--------------------------------------------------------------------------------
1 | // Copyright 2013 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System call support for ARM, NetBSD
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-28
17 | B syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-40
20 | B syscall·Syscall6(SB)
21 |
22 | TEXT ·Syscall9(SB),NOSPLIT,$0-52
23 | B syscall·Syscall9(SB)
24 |
25 | TEXT ·RawSyscall(SB),NOSPLIT,$0-28
26 | B syscall·RawSyscall(SB)
27 |
28 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
29 | B syscall·RawSyscall6(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_openbsd_386.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System call support for 386, OpenBSD
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-28
17 | JMP syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-40
20 | JMP syscall·Syscall6(SB)
21 |
22 | TEXT ·Syscall9(SB),NOSPLIT,$0-52
23 | JMP syscall·Syscall9(SB)
24 |
25 | TEXT ·RawSyscall(SB),NOSPLIT,$0-28
26 | JMP syscall·RawSyscall(SB)
27 |
28 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
29 | JMP syscall·RawSyscall6(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System call support for AMD64, OpenBSD
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-56
17 | JMP syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-80
20 | JMP syscall·Syscall6(SB)
21 |
22 | TEXT ·Syscall9(SB),NOSPLIT,$0-104
23 | JMP syscall·Syscall9(SB)
24 |
25 | TEXT ·RawSyscall(SB),NOSPLIT,$0-56
26 | JMP syscall·RawSyscall(SB)
27 |
28 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
29 | JMP syscall·RawSyscall6(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_openbsd_arm.s:
--------------------------------------------------------------------------------
1 | // Copyright 2017 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System call support for ARM, OpenBSD
11 | //
12 |
13 | // Just jump to package syscall's implementation for all these functions.
14 | // The runtime may know about them.
15 |
16 | TEXT ·Syscall(SB),NOSPLIT,$0-28
17 | B syscall·Syscall(SB)
18 |
19 | TEXT ·Syscall6(SB),NOSPLIT,$0-40
20 | B syscall·Syscall6(SB)
21 |
22 | TEXT ·Syscall9(SB),NOSPLIT,$0-52
23 | B syscall·Syscall9(SB)
24 |
25 | TEXT ·RawSyscall(SB),NOSPLIT,$0-28
26 | B syscall·RawSyscall(SB)
27 |
28 | TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
29 | B syscall·RawSyscall6(SB)
30 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s:
--------------------------------------------------------------------------------
1 | // Copyright 2014 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build !gccgo
6 |
7 | #include "textflag.h"
8 |
9 | //
10 | // System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go
11 | //
12 |
13 | TEXT ·sysvicall6(SB),NOSPLIT,$0-88
14 | JMP syscall·sysvicall6(SB)
15 |
16 | TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88
17 | JMP syscall·rawSysvicall6(SB)
18 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/bluetooth_linux.go:
--------------------------------------------------------------------------------
1 | // Copyright 2016 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // Bluetooth sockets and messages
6 |
7 | package unix
8 |
9 | // Bluetooth Protocols
10 | const (
11 | BTPROTO_L2CAP = 0
12 | BTPROTO_HCI = 1
13 | BTPROTO_SCO = 2
14 | BTPROTO_RFCOMM = 3
15 | BTPROTO_BNEP = 4
16 | BTPROTO_CMTP = 5
17 | BTPROTO_HIDP = 6
18 | BTPROTO_AVDTP = 7
19 | )
20 |
21 | const (
22 | HCI_CHANNEL_RAW = 0
23 | HCI_CHANNEL_USER = 1
24 | HCI_CHANNEL_MONITOR = 2
25 | HCI_CHANNEL_CONTROL = 3
26 | )
27 |
28 | // Socketoption Level
29 | const (
30 | SOL_BLUETOOTH = 0x112
31 | SOL_HCI = 0x0
32 | SOL_L2CAP = 0x6
33 | SOL_RFCOMM = 0x12
34 | SOL_SCO = 0x11
35 | )
36 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/constants.go:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build darwin dragonfly freebsd linux netbsd openbsd solaris
6 |
7 | package unix
8 |
9 | const (
10 | R_OK = 0x4
11 | W_OK = 0x2
12 | X_OK = 0x1
13 | )
14 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/creds_test.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build linux
6 |
7 | package unix_test
8 |
9 | import (
10 | "bytes"
11 | "net"
12 | "os"
13 | "syscall"
14 | "testing"
15 |
16 | "golang.org/x/sys/unix"
17 | )
18 |
19 | // TestSCMCredentials tests the sending and receiving of credentials
20 | // (PID, UID, GID) in an ancillary message between two UNIX
21 | // sockets. The SO_PASSCRED socket option is enabled on the sending
22 | // socket for this to work.
23 | func TestSCMCredentials(t *testing.T) {
24 | fds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM, 0)
25 | if err != nil {
26 | t.Fatalf("Socketpair: %v", err)
27 | }
28 | defer unix.Close(fds[0])
29 | defer unix.Close(fds[1])
30 |
31 | err = unix.SetsockoptInt(fds[0], unix.SOL_SOCKET, unix.SO_PASSCRED, 1)
32 | if err != nil {
33 | t.Fatalf("SetsockoptInt: %v", err)
34 | }
35 |
36 | srvFile := os.NewFile(uintptr(fds[0]), "server")
37 | defer srvFile.Close()
38 | srv, err := net.FileConn(srvFile)
39 | if err != nil {
40 | t.Errorf("FileConn: %v", err)
41 | return
42 | }
43 | defer srv.Close()
44 |
45 | cliFile := os.NewFile(uintptr(fds[1]), "client")
46 | defer cliFile.Close()
47 | cli, err := net.FileConn(cliFile)
48 | if err != nil {
49 | t.Errorf("FileConn: %v", err)
50 | return
51 | }
52 | defer cli.Close()
53 |
54 | var ucred unix.Ucred
55 | if os.Getuid() != 0 {
56 | ucred.Pid = int32(os.Getpid())
57 | ucred.Uid = 0
58 | ucred.Gid = 0
59 | oob := unix.UnixCredentials(&ucred)
60 | _, _, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil)
61 | if op, ok := err.(*net.OpError); ok {
62 | err = op.Err
63 | }
64 | if sys, ok := err.(*os.SyscallError); ok {
65 | err = sys.Err
66 | }
67 | if err != syscall.EPERM {
68 | t.Fatalf("WriteMsgUnix failed with %v, want EPERM", err)
69 | }
70 | }
71 |
72 | ucred.Pid = int32(os.Getpid())
73 | ucred.Uid = uint32(os.Getuid())
74 | ucred.Gid = uint32(os.Getgid())
75 | oob := unix.UnixCredentials(&ucred)
76 |
77 | // this is going to send a dummy byte
78 | n, oobn, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil)
79 | if err != nil {
80 | t.Fatalf("WriteMsgUnix: %v", err)
81 | }
82 | if n != 0 {
83 | t.Fatalf("WriteMsgUnix n = %d, want 0", n)
84 | }
85 | if oobn != len(oob) {
86 | t.Fatalf("WriteMsgUnix oobn = %d, want %d", oobn, len(oob))
87 | }
88 |
89 | oob2 := make([]byte, 10*len(oob))
90 | n, oobn2, flags, _, err := srv.(*net.UnixConn).ReadMsgUnix(nil, oob2)
91 | if err != nil {
92 | t.Fatalf("ReadMsgUnix: %v", err)
93 | }
94 | if flags != 0 {
95 | t.Fatalf("ReadMsgUnix flags = 0x%x, want 0", flags)
96 | }
97 | if n != 1 {
98 | t.Fatalf("ReadMsgUnix n = %d, want 1 (dummy byte)", n)
99 | }
100 | if oobn2 != oobn {
101 | // without SO_PASSCRED set on the socket, ReadMsgUnix will
102 | // return zero oob bytes
103 | t.Fatalf("ReadMsgUnix oobn = %d, want %d", oobn2, oobn)
104 | }
105 | oob2 = oob2[:oobn2]
106 | if !bytes.Equal(oob, oob2) {
107 | t.Fatal("ReadMsgUnix oob bytes don't match")
108 | }
109 |
110 | scm, err := unix.ParseSocketControlMessage(oob2)
111 | if err != nil {
112 | t.Fatalf("ParseSocketControlMessage: %v", err)
113 | }
114 | newUcred, err := unix.ParseUnixCredentials(&scm[0])
115 | if err != nil {
116 | t.Fatalf("ParseUnixCredentials: %v", err)
117 | }
118 | if *newUcred != ucred {
119 | t.Fatalf("ParseUnixCredentials = %+v, want %+v", newUcred, ucred)
120 | }
121 | }
122 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/dev_linux.go:
--------------------------------------------------------------------------------
1 | // Copyright 2017 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // Functions to access/create device major and minor numbers matching the
6 | // encoding used by the Linux kernel and glibc.
7 | //
8 | // The information below is extracted and adapted from bits/sysmacros.h in the
9 | // glibc sources:
10 | //
11 | // dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's
12 | // default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major
13 | // number and m is a hex digit of the minor number. This is backward compatible
14 | // with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also
15 | // backward compatible with the Linux kernel, which for some architectures uses
16 | // 32-bit dev_t, encoded as mmmM MMmm.
17 |
18 | package unix
19 |
20 | // Major returns the major component of a Linux device number.
21 | func Major(dev uint64) uint32 {
22 | major := uint32((dev & 0x00000000000fff00) >> 8)
23 | major |= uint32((dev & 0xfffff00000000000) >> 32)
24 | return major
25 | }
26 |
27 | // Minor returns the minor component of a Linux device number.
28 | func Minor(dev uint64) uint32 {
29 | minor := uint32((dev & 0x00000000000000ff) >> 0)
30 | minor |= uint32((dev & 0x00000ffffff00000) >> 12)
31 | return minor
32 | }
33 |
34 | // Mkdev returns a Linux device number generated from the given major and minor
35 | // components.
36 | func Mkdev(major, minor uint32) uint64 {
37 | dev := uint64((major & 0x00000fff) << 8)
38 | dev |= uint64((major & 0xfffff000) << 32)
39 | dev |= uint64((minor & 0x000000ff) << 0)
40 | dev |= uint64((minor & 0xffffff00) << 12)
41 | return dev
42 | }
43 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/dev_linux_test.go:
--------------------------------------------------------------------------------
1 | // Copyright 2017 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | package unix_test
6 |
7 | import (
8 | "fmt"
9 | "testing"
10 |
11 | "golang.org/x/sys/unix"
12 | )
13 |
14 | func TestDevices(t *testing.T) {
15 | testCases := []struct {
16 | path string
17 | major uint32
18 | minor uint32
19 | }{
20 | // well known major/minor numbers according to
21 | // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/devices.txt
22 | {"/dev/null", 1, 3},
23 | {"/dev/zero", 1, 5},
24 | {"/dev/random", 1, 8},
25 | {"/dev/full", 1, 7},
26 | {"/dev/urandom", 1, 9},
27 | {"/dev/tty", 5, 0},
28 | }
29 | for _, tc := range testCases {
30 | t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) {
31 | var stat unix.Stat_t
32 | err := unix.Stat(tc.path, &stat)
33 | if err != nil {
34 | t.Errorf("failed to stat device: %v", err)
35 | return
36 | }
37 |
38 | dev := uint64(stat.Rdev)
39 | if unix.Major(dev) != tc.major {
40 | t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major)
41 | }
42 | if unix.Minor(dev) != tc.minor {
43 | t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor)
44 | }
45 | if unix.Mkdev(tc.major, tc.minor) != dev {
46 | t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev)
47 | }
48 | })
49 |
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/dirent.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
6 |
7 | package unix
8 |
9 | import "unsafe"
10 |
11 | // readInt returns the size-bytes unsigned integer in native byte order at offset off.
12 | func readInt(b []byte, off, size uintptr) (u uint64, ok bool) {
13 | if len(b) < int(off+size) {
14 | return 0, false
15 | }
16 | if isBigEndian {
17 | return readIntBE(b[off:], size), true
18 | }
19 | return readIntLE(b[off:], size), true
20 | }
21 |
22 | func readIntBE(b []byte, size uintptr) uint64 {
23 | switch size {
24 | case 1:
25 | return uint64(b[0])
26 | case 2:
27 | _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
28 | return uint64(b[1]) | uint64(b[0])<<8
29 | case 4:
30 | _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
31 | return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24
32 | case 8:
33 | _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
34 | return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
35 | uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
36 | default:
37 | panic("syscall: readInt with unsupported size")
38 | }
39 | }
40 |
41 | func readIntLE(b []byte, size uintptr) uint64 {
42 | switch size {
43 | case 1:
44 | return uint64(b[0])
45 | case 2:
46 | _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
47 | return uint64(b[0]) | uint64(b[1])<<8
48 | case 4:
49 | _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
50 | return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24
51 | case 8:
52 | _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
53 | return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
54 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
55 | default:
56 | panic("syscall: readInt with unsupported size")
57 | }
58 | }
59 |
60 | // ParseDirent parses up to max directory entries in buf,
61 | // appending the names to names. It returns the number of
62 | // bytes consumed from buf, the number of entries added
63 | // to names, and the new names slice.
64 | func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
65 | origlen := len(buf)
66 | count = 0
67 | for max != 0 && len(buf) > 0 {
68 | reclen, ok := direntReclen(buf)
69 | if !ok || reclen > uint64(len(buf)) {
70 | return origlen, count, names
71 | }
72 | rec := buf[:reclen]
73 | buf = buf[reclen:]
74 | ino, ok := direntIno(rec)
75 | if !ok {
76 | break
77 | }
78 | if ino == 0 { // File absent in directory.
79 | continue
80 | }
81 | const namoff = uint64(unsafe.Offsetof(Dirent{}.Name))
82 | namlen, ok := direntNamlen(rec)
83 | if !ok || namoff+namlen > uint64(len(rec)) {
84 | break
85 | }
86 | name := rec[namoff : namoff+namlen]
87 | for i, c := range name {
88 | if c == 0 {
89 | name = name[:i]
90 | break
91 | }
92 | }
93 | // Check for useless names before allocating a string.
94 | if string(name) == "." || string(name) == ".." {
95 | continue
96 | }
97 | max--
98 | count++
99 | names = append(names, string(name))
100 | }
101 | return origlen - len(buf), count, names
102 | }
103 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/endian_big.go:
--------------------------------------------------------------------------------
1 | // Copyright 2016 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 | //
5 | // +build ppc64 s390x mips mips64
6 |
7 | package unix
8 |
9 | const isBigEndian = true
10 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/endian_little.go:
--------------------------------------------------------------------------------
1 | // Copyright 2016 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 | //
5 | // +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le
6 |
7 | package unix
8 |
9 | const isBigEndian = false
10 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/env_unix.go:
--------------------------------------------------------------------------------
1 | // Copyright 2010 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build darwin dragonfly freebsd linux netbsd openbsd solaris
6 |
7 | // Unix environment variables.
8 |
9 | package unix
10 |
11 | import "syscall"
12 |
13 | func Getenv(key string) (value string, found bool) {
14 | return syscall.Getenv(key)
15 | }
16 |
17 | func Setenv(key, value string) error {
18 | return syscall.Setenv(key, value)
19 | }
20 |
21 | func Clearenv() {
22 | syscall.Clearenv()
23 | }
24 |
25 | func Environ() []string {
26 | return syscall.Environ()
27 | }
28 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/env_unset.go:
--------------------------------------------------------------------------------
1 | // Copyright 2014 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build go1.4
6 |
7 | package unix
8 |
9 | import "syscall"
10 |
11 | func Unsetenv(key string) error {
12 | // This was added in Go 1.4.
13 | return syscall.Unsetenv(key)
14 | }
15 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/export_test.go:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build darwin dragonfly freebsd linux netbsd openbsd solaris
6 |
7 | package unix
8 |
9 | var Itoa = itoa
10 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/file_unix.go:
--------------------------------------------------------------------------------
1 | // Copyright 2017 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | package unix
6 |
7 | import (
8 | "os"
9 | "syscall"
10 | )
11 |
12 | // FIXME: unexported function from os
13 | // syscallMode returns the syscall-specific mode bits from Go's portable mode bits.
14 | func syscallMode(i os.FileMode) (o uint32) {
15 | o |= uint32(i.Perm())
16 | if i&os.ModeSetuid != 0 {
17 | o |= syscall.S_ISUID
18 | }
19 | if i&os.ModeSetgid != 0 {
20 | o |= syscall.S_ISGID
21 | }
22 | if i&os.ModeSticky != 0 {
23 | o |= syscall.S_ISVTX
24 | }
25 | // No mapping for Go's ModeTemporary (plan9 only).
26 | return
27 | }
28 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/flock.go:
--------------------------------------------------------------------------------
1 | // Copyright 2014 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build darwin dragonfly freebsd linux netbsd openbsd
6 |
7 | package unix
8 |
9 | import "unsafe"
10 |
11 | // fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux
12 | // systems by flock_linux_32bit.go to be SYS_FCNTL64.
13 | var fcntl64Syscall uintptr = SYS_FCNTL
14 |
15 | // FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
16 | func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
17 | _, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk)))
18 | if errno == 0 {
19 | return nil
20 | }
21 | return errno
22 | }
23 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/flock_linux_32bit.go:
--------------------------------------------------------------------------------
1 | // +build linux,386 linux,arm linux,mips linux,mipsle
2 |
3 | // Copyright 2014 The Go Authors. All rights reserved.
4 | // Use of this source code is governed by a BSD-style
5 | // license that can be found in the LICENSE file.
6 |
7 | package unix
8 |
9 | func init() {
10 | // On 32-bit Linux systems, the fcntl syscall that matches Go's
11 | // Flock_t type is SYS_FCNTL64, not SYS_FCNTL.
12 | fcntl64Syscall = SYS_FCNTL64
13 | }
14 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/gccgo.go:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build gccgo
6 |
7 | package unix
8 |
9 | import "syscall"
10 |
11 | // We can't use the gc-syntax .s files for gccgo. On the plus side
12 | // much of the functionality can be written directly in Go.
13 |
14 | //extern gccgoRealSyscall
15 | func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr)
16 |
17 | func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
18 | syscall.Entersyscall()
19 | r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
20 | syscall.Exitsyscall()
21 | return r, 0, syscall.Errno(errno)
22 | }
23 |
24 | func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
25 | syscall.Entersyscall()
26 | r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)
27 | syscall.Exitsyscall()
28 | return r, 0, syscall.Errno(errno)
29 | }
30 |
31 | func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) {
32 | syscall.Entersyscall()
33 | r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9)
34 | syscall.Exitsyscall()
35 | return r, 0, syscall.Errno(errno)
36 | }
37 |
38 | func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
39 | r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
40 | return r, 0, syscall.Errno(errno)
41 | }
42 |
43 | func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
44 | r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)
45 | return r, 0, syscall.Errno(errno)
46 | }
47 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/gccgo_c.c:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build gccgo
6 |
7 | #include
8 | #include
9 | #include
10 |
11 | #define _STRINGIFY2_(x) #x
12 | #define _STRINGIFY_(x) _STRINGIFY2_(x)
13 | #define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__)
14 |
15 | // Call syscall from C code because the gccgo support for calling from
16 | // Go to C does not support varargs functions.
17 |
18 | struct ret {
19 | uintptr_t r;
20 | uintptr_t err;
21 | };
22 |
23 | struct ret
24 | gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)
25 | {
26 | struct ret r;
27 |
28 | errno = 0;
29 | r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);
30 | r.err = errno;
31 | return r;
32 | }
33 |
34 | // Define the use function in C so that it is not inlined.
35 |
36 | extern void use(void *) __asm__ (GOSYM_PREFIX GOPKGPATH ".use") __attribute__((noinline));
37 |
38 | void
39 | use(void *p __attribute__ ((unused)))
40 | {
41 | }
42 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build gccgo,linux,amd64
6 |
7 | package unix
8 |
9 | import "syscall"
10 |
11 | //extern gettimeofday
12 | func realGettimeofday(*Timeval, *byte) int32
13 |
14 | func gettimeofday(tv *Timeval) (err syscall.Errno) {
15 | r := realGettimeofday(tv, nil)
16 | if r < 0 {
17 | return syscall.GetErrno()
18 | }
19 | return 0
20 | }
21 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go:
--------------------------------------------------------------------------------
1 | // Copyright 2016 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build gccgo,linux,sparc64
6 |
7 | package unix
8 |
9 | import "syscall"
10 |
11 | //extern sysconf
12 | func realSysconf(name int) int64
13 |
14 | func sysconf(name int) (n int64, err syscall.Errno) {
15 | r := realSysconf(name)
16 | if r < 0 {
17 | return 0, syscall.GetErrno()
18 | }
19 | return r, 0
20 | }
21 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/linux/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:16.04
2 |
3 | # Dependencies to get the git sources and go binaries
4 | RUN apt-get update && apt-get install -y \
5 | curl \
6 | git \
7 | && rm -rf /var/lib/apt/lists/*
8 |
9 | # Get the git sources. If not cached, this takes O(5 minutes).
10 | WORKDIR /git
11 | RUN git config --global advice.detachedHead false
12 | # Linux Kernel: Released 19 Feb 2017
13 | RUN git clone --branch v4.10 --depth 1 https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
14 | # GNU C library: Released 05 Feb 2017 (we should try to get a secure way to clone this)
15 | RUN git clone --branch glibc-2.25 --depth 1 git://sourceware.org/git/glibc.git
16 |
17 | # Get Go 1.8 (https://github.com/docker-library/golang/blob/master/1.8/Dockerfile)
18 | ENV GOLANG_VERSION 1.8
19 | ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz
20 | ENV GOLANG_DOWNLOAD_SHA256 53ab94104ee3923e228a2cb2116e5e462ad3ebaeea06ff04463479d7f12d27ca
21 |
22 | RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz \
23 | && echo "$GOLANG_DOWNLOAD_SHA256 golang.tar.gz" | sha256sum -c - \
24 | && tar -C /usr/local -xzf golang.tar.gz \
25 | && rm golang.tar.gz
26 |
27 | ENV PATH /usr/local/go/bin:$PATH
28 |
29 | # Linux and Glibc build dependencies
30 | RUN apt-get update && apt-get install -y \
31 | gawk make python \
32 | gcc gcc-multilib \
33 | gettext texinfo \
34 | && rm -rf /var/lib/apt/lists/*
35 | # Emulator and cross compilers
36 | RUN apt-get update && apt-get install -y \
37 | qemu \
38 | gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi \
39 | gcc-mips-linux-gnu gcc-mips64-linux-gnuabi64 \
40 | gcc-mips64el-linux-gnuabi64 gcc-mipsel-linux-gnu \
41 | gcc-powerpc64-linux-gnu gcc-powerpc64le-linux-gnu \
42 | gcc-s390x-linux-gnu gcc-sparc64-linux-gnu \
43 | && rm -rf /var/lib/apt/lists/*
44 |
45 | # Let the scripts know they are in the docker environment
46 | ENV GOLANG_SYS_BUILD docker
47 | WORKDIR /build
48 | ENTRYPOINT ["go", "run", "linux/mkall.go", "/git/linux", "/git/glibc"]
49 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/linux/mksysnum.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env perl
2 | # Copyright 2009 The Go Authors. All rights reserved.
3 | # Use of this source code is governed by a BSD-style
4 | # license that can be found in the LICENSE file.
5 |
6 | use strict;
7 |
8 | if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
9 | print STDERR "GOARCH or GOOS not defined in environment\n";
10 | exit 1;
11 | }
12 |
13 | # Check that we are using the new build system if we should
14 | if($ENV{'GOLANG_SYS_BUILD'} ne "docker") {
15 | print STDERR "In the new build system, mksysnum should not be called directly.\n";
16 | print STDERR "See README.md\n";
17 | exit 1;
18 | }
19 |
20 | my $command = "$0 ". join(' ', @ARGV);
21 |
22 | print < 999){
38 | # ignore deprecated syscalls that are no longer implemented
39 | # https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/asm-generic/unistd.h?id=refs/heads/master#n716
40 | return;
41 | }
42 | $name =~ y/a-z/A-Z/;
43 | $num = $num + $offset;
44 | print " SYS_$name = $num;\n";
45 | }
46 |
47 | my $prev;
48 | open(CC, "$ENV{'CC'} -E -dD @ARGV |") || die "can't run $ENV{'CC'}";
49 | while(){
50 | if(/^#define __NR_Linux\s+([0-9]+)/){
51 | # mips/mips64: extract offset
52 | $offset = $1;
53 | }
54 | elsif(/^#define __NR(\w*)_SYSCALL_BASE\s+([0-9]+)/){
55 | # arm: extract offset
56 | $offset = $1;
57 | }
58 | elsif(/^#define __NR_syscalls\s+/) {
59 | # ignore redefinitions of __NR_syscalls
60 | }
61 | elsif(/^#define __NR_(\w*)Linux_syscalls\s+/) {
62 | # mips/mips64: ignore definitions about the number of syscalls
63 | }
64 | elsif(/^#define __NR_(\w+)\s+([0-9]+)/){
65 | $prev = $2;
66 | fmt($1, $2);
67 | }
68 | elsif(/^#define __NR3264_(\w+)\s+([0-9]+)/){
69 | $prev = $2;
70 | fmt($1, $2);
71 | }
72 | elsif(/^#define __NR_(\w+)\s+\(\w+\+\s*([0-9]+)\)/){
73 | fmt($1, $prev+$2)
74 | }
75 | elsif(/^#define __NR_(\w+)\s+\(__NR_Linux \+ ([0-9]+)/){
76 | fmt($1, $2);
77 | }
78 | elsif(/^#define __NR_(\w+)\s+\(__NR_SYSCALL_BASE \+ ([0-9]+)/){
79 | fmt($1, $2);
80 | }
81 | }
82 |
83 | print <){
29 | if(/^#define\s+SYS_(\w+)\s+([0-9]+)/){
30 | my $name = $1;
31 | my $num = $2;
32 | $name =~ y/a-z/A-Z/;
33 | print " SYS_$name = $num;"
34 | }
35 | }
36 |
37 | print <){
30 | if(/^([0-9]+)\s+STD\s+({ \S+\s+(\w+).*)$/){
31 | my $num = $1;
32 | my $proto = $2;
33 | my $name = "SYS_$3";
34 | $name =~ y/a-z/A-Z/;
35 |
36 | # There are multiple entries for enosys and nosys, so comment them out.
37 | if($name =~ /^SYS_E?NOSYS$/){
38 | $name = "// $name";
39 | }
40 | if($name eq 'SYS_SYS_EXIT'){
41 | $name = 'SYS_EXIT';
42 | }
43 |
44 | print " $name = $num; // $proto\n";
45 | }
46 | }
47 |
48 | print <){
30 | if(/^([0-9]+)\s+\S+\s+STD\s+({ \S+\s+(\w+).*)$/){
31 | my $num = $1;
32 | my $proto = $2;
33 | my $name = "SYS_$3";
34 | $name =~ y/a-z/A-Z/;
35 |
36 | # There are multiple entries for enosys and nosys, so comment them out.
37 | if($name =~ /^SYS_E?NOSYS$/){
38 | $name = "// $name";
39 | }
40 | if($name eq 'SYS_SYS_EXIT'){
41 | $name = 'SYS_EXIT';
42 | }
43 |
44 | print " $name = $num; // $proto\n";
45 | }
46 | }
47 |
48 | print <){
31 | if($line =~ /^(.*)\\$/) {
32 | # Handle continuation
33 | $line = $1;
34 | $_ =~ s/^\s+//;
35 | $line .= $_;
36 | } else {
37 | # New line
38 | $line = $_;
39 | }
40 | next if $line =~ /\\$/;
41 | if($line =~ /^([0-9]+)\s+((STD)|(NOERR))\s+(RUMP\s+)?({\s+\S+\s*\*?\s*\|(\S+)\|(\S*)\|(\w+).*\s+})(\s+(\S+))?$/) {
42 | my $num = $1;
43 | my $proto = $6;
44 | my $compat = $8;
45 | my $name = "$7_$9";
46 |
47 | $name = "$7_$11" if $11 ne '';
48 | $name =~ y/a-z/A-Z/;
49 |
50 | if($compat eq '' || $compat eq '30' || $compat eq '50') {
51 | print " $name = $num; // $proto\n";
52 | }
53 | }
54 | }
55 |
56 | print <){
30 | if(/^([0-9]+)\s+STD\s+(NOLOCK\s+)?({ \S+\s+\*?(\w+).*)$/){
31 | my $num = $1;
32 | my $proto = $3;
33 | my $name = $4;
34 | $name =~ y/a-z/A-Z/;
35 |
36 | # There are multiple entries for enosys and nosys, so comment them out.
37 | if($name =~ /^SYS_E?NOSYS$/){
38 | $name = "// $name";
39 | }
40 | if($name eq 'SYS_SYS_EXIT'){
41 | $name = 'SYS_EXIT';
42 | }
43 |
44 | print " $name = $num; // $proto\n";
45 | }
46 | }
47 |
48 | print < uint64(len(b)) {
67 | return nil, nil, EINVAL
68 | }
69 | return h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil
70 | }
71 |
72 | // UnixRights encodes a set of open file descriptors into a socket
73 | // control message for sending to another process.
74 | func UnixRights(fds ...int) []byte {
75 | datalen := len(fds) * 4
76 | b := make([]byte, CmsgSpace(datalen))
77 | h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
78 | h.Level = SOL_SOCKET
79 | h.Type = SCM_RIGHTS
80 | h.SetLen(CmsgLen(datalen))
81 | data := cmsgData(h)
82 | for _, fd := range fds {
83 | *(*int32)(data) = int32(fd)
84 | data = unsafe.Pointer(uintptr(data) + 4)
85 | }
86 | return b
87 | }
88 |
89 | // ParseUnixRights decodes a socket control message that contains an
90 | // integer array of open file descriptors from another process.
91 | func ParseUnixRights(m *SocketControlMessage) ([]int, error) {
92 | if m.Header.Level != SOL_SOCKET {
93 | return nil, EINVAL
94 | }
95 | if m.Header.Type != SCM_RIGHTS {
96 | return nil, EINVAL
97 | }
98 | fds := make([]int, len(m.Data)>>2)
99 | for i, j := 0, 0; i < len(m.Data); i += 4 {
100 | fds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i])))
101 | j++
102 | }
103 | return fds, nil
104 | }
105 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/str.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build darwin dragonfly freebsd linux netbsd openbsd solaris
6 |
7 | package unix
8 |
9 | func itoa(val int) string { // do it here rather than with fmt to avoid dependency
10 | if val < 0 {
11 | return "-" + uitoa(uint(-val))
12 | }
13 | return uitoa(uint(val))
14 | }
15 |
16 | func uitoa(val uint) string {
17 | var buf [32]byte // big enough for int64
18 | i := len(buf) - 1
19 | for val >= 10 {
20 | buf[i] = byte(val%10 + '0')
21 | i--
22 | val /= 10
23 | }
24 | buf[i] = byte(val + '0')
25 | return string(buf[i:])
26 | }
27 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build darwin dragonfly freebsd linux netbsd openbsd solaris
6 |
7 | // Package unix contains an interface to the low-level operating system
8 | // primitives. OS details vary depending on the underlying system, and
9 | // by default, godoc will display OS-specific documentation for the current
10 | // system. If you want godoc to display OS documentation for another
11 | // system, set $GOOS and $GOARCH to the desired system. For example, if
12 | // you want to view documentation for freebsd/arm on linux/amd64, set $GOOS
13 | // to freebsd and $GOARCH to arm.
14 | // The primary use of this package is inside other packages that provide a more
15 | // portable interface to the system, such as "os", "time" and "net". Use
16 | // those packages rather than this one if you can.
17 | // For details of the functions and data types in this package consult
18 | // the manuals for the appropriate operating system.
19 | // These calls return err == nil to indicate success; otherwise
20 | // err represents an operating system error describing the failure and
21 | // holds a value of type syscall.Errno.
22 | package unix // import "golang.org/x/sys/unix"
23 |
24 | // ByteSliceFromString returns a NUL-terminated slice of bytes
25 | // containing the text of s. If s contains a NUL byte at any
26 | // location, it returns (nil, EINVAL).
27 | func ByteSliceFromString(s string) ([]byte, error) {
28 | for i := 0; i < len(s); i++ {
29 | if s[i] == 0 {
30 | return nil, EINVAL
31 | }
32 | }
33 | a := make([]byte, len(s)+1)
34 | copy(a, s)
35 | return a, nil
36 | }
37 |
38 | // BytePtrFromString returns a pointer to a NUL-terminated array of
39 | // bytes containing the text of s. If s contains a NUL byte at any
40 | // location, it returns (nil, EINVAL).
41 | func BytePtrFromString(s string) (*byte, error) {
42 | a, err := ByteSliceFromString(s)
43 | if err != nil {
44 | return nil, err
45 | }
46 | return &a[0], nil
47 | }
48 |
49 | // Single-word zero for use when we need a valid pointer to 0 bytes.
50 | // See mkunix.pl.
51 | var _zero uintptr
52 |
53 | func (ts *Timespec) Unix() (sec int64, nsec int64) {
54 | return int64(ts.Sec), int64(ts.Nsec)
55 | }
56 |
57 | func (tv *Timeval) Unix() (sec int64, nsec int64) {
58 | return int64(tv.Sec), int64(tv.Usec) * 1000
59 | }
60 |
61 | func (ts *Timespec) Nano() int64 {
62 | return int64(ts.Sec)*1e9 + int64(ts.Nsec)
63 | }
64 |
65 | func (tv *Timeval) Nano() int64 {
66 | return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000
67 | }
68 |
69 | func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 }
70 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_bsd_test.go:
--------------------------------------------------------------------------------
1 | // Copyright 2014 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build darwin dragonfly freebsd openbsd
6 |
7 | package unix_test
8 |
9 | import (
10 | "os/exec"
11 | "runtime"
12 | "testing"
13 |
14 | "golang.org/x/sys/unix"
15 | )
16 |
17 | const MNT_WAIT = 1
18 | const MNT_NOWAIT = 2
19 |
20 | func TestGetfsstat(t *testing.T) {
21 | const flags = MNT_NOWAIT // see golang.org/issue/16937
22 | n, err := unix.Getfsstat(nil, flags)
23 | if err != nil {
24 | t.Fatal(err)
25 | }
26 |
27 | data := make([]unix.Statfs_t, n)
28 | n2, err := unix.Getfsstat(data, flags)
29 | if err != nil {
30 | t.Fatal(err)
31 | }
32 | if n != n2 {
33 | t.Errorf("Getfsstat(nil) = %d, but subsequent Getfsstat(slice) = %d", n, n2)
34 | }
35 | for i, stat := range data {
36 | if stat == (unix.Statfs_t{}) {
37 | t.Errorf("index %v is an empty Statfs_t struct", i)
38 | }
39 | }
40 | if t.Failed() {
41 | for i, stat := range data[:n2] {
42 | t.Logf("data[%v] = %+v", i, stat)
43 | }
44 | mount, err := exec.Command("mount").CombinedOutput()
45 | if err != nil {
46 | t.Logf("mount: %v\n%s", err, mount)
47 | } else {
48 | t.Logf("mount: %s", mount)
49 | }
50 | }
51 | }
52 |
53 | func TestSysctlRaw(t *testing.T) {
54 | if runtime.GOOS == "openbsd" {
55 | t.Skip("kern.proc.pid does not exist on OpenBSD")
56 | }
57 |
58 | _, err := unix.SysctlRaw("kern.proc.pid", unix.Getpid())
59 | if err != nil {
60 | t.Fatal(err)
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_darwin_386.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build 386,darwin
6 |
7 | package unix
8 |
9 | import (
10 | "syscall"
11 | "unsafe"
12 | )
13 |
14 | func Getpagesize() int { return 4096 }
15 |
16 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
17 |
18 | func NsecToTimespec(nsec int64) (ts Timespec) {
19 | ts.Sec = int32(nsec / 1e9)
20 | ts.Nsec = int32(nsec % 1e9)
21 | return
22 | }
23 |
24 | func NsecToTimeval(nsec int64) (tv Timeval) {
25 | nsec += 999 // round up to microsecond
26 | tv.Usec = int32(nsec % 1e9 / 1e3)
27 | tv.Sec = int32(nsec / 1e9)
28 | return
29 | }
30 |
31 | //sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error)
32 | func Gettimeofday(tv *Timeval) (err error) {
33 | // The tv passed to gettimeofday must be non-nil
34 | // but is otherwise unused. The answers come back
35 | // in the two registers.
36 | sec, usec, err := gettimeofday(tv)
37 | tv.Sec = int32(sec)
38 | tv.Usec = int32(usec)
39 | return err
40 | }
41 |
42 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
43 | k.Ident = uint32(fd)
44 | k.Filter = int16(mode)
45 | k.Flags = uint16(flags)
46 | }
47 |
48 | func (iov *Iovec) SetLen(length int) {
49 | iov.Len = uint32(length)
50 | }
51 |
52 | func (msghdr *Msghdr) SetControllen(length int) {
53 | msghdr.Controllen = uint32(length)
54 | }
55 |
56 | func (cmsg *Cmsghdr) SetLen(length int) {
57 | cmsg.Len = uint32(length)
58 | }
59 |
60 | func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
61 | var length = uint64(count)
62 |
63 | _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0)
64 |
65 | written = int(length)
66 |
67 | if e1 != 0 {
68 | err = e1
69 | }
70 | return
71 | }
72 |
73 | func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
74 |
75 | // SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
76 | // of darwin/386 the syscall is called sysctl instead of __sysctl.
77 | const SYS___SYSCTL = SYS_SYSCTL
78 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build amd64,darwin
6 |
7 | package unix
8 |
9 | import (
10 | "syscall"
11 | "unsafe"
12 | )
13 |
14 | func Getpagesize() int { return 4096 }
15 |
16 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
17 |
18 | func NsecToTimespec(nsec int64) (ts Timespec) {
19 | ts.Sec = nsec / 1e9
20 | ts.Nsec = nsec % 1e9
21 | return
22 | }
23 |
24 | func NsecToTimeval(nsec int64) (tv Timeval) {
25 | nsec += 999 // round up to microsecond
26 | tv.Usec = int32(nsec % 1e9 / 1e3)
27 | tv.Sec = int64(nsec / 1e9)
28 | return
29 | }
30 |
31 | //sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error)
32 | func Gettimeofday(tv *Timeval) (err error) {
33 | // The tv passed to gettimeofday must be non-nil
34 | // but is otherwise unused. The answers come back
35 | // in the two registers.
36 | sec, usec, err := gettimeofday(tv)
37 | tv.Sec = sec
38 | tv.Usec = usec
39 | return err
40 | }
41 |
42 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
43 | k.Ident = uint64(fd)
44 | k.Filter = int16(mode)
45 | k.Flags = uint16(flags)
46 | }
47 |
48 | func (iov *Iovec) SetLen(length int) {
49 | iov.Len = uint64(length)
50 | }
51 |
52 | func (msghdr *Msghdr) SetControllen(length int) {
53 | msghdr.Controllen = uint32(length)
54 | }
55 |
56 | func (cmsg *Cmsghdr) SetLen(length int) {
57 | cmsg.Len = uint32(length)
58 | }
59 |
60 | func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
61 | var length = uint64(count)
62 |
63 | _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0)
64 |
65 | written = int(length)
66 |
67 | if e1 != 0 {
68 | err = e1
69 | }
70 | return
71 | }
72 |
73 | func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
74 |
75 | // SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
76 | // of darwin/amd64 the syscall is called sysctl instead of __sysctl.
77 | const SYS___SYSCTL = SYS_SYSCTL
78 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | package unix
6 |
7 | import (
8 | "syscall"
9 | "unsafe"
10 | )
11 |
12 | func Getpagesize() int { return 4096 }
13 |
14 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
15 |
16 | func NsecToTimespec(nsec int64) (ts Timespec) {
17 | ts.Sec = int32(nsec / 1e9)
18 | ts.Nsec = int32(nsec % 1e9)
19 | return
20 | }
21 |
22 | func NsecToTimeval(nsec int64) (tv Timeval) {
23 | nsec += 999 // round up to microsecond
24 | tv.Usec = int32(nsec % 1e9 / 1e3)
25 | tv.Sec = int32(nsec / 1e9)
26 | return
27 | }
28 |
29 | //sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error)
30 | func Gettimeofday(tv *Timeval) (err error) {
31 | // The tv passed to gettimeofday must be non-nil
32 | // but is otherwise unused. The answers come back
33 | // in the two registers.
34 | sec, usec, err := gettimeofday(tv)
35 | tv.Sec = int32(sec)
36 | tv.Usec = int32(usec)
37 | return err
38 | }
39 |
40 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
41 | k.Ident = uint32(fd)
42 | k.Filter = int16(mode)
43 | k.Flags = uint16(flags)
44 | }
45 |
46 | func (iov *Iovec) SetLen(length int) {
47 | iov.Len = uint32(length)
48 | }
49 |
50 | func (msghdr *Msghdr) SetControllen(length int) {
51 | msghdr.Controllen = uint32(length)
52 | }
53 |
54 | func (cmsg *Cmsghdr) SetLen(length int) {
55 | cmsg.Len = uint32(length)
56 | }
57 |
58 | func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
59 | var length = uint64(count)
60 |
61 | _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0)
62 |
63 | written = int(length)
64 |
65 | if e1 != 0 {
66 | err = e1
67 | }
68 | return
69 | }
70 |
71 | func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic
72 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build arm64,darwin
6 |
7 | package unix
8 |
9 | import (
10 | "syscall"
11 | "unsafe"
12 | )
13 |
14 | func Getpagesize() int { return 16384 }
15 |
16 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
17 |
18 | func NsecToTimespec(nsec int64) (ts Timespec) {
19 | ts.Sec = nsec / 1e9
20 | ts.Nsec = nsec % 1e9
21 | return
22 | }
23 |
24 | func NsecToTimeval(nsec int64) (tv Timeval) {
25 | nsec += 999 // round up to microsecond
26 | tv.Usec = int32(nsec % 1e9 / 1e3)
27 | tv.Sec = int64(nsec / 1e9)
28 | return
29 | }
30 |
31 | //sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error)
32 | func Gettimeofday(tv *Timeval) (err error) {
33 | // The tv passed to gettimeofday must be non-nil
34 | // but is otherwise unused. The answers come back
35 | // in the two registers.
36 | sec, usec, err := gettimeofday(tv)
37 | tv.Sec = sec
38 | tv.Usec = usec
39 | return err
40 | }
41 |
42 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
43 | k.Ident = uint64(fd)
44 | k.Filter = int16(mode)
45 | k.Flags = uint16(flags)
46 | }
47 |
48 | func (iov *Iovec) SetLen(length int) {
49 | iov.Len = uint64(length)
50 | }
51 |
52 | func (msghdr *Msghdr) SetControllen(length int) {
53 | msghdr.Controllen = uint32(length)
54 | }
55 |
56 | func (cmsg *Cmsghdr) SetLen(length int) {
57 | cmsg.Len = uint32(length)
58 | }
59 |
60 | func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
61 | var length = uint64(count)
62 |
63 | _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0)
64 |
65 | written = int(length)
66 |
67 | if e1 != 0 {
68 | err = e1
69 | }
70 | return
71 | }
72 |
73 | func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic
74 |
75 | // SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
76 | // of darwin/arm64 the syscall is called sysctl instead of __sysctl.
77 | const SYS___SYSCTL = SYS_SYSCTL
78 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build amd64,dragonfly
6 |
7 | package unix
8 |
9 | import (
10 | "syscall"
11 | "unsafe"
12 | )
13 |
14 | func Getpagesize() int { return 4096 }
15 |
16 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
17 |
18 | func NsecToTimespec(nsec int64) (ts Timespec) {
19 | ts.Sec = nsec / 1e9
20 | ts.Nsec = nsec % 1e9
21 | return
22 | }
23 |
24 | func NsecToTimeval(nsec int64) (tv Timeval) {
25 | nsec += 999 // round up to microsecond
26 | tv.Usec = nsec % 1e9 / 1e3
27 | tv.Sec = int64(nsec / 1e9)
28 | return
29 | }
30 |
31 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
32 | k.Ident = uint64(fd)
33 | k.Filter = int16(mode)
34 | k.Flags = uint16(flags)
35 | }
36 |
37 | func (iov *Iovec) SetLen(length int) {
38 | iov.Len = uint64(length)
39 | }
40 |
41 | func (msghdr *Msghdr) SetControllen(length int) {
42 | msghdr.Controllen = uint32(length)
43 | }
44 |
45 | func (cmsg *Cmsghdr) SetLen(length int) {
46 | cmsg.Len = uint32(length)
47 | }
48 |
49 | func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
50 | var writtenOut uint64 = 0
51 | _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)
52 |
53 | written = int(writtenOut)
54 |
55 | if e1 != 0 {
56 | err = e1
57 | }
58 | return
59 | }
60 |
61 | func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
62 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build 386,freebsd
6 |
7 | package unix
8 |
9 | import (
10 | "syscall"
11 | "unsafe"
12 | )
13 |
14 | func Getpagesize() int { return 4096 }
15 |
16 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
17 |
18 | func NsecToTimespec(nsec int64) (ts Timespec) {
19 | ts.Sec = int32(nsec / 1e9)
20 | ts.Nsec = int32(nsec % 1e9)
21 | return
22 | }
23 |
24 | func NsecToTimeval(nsec int64) (tv Timeval) {
25 | nsec += 999 // round up to microsecond
26 | tv.Usec = int32(nsec % 1e9 / 1e3)
27 | tv.Sec = int32(nsec / 1e9)
28 | return
29 | }
30 |
31 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
32 | k.Ident = uint32(fd)
33 | k.Filter = int16(mode)
34 | k.Flags = uint16(flags)
35 | }
36 |
37 | func (iov *Iovec) SetLen(length int) {
38 | iov.Len = uint32(length)
39 | }
40 |
41 | func (msghdr *Msghdr) SetControllen(length int) {
42 | msghdr.Controllen = uint32(length)
43 | }
44 |
45 | func (cmsg *Cmsghdr) SetLen(length int) {
46 | cmsg.Len = uint32(length)
47 | }
48 |
49 | func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
50 | var writtenOut uint64 = 0
51 | _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)
52 |
53 | written = int(writtenOut)
54 |
55 | if e1 != 0 {
56 | err = e1
57 | }
58 | return
59 | }
60 |
61 | func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
62 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build amd64,freebsd
6 |
7 | package unix
8 |
9 | import (
10 | "syscall"
11 | "unsafe"
12 | )
13 |
14 | func Getpagesize() int { return 4096 }
15 |
16 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
17 |
18 | func NsecToTimespec(nsec int64) (ts Timespec) {
19 | ts.Sec = nsec / 1e9
20 | ts.Nsec = nsec % 1e9
21 | return
22 | }
23 |
24 | func NsecToTimeval(nsec int64) (tv Timeval) {
25 | nsec += 999 // round up to microsecond
26 | tv.Usec = nsec % 1e9 / 1e3
27 | tv.Sec = int64(nsec / 1e9)
28 | return
29 | }
30 |
31 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
32 | k.Ident = uint64(fd)
33 | k.Filter = int16(mode)
34 | k.Flags = uint16(flags)
35 | }
36 |
37 | func (iov *Iovec) SetLen(length int) {
38 | iov.Len = uint64(length)
39 | }
40 |
41 | func (msghdr *Msghdr) SetControllen(length int) {
42 | msghdr.Controllen = uint32(length)
43 | }
44 |
45 | func (cmsg *Cmsghdr) SetLen(length int) {
46 | cmsg.Len = uint32(length)
47 | }
48 |
49 | func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
50 | var writtenOut uint64 = 0
51 | _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)
52 |
53 | written = int(writtenOut)
54 |
55 | if e1 != 0 {
56 | err = e1
57 | }
58 | return
59 | }
60 |
61 | func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
62 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build arm,freebsd
6 |
7 | package unix
8 |
9 | import (
10 | "syscall"
11 | "unsafe"
12 | )
13 |
14 | func Getpagesize() int { return 4096 }
15 |
16 | func TimespecToNsec(ts Timespec) int64 { return ts.Sec*1e9 + int64(ts.Nsec) }
17 |
18 | func NsecToTimespec(nsec int64) (ts Timespec) {
19 | ts.Sec = nsec / 1e9
20 | ts.Nsec = int32(nsec % 1e9)
21 | return
22 | }
23 |
24 | func NsecToTimeval(nsec int64) (tv Timeval) {
25 | nsec += 999 // round up to microsecond
26 | tv.Usec = int32(nsec % 1e9 / 1e3)
27 | tv.Sec = nsec / 1e9
28 | return
29 | }
30 |
31 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
32 | k.Ident = uint32(fd)
33 | k.Filter = int16(mode)
34 | k.Flags = uint16(flags)
35 | }
36 |
37 | func (iov *Iovec) SetLen(length int) {
38 | iov.Len = uint32(length)
39 | }
40 |
41 | func (msghdr *Msghdr) SetControllen(length int) {
42 | msghdr.Controllen = uint32(length)
43 | }
44 |
45 | func (cmsg *Cmsghdr) SetLen(length int) {
46 | cmsg.Len = uint32(length)
47 | }
48 |
49 | func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
50 | var writtenOut uint64 = 0
51 | _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)
52 |
53 | written = int(writtenOut)
54 |
55 | if e1 != 0 {
56 | err = e1
57 | }
58 | return
59 | }
60 |
61 | func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
62 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go:
--------------------------------------------------------------------------------
1 | // Copyright 2016 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build amd64,linux
6 | // +build !gccgo
7 |
8 | package unix
9 |
10 | import "syscall"
11 |
12 | //go:noescape
13 | func gettimeofday(tv *Timeval) (err syscall.Errno)
14 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build 386,netbsd
6 |
7 | package unix
8 |
9 | func Getpagesize() int { return 4096 }
10 |
11 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
12 |
13 | func NsecToTimespec(nsec int64) (ts Timespec) {
14 | ts.Sec = int64(nsec / 1e9)
15 | ts.Nsec = int32(nsec % 1e9)
16 | return
17 | }
18 |
19 | func NsecToTimeval(nsec int64) (tv Timeval) {
20 | nsec += 999 // round up to microsecond
21 | tv.Usec = int32(nsec % 1e9 / 1e3)
22 | tv.Sec = int64(nsec / 1e9)
23 | return
24 | }
25 |
26 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
27 | k.Ident = uint32(fd)
28 | k.Filter = uint32(mode)
29 | k.Flags = uint32(flags)
30 | }
31 |
32 | func (iov *Iovec) SetLen(length int) {
33 | iov.Len = uint32(length)
34 | }
35 |
36 | func (msghdr *Msghdr) SetControllen(length int) {
37 | msghdr.Controllen = uint32(length)
38 | }
39 |
40 | func (cmsg *Cmsghdr) SetLen(length int) {
41 | cmsg.Len = uint32(length)
42 | }
43 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build amd64,netbsd
6 |
7 | package unix
8 |
9 | func Getpagesize() int { return 4096 }
10 |
11 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
12 |
13 | func NsecToTimespec(nsec int64) (ts Timespec) {
14 | ts.Sec = int64(nsec / 1e9)
15 | ts.Nsec = int64(nsec % 1e9)
16 | return
17 | }
18 |
19 | func NsecToTimeval(nsec int64) (tv Timeval) {
20 | nsec += 999 // round up to microsecond
21 | tv.Usec = int32(nsec % 1e9 / 1e3)
22 | tv.Sec = int64(nsec / 1e9)
23 | return
24 | }
25 |
26 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
27 | k.Ident = uint64(fd)
28 | k.Filter = uint32(mode)
29 | k.Flags = uint32(flags)
30 | }
31 |
32 | func (iov *Iovec) SetLen(length int) {
33 | iov.Len = uint64(length)
34 | }
35 |
36 | func (msghdr *Msghdr) SetControllen(length int) {
37 | msghdr.Controllen = uint32(length)
38 | }
39 |
40 | func (cmsg *Cmsghdr) SetLen(length int) {
41 | cmsg.Len = uint32(length)
42 | }
43 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go:
--------------------------------------------------------------------------------
1 | // Copyright 2013 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build arm,netbsd
6 |
7 | package unix
8 |
9 | func Getpagesize() int { return 4096 }
10 |
11 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
12 |
13 | func NsecToTimespec(nsec int64) (ts Timespec) {
14 | ts.Sec = int64(nsec / 1e9)
15 | ts.Nsec = int32(nsec % 1e9)
16 | return
17 | }
18 |
19 | func NsecToTimeval(nsec int64) (tv Timeval) {
20 | nsec += 999 // round up to microsecond
21 | tv.Usec = int32(nsec % 1e9 / 1e3)
22 | tv.Sec = int64(nsec / 1e9)
23 | return
24 | }
25 |
26 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
27 | k.Ident = uint32(fd)
28 | k.Filter = uint32(mode)
29 | k.Flags = uint32(flags)
30 | }
31 |
32 | func (iov *Iovec) SetLen(length int) {
33 | iov.Len = uint32(length)
34 | }
35 |
36 | func (msghdr *Msghdr) SetControllen(length int) {
37 | msghdr.Controllen = uint32(length)
38 | }
39 |
40 | func (cmsg *Cmsghdr) SetLen(length int) {
41 | cmsg.Len = uint32(length)
42 | }
43 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_no_getwd.go:
--------------------------------------------------------------------------------
1 | // Copyright 2013 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build dragonfly freebsd netbsd openbsd
6 |
7 | package unix
8 |
9 | const ImplementsGetwd = false
10 |
11 | func Getwd() (string, error) { return "", ENOTSUP }
12 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build 386,openbsd
6 |
7 | package unix
8 |
9 | func Getpagesize() int { return 4096 }
10 |
11 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
12 |
13 | func NsecToTimespec(nsec int64) (ts Timespec) {
14 | ts.Sec = int64(nsec / 1e9)
15 | ts.Nsec = int32(nsec % 1e9)
16 | return
17 | }
18 |
19 | func NsecToTimeval(nsec int64) (tv Timeval) {
20 | nsec += 999 // round up to microsecond
21 | tv.Usec = int32(nsec % 1e9 / 1e3)
22 | tv.Sec = int64(nsec / 1e9)
23 | return
24 | }
25 |
26 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
27 | k.Ident = uint32(fd)
28 | k.Filter = int16(mode)
29 | k.Flags = uint16(flags)
30 | }
31 |
32 | func (iov *Iovec) SetLen(length int) {
33 | iov.Len = uint32(length)
34 | }
35 |
36 | func (msghdr *Msghdr) SetControllen(length int) {
37 | msghdr.Controllen = uint32(length)
38 | }
39 |
40 | func (cmsg *Cmsghdr) SetLen(length int) {
41 | cmsg.Len = uint32(length)
42 | }
43 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build amd64,openbsd
6 |
7 | package unix
8 |
9 | func Getpagesize() int { return 4096 }
10 |
11 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
12 |
13 | func NsecToTimespec(nsec int64) (ts Timespec) {
14 | ts.Sec = nsec / 1e9
15 | ts.Nsec = nsec % 1e9
16 | return
17 | }
18 |
19 | func NsecToTimeval(nsec int64) (tv Timeval) {
20 | nsec += 999 // round up to microsecond
21 | tv.Usec = nsec % 1e9 / 1e3
22 | tv.Sec = nsec / 1e9
23 | return
24 | }
25 |
26 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
27 | k.Ident = uint64(fd)
28 | k.Filter = int16(mode)
29 | k.Flags = uint16(flags)
30 | }
31 |
32 | func (iov *Iovec) SetLen(length int) {
33 | iov.Len = uint64(length)
34 | }
35 |
36 | func (msghdr *Msghdr) SetControllen(length int) {
37 | msghdr.Controllen = uint32(length)
38 | }
39 |
40 | func (cmsg *Cmsghdr) SetLen(length int) {
41 | cmsg.Len = uint32(length)
42 | }
43 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go:
--------------------------------------------------------------------------------
1 | // Copyright 2017 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build arm,openbsd
6 |
7 | package unix
8 |
9 | import "syscall"
10 |
11 | func Getpagesize() int { return syscall.Getpagesize() }
12 |
13 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
14 |
15 | func NsecToTimespec(nsec int64) (ts Timespec) {
16 | ts.Sec = int64(nsec / 1e9)
17 | ts.Nsec = int32(nsec % 1e9)
18 | return
19 | }
20 |
21 | func NsecToTimeval(nsec int64) (tv Timeval) {
22 | nsec += 999 // round up to microsecond
23 | tv.Usec = int32(nsec % 1e9 / 1e3)
24 | tv.Sec = int64(nsec / 1e9)
25 | return
26 | }
27 |
28 | func SetKevent(k *Kevent_t, fd, mode, flags int) {
29 | k.Ident = uint32(fd)
30 | k.Filter = int16(mode)
31 | k.Flags = uint16(flags)
32 | }
33 |
34 | func (iov *Iovec) SetLen(length int) {
35 | iov.Len = uint32(length)
36 | }
37 |
38 | func (msghdr *Msghdr) SetControllen(length int) {
39 | msghdr.Controllen = uint32(length)
40 | }
41 |
42 | func (cmsg *Cmsghdr) SetLen(length int) {
43 | cmsg.Len = uint32(length)
44 | }
45 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build amd64,solaris
6 |
7 | package unix
8 |
9 | func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
10 |
11 | func NsecToTimespec(nsec int64) (ts Timespec) {
12 | ts.Sec = nsec / 1e9
13 | ts.Nsec = nsec % 1e9
14 | return
15 | }
16 |
17 | func NsecToTimeval(nsec int64) (tv Timeval) {
18 | nsec += 999 // round up to microsecond
19 | tv.Usec = nsec % 1e9 / 1e3
20 | tv.Sec = int64(nsec / 1e9)
21 | return
22 | }
23 |
24 | func (iov *Iovec) SetLen(length int) {
25 | iov.Len = uint64(length)
26 | }
27 |
28 | func (cmsg *Cmsghdr) SetLen(length int) {
29 | cmsg.Len = uint32(length)
30 | }
31 |
32 | func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
33 | // TODO(aram): implement this, see issue 5847.
34 | panic("unimplemented")
35 | }
36 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_solaris_test.go:
--------------------------------------------------------------------------------
1 | // Copyright 2017 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build solaris
6 |
7 | package unix_test
8 |
9 | import (
10 | "os/exec"
11 | "testing"
12 |
13 | "golang.org/x/sys/unix"
14 | )
15 |
16 | func TestStatvfs(t *testing.T) {
17 | if err := unix.Statvfs("", nil); err == nil {
18 | t.Fatal(`Statvfs("") expected failure`)
19 | }
20 |
21 | statvfs := unix.Statvfs_t{}
22 | if err := unix.Statvfs("/", &statvfs); err != nil {
23 | t.Errorf(`Statvfs("/") failed: %v`, err)
24 | }
25 |
26 | if t.Failed() {
27 | mount, err := exec.Command("mount").CombinedOutput()
28 | if err != nil {
29 | t.Logf("mount: %v\n%s", err, mount)
30 | } else {
31 | t.Logf("mount: %s", mount)
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_test.go:
--------------------------------------------------------------------------------
1 | // Copyright 2013 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build darwin dragonfly freebsd linux netbsd openbsd solaris
6 |
7 | package unix_test
8 |
9 | import (
10 | "fmt"
11 | "testing"
12 |
13 | "golang.org/x/sys/unix"
14 | )
15 |
16 | func testSetGetenv(t *testing.T, key, value string) {
17 | err := unix.Setenv(key, value)
18 | if err != nil {
19 | t.Fatalf("Setenv failed to set %q: %v", value, err)
20 | }
21 | newvalue, found := unix.Getenv(key)
22 | if !found {
23 | t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value)
24 | }
25 | if newvalue != value {
26 | t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value)
27 | }
28 | }
29 |
30 | func TestEnv(t *testing.T) {
31 | testSetGetenv(t, "TESTENV", "AVALUE")
32 | // make sure TESTENV gets set to "", not deleted
33 | testSetGetenv(t, "TESTENV", "")
34 | }
35 |
36 | func TestItoa(t *testing.T) {
37 | // Make most negative integer: 0x8000...
38 | i := 1
39 | for i<<1 != 0 {
40 | i <<= 1
41 | }
42 | if i >= 0 {
43 | t.Fatal("bad math")
44 | }
45 | s := unix.Itoa(i)
46 | f := fmt.Sprint(i)
47 | if s != f {
48 | t.Fatalf("itoa(%d) = %s, want %s", i, s, f)
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/syscall_unix_gc.go:
--------------------------------------------------------------------------------
1 | // Copyright 2016 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build darwin dragonfly freebsd linux netbsd openbsd solaris
6 | // +build !gccgo
7 |
8 | package unix
9 |
10 | import "syscall"
11 |
12 | func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)
13 | func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)
14 | func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)
15 | func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)
16 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go:
--------------------------------------------------------------------------------
1 | // Copyright 2014 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build amd64,solaris
6 |
7 | package unix
8 |
9 | // TODO(aram): remove these before Go 1.3.
10 | const (
11 | SYS_EXECVE = 59
12 | SYS_FCNTL = 62
13 | )
14 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/asm_windows_386.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | //
6 | // System calls for 386, Windows are implemented in runtime/syscall_windows.goc
7 | //
8 |
9 | TEXT ·getprocaddress(SB), 7, $0-8
10 | JMP syscall·getprocaddress(SB)
11 |
12 | TEXT ·loadlibrary(SB), 7, $0-4
13 | JMP syscall·loadlibrary(SB)
14 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/asm_windows_amd64.s:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | //
6 | // System calls for amd64, Windows are implemented in runtime/syscall_windows.goc
7 | //
8 |
9 | TEXT ·getprocaddress(SB), 7, $0-32
10 | JMP syscall·getprocaddress(SB)
11 |
12 | TEXT ·loadlibrary(SB), 7, $0-8
13 | JMP syscall·loadlibrary(SB)
14 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/env_unset.go:
--------------------------------------------------------------------------------
1 | // Copyright 2014 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 | // +build go1.4
7 |
8 | package windows
9 |
10 | import "syscall"
11 |
12 | func Unsetenv(key string) error {
13 | // This was added in Go 1.4.
14 | return syscall.Unsetenv(key)
15 | }
16 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/env_windows.go:
--------------------------------------------------------------------------------
1 | // Copyright 2010 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // Windows environment variables.
6 |
7 | package windows
8 |
9 | import "syscall"
10 |
11 | func Getenv(key string) (value string, found bool) {
12 | return syscall.Getenv(key)
13 | }
14 |
15 | func Setenv(key, value string) error {
16 | return syscall.Setenv(key, value)
17 | }
18 |
19 | func Clearenv() {
20 | syscall.Clearenv()
21 | }
22 |
23 | func Environ() []string {
24 | return syscall.Environ()
25 | }
26 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/eventlog.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package windows
8 |
9 | const (
10 | EVENTLOG_SUCCESS = 0
11 | EVENTLOG_ERROR_TYPE = 1
12 | EVENTLOG_WARNING_TYPE = 2
13 | EVENTLOG_INFORMATION_TYPE = 4
14 | EVENTLOG_AUDIT_SUCCESS = 8
15 | EVENTLOG_AUDIT_FAILURE = 16
16 | )
17 |
18 | //sys RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) [failretval==0] = advapi32.RegisterEventSourceW
19 | //sys DeregisterEventSource(handle Handle) (err error) = advapi32.DeregisterEventSource
20 | //sys ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) = advapi32.ReportEventW
21 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/exec_windows.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // Fork, exec, wait, etc.
6 |
7 | package windows
8 |
9 | // EscapeArg rewrites command line argument s as prescribed
10 | // in http://msdn.microsoft.com/en-us/library/ms880421.
11 | // This function returns "" (2 double quotes) if s is empty.
12 | // Alternatively, these transformations are done:
13 | // - every back slash (\) is doubled, but only if immediately
14 | // followed by double quote (");
15 | // - every double quote (") is escaped by back slash (\);
16 | // - finally, s is wrapped with double quotes (arg -> "arg"),
17 | // but only if there is space or tab inside s.
18 | func EscapeArg(s string) string {
19 | if len(s) == 0 {
20 | return "\"\""
21 | }
22 | n := len(s)
23 | hasSpace := false
24 | for i := 0; i < len(s); i++ {
25 | switch s[i] {
26 | case '"', '\\':
27 | n++
28 | case ' ', '\t':
29 | hasSpace = true
30 | }
31 | }
32 | if hasSpace {
33 | n += 2
34 | }
35 | if n == len(s) {
36 | return s
37 | }
38 |
39 | qs := make([]byte, n)
40 | j := 0
41 | if hasSpace {
42 | qs[j] = '"'
43 | j++
44 | }
45 | slashes := 0
46 | for i := 0; i < len(s); i++ {
47 | switch s[i] {
48 | default:
49 | slashes = 0
50 | qs[j] = s[i]
51 | case '\\':
52 | slashes++
53 | qs[j] = s[i]
54 | case '"':
55 | for ; slashes > 0; slashes-- {
56 | qs[j] = '\\'
57 | j++
58 | }
59 | qs[j] = '\\'
60 | j++
61 | qs[j] = s[i]
62 | }
63 | j++
64 | }
65 | if hasSpace {
66 | for ; slashes > 0; slashes-- {
67 | qs[j] = '\\'
68 | j++
69 | }
70 | qs[j] = '"'
71 | j++
72 | }
73 | return string(qs[:j])
74 | }
75 |
76 | func CloseOnExec(fd Handle) {
77 | SetHandleInformation(Handle(fd), HANDLE_FLAG_INHERIT, 0)
78 | }
79 |
80 | // FullPath retrieves the full path of the specified file.
81 | func FullPath(name string) (path string, err error) {
82 | p, err := UTF16PtrFromString(name)
83 | if err != nil {
84 | return "", err
85 | }
86 | n := uint32(100)
87 | for {
88 | buf := make([]uint16, n)
89 | n, err = GetFullPathName(p, uint32(len(buf)), &buf[0], nil)
90 | if err != nil {
91 | return "", err
92 | }
93 | if n <= uint32(len(buf)) {
94 | return UTF16ToString(buf[:n]), nil
95 | }
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/memory_windows.go:
--------------------------------------------------------------------------------
1 | // Copyright 2017 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | package windows
6 |
7 | const (
8 | MEM_COMMIT = 0x00001000
9 | MEM_RESERVE = 0x00002000
10 | MEM_DECOMMIT = 0x00004000
11 | MEM_RELEASE = 0x00008000
12 | MEM_RESET = 0x00080000
13 | MEM_TOP_DOWN = 0x00100000
14 | MEM_WRITE_WATCH = 0x00200000
15 | MEM_PHYSICAL = 0x00400000
16 | MEM_RESET_UNDO = 0x01000000
17 | MEM_LARGE_PAGES = 0x20000000
18 |
19 | PAGE_NOACCESS = 0x01
20 | PAGE_READONLY = 0x02
21 | PAGE_READWRITE = 0x04
22 | PAGE_WRITECOPY = 0x08
23 | PAGE_EXECUTE_READ = 0x20
24 | PAGE_EXECUTE_READWRITE = 0x40
25 | PAGE_EXECUTE_WRITECOPY = 0x80
26 | )
27 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/mksyscall.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | package windows
6 |
7 | //go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go
8 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/race.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows,race
6 |
7 | package windows
8 |
9 | import (
10 | "runtime"
11 | "unsafe"
12 | )
13 |
14 | const raceenabled = true
15 |
16 | func raceAcquire(addr unsafe.Pointer) {
17 | runtime.RaceAcquire(addr)
18 | }
19 |
20 | func raceReleaseMerge(addr unsafe.Pointer) {
21 | runtime.RaceReleaseMerge(addr)
22 | }
23 |
24 | func raceReadRange(addr unsafe.Pointer, len int) {
25 | runtime.RaceReadRange(addr, len)
26 | }
27 |
28 | func raceWriteRange(addr unsafe.Pointer, len int) {
29 | runtime.RaceWriteRange(addr, len)
30 | }
31 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/race0.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows,!race
6 |
7 | package windows
8 |
9 | import (
10 | "unsafe"
11 | )
12 |
13 | const raceenabled = false
14 |
15 | func raceAcquire(addr unsafe.Pointer) {
16 | }
17 |
18 | func raceReleaseMerge(addr unsafe.Pointer) {
19 | }
20 |
21 | func raceReadRange(addr unsafe.Pointer, len int) {
22 | }
23 |
24 | func raceWriteRange(addr unsafe.Pointer, len int) {
25 | }
26 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/registry/export_test.go:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package registry
8 |
9 | func (k Key) SetValue(name string, valtype uint32, data []byte) error {
10 | return k.setValue(name, valtype, data)
11 | }
12 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/registry/mksyscall.go:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | package registry
6 |
7 | //go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go syscall.go
8 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/registry/syscall.go:
--------------------------------------------------------------------------------
1 | // Copyright 2015 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package registry
8 |
9 | import "syscall"
10 |
11 | const (
12 | _REG_OPTION_NON_VOLATILE = 0
13 |
14 | _REG_CREATED_NEW_KEY = 1
15 | _REG_OPENED_EXISTING_KEY = 2
16 |
17 | _ERROR_NO_MORE_ITEMS syscall.Errno = 259
18 | )
19 |
20 | func LoadRegLoadMUIString() error {
21 | return procRegLoadMUIStringW.Find()
22 | }
23 |
24 | //sys regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) = advapi32.RegCreateKeyExW
25 | //sys regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) = advapi32.RegDeleteKeyW
26 | //sys regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) = advapi32.RegSetValueExW
27 | //sys regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegEnumValueW
28 | //sys regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) = advapi32.RegDeleteValueW
29 | //sys regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) = advapi32.RegLoadMUIStringW
30 | //sys regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) = advapi32.RegConnectRegistryW
31 |
32 | //sys expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW
33 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/str.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package windows
8 |
9 | func itoa(val int) string { // do it here rather than with fmt to avoid dependency
10 | if val < 0 {
11 | return "-" + itoa(-val)
12 | }
13 | var buf [32]byte // big enough for int64
14 | i := len(buf) - 1
15 | for val >= 10 {
16 | buf[i] = byte(val%10 + '0')
17 | i--
18 | val /= 10
19 | }
20 | buf[i] = byte(val + '0')
21 | return string(buf[i:])
22 | }
23 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/debug/log.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package debug
8 |
9 | import (
10 | "os"
11 | "strconv"
12 | )
13 |
14 | // Log interface allows different log implementations to be used.
15 | type Log interface {
16 | Close() error
17 | Info(eid uint32, msg string) error
18 | Warning(eid uint32, msg string) error
19 | Error(eid uint32, msg string) error
20 | }
21 |
22 | // ConsoleLog provides access to the console.
23 | type ConsoleLog struct {
24 | Name string
25 | }
26 |
27 | // New creates new ConsoleLog.
28 | func New(source string) *ConsoleLog {
29 | return &ConsoleLog{Name: source}
30 | }
31 |
32 | // Close closes console log l.
33 | func (l *ConsoleLog) Close() error {
34 | return nil
35 | }
36 |
37 | func (l *ConsoleLog) report(kind string, eid uint32, msg string) error {
38 | s := l.Name + "." + kind + "(" + strconv.Itoa(int(eid)) + "): " + msg + "\n"
39 | _, err := os.Stdout.Write([]byte(s))
40 | return err
41 | }
42 |
43 | // Info writes an information event msg with event id eid to the console l.
44 | func (l *ConsoleLog) Info(eid uint32, msg string) error {
45 | return l.report("info", eid, msg)
46 | }
47 |
48 | // Warning writes an warning event msg with event id eid to the console l.
49 | func (l *ConsoleLog) Warning(eid uint32, msg string) error {
50 | return l.report("warn", eid, msg)
51 | }
52 |
53 | // Error writes an error event msg with event id eid to the console l.
54 | func (l *ConsoleLog) Error(eid uint32, msg string) error {
55 | return l.report("error", eid, msg)
56 | }
57 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/debug/service.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | // Package debug provides facilities to execute svc.Handler on console.
8 | //
9 | package debug
10 |
11 | import (
12 | "os"
13 | "os/signal"
14 | "syscall"
15 |
16 | "golang.org/x/sys/windows/svc"
17 | )
18 |
19 | // Run executes service name by calling appropriate handler function.
20 | // The process is running on console, unlike real service. Use Ctrl+C to
21 | // send "Stop" command to your service.
22 | func Run(name string, handler svc.Handler) error {
23 | cmds := make(chan svc.ChangeRequest)
24 | changes := make(chan svc.Status)
25 |
26 | sig := make(chan os.Signal)
27 | signal.Notify(sig)
28 |
29 | go func() {
30 | status := svc.Status{State: svc.Stopped}
31 | for {
32 | select {
33 | case <-sig:
34 | cmds <- svc.ChangeRequest{svc.Stop, 0, 0, status}
35 | case status = <-changes:
36 | }
37 | }
38 | }()
39 |
40 | _, errno := handler.Execute([]string{name}, cmds, changes)
41 | if errno != 0 {
42 | return syscall.Errno(errno)
43 | }
44 | return nil
45 | }
46 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/event.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package svc
8 |
9 | import (
10 | "errors"
11 |
12 | "golang.org/x/sys/windows"
13 | )
14 |
15 | // event represents auto-reset, initially non-signaled Windows event.
16 | // It is used to communicate between go and asm parts of this package.
17 | type event struct {
18 | h windows.Handle
19 | }
20 |
21 | func newEvent() (*event, error) {
22 | h, err := windows.CreateEvent(nil, 0, 0, nil)
23 | if err != nil {
24 | return nil, err
25 | }
26 | return &event{h: h}, nil
27 | }
28 |
29 | func (e *event) Close() error {
30 | return windows.CloseHandle(e.h)
31 | }
32 |
33 | func (e *event) Set() error {
34 | return windows.SetEvent(e.h)
35 | }
36 |
37 | func (e *event) Wait() error {
38 | s, err := windows.WaitForSingleObject(e.h, windows.INFINITE)
39 | switch s {
40 | case windows.WAIT_OBJECT_0:
41 | break
42 | case windows.WAIT_FAILED:
43 | return err
44 | default:
45 | return errors.New("unexpected result from WaitForSingleObject")
46 | }
47 | return nil
48 | }
49 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/eventlog/install.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package eventlog
8 |
9 | import (
10 | "errors"
11 |
12 | "golang.org/x/sys/windows"
13 | "golang.org/x/sys/windows/registry"
14 | )
15 |
16 | const (
17 | // Log levels.
18 | Info = windows.EVENTLOG_INFORMATION_TYPE
19 | Warning = windows.EVENTLOG_WARNING_TYPE
20 | Error = windows.EVENTLOG_ERROR_TYPE
21 | )
22 |
23 | const addKeyName = `SYSTEM\CurrentControlSet\Services\EventLog\Application`
24 |
25 | // Install modifies PC registry to allow logging with an event source src.
26 | // It adds all required keys and values to the event log registry key.
27 | // Install uses msgFile as the event message file. If useExpandKey is true,
28 | // the event message file is installed as REG_EXPAND_SZ value,
29 | // otherwise as REG_SZ. Use bitwise of log.Error, log.Warning and
30 | // log.Info to specify events supported by the new event source.
31 | func Install(src, msgFile string, useExpandKey bool, eventsSupported uint32) error {
32 | appkey, err := registry.OpenKey(registry.LOCAL_MACHINE, addKeyName, registry.CREATE_SUB_KEY)
33 | if err != nil {
34 | return err
35 | }
36 | defer appkey.Close()
37 |
38 | sk, alreadyExist, err := registry.CreateKey(appkey, src, registry.SET_VALUE)
39 | if err != nil {
40 | return err
41 | }
42 | defer sk.Close()
43 | if alreadyExist {
44 | return errors.New(addKeyName + `\` + src + " registry key already exists")
45 | }
46 |
47 | err = sk.SetDWordValue("CustomSource", 1)
48 | if err != nil {
49 | return err
50 | }
51 | if useExpandKey {
52 | err = sk.SetExpandStringValue("EventMessageFile", msgFile)
53 | } else {
54 | err = sk.SetStringValue("EventMessageFile", msgFile)
55 | }
56 | if err != nil {
57 | return err
58 | }
59 | err = sk.SetDWordValue("TypesSupported", eventsSupported)
60 | if err != nil {
61 | return err
62 | }
63 | return nil
64 | }
65 |
66 | // InstallAsEventCreate is the same as Install, but uses
67 | // %SystemRoot%\System32\EventCreate.exe as the event message file.
68 | func InstallAsEventCreate(src string, eventsSupported uint32) error {
69 | return Install(src, "%SystemRoot%\\System32\\EventCreate.exe", true, eventsSupported)
70 | }
71 |
72 | // Remove deletes all registry elements installed by the correspondent Install.
73 | func Remove(src string) error {
74 | appkey, err := registry.OpenKey(registry.LOCAL_MACHINE, addKeyName, registry.SET_VALUE)
75 | if err != nil {
76 | return err
77 | }
78 | defer appkey.Close()
79 | return registry.DeleteKey(appkey, src)
80 | }
81 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/eventlog/log.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | // Package eventlog implements access to Windows event log.
8 | //
9 | package eventlog
10 |
11 | import (
12 | "errors"
13 | "syscall"
14 |
15 | "golang.org/x/sys/windows"
16 | )
17 |
18 | // Log provides access to the system log.
19 | type Log struct {
20 | Handle windows.Handle
21 | }
22 |
23 | // Open retrieves a handle to the specified event log.
24 | func Open(source string) (*Log, error) {
25 | return OpenRemote("", source)
26 | }
27 |
28 | // OpenRemote does the same as Open, but on different computer host.
29 | func OpenRemote(host, source string) (*Log, error) {
30 | if source == "" {
31 | return nil, errors.New("Specify event log source")
32 | }
33 | var s *uint16
34 | if host != "" {
35 | s = syscall.StringToUTF16Ptr(host)
36 | }
37 | h, err := windows.RegisterEventSource(s, syscall.StringToUTF16Ptr(source))
38 | if err != nil {
39 | return nil, err
40 | }
41 | return &Log{Handle: h}, nil
42 | }
43 |
44 | // Close closes event log l.
45 | func (l *Log) Close() error {
46 | return windows.DeregisterEventSource(l.Handle)
47 | }
48 |
49 | func (l *Log) report(etype uint16, eid uint32, msg string) error {
50 | ss := []*uint16{syscall.StringToUTF16Ptr(msg)}
51 | return windows.ReportEvent(l.Handle, etype, 0, eid, 0, 1, 0, &ss[0], nil)
52 | }
53 |
54 | // Info writes an information event msg with event id eid to the end of event log l.
55 | // When EventCreate.exe is used, eid must be between 1 and 1000.
56 | func (l *Log) Info(eid uint32, msg string) error {
57 | return l.report(windows.EVENTLOG_INFORMATION_TYPE, eid, msg)
58 | }
59 |
60 | // Warning writes an warning event msg with event id eid to the end of event log l.
61 | // When EventCreate.exe is used, eid must be between 1 and 1000.
62 | func (l *Log) Warning(eid uint32, msg string) error {
63 | return l.report(windows.EVENTLOG_WARNING_TYPE, eid, msg)
64 | }
65 |
66 | // Error writes an error event msg with event id eid to the end of event log l.
67 | // When EventCreate.exe is used, eid must be between 1 and 1000.
68 | func (l *Log) Error(eid uint32, msg string) error {
69 | return l.report(windows.EVENTLOG_ERROR_TYPE, eid, msg)
70 | }
71 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package eventlog_test
8 |
9 | import (
10 | "testing"
11 |
12 | "golang.org/x/sys/windows/svc/eventlog"
13 | )
14 |
15 | func TestLog(t *testing.T) {
16 | if testing.Short() {
17 | t.Skip("skipping test in short mode - it modifies system logs")
18 | }
19 |
20 | const name = "mylog"
21 | const supports = eventlog.Error | eventlog.Warning | eventlog.Info
22 | err := eventlog.InstallAsEventCreate(name, supports)
23 | if err != nil {
24 | t.Fatalf("Install failed: %s", err)
25 | }
26 | defer func() {
27 | err = eventlog.Remove(name)
28 | if err != nil {
29 | t.Fatalf("Remove failed: %s", err)
30 | }
31 | }()
32 |
33 | l, err := eventlog.Open(name)
34 | if err != nil {
35 | t.Fatalf("Open failed: %s", err)
36 | }
37 | defer l.Close()
38 |
39 | err = l.Info(1, "info")
40 | if err != nil {
41 | t.Fatalf("Info failed: %s", err)
42 | }
43 | err = l.Warning(2, "warning")
44 | if err != nil {
45 | t.Fatalf("Warning failed: %s", err)
46 | }
47 | err = l.Error(3, "error")
48 | if err != nil {
49 | t.Fatalf("Error failed: %s", err)
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/example/beep.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package main
8 |
9 | import (
10 | "syscall"
11 | )
12 |
13 | // BUG(brainman): MessageBeep Windows api is broken on Windows 7,
14 | // so this example does not beep when runs as service on Windows 7.
15 |
16 | var (
17 | beepFunc = syscall.MustLoadDLL("user32.dll").MustFindProc("MessageBeep")
18 | )
19 |
20 | func beep() {
21 | beepFunc.Call(0xffffffff)
22 | }
23 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/example/install.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package main
8 |
9 | import (
10 | "fmt"
11 | "os"
12 | "path/filepath"
13 |
14 | "golang.org/x/sys/windows/svc/eventlog"
15 | "golang.org/x/sys/windows/svc/mgr"
16 | )
17 |
18 | func exePath() (string, error) {
19 | prog := os.Args[0]
20 | p, err := filepath.Abs(prog)
21 | if err != nil {
22 | return "", err
23 | }
24 | fi, err := os.Stat(p)
25 | if err == nil {
26 | if !fi.Mode().IsDir() {
27 | return p, nil
28 | }
29 | err = fmt.Errorf("%s is directory", p)
30 | }
31 | if filepath.Ext(p) == "" {
32 | p += ".exe"
33 | fi, err := os.Stat(p)
34 | if err == nil {
35 | if !fi.Mode().IsDir() {
36 | return p, nil
37 | }
38 | err = fmt.Errorf("%s is directory", p)
39 | }
40 | }
41 | return "", err
42 | }
43 |
44 | func installService(name, desc string) error {
45 | exepath, err := exePath()
46 | if err != nil {
47 | return err
48 | }
49 | m, err := mgr.Connect()
50 | if err != nil {
51 | return err
52 | }
53 | defer m.Disconnect()
54 | s, err := m.OpenService(name)
55 | if err == nil {
56 | s.Close()
57 | return fmt.Errorf("service %s already exists", name)
58 | }
59 | s, err = m.CreateService(name, exepath, mgr.Config{DisplayName: desc}, "is", "auto-started")
60 | if err != nil {
61 | return err
62 | }
63 | defer s.Close()
64 | err = eventlog.InstallAsEventCreate(name, eventlog.Error|eventlog.Warning|eventlog.Info)
65 | if err != nil {
66 | s.Delete()
67 | return fmt.Errorf("SetupEventLogSource() failed: %s", err)
68 | }
69 | return nil
70 | }
71 |
72 | func removeService(name string) error {
73 | m, err := mgr.Connect()
74 | if err != nil {
75 | return err
76 | }
77 | defer m.Disconnect()
78 | s, err := m.OpenService(name)
79 | if err != nil {
80 | return fmt.Errorf("service %s is not installed", name)
81 | }
82 | defer s.Close()
83 | err = s.Delete()
84 | if err != nil {
85 | return err
86 | }
87 | err = eventlog.Remove(name)
88 | if err != nil {
89 | return fmt.Errorf("RemoveEventLogSource() failed: %s", err)
90 | }
91 | return nil
92 | }
93 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/example/main.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | // Example service program that beeps.
8 | //
9 | // The program demonstrates how to create Windows service and
10 | // install / remove it on a computer. It also shows how to
11 | // stop / start / pause / continue any service, and how to
12 | // write to event log. It also shows how to use debug
13 | // facilities available in debug package.
14 | //
15 | package main
16 |
17 | import (
18 | "fmt"
19 | "log"
20 | "os"
21 | "strings"
22 |
23 | "golang.org/x/sys/windows/svc"
24 | )
25 |
26 | func usage(errmsg string) {
27 | fmt.Fprintf(os.Stderr,
28 | "%s\n\n"+
29 | "usage: %s \n"+
30 | " where is one of\n"+
31 | " install, remove, debug, start, stop, pause or continue.\n",
32 | errmsg, os.Args[0])
33 | os.Exit(2)
34 | }
35 |
36 | func main() {
37 | const svcName = "myservice"
38 |
39 | isIntSess, err := svc.IsAnInteractiveSession()
40 | if err != nil {
41 | log.Fatalf("failed to determine if we are running in an interactive session: %v", err)
42 | }
43 | if !isIntSess {
44 | runService(svcName, false)
45 | return
46 | }
47 |
48 | if len(os.Args) < 2 {
49 | usage("no command specified")
50 | }
51 |
52 | cmd := strings.ToLower(os.Args[1])
53 | switch cmd {
54 | case "debug":
55 | runService(svcName, true)
56 | return
57 | case "install":
58 | err = installService(svcName, "my service")
59 | case "remove":
60 | err = removeService(svcName)
61 | case "start":
62 | err = startService(svcName)
63 | case "stop":
64 | err = controlService(svcName, svc.Stop, svc.Stopped)
65 | case "pause":
66 | err = controlService(svcName, svc.Pause, svc.Paused)
67 | case "continue":
68 | err = controlService(svcName, svc.Continue, svc.Running)
69 | default:
70 | usage(fmt.Sprintf("invalid command %s", cmd))
71 | }
72 | if err != nil {
73 | log.Fatalf("failed to %s %s: %v", cmd, svcName, err)
74 | }
75 | return
76 | }
77 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/example/manage.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package main
8 |
9 | import (
10 | "fmt"
11 | "time"
12 |
13 | "golang.org/x/sys/windows/svc"
14 | "golang.org/x/sys/windows/svc/mgr"
15 | )
16 |
17 | func startService(name string) error {
18 | m, err := mgr.Connect()
19 | if err != nil {
20 | return err
21 | }
22 | defer m.Disconnect()
23 | s, err := m.OpenService(name)
24 | if err != nil {
25 | return fmt.Errorf("could not access service: %v", err)
26 | }
27 | defer s.Close()
28 | err = s.Start("is", "manual-started")
29 | if err != nil {
30 | return fmt.Errorf("could not start service: %v", err)
31 | }
32 | return nil
33 | }
34 |
35 | func controlService(name string, c svc.Cmd, to svc.State) error {
36 | m, err := mgr.Connect()
37 | if err != nil {
38 | return err
39 | }
40 | defer m.Disconnect()
41 | s, err := m.OpenService(name)
42 | if err != nil {
43 | return fmt.Errorf("could not access service: %v", err)
44 | }
45 | defer s.Close()
46 | status, err := s.Control(c)
47 | if err != nil {
48 | return fmt.Errorf("could not send control=%d: %v", c, err)
49 | }
50 | timeout := time.Now().Add(10 * time.Second)
51 | for status.State != to {
52 | if timeout.Before(time.Now()) {
53 | return fmt.Errorf("timeout waiting for service to go to state=%d", to)
54 | }
55 | time.Sleep(300 * time.Millisecond)
56 | status, err = s.Query()
57 | if err != nil {
58 | return fmt.Errorf("could not retrieve service status: %v", err)
59 | }
60 | }
61 | return nil
62 | }
63 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/example/service.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package main
8 |
9 | import (
10 | "fmt"
11 | "time"
12 |
13 | "golang.org/x/sys/windows/svc"
14 | "golang.org/x/sys/windows/svc/debug"
15 | "golang.org/x/sys/windows/svc/eventlog"
16 | )
17 |
18 | var elog debug.Log
19 |
20 | type myservice struct{}
21 |
22 | func (m *myservice) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) {
23 | const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown | svc.AcceptPauseAndContinue
24 | changes <- svc.Status{State: svc.StartPending}
25 | fasttick := time.Tick(500 * time.Millisecond)
26 | slowtick := time.Tick(2 * time.Second)
27 | tick := fasttick
28 | changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted}
29 | loop:
30 | for {
31 | select {
32 | case <-tick:
33 | beep()
34 | elog.Info(1, "beep")
35 | case c := <-r:
36 | switch c.Cmd {
37 | case svc.Interrogate:
38 | changes <- c.CurrentStatus
39 | // Testing deadlock from https://code.google.com/p/winsvc/issues/detail?id=4
40 | time.Sleep(100 * time.Millisecond)
41 | changes <- c.CurrentStatus
42 | case svc.Stop, svc.Shutdown:
43 | break loop
44 | case svc.Pause:
45 | changes <- svc.Status{State: svc.Paused, Accepts: cmdsAccepted}
46 | tick = slowtick
47 | case svc.Continue:
48 | changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted}
49 | tick = fasttick
50 | default:
51 | elog.Error(1, fmt.Sprintf("unexpected control request #%d", c))
52 | }
53 | }
54 | }
55 | changes <- svc.Status{State: svc.StopPending}
56 | return
57 | }
58 |
59 | func runService(name string, isDebug bool) {
60 | var err error
61 | if isDebug {
62 | elog = debug.New(name)
63 | } else {
64 | elog, err = eventlog.Open(name)
65 | if err != nil {
66 | return
67 | }
68 | }
69 | defer elog.Close()
70 |
71 | elog.Info(1, fmt.Sprintf("starting %s service", name))
72 | run := svc.Run
73 | if isDebug {
74 | run = debug.Run
75 | }
76 | err = run(name, &myservice{})
77 | if err != nil {
78 | elog.Error(1, fmt.Sprintf("%s service failed: %v", name, err))
79 | return
80 | }
81 | elog.Info(1, fmt.Sprintf("%s service stopped", name))
82 | }
83 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/go12.c:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 | // +build !go1.3
7 |
8 | // copied from pkg/runtime
9 | typedef unsigned int uint32;
10 | typedef unsigned long long int uint64;
11 | #ifdef _64BIT
12 | typedef uint64 uintptr;
13 | #else
14 | typedef uint32 uintptr;
15 | #endif
16 |
17 | // from sys_386.s or sys_amd64.s
18 | void ·servicemain(void);
19 |
20 | void
21 | ·getServiceMain(uintptr *r)
22 | {
23 | *r = (uintptr)·servicemain;
24 | }
25 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/go12.go:
--------------------------------------------------------------------------------
1 | // Copyright 2014 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 | // +build !go1.3
7 |
8 | package svc
9 |
10 | // from go12.c
11 | func getServiceMain(r *uintptr)
12 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/go13.go:
--------------------------------------------------------------------------------
1 | // Copyright 2014 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 | // +build go1.3
7 |
8 | package svc
9 |
10 | import "unsafe"
11 |
12 | const ptrSize = 4 << (^uintptr(0) >> 63) // unsafe.Sizeof(uintptr(0)) but an ideal const
13 |
14 | // Should be a built-in for unsafe.Pointer?
15 | func add(p unsafe.Pointer, x uintptr) unsafe.Pointer {
16 | return unsafe.Pointer(uintptr(p) + x)
17 | }
18 |
19 | // funcPC returns the entry PC of the function f.
20 | // It assumes that f is a func value. Otherwise the behavior is undefined.
21 | func funcPC(f interface{}) uintptr {
22 | return **(**uintptr)(add(unsafe.Pointer(&f), ptrSize))
23 | }
24 |
25 | // from sys_386.s and sys_amd64.s
26 | func servicectlhandler(ctl uint32) uintptr
27 | func servicemain(argc uint32, argv **uint16)
28 |
29 | func getServiceMain(r *uintptr) {
30 | *r = funcPC(servicemain)
31 | }
32 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/mgr/service.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package mgr
8 |
9 | import (
10 | "syscall"
11 |
12 | "golang.org/x/sys/windows"
13 | "golang.org/x/sys/windows/svc"
14 | )
15 |
16 | // TODO(brainman): Use EnumDependentServices to enumerate dependent services.
17 |
18 | // Service is used to access Windows service.
19 | type Service struct {
20 | Name string
21 | Handle windows.Handle
22 | }
23 |
24 | // Delete marks service s for deletion from the service control manager database.
25 | func (s *Service) Delete() error {
26 | return windows.DeleteService(s.Handle)
27 | }
28 |
29 | // Close relinquish access to the service s.
30 | func (s *Service) Close() error {
31 | return windows.CloseServiceHandle(s.Handle)
32 | }
33 |
34 | // Start starts service s.
35 | // args will be passed to svc.Handler.Execute.
36 | func (s *Service) Start(args ...string) error {
37 | var p **uint16
38 | if len(args) > 0 {
39 | vs := make([]*uint16, len(args))
40 | for i := range vs {
41 | vs[i] = syscall.StringToUTF16Ptr(args[i])
42 | }
43 | p = &vs[0]
44 | }
45 | return windows.StartService(s.Handle, uint32(len(args)), p)
46 | }
47 |
48 | // Control sends state change request c to the servce s.
49 | func (s *Service) Control(c svc.Cmd) (svc.Status, error) {
50 | var t windows.SERVICE_STATUS
51 | err := windows.ControlService(s.Handle, uint32(c), &t)
52 | if err != nil {
53 | return svc.Status{}, err
54 | }
55 | return svc.Status{
56 | State: svc.State(t.CurrentState),
57 | Accepts: svc.Accepted(t.ControlsAccepted),
58 | }, nil
59 | }
60 |
61 | // Query returns current status of service s.
62 | func (s *Service) Query() (svc.Status, error) {
63 | var t windows.SERVICE_STATUS
64 | err := windows.QueryServiceStatus(s.Handle, &t)
65 | if err != nil {
66 | return svc.Status{}, err
67 | }
68 | return svc.Status{
69 | State: svc.State(t.CurrentState),
70 | Accepts: svc.Accepted(t.ControlsAccepted),
71 | }, nil
72 | }
73 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/security.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package svc
8 |
9 | import (
10 | "unsafe"
11 |
12 | "golang.org/x/sys/windows"
13 | )
14 |
15 | func allocSid(subAuth0 uint32) (*windows.SID, error) {
16 | var sid *windows.SID
17 | err := windows.AllocateAndInitializeSid(&windows.SECURITY_NT_AUTHORITY,
18 | 1, subAuth0, 0, 0, 0, 0, 0, 0, 0, &sid)
19 | if err != nil {
20 | return nil, err
21 | }
22 | return sid, nil
23 | }
24 |
25 | // IsAnInteractiveSession determines if calling process is running interactively.
26 | // It queries the process token for membership in the Interactive group.
27 | // http://stackoverflow.com/questions/2668851/how-do-i-detect-that-my-application-is-running-as-service-or-in-an-interactive-s
28 | func IsAnInteractiveSession() (bool, error) {
29 | interSid, err := allocSid(windows.SECURITY_INTERACTIVE_RID)
30 | if err != nil {
31 | return false, err
32 | }
33 | defer windows.FreeSid(interSid)
34 |
35 | serviceSid, err := allocSid(windows.SECURITY_SERVICE_RID)
36 | if err != nil {
37 | return false, err
38 | }
39 | defer windows.FreeSid(serviceSid)
40 |
41 | t, err := windows.OpenCurrentProcessToken()
42 | if err != nil {
43 | return false, err
44 | }
45 | defer t.Close()
46 |
47 | gs, err := t.GetTokenGroups()
48 | if err != nil {
49 | return false, err
50 | }
51 | p := unsafe.Pointer(&gs.Groups[0])
52 | groups := (*[2 << 20]windows.SIDAndAttributes)(p)[:gs.GroupCount]
53 | for _, g := range groups {
54 | if windows.EqualSid(g.Sid, interSid) {
55 | return true, nil
56 | }
57 | if windows.EqualSid(g.Sid, serviceSid) {
58 | return false, nil
59 | }
60 | }
61 | return false, nil
62 | }
63 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/svc_test.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package svc_test
8 |
9 | import (
10 | "io/ioutil"
11 | "os"
12 | "os/exec"
13 | "path/filepath"
14 | "testing"
15 | "time"
16 |
17 | "golang.org/x/sys/windows/svc"
18 | "golang.org/x/sys/windows/svc/mgr"
19 | )
20 |
21 | func getState(t *testing.T, s *mgr.Service) svc.State {
22 | status, err := s.Query()
23 | if err != nil {
24 | t.Fatalf("Query(%s) failed: %s", s.Name, err)
25 | }
26 | return status.State
27 | }
28 |
29 | func testState(t *testing.T, s *mgr.Service, want svc.State) {
30 | have := getState(t, s)
31 | if have != want {
32 | t.Fatalf("%s state is=%d want=%d", s.Name, have, want)
33 | }
34 | }
35 |
36 | func waitState(t *testing.T, s *mgr.Service, want svc.State) {
37 | for i := 0; ; i++ {
38 | have := getState(t, s)
39 | if have == want {
40 | return
41 | }
42 | if i > 10 {
43 | t.Fatalf("%s state is=%d, waiting timeout", s.Name, have)
44 | }
45 | time.Sleep(300 * time.Millisecond)
46 | }
47 | }
48 |
49 | func TestExample(t *testing.T) {
50 | if testing.Short() {
51 | t.Skip("skipping test in short mode - it modifies system services")
52 | }
53 |
54 | const name = "myservice"
55 |
56 | m, err := mgr.Connect()
57 | if err != nil {
58 | t.Fatalf("SCM connection failed: %s", err)
59 | }
60 | defer m.Disconnect()
61 |
62 | dir, err := ioutil.TempDir("", "svc")
63 | if err != nil {
64 | t.Fatalf("failed to create temp directory: %v", err)
65 | }
66 | defer os.RemoveAll(dir)
67 |
68 | exepath := filepath.Join(dir, "a.exe")
69 | o, err := exec.Command("go", "build", "-o", exepath, "golang.org/x/sys/windows/svc/example").CombinedOutput()
70 | if err != nil {
71 | t.Fatalf("failed to build service program: %v\n%v", err, string(o))
72 | }
73 |
74 | s, err := m.OpenService(name)
75 | if err == nil {
76 | err = s.Delete()
77 | if err != nil {
78 | s.Close()
79 | t.Fatalf("Delete failed: %s", err)
80 | }
81 | s.Close()
82 | }
83 | s, err = m.CreateService(name, exepath, mgr.Config{DisplayName: "my service"}, "is", "auto-started")
84 | if err != nil {
85 | t.Fatalf("CreateService(%s) failed: %v", name, err)
86 | }
87 | defer s.Close()
88 |
89 | testState(t, s, svc.Stopped)
90 | err = s.Start("is", "manual-started")
91 | if err != nil {
92 | t.Fatalf("Start(%s) failed: %s", s.Name, err)
93 | }
94 | waitState(t, s, svc.Running)
95 | time.Sleep(1 * time.Second)
96 |
97 | // testing deadlock from issues 4.
98 | _, err = s.Control(svc.Interrogate)
99 | if err != nil {
100 | t.Fatalf("Control(%s) failed: %s", s.Name, err)
101 | }
102 | _, err = s.Control(svc.Interrogate)
103 | if err != nil {
104 | t.Fatalf("Control(%s) failed: %s", s.Name, err)
105 | }
106 | time.Sleep(1 * time.Second)
107 |
108 | _, err = s.Control(svc.Stop)
109 | if err != nil {
110 | t.Fatalf("Control(%s) failed: %s", s.Name, err)
111 | }
112 | waitState(t, s, svc.Stopped)
113 |
114 | err = s.Delete()
115 | if err != nil {
116 | t.Fatalf("Delete failed: %s", err)
117 | }
118 | }
119 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/sys_386.s:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | // func servicemain(argc uint32, argv **uint16)
8 | TEXT ·servicemain(SB),7,$0
9 | MOVL argc+0(FP), AX
10 | MOVL AX, ·sArgc(SB)
11 | MOVL argv+4(FP), AX
12 | MOVL AX, ·sArgv(SB)
13 |
14 | PUSHL BP
15 | PUSHL BX
16 | PUSHL SI
17 | PUSHL DI
18 |
19 | SUBL $12, SP
20 |
21 | MOVL ·sName(SB), AX
22 | MOVL AX, (SP)
23 | MOVL $·servicectlhandler(SB), AX
24 | MOVL AX, 4(SP)
25 | MOVL $0, 8(SP)
26 | MOVL ·cRegisterServiceCtrlHandlerExW(SB), AX
27 | MOVL SP, BP
28 | CALL AX
29 | MOVL BP, SP
30 | CMPL AX, $0
31 | JE exit
32 | MOVL AX, ·ssHandle(SB)
33 |
34 | MOVL ·goWaitsH(SB), AX
35 | MOVL AX, (SP)
36 | MOVL ·cSetEvent(SB), AX
37 | MOVL SP, BP
38 | CALL AX
39 | MOVL BP, SP
40 |
41 | MOVL ·cWaitsH(SB), AX
42 | MOVL AX, (SP)
43 | MOVL $-1, AX
44 | MOVL AX, 4(SP)
45 | MOVL ·cWaitForSingleObject(SB), AX
46 | MOVL SP, BP
47 | CALL AX
48 | MOVL BP, SP
49 |
50 | exit:
51 | ADDL $12, SP
52 |
53 | POPL DI
54 | POPL SI
55 | POPL BX
56 | POPL BP
57 |
58 | MOVL 0(SP), CX
59 | ADDL $12, SP
60 | JMP CX
61 |
62 | // I do not know why, but this seems to be the only way to call
63 | // ctlHandlerProc on Windows 7.
64 |
65 | // func servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr {
66 | TEXT ·servicectlhandler(SB),7,$0
67 | MOVL ·ctlHandlerExProc(SB), CX
68 | JMP CX
69 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/svc/sys_amd64.s:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | // func servicemain(argc uint32, argv **uint16)
8 | TEXT ·servicemain(SB),7,$0
9 | MOVL CX, ·sArgc(SB)
10 | MOVL DX, ·sArgv(SB)
11 |
12 | SUBQ $32, SP // stack for the first 4 syscall params
13 |
14 | MOVQ ·sName(SB), CX
15 | MOVQ $·servicectlhandler(SB), DX
16 | // BUG(pastarmovj): Figure out a way to pass in context in R8.
17 | MOVQ ·cRegisterServiceCtrlHandlerExW(SB), AX
18 | CALL AX
19 | CMPQ AX, $0
20 | JE exit
21 | MOVQ AX, ·ssHandle(SB)
22 |
23 | MOVQ ·goWaitsH(SB), CX
24 | MOVQ ·cSetEvent(SB), AX
25 | CALL AX
26 |
27 | MOVQ ·cWaitsH(SB), CX
28 | MOVQ $4294967295, DX
29 | MOVQ ·cWaitForSingleObject(SB), AX
30 | CALL AX
31 |
32 | exit:
33 | ADDQ $32, SP
34 | RET
35 |
36 | // I do not know why, but this seems to be the only way to call
37 | // ctlHandlerProc on Windows 7.
38 |
39 | // func ·servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr {
40 | TEXT ·servicectlhandler(SB),7,$0
41 | MOVQ ·ctlHandlerExProc(SB), AX
42 | JMP AX
43 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/syscall.go:
--------------------------------------------------------------------------------
1 | // Copyright 2009 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | // Package windows contains an interface to the low-level operating system
8 | // primitives. OS details vary depending on the underlying system, and
9 | // by default, godoc will display the OS-specific documentation for the current
10 | // system. If you want godoc to display syscall documentation for another
11 | // system, set $GOOS and $GOARCH to the desired system. For example, if
12 | // you want to view documentation for freebsd/arm on linux/amd64, set $GOOS
13 | // to freebsd and $GOARCH to arm.
14 | // The primary use of this package is inside other packages that provide a more
15 | // portable interface to the system, such as "os", "time" and "net". Use
16 | // those packages rather than this one if you can.
17 | // For details of the functions and data types in this package consult
18 | // the manuals for the appropriate operating system.
19 | // These calls return err == nil to indicate success; otherwise
20 | // err represents an operating system error describing the failure and
21 | // holds a value of type syscall.Errno.
22 | package windows // import "golang.org/x/sys/windows"
23 |
24 | import (
25 | "syscall"
26 | )
27 |
28 | // ByteSliceFromString returns a NUL-terminated slice of bytes
29 | // containing the text of s. If s contains a NUL byte at any
30 | // location, it returns (nil, syscall.EINVAL).
31 | func ByteSliceFromString(s string) ([]byte, error) {
32 | for i := 0; i < len(s); i++ {
33 | if s[i] == 0 {
34 | return nil, syscall.EINVAL
35 | }
36 | }
37 | a := make([]byte, len(s)+1)
38 | copy(a, s)
39 | return a, nil
40 | }
41 |
42 | // BytePtrFromString returns a pointer to a NUL-terminated array of
43 | // bytes containing the text of s. If s contains a NUL byte at any
44 | // location, it returns (nil, syscall.EINVAL).
45 | func BytePtrFromString(s string) (*byte, error) {
46 | a, err := ByteSliceFromString(s)
47 | if err != nil {
48 | return nil, err
49 | }
50 | return &a[0], nil
51 | }
52 |
53 | // Single-word zero for use when we need a valid pointer to 0 bytes.
54 | // See mksyscall.pl.
55 | var _zero uintptr
56 |
57 | func (ts *Timespec) Unix() (sec int64, nsec int64) {
58 | return int64(ts.Sec), int64(ts.Nsec)
59 | }
60 |
61 | func (tv *Timeval) Unix() (sec int64, nsec int64) {
62 | return int64(tv.Sec), int64(tv.Usec) * 1000
63 | }
64 |
65 | func (ts *Timespec) Nano() int64 {
66 | return int64(ts.Sec)*1e9 + int64(ts.Nsec)
67 | }
68 |
69 | func (tv *Timeval) Nano() int64 {
70 | return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000
71 | }
72 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/syscall_test.go:
--------------------------------------------------------------------------------
1 | // Copyright 2013 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | // +build windows
6 |
7 | package windows_test
8 |
9 | import (
10 | "testing"
11 |
12 | "golang.org/x/sys/windows"
13 | )
14 |
15 | func testSetGetenv(t *testing.T, key, value string) {
16 | err := windows.Setenv(key, value)
17 | if err != nil {
18 | t.Fatalf("Setenv failed to set %q: %v", value, err)
19 | }
20 | newvalue, found := windows.Getenv(key)
21 | if !found {
22 | t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value)
23 | }
24 | if newvalue != value {
25 | t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value)
26 | }
27 | }
28 |
29 | func TestEnv(t *testing.T) {
30 | testSetGetenv(t, "TESTENV", "AVALUE")
31 | // make sure TESTENV gets set to "", not deleted
32 | testSetGetenv(t, "TESTENV", "")
33 | }
34 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/syscall_windows_test.go:
--------------------------------------------------------------------------------
1 | // Copyright 2012 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | package windows_test
6 |
7 | import (
8 | "io/ioutil"
9 | "os"
10 | "path/filepath"
11 | "syscall"
12 | "testing"
13 | "unsafe"
14 |
15 | "golang.org/x/sys/windows"
16 | )
17 |
18 | func TestWin32finddata(t *testing.T) {
19 | dir, err := ioutil.TempDir("", "go-build")
20 | if err != nil {
21 | t.Fatalf("failed to create temp directory: %v", err)
22 | }
23 | defer os.RemoveAll(dir)
24 |
25 | path := filepath.Join(dir, "long_name.and_extension")
26 | f, err := os.Create(path)
27 | if err != nil {
28 | t.Fatalf("failed to create %v: %v", path, err)
29 | }
30 | f.Close()
31 |
32 | type X struct {
33 | fd windows.Win32finddata
34 | got byte
35 | pad [10]byte // to protect ourselves
36 |
37 | }
38 | var want byte = 2 // it is unlikely to have this character in the filename
39 | x := X{got: want}
40 |
41 | pathp, _ := windows.UTF16PtrFromString(path)
42 | h, err := windows.FindFirstFile(pathp, &(x.fd))
43 | if err != nil {
44 | t.Fatalf("FindFirstFile failed: %v", err)
45 | }
46 | err = windows.FindClose(h)
47 | if err != nil {
48 | t.Fatalf("FindClose failed: %v", err)
49 | }
50 |
51 | if x.got != want {
52 | t.Fatalf("memory corruption: want=%d got=%d", want, x.got)
53 | }
54 | }
55 |
56 | func TestFormatMessage(t *testing.T) {
57 | dll := windows.MustLoadDLL("pdh.dll")
58 |
59 | pdhOpenQuery := func(datasrc *uint16, userdata uint32, query *windows.Handle) (errno uintptr) {
60 | r0, _, _ := syscall.Syscall(dll.MustFindProc("PdhOpenQueryW").Addr(), 3, uintptr(unsafe.Pointer(datasrc)), uintptr(userdata), uintptr(unsafe.Pointer(query)))
61 | return r0
62 | }
63 |
64 | pdhCloseQuery := func(query windows.Handle) (errno uintptr) {
65 | r0, _, _ := syscall.Syscall(dll.MustFindProc("PdhCloseQuery").Addr(), 1, uintptr(query), 0, 0)
66 | return r0
67 | }
68 |
69 | var q windows.Handle
70 | name, err := windows.UTF16PtrFromString("no_such_source")
71 | if err != nil {
72 | t.Fatal(err)
73 | }
74 | errno := pdhOpenQuery(name, 0, &q)
75 | if errno == 0 {
76 | pdhCloseQuery(q)
77 | t.Fatal("PdhOpenQuery succeeded, but expected to fail.")
78 | }
79 |
80 | const flags uint32 = syscall.FORMAT_MESSAGE_FROM_HMODULE | syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY | syscall.FORMAT_MESSAGE_IGNORE_INSERTS
81 | buf := make([]uint16, 300)
82 | _, err = windows.FormatMessage(flags, uintptr(dll.Handle), uint32(errno), 0, buf, nil)
83 | if err != nil {
84 | t.Fatal("FormatMessage for handle=%x and errno=%x failed: %v", dll.Handle, errno, err)
85 | }
86 | }
87 |
88 | func abort(funcname string, err error) {
89 | panic(funcname + " failed: " + err.Error())
90 | }
91 |
92 | func ExampleLoadLibrary() {
93 | h, err := windows.LoadLibrary("kernel32.dll")
94 | if err != nil {
95 | abort("LoadLibrary", err)
96 | }
97 | defer windows.FreeLibrary(h)
98 | proc, err := windows.GetProcAddress(h, "GetVersion")
99 | if err != nil {
100 | abort("GetProcAddress", err)
101 | }
102 | r, _, _ := syscall.Syscall(uintptr(proc), 0, 0, 0, 0)
103 | major := byte(r)
104 | minor := uint8(r >> 8)
105 | build := uint16(r >> 16)
106 | print("windows version ", major, ".", minor, " (Build ", build, ")\n")
107 | }
108 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/types_windows_386.go:
--------------------------------------------------------------------------------
1 | // Copyright 2011 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | package windows
6 |
7 | type WSAData struct {
8 | Version uint16
9 | HighVersion uint16
10 | Description [WSADESCRIPTION_LEN + 1]byte
11 | SystemStatus [WSASYS_STATUS_LEN + 1]byte
12 | MaxSockets uint16
13 | MaxUdpDg uint16
14 | VendorInfo *byte
15 | }
16 |
17 | type Servent struct {
18 | Name *byte
19 | Aliases **byte
20 | Port uint16
21 | Proto *byte
22 | }
23 |
--------------------------------------------------------------------------------
/vendor/golang.org/x/sys/windows/types_windows_amd64.go:
--------------------------------------------------------------------------------
1 | // Copyright 2011 The Go Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style
3 | // license that can be found in the LICENSE file.
4 |
5 | package windows
6 |
7 | type WSAData struct {
8 | Version uint16
9 | HighVersion uint16
10 | MaxSockets uint16
11 | MaxUdpDg uint16
12 | VendorInfo *byte
13 | Description [WSADESCRIPTION_LEN + 1]byte
14 | SystemStatus [WSASYS_STATUS_LEN + 1]byte
15 | }
16 |
17 | type Servent struct {
18 | Name *byte
19 | Aliases **byte
20 | Proto *byte
21 | Port uint16
22 | }
23 |
--------------------------------------------------------------------------------
/writer.go:
--------------------------------------------------------------------------------
1 | package lol
2 |
3 | import (
4 | "fmt"
5 | "io"
6 | "os"
7 | "strings"
8 |
9 | isatty "github.com/mattn/go-isatty"
10 | )
11 |
12 | const (
13 | DEFAULT_SPREAD = float64(3.0)
14 | DEFAULT_FREQ = float64(0.1)
15 | DEFAULT_ORIGIN = 0
16 | )
17 |
18 | const (
19 | ColorModeTrueColor = iota
20 | ColorMode256
21 | ColorMode0
22 | )
23 |
24 | // LolWriter writes a little lol-er.
25 | type Writer struct {
26 | Output io.Writer
27 | ColorMode int
28 | Freq float64
29 | Spread float64
30 | lineIdx int
31 | Origin int
32 | }
33 |
34 | var noColor = os.Getenv("TERM") == "dumb" || (!isatty.IsTerminal(os.Stdout.Fd()) && !isatty.IsCygwinTerminal(os.Stdout.Fd()))
35 |
36 | // writeRaw will write a lol'd s to the underlying writer. It does no line
37 | // detection.
38 | func (w *Writer) writeRaw(s string) (int, error) {
39 | c, err := w.getColorer()
40 | if err != nil {
41 | return -1, err
42 | }
43 | nWritten := 0
44 | for _, r := range s {
45 | c.rainbow(w.Freq, float64(w.Origin)+float64(w.lineIdx)/w.Spread)
46 | _, err := w.Output.Write(c.format())
47 | if err != nil {
48 | return nWritten, err
49 | }
50 | n, err := w.Output.Write([]byte(string(r)))
51 | if err != nil {
52 | return nWritten, err
53 | }
54 | _, err = w.Output.Write(c.reset())
55 | if err != nil {
56 | return nWritten, err
57 | }
58 | nWritten += n
59 | w.lineIdx++
60 | }
61 | return nWritten, nil
62 | }
63 |
64 | // getColorer will attempt to map the defined color mode, to a colorer{}
65 | func (w *Writer) getColorer() (colorer, error) {
66 | switch w.ColorMode {
67 | case ColorModeTrueColor:
68 | return newTruecolorColorer(), nil
69 | case ColorMode256:
70 | return New256Colorer(), nil
71 | case ColorMode0:
72 | return New0Colorer(), nil
73 | default:
74 | return nil, fmt.Errorf("Invalid colorer: [%d]", w.ColorMode)
75 | }
76 | }
77 |
78 | // Write will write a byte slice to the Writer
79 | func (w *Writer) Write(p []byte) (int, error) {
80 | nWritten := 0
81 | ss := strings.Split(string(p), "\n")
82 | for i, s := range ss {
83 | // TODO: strip out pre-existing ANSI codes and expand tabs. Would be
84 | // great to expand tabs in a context aware way (line linux expand
85 | // command).
86 |
87 | n, err := w.writeRaw(s)
88 | if err != nil {
89 | return nWritten, err
90 | }
91 | nWritten += n
92 |
93 | // Increment the Origin (line count) for each newline. There is a
94 | // newline for every item in this array except the last one.
95 | if i != len(ss)-1 {
96 | n, err := w.Output.Write([]byte("\n"))
97 | if err != nil {
98 | return nWritten, err
99 | }
100 | nWritten += n
101 | w.Origin++
102 | w.lineIdx = 0
103 | }
104 | }
105 | return nWritten, nil
106 | }
107 |
108 | // NewLolWriter will return a new io.Writer with a default ColorMode of 256
109 | func NewLolWriter() io.Writer {
110 | colorMode := ColorMode256
111 | if noColor {
112 | colorMode = ColorMode0
113 | }
114 |
115 | return &Writer{
116 | Output: stdout,
117 | ColorMode: colorMode,
118 | Freq: DEFAULT_FREQ,
119 | Spread: DEFAULT_SPREAD,
120 | Origin: DEFAULT_ORIGIN,
121 | }
122 | }
123 |
124 | // NewTruecolorLolWriter will return a new io.Writer with a default ColorMode of truecolor
125 | func NewTruecolorLolWriter() io.Writer {
126 | colorMode := ColorModeTrueColor
127 | if noColor {
128 | colorMode = ColorMode0
129 | }
130 | return &Writer{
131 | Output: stdout,
132 | ColorMode: colorMode,
133 | }
134 | }
135 |
--------------------------------------------------------------------------------