Upgrade dependencies, prepare to use geoipupdate to update data
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -4,7 +4,7 @@ name: default
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: test
|
- name: test
|
||||||
image: golang:1.14.7
|
image: golang:1.18
|
||||||
volumes:
|
volumes:
|
||||||
- name: deps
|
- name: deps
|
||||||
path: /go
|
path: /go
|
||||||
@@ -13,7 +13,7 @@ steps:
|
|||||||
- go build
|
- go build
|
||||||
|
|
||||||
- name: docker
|
- name: docker
|
||||||
image: harbor.ntppool.org/ntppool/drone-kaniko:0.8.0-1
|
image: harbor.ntppool.org/ntppool/drone-kaniko:main
|
||||||
pull: always
|
pull: always
|
||||||
volumes:
|
volumes:
|
||||||
- name: deps
|
- name: deps
|
||||||
@@ -24,8 +24,6 @@ steps:
|
|||||||
auto_tag: true
|
auto_tag: true
|
||||||
tags: SHA7,${DRONE_SOURCE_BRANCH}
|
tags: SHA7,${DRONE_SOURCE_BRANCH}
|
||||||
cache: true
|
cache: true
|
||||||
docker_config:
|
|
||||||
from_secret: quay
|
|
||||||
username:
|
username:
|
||||||
from_secret: harbor_username
|
from_secret: harbor_username
|
||||||
password:
|
password:
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
FROM golang:1.14.7-alpine3.12 AS build
|
FROM golang:1.18-alpine3.15 AS build
|
||||||
|
RUN apk --no-cache add git
|
||||||
|
|
||||||
WORKDIR /go/src/github.com/abh/geoipapi
|
WORKDIR /go/src/github.com/abh/geoipapi
|
||||||
ADD . /go/src/github.com/abh/geoipapi
|
ADD . /go/src/github.com/abh/geoipapi
|
||||||
RUN go install -v ./...
|
RUN go install -v ./...
|
||||||
|
|
||||||
FROM quay.io/ntppool/dnsmapper:geoip-data-202007
|
FROM alpine:3.15
|
||||||
USER root
|
USER root
|
||||||
RUN apk --no-cache add ca-certificates
|
RUN apk --no-cache add ca-certificates
|
||||||
|
|
||||||
@@ -12,6 +13,8 @@ RUN addgroup geoip && adduser -D -G geoip geoip
|
|||||||
WORKDIR /geoip/
|
WORKDIR /geoip/
|
||||||
COPY --from=build /go/bin/geoipapi /bin/
|
COPY --from=build /go/bin/geoipapi /bin/
|
||||||
|
|
||||||
|
ADD start.sh /start.sh
|
||||||
|
|
||||||
USER geoip
|
USER geoip
|
||||||
|
|
||||||
CMD ["/bin/geoipapi"]
|
CMD ["/start.sh"]
|
||||||
|
@@ -136,7 +136,7 @@ func open(t geoType) (*geoip2.Reader, error) {
|
|||||||
|
|
||||||
dir := findDB()
|
dir := findDB()
|
||||||
|
|
||||||
fileName := ""
|
var fileName string
|
||||||
|
|
||||||
found := false
|
found := false
|
||||||
for _, f := range dbFiles[t] {
|
for _, f := range dbFiles[t] {
|
||||||
|
6
go.mod
6
go.mod
@@ -3,7 +3,7 @@ module go.ntppool.org/geoipapi
|
|||||||
go 1.15
|
go 1.15
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/oschwald/geoip2-golang v1.4.0
|
github.com/oschwald/geoip2-golang v1.7.0
|
||||||
github.com/oschwald/maxminddb-golang v1.7.0 // indirect
|
golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12 // indirect
|
||||||
golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9 // indirect
|
gopkg.in/yaml.v2 v2.2.2 // indirect
|
||||||
)
|
)
|
||||||
|
8
go.sum
8
go.sum
@@ -3,20 +3,28 @@ github.com/oschwald/geoip2-golang v1.3.0 h1:D+Hsdos1NARPbzZ2aInUHZL+dApIzo8E0ErJ
|
|||||||
github.com/oschwald/geoip2-golang v1.3.0/go.mod h1:0LTTzix/Ao1uMvOhAV4iLU0Lz7eCrP94qZWBTDKf0iE=
|
github.com/oschwald/geoip2-golang v1.3.0/go.mod h1:0LTTzix/Ao1uMvOhAV4iLU0Lz7eCrP94qZWBTDKf0iE=
|
||||||
github.com/oschwald/geoip2-golang v1.4.0 h1:5RlrjCgRyIGDz/mBmPfnAF4h8k0IAcRv9PvrpOfz+Ug=
|
github.com/oschwald/geoip2-golang v1.4.0 h1:5RlrjCgRyIGDz/mBmPfnAF4h8k0IAcRv9PvrpOfz+Ug=
|
||||||
github.com/oschwald/geoip2-golang v1.4.0/go.mod h1:8QwxJvRImBH+Zl6Aa6MaIcs5YdlZSTKtzmPGzQqi9ng=
|
github.com/oschwald/geoip2-golang v1.4.0/go.mod h1:8QwxJvRImBH+Zl6Aa6MaIcs5YdlZSTKtzmPGzQqi9ng=
|
||||||
|
github.com/oschwald/geoip2-golang v1.7.0 h1:JW1r5AKi+vv2ujSxjKthySK3jo8w8oKWPyXsw+Qs/S8=
|
||||||
|
github.com/oschwald/geoip2-golang v1.7.0/go.mod h1:mdI/C7iK7NVMcIDDtf4bCKMJ7r0o7UwGeCo9eiitCMQ=
|
||||||
github.com/oschwald/maxminddb-golang v1.3.1 h1:kPc5+ieL5CC/Zn0IaXJPxDFlUxKTQEU8QBTtmfQDAIo=
|
github.com/oschwald/maxminddb-golang v1.3.1 h1:kPc5+ieL5CC/Zn0IaXJPxDFlUxKTQEU8QBTtmfQDAIo=
|
||||||
github.com/oschwald/maxminddb-golang v1.3.1/go.mod h1:3jhIUymTJ5VREKyIhWm66LJiQt04F0UCDdodShpjWsY=
|
github.com/oschwald/maxminddb-golang v1.3.1/go.mod h1:3jhIUymTJ5VREKyIhWm66LJiQt04F0UCDdodShpjWsY=
|
||||||
github.com/oschwald/maxminddb-golang v1.6.0/go.mod h1:DUJFucBg2cvqx42YmDa/+xHvb0elJtOm3o4aFQ/nb/w=
|
github.com/oschwald/maxminddb-golang v1.6.0/go.mod h1:DUJFucBg2cvqx42YmDa/+xHvb0elJtOm3o4aFQ/nb/w=
|
||||||
github.com/oschwald/maxminddb-golang v1.7.0 h1:JmU4Q1WBv5Q+2KZy5xJI+98aUwTIrPPxZUkd5Cwr8Zc=
|
github.com/oschwald/maxminddb-golang v1.7.0 h1:JmU4Q1WBv5Q+2KZy5xJI+98aUwTIrPPxZUkd5Cwr8Zc=
|
||||||
github.com/oschwald/maxminddb-golang v1.7.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis=
|
github.com/oschwald/maxminddb-golang v1.7.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis=
|
||||||
|
github.com/oschwald/maxminddb-golang v1.9.0 h1:tIk4nv6VT9OiPyrnDAfJS1s1xKDQMZOsGojab6EjC1Y=
|
||||||
|
github.com/oschwald/maxminddb-golang v1.9.0/go.mod h1:TK+s/Z2oZq0rSl4PSeAEoP0bgm82Cp5HyvYbt8K3zLY=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0 h1:HyfiK1WMnHj5FXFXatD+Qs1A/xC2Run6RzeW1SyHxpc=
|
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0 h1:HyfiK1WMnHj5FXFXatD+Qs1A/xC2Run6RzeW1SyHxpc=
|
||||||
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191224085550-c709ea063b76/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191224085550-c709ea063b76/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9 h1:yi1hN8dcqI9l8klZfy4B8mJvFmmAxJEePIQQFNSd7Cs=
|
golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9 h1:yi1hN8dcqI9l8klZfy4B8mJvFmmAxJEePIQQFNSd7Cs=
|
||||||
golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20220325203850-36772127a21f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12 h1:QyVthZKMsyaQwBTJE04jdNN0Pp5Fn9Qga0mrgxyERQM=
|
||||||
|
golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
16
start.sh
Executable file
16
start.sh
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
GEOIP=/usr/share/GeoIP/
|
||||||
|
|
||||||
|
if [[ ! -z "$GEOIP" ]]; then
|
||||||
|
while [[ ! -e "$GEOIP/GeoLite2-City.mmdb" ]]; do
|
||||||
|
echo waiting for geoip databases
|
||||||
|
sleep 4
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo starting geoipapi
|
||||||
|
|
||||||
|
exec /bin/geoipapi $@
|
3
vendor/github.com/oschwald/geoip2-golang/.gitignore
generated
vendored
3
vendor/github.com/oschwald/geoip2-golang/.gitignore
generated
vendored
@@ -1,3 +0,0 @@
|
|||||||
.vscode
|
|
||||||
*.out
|
|
||||||
*.test
|
|
3
vendor/github.com/oschwald/geoip2-golang/.gitmodules
generated
vendored
3
vendor/github.com/oschwald/geoip2-golang/.gitmodules
generated
vendored
@@ -1,3 +0,0 @@
|
|||||||
[submodule "test-data"]
|
|
||||||
path = test-data
|
|
||||||
url = https://github.com/maxmind/MaxMind-DB.git
|
|
30
vendor/github.com/oschwald/geoip2-golang/.golangci.toml
generated
vendored
30
vendor/github.com/oschwald/geoip2-golang/.golangci.toml
generated
vendored
@@ -1,30 +0,0 @@
|
|||||||
[run]
|
|
||||||
deadline = "10m"
|
|
||||||
tests = true
|
|
||||||
|
|
||||||
[linters]
|
|
||||||
disable-all = true
|
|
||||||
enable = [
|
|
||||||
"deadcode",
|
|
||||||
"depguard",
|
|
||||||
"errcheck",
|
|
||||||
"goconst",
|
|
||||||
"gocyclo",
|
|
||||||
"gocritic",
|
|
||||||
"gofmt",
|
|
||||||
"golint",
|
|
||||||
"gosec",
|
|
||||||
"gosimple",
|
|
||||||
"ineffassign",
|
|
||||||
"maligned",
|
|
||||||
"misspell",
|
|
||||||
"nakedret",
|
|
||||||
"staticcheck",
|
|
||||||
"structcheck",
|
|
||||||
"typecheck",
|
|
||||||
"unconvert",
|
|
||||||
"unparam",
|
|
||||||
"varcheck",
|
|
||||||
"vet",
|
|
||||||
"vetshadow",
|
|
||||||
]
|
|
48
vendor/github.com/oschwald/geoip2-golang/.travis.yml
generated
vendored
48
vendor/github.com/oschwald/geoip2-golang/.travis.yml
generated
vendored
@@ -1,48 +0,0 @@
|
|||||||
language: go
|
|
||||||
|
|
||||||
go:
|
|
||||||
- 1.9.x
|
|
||||||
- 1.10.x
|
|
||||||
- 1.11.x
|
|
||||||
- 1.12.x
|
|
||||||
- 1.13.x
|
|
||||||
- tip
|
|
||||||
|
|
||||||
os:
|
|
||||||
- linux
|
|
||||||
- linux-ppc64le
|
|
||||||
- osx
|
|
||||||
- windows
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
allow_failures:
|
|
||||||
- go: tip
|
|
||||||
|
|
||||||
install:
|
|
||||||
- go get -v -t ./...
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- |
|
|
||||||
if [[ $TRAVIS_GO_VERSION == '1.13.x' && $TRAVIS_OS_NAME == 'linux' && $(arch) != 'ppc64le' ]]; then
|
|
||||||
curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin
|
|
||||||
fi
|
|
||||||
|
|
||||||
script:
|
|
||||||
- |
|
|
||||||
if [ $(arch) == "ppc64le" ]; then
|
|
||||||
go test -cpu 1,4 -v
|
|
||||||
else
|
|
||||||
go test -race -cpu 1,4 -v
|
|
||||||
fi
|
|
||||||
- |
|
|
||||||
if [ $(arch) == "ppc64le" ]; then
|
|
||||||
go test -v -tags appengine
|
|
||||||
else
|
|
||||||
go test -race -v -tags appengine
|
|
||||||
fi
|
|
||||||
- |
|
|
||||||
if [[ $TRAVIS_GO_VERSION == '1.13.x' && $TRAVIS_OS_NAME == 'linux' && $(arch) != 'ppc64le' ]]; then
|
|
||||||
golangci-lint run
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo: false
|
|
15
vendor/github.com/oschwald/geoip2-golang/LICENSE
generated
vendored
15
vendor/github.com/oschwald/geoip2-golang/LICENSE
generated
vendored
@@ -1,15 +0,0 @@
|
|||||||
ISC License
|
|
||||||
|
|
||||||
Copyright (c) 2015, Gregory J. Oschwald <oschwald@gmail.com>
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
||||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
||||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
||||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
||||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
PERFORMANCE OF THIS SOFTWARE.
|
|
92
vendor/github.com/oschwald/geoip2-golang/README.md
generated
vendored
92
vendor/github.com/oschwald/geoip2-golang/README.md
generated
vendored
@@ -1,92 +0,0 @@
|
|||||||
# GeoIP2 Reader for Go #
|
|
||||||
|
|
||||||
[](https://travis-ci.org/oschwald/geoip2-golang)
|
|
||||||
[](https://godoc.org/github.com/oschwald/geoip2-golang)
|
|
||||||
|
|
||||||
This library reads MaxMind [GeoLite2](http://dev.maxmind.com/geoip/geoip2/geolite2/)
|
|
||||||
and [GeoIP2](http://www.maxmind.com/en/geolocation_landing) databases.
|
|
||||||
|
|
||||||
This library is built using
|
|
||||||
[the Go maxminddb reader](https://github.com/oschwald/maxminddb-golang).
|
|
||||||
All data for the database record is decoded using this library. If you only
|
|
||||||
need several fields, you may get superior performance by using maxminddb's
|
|
||||||
`Lookup` directly with a result struct that only contains the required fields.
|
|
||||||
(See [example_test.go](https://github.com/oschwald/maxminddb-golang/blob/master/example_test.go)
|
|
||||||
in the maxminddb repository for an example of this.)
|
|
||||||
|
|
||||||
## Installation ##
|
|
||||||
|
|
||||||
```
|
|
||||||
go get github.com/oschwald/geoip2-golang
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage ##
|
|
||||||
|
|
||||||
[See GoDoc](http://godoc.org/github.com/oschwald/geoip2-golang) for
|
|
||||||
documentation and examples.
|
|
||||||
|
|
||||||
## Example ##
|
|
||||||
|
|
||||||
```go
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"github.com/oschwald/geoip2-golang"
|
|
||||||
"log"
|
|
||||||
"net"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
db, err := geoip2.Open("GeoIP2-City.mmdb")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
defer db.Close()
|
|
||||||
// If you are using strings that may be invalid, check that ip is not nil
|
|
||||||
ip := net.ParseIP("81.2.69.142")
|
|
||||||
record, err := db.City(ip)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
fmt.Printf("Portuguese (BR) city name: %v\n", record.City.Names["pt-BR"])
|
|
||||||
if len(record.Subdivisions) > 0 {
|
|
||||||
fmt.Printf("English subdivision name: %v\n", record.Subdivisions[0].Names["en"])
|
|
||||||
}
|
|
||||||
fmt.Printf("Russian country name: %v\n", record.Country.Names["ru"])
|
|
||||||
fmt.Printf("ISO country code: %v\n", record.Country.IsoCode)
|
|
||||||
fmt.Printf("Time zone: %v\n", record.Location.TimeZone)
|
|
||||||
fmt.Printf("Coordinates: %v, %v\n", record.Location.Latitude, record.Location.Longitude)
|
|
||||||
// Output:
|
|
||||||
// Portuguese (BR) city name: Londres
|
|
||||||
// English subdivision name: England
|
|
||||||
// Russian country name: Великобритания
|
|
||||||
// ISO country code: GB
|
|
||||||
// Time zone: Europe/London
|
|
||||||
// Coordinates: 51.5142, -0.0931
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Testing ##
|
|
||||||
|
|
||||||
Make sure you checked out test data submodule:
|
|
||||||
|
|
||||||
```
|
|
||||||
git submodule init
|
|
||||||
git submodule update
|
|
||||||
```
|
|
||||||
|
|
||||||
Execute test suite:
|
|
||||||
|
|
||||||
```
|
|
||||||
go test
|
|
||||||
```
|
|
||||||
|
|
||||||
## Contributing ##
|
|
||||||
|
|
||||||
Contributions welcome! Please fork the repository and open a pull request
|
|
||||||
with your changes.
|
|
||||||
|
|
||||||
## License ##
|
|
||||||
|
|
||||||
This is free software, licensed under the ISC license.
|
|
8
vendor/github.com/oschwald/geoip2-golang/go.mod
generated
vendored
8
vendor/github.com/oschwald/geoip2-golang/go.mod
generated
vendored
@@ -1,8 +0,0 @@
|
|||||||
module github.com/oschwald/geoip2-golang
|
|
||||||
|
|
||||||
go 1.9
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/oschwald/maxminddb-golang v1.6.0
|
|
||||||
github.com/stretchr/testify v1.4.0
|
|
||||||
)
|
|
15
vendor/github.com/oschwald/geoip2-golang/go.sum
generated
vendored
15
vendor/github.com/oschwald/geoip2-golang/go.sum
generated
vendored
@@ -1,15 +0,0 @@
|
|||||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/oschwald/maxminddb-golang v1.6.0 h1:KAJSjdHQ8Kv45nFIbtoLGrGWqHFajOIm7skTyz/+Dls=
|
|
||||||
github.com/oschwald/maxminddb-golang v1.6.0/go.mod h1:DUJFucBg2cvqx42YmDa/+xHvb0elJtOm3o4aFQ/nb/w=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
|
||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
|
||||||
golang.org/x/sys v0.0.0-20191224085550-c709ea063b76 h1:Dho5nD6R3PcW2SH1or8vS0dszDaXRxIw55lBX7XiE5g=
|
|
||||||
golang.org/x/sys v0.0.0-20191224085550-c709ea063b76/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
410
vendor/github.com/oschwald/geoip2-golang/reader.go
generated
vendored
410
vendor/github.com/oschwald/geoip2-golang/reader.go
generated
vendored
@@ -1,410 +0,0 @@
|
|||||||
// Package geoip2 provides an easy-to-use API for the MaxMind GeoIP2 and
|
|
||||||
// GeoLite2 databases; this package does not support GeoIP Legacy databases.
|
|
||||||
//
|
|
||||||
// The structs provided by this package match the internal structure of
|
|
||||||
// the data in the MaxMind databases.
|
|
||||||
//
|
|
||||||
// See github.com/oschwald/maxminddb-golang for more advanced used cases.
|
|
||||||
package geoip2
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
|
|
||||||
"github.com/oschwald/maxminddb-golang"
|
|
||||||
)
|
|
||||||
|
|
||||||
// The Enterprise struct corresponds to the data in the GeoIP2 Enterprise
|
|
||||||
// database.
|
|
||||||
type Enterprise struct {
|
|
||||||
City struct {
|
|
||||||
Confidence uint8 `maxminddb:"confidence"`
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
} `maxminddb:"city"`
|
|
||||||
Continent struct {
|
|
||||||
Code string `maxminddb:"code"`
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
} `maxminddb:"continent"`
|
|
||||||
Country struct {
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
IsoCode string `maxminddb:"iso_code"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
Confidence uint8 `maxminddb:"confidence"`
|
|
||||||
IsInEuropeanUnion bool `maxminddb:"is_in_european_union"`
|
|
||||||
} `maxminddb:"country"`
|
|
||||||
Location struct {
|
|
||||||
AccuracyRadius uint16 `maxminddb:"accuracy_radius"`
|
|
||||||
Latitude float64 `maxminddb:"latitude"`
|
|
||||||
Longitude float64 `maxminddb:"longitude"`
|
|
||||||
MetroCode uint `maxminddb:"metro_code"`
|
|
||||||
TimeZone string `maxminddb:"time_zone"`
|
|
||||||
} `maxminddb:"location"`
|
|
||||||
Postal struct {
|
|
||||||
Code string `maxminddb:"code"`
|
|
||||||
Confidence uint8 `maxminddb:"confidence"`
|
|
||||||
} `maxminddb:"postal"`
|
|
||||||
RegisteredCountry struct {
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
IsoCode string `maxminddb:"iso_code"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
Confidence uint8 `maxminddb:"confidence"`
|
|
||||||
IsInEuropeanUnion bool `maxminddb:"is_in_european_union"`
|
|
||||||
} `maxminddb:"registered_country"`
|
|
||||||
RepresentedCountry struct {
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
IsInEuropeanUnion bool `maxminddb:"is_in_european_union"`
|
|
||||||
IsoCode string `maxminddb:"iso_code"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
Type string `maxminddb:"type"`
|
|
||||||
} `maxminddb:"represented_country"`
|
|
||||||
Subdivisions []struct {
|
|
||||||
Confidence uint8 `maxminddb:"confidence"`
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
IsoCode string `maxminddb:"iso_code"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
} `maxminddb:"subdivisions"`
|
|
||||||
Traits struct {
|
|
||||||
AutonomousSystemNumber uint `maxminddb:"autonomous_system_number"`
|
|
||||||
AutonomousSystemOrganization string `maxminddb:"autonomous_system_organization"`
|
|
||||||
ConnectionType string `maxminddb:"connection_type"`
|
|
||||||
Domain string `maxminddb:"domain"`
|
|
||||||
IsAnonymousProxy bool `maxminddb:"is_anonymous_proxy"`
|
|
||||||
IsLegitimateProxy bool `maxminddb:"is_legitimate_proxy"`
|
|
||||||
IsSatelliteProvider bool `maxminddb:"is_satellite_provider"`
|
|
||||||
ISP string `maxminddb:"isp"`
|
|
||||||
Organization string `maxminddb:"organization"`
|
|
||||||
UserType string `maxminddb:"user_type"`
|
|
||||||
} `maxminddb:"traits"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// The City struct corresponds to the data in the GeoIP2/GeoLite2 City
|
|
||||||
// databases.
|
|
||||||
type City struct {
|
|
||||||
City struct {
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
} `maxminddb:"city"`
|
|
||||||
Continent struct {
|
|
||||||
Code string `maxminddb:"code"`
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
} `maxminddb:"continent"`
|
|
||||||
Country struct {
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
IsInEuropeanUnion bool `maxminddb:"is_in_european_union"`
|
|
||||||
IsoCode string `maxminddb:"iso_code"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
} `maxminddb:"country"`
|
|
||||||
Location struct {
|
|
||||||
AccuracyRadius uint16 `maxminddb:"accuracy_radius"`
|
|
||||||
Latitude float64 `maxminddb:"latitude"`
|
|
||||||
Longitude float64 `maxminddb:"longitude"`
|
|
||||||
MetroCode uint `maxminddb:"metro_code"`
|
|
||||||
TimeZone string `maxminddb:"time_zone"`
|
|
||||||
} `maxminddb:"location"`
|
|
||||||
Postal struct {
|
|
||||||
Code string `maxminddb:"code"`
|
|
||||||
} `maxminddb:"postal"`
|
|
||||||
RegisteredCountry struct {
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
IsInEuropeanUnion bool `maxminddb:"is_in_european_union"`
|
|
||||||
IsoCode string `maxminddb:"iso_code"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
} `maxminddb:"registered_country"`
|
|
||||||
RepresentedCountry struct {
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
IsInEuropeanUnion bool `maxminddb:"is_in_european_union"`
|
|
||||||
IsoCode string `maxminddb:"iso_code"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
Type string `maxminddb:"type"`
|
|
||||||
} `maxminddb:"represented_country"`
|
|
||||||
Subdivisions []struct {
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
IsoCode string `maxminddb:"iso_code"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
} `maxminddb:"subdivisions"`
|
|
||||||
Traits struct {
|
|
||||||
IsAnonymousProxy bool `maxminddb:"is_anonymous_proxy"`
|
|
||||||
IsSatelliteProvider bool `maxminddb:"is_satellite_provider"`
|
|
||||||
} `maxminddb:"traits"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// The Country struct corresponds to the data in the GeoIP2/GeoLite2
|
|
||||||
// Country databases.
|
|
||||||
type Country struct {
|
|
||||||
Continent struct {
|
|
||||||
Code string `maxminddb:"code"`
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
} `maxminddb:"continent"`
|
|
||||||
Country struct {
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
IsInEuropeanUnion bool `maxminddb:"is_in_european_union"`
|
|
||||||
IsoCode string `maxminddb:"iso_code"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
} `maxminddb:"country"`
|
|
||||||
RegisteredCountry struct {
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
IsInEuropeanUnion bool `maxminddb:"is_in_european_union"`
|
|
||||||
IsoCode string `maxminddb:"iso_code"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
} `maxminddb:"registered_country"`
|
|
||||||
RepresentedCountry struct {
|
|
||||||
GeoNameID uint `maxminddb:"geoname_id"`
|
|
||||||
IsInEuropeanUnion bool `maxminddb:"is_in_european_union"`
|
|
||||||
IsoCode string `maxminddb:"iso_code"`
|
|
||||||
Names map[string]string `maxminddb:"names"`
|
|
||||||
Type string `maxminddb:"type"`
|
|
||||||
} `maxminddb:"represented_country"`
|
|
||||||
Traits struct {
|
|
||||||
IsAnonymousProxy bool `maxminddb:"is_anonymous_proxy"`
|
|
||||||
IsSatelliteProvider bool `maxminddb:"is_satellite_provider"`
|
|
||||||
} `maxminddb:"traits"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// The AnonymousIP struct corresponds to the data in the GeoIP2
|
|
||||||
// Anonymous IP database.
|
|
||||||
type AnonymousIP struct {
|
|
||||||
IsAnonymous bool `maxminddb:"is_anonymous"`
|
|
||||||
IsAnonymousVPN bool `maxminddb:"is_anonymous_vpn"`
|
|
||||||
IsHostingProvider bool `maxminddb:"is_hosting_provider"`
|
|
||||||
IsPublicProxy bool `maxminddb:"is_public_proxy"`
|
|
||||||
IsTorExitNode bool `maxminddb:"is_tor_exit_node"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// The ASN struct corresponds to the data in the GeoLite2 ASN database.
|
|
||||||
type ASN struct {
|
|
||||||
AutonomousSystemNumber uint `maxminddb:"autonomous_system_number"`
|
|
||||||
AutonomousSystemOrganization string `maxminddb:"autonomous_system_organization"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// The ConnectionType struct corresponds to the data in the GeoIP2
|
|
||||||
// Connection-Type database.
|
|
||||||
type ConnectionType struct {
|
|
||||||
ConnectionType string `maxminddb:"connection_type"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// The Domain struct corresponds to the data in the GeoIP2 Domain database.
|
|
||||||
type Domain struct {
|
|
||||||
Domain string `maxminddb:"domain"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// The ISP struct corresponds to the data in the GeoIP2 ISP database.
|
|
||||||
type ISP struct {
|
|
||||||
AutonomousSystemNumber uint `maxminddb:"autonomous_system_number"`
|
|
||||||
AutonomousSystemOrganization string `maxminddb:"autonomous_system_organization"`
|
|
||||||
ISP string `maxminddb:"isp"`
|
|
||||||
Organization string `maxminddb:"organization"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type databaseType int
|
|
||||||
|
|
||||||
const (
|
|
||||||
isAnonymousIP = 1 << iota
|
|
||||||
isASN
|
|
||||||
isCity
|
|
||||||
isConnectionType
|
|
||||||
isCountry
|
|
||||||
isDomain
|
|
||||||
isEnterprise
|
|
||||||
isISP
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reader holds the maxminddb.Reader struct. It can be created using the
|
|
||||||
// Open and FromBytes functions.
|
|
||||||
type Reader struct {
|
|
||||||
mmdbReader *maxminddb.Reader
|
|
||||||
databaseType databaseType
|
|
||||||
}
|
|
||||||
|
|
||||||
// InvalidMethodError is returned when a lookup method is called on a
|
|
||||||
// database that it does not support. For instance, calling the ISP method
|
|
||||||
// on a City database.
|
|
||||||
type InvalidMethodError struct {
|
|
||||||
Method string
|
|
||||||
DatabaseType string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e InvalidMethodError) Error() string {
|
|
||||||
return fmt.Sprintf(`geoip2: the %s method does not support the %s database`,
|
|
||||||
e.Method, e.DatabaseType)
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnknownDatabaseTypeError is returned when an unknown database type is
|
|
||||||
// opened.
|
|
||||||
type UnknownDatabaseTypeError struct {
|
|
||||||
DatabaseType string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e UnknownDatabaseTypeError) Error() string {
|
|
||||||
return fmt.Sprintf(`geoip2: reader does not support the "%s" database type`,
|
|
||||||
e.DatabaseType)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open takes a string path to a file and returns a Reader struct or an error.
|
|
||||||
// The database file is opened using a memory map. Use the Close method on the
|
|
||||||
// Reader object to return the resources to the system.
|
|
||||||
func Open(file string) (*Reader, error) {
|
|
||||||
reader, err := maxminddb.Open(file)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
dbType, err := getDBType(reader)
|
|
||||||
return &Reader{reader, dbType}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// FromBytes takes a byte slice corresponding to a GeoIP2/GeoLite2 database
|
|
||||||
// file and returns a Reader struct or an error. Note that the byte slice is
|
|
||||||
// use directly; any modification of it after opening the database will result
|
|
||||||
// in errors while reading from the database.
|
|
||||||
func FromBytes(bytes []byte) (*Reader, error) {
|
|
||||||
reader, err := maxminddb.FromBytes(bytes)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
dbType, err := getDBType(reader)
|
|
||||||
return &Reader{reader, dbType}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func getDBType(reader *maxminddb.Reader) (databaseType, error) {
|
|
||||||
switch reader.Metadata.DatabaseType {
|
|
||||||
case "GeoIP2-Anonymous-IP":
|
|
||||||
return isAnonymousIP, nil
|
|
||||||
case "GeoLite2-ASN":
|
|
||||||
return isASN, nil
|
|
||||||
// We allow City lookups on Country for back compat
|
|
||||||
case "DBIP-City-Lite",
|
|
||||||
"DBIP-City",
|
|
||||||
"DBIP-Country-Lite",
|
|
||||||
"DBIP-Country",
|
|
||||||
"GeoLite2-City",
|
|
||||||
"GeoIP2-City",
|
|
||||||
"GeoIP2-City-Africa",
|
|
||||||
"GeoIP2-City-Asia-Pacific",
|
|
||||||
"GeoIP2-City-Europe",
|
|
||||||
"GeoIP2-City-North-America",
|
|
||||||
"GeoIP2-City-South-America",
|
|
||||||
"GeoIP2-Precision-City",
|
|
||||||
"GeoLite2-Country",
|
|
||||||
"GeoIP2-Country":
|
|
||||||
return isCity | isCountry, nil
|
|
||||||
case "GeoIP2-Connection-Type":
|
|
||||||
return isConnectionType, nil
|
|
||||||
case "GeoIP2-Domain":
|
|
||||||
return isDomain, nil
|
|
||||||
case "DBIP-Location-ISP (compat=Enterprise)",
|
|
||||||
"GeoIP2-Enterprise":
|
|
||||||
return isEnterprise | isCity | isCountry, nil
|
|
||||||
case "GeoIP2-ISP",
|
|
||||||
"GeoIP2-Precision-ISP":
|
|
||||||
return isISP | isASN, nil
|
|
||||||
default:
|
|
||||||
return 0, UnknownDatabaseTypeError{reader.Metadata.DatabaseType}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enterprise takes an IP address as a net.IP struct and returns an Enterprise
|
|
||||||
// struct and/or an error. This is intended to be used with the GeoIP2
|
|
||||||
// Enterprise database.
|
|
||||||
func (r *Reader) Enterprise(ipAddress net.IP) (*Enterprise, error) {
|
|
||||||
if isEnterprise&r.databaseType == 0 {
|
|
||||||
return nil, InvalidMethodError{"Enterprise", r.Metadata().DatabaseType}
|
|
||||||
}
|
|
||||||
var enterprise Enterprise
|
|
||||||
err := r.mmdbReader.Lookup(ipAddress, &enterprise)
|
|
||||||
return &enterprise, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// City takes an IP address as a net.IP struct and returns a City struct
|
|
||||||
// and/or an error. Although this can be used with other databases, this
|
|
||||||
// method generally should be used with the GeoIP2 or GeoLite2 City databases.
|
|
||||||
func (r *Reader) City(ipAddress net.IP) (*City, error) {
|
|
||||||
if isCity&r.databaseType == 0 {
|
|
||||||
return nil, InvalidMethodError{"City", r.Metadata().DatabaseType}
|
|
||||||
}
|
|
||||||
var city City
|
|
||||||
err := r.mmdbReader.Lookup(ipAddress, &city)
|
|
||||||
return &city, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Country takes an IP address as a net.IP struct and returns a Country struct
|
|
||||||
// and/or an error. Although this can be used with other databases, this
|
|
||||||
// method generally should be used with the GeoIP2 or GeoLite2 Country
|
|
||||||
// databases.
|
|
||||||
func (r *Reader) Country(ipAddress net.IP) (*Country, error) {
|
|
||||||
if isCountry&r.databaseType == 0 {
|
|
||||||
return nil, InvalidMethodError{"Country", r.Metadata().DatabaseType}
|
|
||||||
}
|
|
||||||
var country Country
|
|
||||||
err := r.mmdbReader.Lookup(ipAddress, &country)
|
|
||||||
return &country, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// AnonymousIP takes an IP address as a net.IP struct and returns a
|
|
||||||
// AnonymousIP struct and/or an error.
|
|
||||||
func (r *Reader) AnonymousIP(ipAddress net.IP) (*AnonymousIP, error) {
|
|
||||||
if isAnonymousIP&r.databaseType == 0 {
|
|
||||||
return nil, InvalidMethodError{"AnonymousIP", r.Metadata().DatabaseType}
|
|
||||||
}
|
|
||||||
var anonIP AnonymousIP
|
|
||||||
err := r.mmdbReader.Lookup(ipAddress, &anonIP)
|
|
||||||
return &anonIP, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// ASN takes an IP address as a net.IP struct and returns a ASN struct and/or
|
|
||||||
// an error
|
|
||||||
func (r *Reader) ASN(ipAddress net.IP) (*ASN, error) {
|
|
||||||
if isASN&r.databaseType == 0 {
|
|
||||||
return nil, InvalidMethodError{"ASN", r.Metadata().DatabaseType}
|
|
||||||
}
|
|
||||||
var val ASN
|
|
||||||
err := r.mmdbReader.Lookup(ipAddress, &val)
|
|
||||||
return &val, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// ConnectionType takes an IP address as a net.IP struct and returns a
|
|
||||||
// ConnectionType struct and/or an error
|
|
||||||
func (r *Reader) ConnectionType(ipAddress net.IP) (*ConnectionType, error) {
|
|
||||||
if isConnectionType&r.databaseType == 0 {
|
|
||||||
return nil, InvalidMethodError{"ConnectionType", r.Metadata().DatabaseType}
|
|
||||||
}
|
|
||||||
var val ConnectionType
|
|
||||||
err := r.mmdbReader.Lookup(ipAddress, &val)
|
|
||||||
return &val, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Domain takes an IP address as a net.IP struct and returns a
|
|
||||||
// Domain struct and/or an error
|
|
||||||
func (r *Reader) Domain(ipAddress net.IP) (*Domain, error) {
|
|
||||||
if isDomain&r.databaseType == 0 {
|
|
||||||
return nil, InvalidMethodError{"Domain", r.Metadata().DatabaseType}
|
|
||||||
}
|
|
||||||
var val Domain
|
|
||||||
err := r.mmdbReader.Lookup(ipAddress, &val)
|
|
||||||
return &val, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// ISP takes an IP address as a net.IP struct and returns a ISP struct and/or
|
|
||||||
// an error
|
|
||||||
func (r *Reader) ISP(ipAddress net.IP) (*ISP, error) {
|
|
||||||
if isISP&r.databaseType == 0 {
|
|
||||||
return nil, InvalidMethodError{"ISP", r.Metadata().DatabaseType}
|
|
||||||
}
|
|
||||||
var val ISP
|
|
||||||
err := r.mmdbReader.Lookup(ipAddress, &val)
|
|
||||||
return &val, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Metadata takes no arguments and returns a struct containing metadata about
|
|
||||||
// the MaxMind database in use by the Reader.
|
|
||||||
func (r *Reader) Metadata() maxminddb.Metadata {
|
|
||||||
return r.mmdbReader.Metadata
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close unmaps the database file from virtual memory and returns the
|
|
||||||
// resources to the system.
|
|
||||||
func (r *Reader) Close() error {
|
|
||||||
return r.mmdbReader.Close()
|
|
||||||
}
|
|
4
vendor/github.com/oschwald/maxminddb-golang/.gitignore
generated
vendored
4
vendor/github.com/oschwald/maxminddb-golang/.gitignore
generated
vendored
@@ -1,4 +0,0 @@
|
|||||||
.vscode
|
|
||||||
*.out
|
|
||||||
*.sw?
|
|
||||||
*.test
|
|
3
vendor/github.com/oschwald/maxminddb-golang/.gitmodules
generated
vendored
3
vendor/github.com/oschwald/maxminddb-golang/.gitmodules
generated
vendored
@@ -1,3 +0,0 @@
|
|||||||
[submodule "test-data"]
|
|
||||||
path = test-data
|
|
||||||
url = https://github.com/maxmind/MaxMind-DB.git
|
|
30
vendor/github.com/oschwald/maxminddb-golang/.golangci.toml
generated
vendored
30
vendor/github.com/oschwald/maxminddb-golang/.golangci.toml
generated
vendored
@@ -1,30 +0,0 @@
|
|||||||
[run]
|
|
||||||
deadline = "10m"
|
|
||||||
tests = true
|
|
||||||
|
|
||||||
[linters]
|
|
||||||
disable-all = true
|
|
||||||
enable = [
|
|
||||||
"deadcode",
|
|
||||||
"depguard",
|
|
||||||
"errcheck",
|
|
||||||
"goconst",
|
|
||||||
"gocyclo",
|
|
||||||
"gocritic",
|
|
||||||
"gofmt",
|
|
||||||
"golint",
|
|
||||||
"gosec",
|
|
||||||
"gosimple",
|
|
||||||
"ineffassign",
|
|
||||||
"maligned",
|
|
||||||
"misspell",
|
|
||||||
"nakedret",
|
|
||||||
"staticcheck",
|
|
||||||
"structcheck",
|
|
||||||
"typecheck",
|
|
||||||
"unconvert",
|
|
||||||
"unparam",
|
|
||||||
"varcheck",
|
|
||||||
"vet",
|
|
||||||
"vetshadow",
|
|
||||||
]
|
|
48
vendor/github.com/oschwald/maxminddb-golang/.travis.yml
generated
vendored
48
vendor/github.com/oschwald/maxminddb-golang/.travis.yml
generated
vendored
@@ -1,48 +0,0 @@
|
|||||||
language: go
|
|
||||||
|
|
||||||
go:
|
|
||||||
- 1.9.x
|
|
||||||
- 1.10.x
|
|
||||||
- 1.11.x
|
|
||||||
- 1.12.x
|
|
||||||
- 1.13.x
|
|
||||||
- 1.14.x
|
|
||||||
- tip
|
|
||||||
|
|
||||||
os:
|
|
||||||
- linux
|
|
||||||
- linux-ppc64le
|
|
||||||
- osx
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
allow_failures:
|
|
||||||
- go: tip
|
|
||||||
|
|
||||||
install:
|
|
||||||
- go get -v -t ./...
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- |
|
|
||||||
if [[ $TRAVIS_GO_VERSION == 1.14 && $(arch) != 'ppc64le' ]]; then
|
|
||||||
curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin
|
|
||||||
fi
|
|
||||||
|
|
||||||
script:
|
|
||||||
- |
|
|
||||||
if [ $(arch) == "ppc64le" ]; then
|
|
||||||
go test -cpu 1,4 -v
|
|
||||||
else
|
|
||||||
go test -race -cpu 1,4 -v
|
|
||||||
fi
|
|
||||||
- |
|
|
||||||
if [ $(arch) == "ppc64le" ]; then
|
|
||||||
go test -v -tags appengine
|
|
||||||
else
|
|
||||||
go test -race -v -tags appengine
|
|
||||||
fi
|
|
||||||
- |
|
|
||||||
if [[ $TRAVIS_GO_VERSION == 1.14 && $(arch) != 'ppc64le' ]]; then
|
|
||||||
golangci-lint run
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo: false
|
|
15
vendor/github.com/oschwald/maxminddb-golang/LICENSE
generated
vendored
15
vendor/github.com/oschwald/maxminddb-golang/LICENSE
generated
vendored
@@ -1,15 +0,0 @@
|
|||||||
ISC License
|
|
||||||
|
|
||||||
Copyright (c) 2015, Gregory J. Oschwald <oschwald@gmail.com>
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
||||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
||||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
||||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
||||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
||||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
||||||
PERFORMANCE OF THIS SOFTWARE.
|
|
38
vendor/github.com/oschwald/maxminddb-golang/README.md
generated
vendored
38
vendor/github.com/oschwald/maxminddb-golang/README.md
generated
vendored
@@ -1,38 +0,0 @@
|
|||||||
# MaxMind DB Reader for Go #
|
|
||||||
|
|
||||||
[](https://travis-ci.org/oschwald/maxminddb-golang)
|
|
||||||
[](https://ci.appveyor.com/project/oschwald/maxminddb-golang/branch/master)
|
|
||||||
[](https://godoc.org/github.com/oschwald/maxminddb-golang)
|
|
||||||
|
|
||||||
This is a Go reader for the MaxMind DB format. Although this can be used to
|
|
||||||
read [GeoLite2](http://dev.maxmind.com/geoip/geoip2/geolite2/) and
|
|
||||||
[GeoIP2](https://www.maxmind.com/en/geoip2-databases) databases,
|
|
||||||
[geoip2](https://github.com/oschwald/geoip2-golang) provides a higher-level
|
|
||||||
API for doing so.
|
|
||||||
|
|
||||||
This is not an official MaxMind API.
|
|
||||||
|
|
||||||
## Installation ##
|
|
||||||
|
|
||||||
```
|
|
||||||
go get github.com/oschwald/maxminddb-golang
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage ##
|
|
||||||
|
|
||||||
[See GoDoc](http://godoc.org/github.com/oschwald/maxminddb-golang) for
|
|
||||||
documentation and examples.
|
|
||||||
|
|
||||||
## Examples ##
|
|
||||||
|
|
||||||
See [GoDoc](http://godoc.org/github.com/oschwald/maxminddb-golang) or
|
|
||||||
`example_test.go` for examples.
|
|
||||||
|
|
||||||
## Contributing ##
|
|
||||||
|
|
||||||
Contributions welcome! Please fork the repository and open a pull request
|
|
||||||
with your changes.
|
|
||||||
|
|
||||||
## License ##
|
|
||||||
|
|
||||||
This is free software, licensed under the ISC License.
|
|
19
vendor/github.com/oschwald/maxminddb-golang/appveyor.yml
generated
vendored
19
vendor/github.com/oschwald/maxminddb-golang/appveyor.yml
generated
vendored
@@ -1,19 +0,0 @@
|
|||||||
version: "{build}"
|
|
||||||
|
|
||||||
os: Windows Server 2012 R2
|
|
||||||
|
|
||||||
clone_folder: c:\gopath\src\github.com\oschwald\maxminddb-golang
|
|
||||||
|
|
||||||
environment:
|
|
||||||
GOPATH: c:\gopath
|
|
||||||
|
|
||||||
install:
|
|
||||||
- echo %PATH%
|
|
||||||
- echo %GOPATH%
|
|
||||||
- git submodule update --init --recursive
|
|
||||||
- go version
|
|
||||||
- go env
|
|
||||||
- go get -v -t ./...
|
|
||||||
|
|
||||||
build_script:
|
|
||||||
- go test -v ./...
|
|
711
vendor/github.com/oschwald/maxminddb-golang/decoder.go
generated
vendored
711
vendor/github.com/oschwald/maxminddb-golang/decoder.go
generated
vendored
@@ -1,711 +0,0 @@
|
|||||||
package maxminddb
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/binary"
|
|
||||||
"math"
|
|
||||||
"math/big"
|
|
||||||
"reflect"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
type decoder struct {
|
|
||||||
buffer []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
type dataType int
|
|
||||||
|
|
||||||
const (
|
|
||||||
_Extended dataType = iota
|
|
||||||
_Pointer
|
|
||||||
_String
|
|
||||||
_Float64
|
|
||||||
_Bytes
|
|
||||||
_Uint16
|
|
||||||
_Uint32
|
|
||||||
_Map
|
|
||||||
_Int32
|
|
||||||
_Uint64
|
|
||||||
_Uint128
|
|
||||||
_Slice
|
|
||||||
// We don't use the next two. They are placeholders. See the spec
|
|
||||||
// for more details.
|
|
||||||
_Container // nolint: deadcode, varcheck
|
|
||||||
_Marker // nolint: deadcode, varcheck
|
|
||||||
_Bool
|
|
||||||
_Float32
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
// This is the value used in libmaxminddb
|
|
||||||
maximumDataStructureDepth = 512
|
|
||||||
)
|
|
||||||
|
|
||||||
func (d *decoder) decode(offset uint, result reflect.Value, depth int) (uint, error) {
|
|
||||||
if depth > maximumDataStructureDepth {
|
|
||||||
return 0, newInvalidDatabaseError("exceeded maximum data structure depth; database is likely corrupt")
|
|
||||||
}
|
|
||||||
typeNum, size, newOffset, err := d.decodeCtrlData(offset)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if typeNum != _Pointer && result.Kind() == reflect.Uintptr {
|
|
||||||
result.Set(reflect.ValueOf(uintptr(offset)))
|
|
||||||
return d.nextValueOffset(offset, 1)
|
|
||||||
}
|
|
||||||
return d.decodeFromType(typeNum, size, newOffset, result, depth+1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeCtrlData(offset uint) (dataType, uint, uint, error) {
|
|
||||||
newOffset := offset + 1
|
|
||||||
if offset >= uint(len(d.buffer)) {
|
|
||||||
return 0, 0, 0, newOffsetError()
|
|
||||||
}
|
|
||||||
ctrlByte := d.buffer[offset]
|
|
||||||
|
|
||||||
typeNum := dataType(ctrlByte >> 5)
|
|
||||||
if typeNum == _Extended {
|
|
||||||
if newOffset >= uint(len(d.buffer)) {
|
|
||||||
return 0, 0, 0, newOffsetError()
|
|
||||||
}
|
|
||||||
typeNum = dataType(d.buffer[newOffset] + 7)
|
|
||||||
newOffset++
|
|
||||||
}
|
|
||||||
|
|
||||||
var size uint
|
|
||||||
size, newOffset, err := d.sizeFromCtrlByte(ctrlByte, newOffset, typeNum)
|
|
||||||
return typeNum, size, newOffset, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) sizeFromCtrlByte(ctrlByte byte, offset uint, typeNum dataType) (uint, uint, error) {
|
|
||||||
size := uint(ctrlByte & 0x1f)
|
|
||||||
if typeNum == _Extended {
|
|
||||||
return size, offset, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var bytesToRead uint
|
|
||||||
if size < 29 {
|
|
||||||
return size, offset, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
bytesToRead = size - 28
|
|
||||||
newOffset := offset + bytesToRead
|
|
||||||
if newOffset > uint(len(d.buffer)) {
|
|
||||||
return 0, 0, newOffsetError()
|
|
||||||
}
|
|
||||||
if size == 29 {
|
|
||||||
return 29 + uint(d.buffer[offset]), offset + 1, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
sizeBytes := d.buffer[offset:newOffset]
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case size == 30:
|
|
||||||
size = 285 + uintFromBytes(0, sizeBytes)
|
|
||||||
case size > 30:
|
|
||||||
size = uintFromBytes(0, sizeBytes) + 65821
|
|
||||||
}
|
|
||||||
return size, newOffset, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeFromType(
|
|
||||||
dtype dataType,
|
|
||||||
size uint,
|
|
||||||
offset uint,
|
|
||||||
result reflect.Value,
|
|
||||||
depth int,
|
|
||||||
) (uint, error) {
|
|
||||||
result = d.indirect(result)
|
|
||||||
|
|
||||||
// For these types, size has a special meaning
|
|
||||||
switch dtype {
|
|
||||||
case _Bool:
|
|
||||||
return d.unmarshalBool(size, offset, result)
|
|
||||||
case _Map:
|
|
||||||
return d.unmarshalMap(size, offset, result, depth)
|
|
||||||
case _Pointer:
|
|
||||||
return d.unmarshalPointer(size, offset, result, depth)
|
|
||||||
case _Slice:
|
|
||||||
return d.unmarshalSlice(size, offset, result, depth)
|
|
||||||
}
|
|
||||||
|
|
||||||
// For the remaining types, size is the byte size
|
|
||||||
if offset+size > uint(len(d.buffer)) {
|
|
||||||
return 0, newOffsetError()
|
|
||||||
}
|
|
||||||
switch dtype {
|
|
||||||
case _Bytes:
|
|
||||||
return d.unmarshalBytes(size, offset, result)
|
|
||||||
case _Float32:
|
|
||||||
return d.unmarshalFloat32(size, offset, result)
|
|
||||||
case _Float64:
|
|
||||||
return d.unmarshalFloat64(size, offset, result)
|
|
||||||
case _Int32:
|
|
||||||
return d.unmarshalInt32(size, offset, result)
|
|
||||||
case _String:
|
|
||||||
return d.unmarshalString(size, offset, result)
|
|
||||||
case _Uint16:
|
|
||||||
return d.unmarshalUint(size, offset, result, 16)
|
|
||||||
case _Uint32:
|
|
||||||
return d.unmarshalUint(size, offset, result, 32)
|
|
||||||
case _Uint64:
|
|
||||||
return d.unmarshalUint(size, offset, result, 64)
|
|
||||||
case _Uint128:
|
|
||||||
return d.unmarshalUint128(size, offset, result)
|
|
||||||
default:
|
|
||||||
return 0, newInvalidDatabaseError("unknown type: %d", dtype)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) unmarshalBool(size uint, offset uint, result reflect.Value) (uint, error) {
|
|
||||||
if size > 1 {
|
|
||||||
return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (bool size of %v)", size)
|
|
||||||
}
|
|
||||||
value, newOffset := d.decodeBool(size, offset)
|
|
||||||
|
|
||||||
switch result.Kind() {
|
|
||||||
case reflect.Bool:
|
|
||||||
result.SetBool(value)
|
|
||||||
return newOffset, nil
|
|
||||||
case reflect.Interface:
|
|
||||||
if result.NumMethod() == 0 {
|
|
||||||
result.Set(reflect.ValueOf(value))
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newOffset, newUnmarshalTypeError(value, result.Type())
|
|
||||||
}
|
|
||||||
|
|
||||||
// indirect follows pointers and create values as necessary. This is
|
|
||||||
// heavily based on encoding/json as my original version had a subtle
|
|
||||||
// bug. This method should be considered to be licensed under
|
|
||||||
// https://golang.org/LICENSE
|
|
||||||
func (d *decoder) indirect(result reflect.Value) reflect.Value {
|
|
||||||
for {
|
|
||||||
// Load value from interface, but only if the result will be
|
|
||||||
// usefully addressable.
|
|
||||||
if result.Kind() == reflect.Interface && !result.IsNil() {
|
|
||||||
e := result.Elem()
|
|
||||||
if e.Kind() == reflect.Ptr && !e.IsNil() {
|
|
||||||
result = e
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if result.Kind() != reflect.Ptr {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
if result.IsNil() {
|
|
||||||
result.Set(reflect.New(result.Type().Elem()))
|
|
||||||
}
|
|
||||||
result = result.Elem()
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
var sliceType = reflect.TypeOf([]byte{})
|
|
||||||
|
|
||||||
func (d *decoder) unmarshalBytes(size uint, offset uint, result reflect.Value) (uint, error) {
|
|
||||||
value, newOffset := d.decodeBytes(size, offset)
|
|
||||||
|
|
||||||
switch result.Kind() {
|
|
||||||
case reflect.Slice:
|
|
||||||
if result.Type() == sliceType {
|
|
||||||
result.SetBytes(value)
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
case reflect.Interface:
|
|
||||||
if result.NumMethod() == 0 {
|
|
||||||
result.Set(reflect.ValueOf(value))
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newOffset, newUnmarshalTypeError(value, result.Type())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) unmarshalFloat32(size uint, offset uint, result reflect.Value) (uint, error) {
|
|
||||||
if size != 4 {
|
|
||||||
return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (float32 size of %v)", size)
|
|
||||||
}
|
|
||||||
value, newOffset := d.decodeFloat32(size, offset)
|
|
||||||
|
|
||||||
switch result.Kind() {
|
|
||||||
case reflect.Float32, reflect.Float64:
|
|
||||||
result.SetFloat(float64(value))
|
|
||||||
return newOffset, nil
|
|
||||||
case reflect.Interface:
|
|
||||||
if result.NumMethod() == 0 {
|
|
||||||
result.Set(reflect.ValueOf(value))
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newOffset, newUnmarshalTypeError(value, result.Type())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) unmarshalFloat64(size uint, offset uint, result reflect.Value) (uint, error) {
|
|
||||||
|
|
||||||
if size != 8 {
|
|
||||||
return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (float 64 size of %v)", size)
|
|
||||||
}
|
|
||||||
value, newOffset := d.decodeFloat64(size, offset)
|
|
||||||
|
|
||||||
switch result.Kind() {
|
|
||||||
case reflect.Float32, reflect.Float64:
|
|
||||||
if result.OverflowFloat(value) {
|
|
||||||
return 0, newUnmarshalTypeError(value, result.Type())
|
|
||||||
}
|
|
||||||
result.SetFloat(value)
|
|
||||||
return newOffset, nil
|
|
||||||
case reflect.Interface:
|
|
||||||
if result.NumMethod() == 0 {
|
|
||||||
result.Set(reflect.ValueOf(value))
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newOffset, newUnmarshalTypeError(value, result.Type())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) unmarshalInt32(size uint, offset uint, result reflect.Value) (uint, error) {
|
|
||||||
if size > 4 {
|
|
||||||
return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (int32 size of %v)", size)
|
|
||||||
}
|
|
||||||
value, newOffset := d.decodeInt(size, offset)
|
|
||||||
|
|
||||||
switch result.Kind() {
|
|
||||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
||||||
n := int64(value)
|
|
||||||
if !result.OverflowInt(n) {
|
|
||||||
result.SetInt(n)
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
|
||||||
n := uint64(value)
|
|
||||||
if !result.OverflowUint(n) {
|
|
||||||
result.SetUint(n)
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
case reflect.Interface:
|
|
||||||
if result.NumMethod() == 0 {
|
|
||||||
result.Set(reflect.ValueOf(value))
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newOffset, newUnmarshalTypeError(value, result.Type())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) unmarshalMap(
|
|
||||||
size uint,
|
|
||||||
offset uint,
|
|
||||||
result reflect.Value,
|
|
||||||
depth int,
|
|
||||||
) (uint, error) {
|
|
||||||
result = d.indirect(result)
|
|
||||||
switch result.Kind() {
|
|
||||||
default:
|
|
||||||
return 0, newUnmarshalTypeError("map", result.Type())
|
|
||||||
case reflect.Struct:
|
|
||||||
return d.decodeStruct(size, offset, result, depth)
|
|
||||||
case reflect.Map:
|
|
||||||
return d.decodeMap(size, offset, result, depth)
|
|
||||||
case reflect.Interface:
|
|
||||||
if result.NumMethod() == 0 {
|
|
||||||
rv := reflect.ValueOf(make(map[string]interface{}, size))
|
|
||||||
newOffset, err := d.decodeMap(size, offset, rv, depth)
|
|
||||||
result.Set(rv)
|
|
||||||
return newOffset, err
|
|
||||||
}
|
|
||||||
return 0, newUnmarshalTypeError("map", result.Type())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) unmarshalPointer(size uint, offset uint, result reflect.Value, depth int) (uint, error) {
|
|
||||||
pointer, newOffset, err := d.decodePointer(size, offset)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
_, err = d.decode(pointer, result, depth)
|
|
||||||
return newOffset, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) unmarshalSlice(
|
|
||||||
size uint,
|
|
||||||
offset uint,
|
|
||||||
result reflect.Value,
|
|
||||||
depth int,
|
|
||||||
) (uint, error) {
|
|
||||||
switch result.Kind() {
|
|
||||||
case reflect.Slice:
|
|
||||||
return d.decodeSlice(size, offset, result, depth)
|
|
||||||
case reflect.Interface:
|
|
||||||
if result.NumMethod() == 0 {
|
|
||||||
a := []interface{}{}
|
|
||||||
rv := reflect.ValueOf(&a).Elem()
|
|
||||||
newOffset, err := d.decodeSlice(size, offset, rv, depth)
|
|
||||||
result.Set(rv)
|
|
||||||
return newOffset, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0, newUnmarshalTypeError("array", result.Type())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) unmarshalString(size uint, offset uint, result reflect.Value) (uint, error) {
|
|
||||||
value, newOffset := d.decodeString(size, offset)
|
|
||||||
|
|
||||||
switch result.Kind() {
|
|
||||||
case reflect.String:
|
|
||||||
result.SetString(value)
|
|
||||||
return newOffset, nil
|
|
||||||
case reflect.Interface:
|
|
||||||
if result.NumMethod() == 0 {
|
|
||||||
result.Set(reflect.ValueOf(value))
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newOffset, newUnmarshalTypeError(value, result.Type())
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) unmarshalUint(size uint, offset uint, result reflect.Value, uintType uint) (uint, error) {
|
|
||||||
if size > uintType/8 {
|
|
||||||
return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (uint%v size of %v)", uintType, size)
|
|
||||||
}
|
|
||||||
|
|
||||||
value, newOffset := d.decodeUint(size, offset)
|
|
||||||
|
|
||||||
switch result.Kind() {
|
|
||||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
||||||
n := int64(value)
|
|
||||||
if !result.OverflowInt(n) {
|
|
||||||
result.SetInt(n)
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
|
||||||
if !result.OverflowUint(value) {
|
|
||||||
result.SetUint(value)
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
case reflect.Interface:
|
|
||||||
if result.NumMethod() == 0 {
|
|
||||||
result.Set(reflect.ValueOf(value))
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newOffset, newUnmarshalTypeError(value, result.Type())
|
|
||||||
}
|
|
||||||
|
|
||||||
var bigIntType = reflect.TypeOf(big.Int{})
|
|
||||||
|
|
||||||
func (d *decoder) unmarshalUint128(size uint, offset uint, result reflect.Value) (uint, error) {
|
|
||||||
if size > 16 {
|
|
||||||
return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (uint128 size of %v)", size)
|
|
||||||
}
|
|
||||||
value, newOffset := d.decodeUint128(size, offset)
|
|
||||||
|
|
||||||
switch result.Kind() {
|
|
||||||
case reflect.Struct:
|
|
||||||
if result.Type() == bigIntType {
|
|
||||||
result.Set(reflect.ValueOf(*value))
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
case reflect.Interface:
|
|
||||||
if result.NumMethod() == 0 {
|
|
||||||
result.Set(reflect.ValueOf(value))
|
|
||||||
return newOffset, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newOffset, newUnmarshalTypeError(value, result.Type())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeBool(size uint, offset uint) (bool, uint) {
|
|
||||||
return size != 0, offset
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeBytes(size uint, offset uint) ([]byte, uint) {
|
|
||||||
newOffset := offset + size
|
|
||||||
bytes := make([]byte, size)
|
|
||||||
copy(bytes, d.buffer[offset:newOffset])
|
|
||||||
return bytes, newOffset
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeFloat64(size uint, offset uint) (float64, uint) {
|
|
||||||
newOffset := offset + size
|
|
||||||
bits := binary.BigEndian.Uint64(d.buffer[offset:newOffset])
|
|
||||||
return math.Float64frombits(bits), newOffset
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeFloat32(size uint, offset uint) (float32, uint) {
|
|
||||||
newOffset := offset + size
|
|
||||||
bits := binary.BigEndian.Uint32(d.buffer[offset:newOffset])
|
|
||||||
return math.Float32frombits(bits), newOffset
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeInt(size uint, offset uint) (int, uint) {
|
|
||||||
newOffset := offset + size
|
|
||||||
var val int32
|
|
||||||
for _, b := range d.buffer[offset:newOffset] {
|
|
||||||
val = (val << 8) | int32(b)
|
|
||||||
}
|
|
||||||
return int(val), newOffset
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeMap(
|
|
||||||
size uint,
|
|
||||||
offset uint,
|
|
||||||
result reflect.Value,
|
|
||||||
depth int,
|
|
||||||
) (uint, error) {
|
|
||||||
if result.IsNil() {
|
|
||||||
result.Set(reflect.MakeMapWithSize(result.Type(), int(size)))
|
|
||||||
}
|
|
||||||
|
|
||||||
mapType := result.Type()
|
|
||||||
keyValue := reflect.New(mapType.Key()).Elem()
|
|
||||||
elemType := mapType.Elem()
|
|
||||||
elemKind := elemType.Kind()
|
|
||||||
var elemValue reflect.Value
|
|
||||||
for i := uint(0); i < size; i++ {
|
|
||||||
var key []byte
|
|
||||||
var err error
|
|
||||||
key, offset, err = d.decodeKey(offset)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if !elemValue.IsValid() || elemKind == reflect.Interface {
|
|
||||||
elemValue = reflect.New(elemType).Elem()
|
|
||||||
}
|
|
||||||
|
|
||||||
offset, err = d.decode(offset, elemValue, depth)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
keyValue.SetString(string(key))
|
|
||||||
result.SetMapIndex(keyValue, elemValue)
|
|
||||||
}
|
|
||||||
return offset, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodePointer(
|
|
||||||
size uint,
|
|
||||||
offset uint,
|
|
||||||
) (uint, uint, error) {
|
|
||||||
pointerSize := ((size >> 3) & 0x3) + 1
|
|
||||||
newOffset := offset + pointerSize
|
|
||||||
if newOffset > uint(len(d.buffer)) {
|
|
||||||
return 0, 0, newOffsetError()
|
|
||||||
}
|
|
||||||
pointerBytes := d.buffer[offset:newOffset]
|
|
||||||
var prefix uint
|
|
||||||
if pointerSize == 4 {
|
|
||||||
prefix = 0
|
|
||||||
} else {
|
|
||||||
prefix = size & 0x7
|
|
||||||
}
|
|
||||||
unpacked := uintFromBytes(prefix, pointerBytes)
|
|
||||||
|
|
||||||
var pointerValueOffset uint
|
|
||||||
switch pointerSize {
|
|
||||||
case 1:
|
|
||||||
pointerValueOffset = 0
|
|
||||||
case 2:
|
|
||||||
pointerValueOffset = 2048
|
|
||||||
case 3:
|
|
||||||
pointerValueOffset = 526336
|
|
||||||
case 4:
|
|
||||||
pointerValueOffset = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
pointer := unpacked + pointerValueOffset
|
|
||||||
|
|
||||||
return pointer, newOffset, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeSlice(
|
|
||||||
size uint,
|
|
||||||
offset uint,
|
|
||||||
result reflect.Value,
|
|
||||||
depth int,
|
|
||||||
) (uint, error) {
|
|
||||||
result.Set(reflect.MakeSlice(result.Type(), int(size), int(size)))
|
|
||||||
for i := 0; i < int(size); i++ {
|
|
||||||
var err error
|
|
||||||
offset, err = d.decode(offset, result.Index(i), depth)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return offset, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeString(size uint, offset uint) (string, uint) {
|
|
||||||
newOffset := offset + size
|
|
||||||
return string(d.buffer[offset:newOffset]), newOffset
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeStruct(
|
|
||||||
size uint,
|
|
||||||
offset uint,
|
|
||||||
result reflect.Value,
|
|
||||||
depth int,
|
|
||||||
) (uint, error) {
|
|
||||||
fields := cachedFields(result)
|
|
||||||
|
|
||||||
// This fills in embedded structs
|
|
||||||
for _, i := range fields.anonymousFields {
|
|
||||||
_, err := d.unmarshalMap(size, offset, result.Field(i), depth)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// This handles named fields
|
|
||||||
for i := uint(0); i < size; i++ {
|
|
||||||
var (
|
|
||||||
err error
|
|
||||||
key []byte
|
|
||||||
)
|
|
||||||
key, offset, err = d.decodeKey(offset)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
// The string() does not create a copy due to this compiler
|
|
||||||
// optimization: https://github.com/golang/go/issues/3512
|
|
||||||
j, ok := fields.namedFields[string(key)]
|
|
||||||
if !ok {
|
|
||||||
offset, err = d.nextValueOffset(offset, 1)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
offset, err = d.decode(offset, result.Field(j), depth)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return offset, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type fieldsType struct {
|
|
||||||
namedFields map[string]int
|
|
||||||
anonymousFields []int
|
|
||||||
}
|
|
||||||
|
|
||||||
var fieldsMap sync.Map
|
|
||||||
|
|
||||||
func cachedFields(result reflect.Value) *fieldsType {
|
|
||||||
resultType := result.Type()
|
|
||||||
|
|
||||||
if fields, ok := fieldsMap.Load(resultType); ok {
|
|
||||||
return fields.(*fieldsType)
|
|
||||||
}
|
|
||||||
numFields := resultType.NumField()
|
|
||||||
namedFields := make(map[string]int, numFields)
|
|
||||||
var anonymous []int
|
|
||||||
for i := 0; i < numFields; i++ {
|
|
||||||
field := resultType.Field(i)
|
|
||||||
|
|
||||||
fieldName := field.Name
|
|
||||||
if tag := field.Tag.Get("maxminddb"); tag != "" {
|
|
||||||
if tag == "-" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fieldName = tag
|
|
||||||
}
|
|
||||||
if field.Anonymous {
|
|
||||||
anonymous = append(anonymous, i)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
namedFields[fieldName] = i
|
|
||||||
}
|
|
||||||
fields := &fieldsType{namedFields, anonymous}
|
|
||||||
fieldsMap.Store(resultType, fields)
|
|
||||||
|
|
||||||
return fields
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeUint(size uint, offset uint) (uint64, uint) {
|
|
||||||
newOffset := offset + size
|
|
||||||
bytes := d.buffer[offset:newOffset]
|
|
||||||
|
|
||||||
var val uint64
|
|
||||||
for _, b := range bytes {
|
|
||||||
val = (val << 8) | uint64(b)
|
|
||||||
}
|
|
||||||
return val, newOffset
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) decodeUint128(size uint, offset uint) (*big.Int, uint) {
|
|
||||||
newOffset := offset + size
|
|
||||||
val := new(big.Int)
|
|
||||||
val.SetBytes(d.buffer[offset:newOffset])
|
|
||||||
|
|
||||||
return val, newOffset
|
|
||||||
}
|
|
||||||
|
|
||||||
func uintFromBytes(prefix uint, uintBytes []byte) uint {
|
|
||||||
val := prefix
|
|
||||||
for _, b := range uintBytes {
|
|
||||||
val = (val << 8) | uint(b)
|
|
||||||
}
|
|
||||||
return val
|
|
||||||
}
|
|
||||||
|
|
||||||
// decodeKey decodes a map key into []byte slice. We use a []byte so that we
|
|
||||||
// can take advantage of https://github.com/golang/go/issues/3512 to avoid
|
|
||||||
// copying the bytes when decoding a struct. Previously, we achieved this by
|
|
||||||
// using unsafe.
|
|
||||||
func (d *decoder) decodeKey(offset uint) ([]byte, uint, error) {
|
|
||||||
typeNum, size, dataOffset, err := d.decodeCtrlData(offset)
|
|
||||||
if err != nil {
|
|
||||||
return nil, 0, err
|
|
||||||
}
|
|
||||||
if typeNum == _Pointer {
|
|
||||||
pointer, ptrOffset, err := d.decodePointer(size, dataOffset)
|
|
||||||
if err != nil {
|
|
||||||
return nil, 0, err
|
|
||||||
}
|
|
||||||
key, _, err := d.decodeKey(pointer)
|
|
||||||
return key, ptrOffset, err
|
|
||||||
}
|
|
||||||
if typeNum != _String {
|
|
||||||
return nil, 0, newInvalidDatabaseError("unexpected type when decoding string: %v", typeNum)
|
|
||||||
}
|
|
||||||
newOffset := dataOffset + size
|
|
||||||
if newOffset > uint(len(d.buffer)) {
|
|
||||||
return nil, 0, newOffsetError()
|
|
||||||
}
|
|
||||||
return d.buffer[dataOffset:newOffset], newOffset, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// This function is used to skip ahead to the next value without decoding
|
|
||||||
// the one at the offset passed in. The size bits have different meanings for
|
|
||||||
// different data types
|
|
||||||
func (d *decoder) nextValueOffset(offset uint, numberToSkip uint) (uint, error) {
|
|
||||||
if numberToSkip == 0 {
|
|
||||||
return offset, nil
|
|
||||||
}
|
|
||||||
typeNum, size, offset, err := d.decodeCtrlData(offset)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
switch typeNum {
|
|
||||||
case _Pointer:
|
|
||||||
_, offset, err = d.decodePointer(size, offset)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
case _Map:
|
|
||||||
numberToSkip += 2 * size
|
|
||||||
case _Slice:
|
|
||||||
numberToSkip += size
|
|
||||||
case _Bool:
|
|
||||||
default:
|
|
||||||
offset += size
|
|
||||||
}
|
|
||||||
return d.nextValueOffset(offset, numberToSkip-1)
|
|
||||||
}
|
|
42
vendor/github.com/oschwald/maxminddb-golang/errors.go
generated
vendored
42
vendor/github.com/oschwald/maxminddb-golang/errors.go
generated
vendored
@@ -1,42 +0,0 @@
|
|||||||
package maxminddb
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"reflect"
|
|
||||||
)
|
|
||||||
|
|
||||||
// InvalidDatabaseError is returned when the database contains invalid data
|
|
||||||
// and cannot be parsed.
|
|
||||||
type InvalidDatabaseError struct {
|
|
||||||
message string
|
|
||||||
}
|
|
||||||
|
|
||||||
func newOffsetError() InvalidDatabaseError {
|
|
||||||
return InvalidDatabaseError{"unexpected end of database"}
|
|
||||||
}
|
|
||||||
|
|
||||||
func newInvalidDatabaseError(format string, args ...interface{}) InvalidDatabaseError {
|
|
||||||
return InvalidDatabaseError{fmt.Sprintf(format, args...)}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e InvalidDatabaseError) Error() string {
|
|
||||||
return e.message
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnmarshalTypeError is returned when the value in the database cannot be
|
|
||||||
// assigned to the specified data type.
|
|
||||||
type UnmarshalTypeError struct {
|
|
||||||
Value string // stringified copy of the database value that caused the error
|
|
||||||
Type reflect.Type // type of the value that could not be assign to
|
|
||||||
}
|
|
||||||
|
|
||||||
func newUnmarshalTypeError(value interface{}, rType reflect.Type) UnmarshalTypeError {
|
|
||||||
return UnmarshalTypeError{
|
|
||||||
Value: fmt.Sprintf("%v", value),
|
|
||||||
Type: rType,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e UnmarshalTypeError) Error() string {
|
|
||||||
return fmt.Sprintf("maxminddb: cannot unmarshal %s into type %s", e.Value, e.Type.String())
|
|
||||||
}
|
|
8
vendor/github.com/oschwald/maxminddb-golang/go.mod
generated
vendored
8
vendor/github.com/oschwald/maxminddb-golang/go.mod
generated
vendored
@@ -1,8 +0,0 @@
|
|||||||
module github.com/oschwald/maxminddb-golang
|
|
||||||
|
|
||||||
go 1.9
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/stretchr/testify v1.6.1
|
|
||||||
golang.org/x/sys v0.0.0-20191224085550-c709ea063b76
|
|
||||||
)
|
|
22
vendor/github.com/oschwald/maxminddb-golang/go.sum
generated
vendored
22
vendor/github.com/oschwald/maxminddb-golang/go.sum
generated
vendored
@@ -1,22 +0,0 @@
|
|||||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
|
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
|
||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
|
||||||
github.com/stretchr/testify v1.5.0 h1:DMOzIV76tmoDNE9pX6RSN0aDtCYeCg5VueieJaAo1uw=
|
|
||||||
github.com/stretchr/testify v1.5.0/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
|
||||||
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
|
|
||||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
|
||||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
|
||||||
golang.org/x/sys v0.0.0-20191224085550-c709ea063b76 h1:Dho5nD6R3PcW2SH1or8vS0dszDaXRxIw55lBX7XiE5g=
|
|
||||||
golang.org/x/sys v0.0.0-20191224085550-c709ea063b76/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
|
15
vendor/github.com/oschwald/maxminddb-golang/mmap_unix.go
generated
vendored
15
vendor/github.com/oschwald/maxminddb-golang/mmap_unix.go
generated
vendored
@@ -1,15 +0,0 @@
|
|||||||
// +build !windows,!appengine,!plan9
|
|
||||||
|
|
||||||
package maxminddb
|
|
||||||
|
|
||||||
import (
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
func mmap(fd int, length int) (data []byte, err error) {
|
|
||||||
return unix.Mmap(fd, 0, length, unix.PROT_READ, unix.MAP_SHARED)
|
|
||||||
}
|
|
||||||
|
|
||||||
func munmap(b []byte) (err error) {
|
|
||||||
return unix.Munmap(b)
|
|
||||||
}
|
|
85
vendor/github.com/oschwald/maxminddb-golang/mmap_windows.go
generated
vendored
85
vendor/github.com/oschwald/maxminddb-golang/mmap_windows.go
generated
vendored
@@ -1,85 +0,0 @@
|
|||||||
// +build windows,!appengine
|
|
||||||
|
|
||||||
package maxminddb
|
|
||||||
|
|
||||||
// Windows support largely borrowed from mmap-go.
|
|
||||||
//
|
|
||||||
// Copyright 2011 Evan Shaw. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"os"
|
|
||||||
"reflect"
|
|
||||||
"sync"
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"golang.org/x/sys/windows"
|
|
||||||
)
|
|
||||||
|
|
||||||
type memoryMap []byte
|
|
||||||
|
|
||||||
// Windows
|
|
||||||
var handleLock sync.Mutex
|
|
||||||
var handleMap = map[uintptr]windows.Handle{}
|
|
||||||
|
|
||||||
func mmap(fd int, length int) (data []byte, err error) {
|
|
||||||
h, errno := windows.CreateFileMapping(windows.Handle(fd), nil,
|
|
||||||
uint32(windows.PAGE_READONLY), 0, uint32(length), nil)
|
|
||||||
if h == 0 {
|
|
||||||
return nil, os.NewSyscallError("CreateFileMapping", errno)
|
|
||||||
}
|
|
||||||
|
|
||||||
addr, errno := windows.MapViewOfFile(h, uint32(windows.FILE_MAP_READ), 0,
|
|
||||||
0, uintptr(length))
|
|
||||||
if addr == 0 {
|
|
||||||
return nil, os.NewSyscallError("MapViewOfFile", errno)
|
|
||||||
}
|
|
||||||
handleLock.Lock()
|
|
||||||
handleMap[addr] = h
|
|
||||||
handleLock.Unlock()
|
|
||||||
|
|
||||||
m := memoryMap{}
|
|
||||||
dh := m.header()
|
|
||||||
dh.Data = addr
|
|
||||||
dh.Len = length
|
|
||||||
dh.Cap = dh.Len
|
|
||||||
|
|
||||||
return m, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *memoryMap) header() *reflect.SliceHeader {
|
|
||||||
return (*reflect.SliceHeader)(unsafe.Pointer(m))
|
|
||||||
}
|
|
||||||
|
|
||||||
func flush(addr, len uintptr) error {
|
|
||||||
errno := windows.FlushViewOfFile(addr, len)
|
|
||||||
return os.NewSyscallError("FlushViewOfFile", errno)
|
|
||||||
}
|
|
||||||
|
|
||||||
func munmap(b []byte) (err error) {
|
|
||||||
m := memoryMap(b)
|
|
||||||
dh := m.header()
|
|
||||||
|
|
||||||
addr := dh.Data
|
|
||||||
length := uintptr(dh.Len)
|
|
||||||
|
|
||||||
flush(addr, length)
|
|
||||||
err = windows.UnmapViewOfFile(addr)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
handleLock.Lock()
|
|
||||||
defer handleLock.Unlock()
|
|
||||||
handle, ok := handleMap[addr]
|
|
||||||
if !ok {
|
|
||||||
// should be impossible; we would've errored above
|
|
||||||
return errors.New("unknown base address")
|
|
||||||
}
|
|
||||||
delete(handleMap, addr)
|
|
||||||
|
|
||||||
e := windows.CloseHandle(windows.Handle(handle))
|
|
||||||
return os.NewSyscallError("CloseHandle", e)
|
|
||||||
}
|
|
42
vendor/github.com/oschwald/maxminddb-golang/node.go
generated
vendored
42
vendor/github.com/oschwald/maxminddb-golang/node.go
generated
vendored
@@ -1,42 +0,0 @@
|
|||||||
package maxminddb
|
|
||||||
|
|
||||||
type nodeReader interface {
|
|
||||||
readLeft(uint) uint
|
|
||||||
readRight(uint) uint
|
|
||||||
}
|
|
||||||
|
|
||||||
type nodeReader24 struct {
|
|
||||||
buffer []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n nodeReader24) readLeft(nodeNumber uint) uint {
|
|
||||||
return (uint(n.buffer[nodeNumber]) << 16) | (uint(n.buffer[nodeNumber+1]) << 8) | uint(n.buffer[nodeNumber+2])
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n nodeReader24) readRight(nodeNumber uint) uint {
|
|
||||||
return (uint(n.buffer[nodeNumber+3]) << 16) | (uint(n.buffer[nodeNumber+4]) << 8) | uint(n.buffer[nodeNumber+5])
|
|
||||||
}
|
|
||||||
|
|
||||||
type nodeReader28 struct {
|
|
||||||
buffer []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n nodeReader28) readLeft(nodeNumber uint) uint {
|
|
||||||
return ((uint(n.buffer[nodeNumber+3]) & 0xF0) << 20) | (uint(n.buffer[nodeNumber]) << 16) | (uint(n.buffer[nodeNumber+1]) << 8) | uint(n.buffer[nodeNumber+2])
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n nodeReader28) readRight(nodeNumber uint) uint {
|
|
||||||
return ((uint(n.buffer[nodeNumber+3]) & 0x0F) << 24) | (uint(n.buffer[nodeNumber+4]) << 16) | (uint(n.buffer[nodeNumber+5]) << 8) | uint(n.buffer[nodeNumber+6])
|
|
||||||
}
|
|
||||||
|
|
||||||
type nodeReader32 struct {
|
|
||||||
buffer []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n nodeReader32) readLeft(nodeNumber uint) uint {
|
|
||||||
return (uint(n.buffer[nodeNumber]) << 24) | (uint(n.buffer[nodeNumber+1]) << 16) | (uint(n.buffer[nodeNumber+2]) << 8) | uint(n.buffer[nodeNumber+3])
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n nodeReader32) readRight(nodeNumber uint) uint {
|
|
||||||
return (uint(n.buffer[nodeNumber+4]) << 24) | (uint(n.buffer[nodeNumber+5]) << 16) | (uint(n.buffer[nodeNumber+6]) << 8) | uint(n.buffer[nodeNumber+7])
|
|
||||||
}
|
|
298
vendor/github.com/oschwald/maxminddb-golang/reader.go
generated
vendored
298
vendor/github.com/oschwald/maxminddb-golang/reader.go
generated
vendored
@@ -1,298 +0,0 @@
|
|||||||
package maxminddb
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
"reflect"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
// NotFound is returned by LookupOffset when a matched root record offset
|
|
||||||
// cannot be found.
|
|
||||||
NotFound = ^uintptr(0)
|
|
||||||
|
|
||||||
dataSectionSeparatorSize = 16
|
|
||||||
)
|
|
||||||
|
|
||||||
var metadataStartMarker = []byte("\xAB\xCD\xEFMaxMind.com")
|
|
||||||
|
|
||||||
// Reader holds the data corresponding to the MaxMind DB file. Its only public
|
|
||||||
// field is Metadata, which contains the metadata from the MaxMind DB file.
|
|
||||||
//
|
|
||||||
// All of the methods on Reader are thread-safe. The struct may be safely
|
|
||||||
// shared across goroutines.
|
|
||||||
type Reader struct {
|
|
||||||
hasMappedFile bool
|
|
||||||
buffer []byte
|
|
||||||
nodeReader nodeReader
|
|
||||||
decoder decoder
|
|
||||||
Metadata Metadata
|
|
||||||
ipv4Start uint
|
|
||||||
ipv4StartBitDepth int
|
|
||||||
nodeOffsetMult uint
|
|
||||||
}
|
|
||||||
|
|
||||||
// Metadata holds the metadata decoded from the MaxMind DB file. In particular
|
|
||||||
// it has the format version, the build time as Unix epoch time, the database
|
|
||||||
// type and description, the IP version supported, and a slice of the natural
|
|
||||||
// languages included.
|
|
||||||
type Metadata struct {
|
|
||||||
BinaryFormatMajorVersion uint `maxminddb:"binary_format_major_version"`
|
|
||||||
BinaryFormatMinorVersion uint `maxminddb:"binary_format_minor_version"`
|
|
||||||
BuildEpoch uint `maxminddb:"build_epoch"`
|
|
||||||
DatabaseType string `maxminddb:"database_type"`
|
|
||||||
Description map[string]string `maxminddb:"description"`
|
|
||||||
IPVersion uint `maxminddb:"ip_version"`
|
|
||||||
Languages []string `maxminddb:"languages"`
|
|
||||||
NodeCount uint `maxminddb:"node_count"`
|
|
||||||
RecordSize uint `maxminddb:"record_size"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// FromBytes takes a byte slice corresponding to a MaxMind DB file and returns
|
|
||||||
// a Reader structure or an error.
|
|
||||||
func FromBytes(buffer []byte) (*Reader, error) {
|
|
||||||
metadataStart := bytes.LastIndex(buffer, metadataStartMarker)
|
|
||||||
|
|
||||||
if metadataStart == -1 {
|
|
||||||
return nil, newInvalidDatabaseError("error opening database: invalid MaxMind DB file")
|
|
||||||
}
|
|
||||||
|
|
||||||
metadataStart += len(metadataStartMarker)
|
|
||||||
metadataDecoder := decoder{buffer[metadataStart:]}
|
|
||||||
|
|
||||||
var metadata Metadata
|
|
||||||
|
|
||||||
rvMetdata := reflect.ValueOf(&metadata)
|
|
||||||
_, err := metadataDecoder.decode(0, rvMetdata, 0)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
searchTreeSize := metadata.NodeCount * metadata.RecordSize / 4
|
|
||||||
dataSectionStart := searchTreeSize + dataSectionSeparatorSize
|
|
||||||
dataSectionEnd := uint(metadataStart - len(metadataStartMarker))
|
|
||||||
if dataSectionStart > dataSectionEnd {
|
|
||||||
return nil, newInvalidDatabaseError("the MaxMind DB contains invalid metadata")
|
|
||||||
}
|
|
||||||
d := decoder{
|
|
||||||
buffer[searchTreeSize+dataSectionSeparatorSize : metadataStart-len(metadataStartMarker)],
|
|
||||||
}
|
|
||||||
|
|
||||||
nodeBuffer := buffer[:searchTreeSize]
|
|
||||||
var nodeReader nodeReader
|
|
||||||
switch metadata.RecordSize {
|
|
||||||
case 24:
|
|
||||||
nodeReader = nodeReader24{buffer: nodeBuffer}
|
|
||||||
case 28:
|
|
||||||
nodeReader = nodeReader28{buffer: nodeBuffer}
|
|
||||||
case 32:
|
|
||||||
nodeReader = nodeReader32{buffer: nodeBuffer}
|
|
||||||
default:
|
|
||||||
return nil, newInvalidDatabaseError("unknown record size: %d", metadata.RecordSize)
|
|
||||||
}
|
|
||||||
|
|
||||||
reader := &Reader{
|
|
||||||
buffer: buffer,
|
|
||||||
nodeReader: nodeReader,
|
|
||||||
decoder: d,
|
|
||||||
Metadata: metadata,
|
|
||||||
ipv4Start: 0,
|
|
||||||
nodeOffsetMult: metadata.RecordSize / 4,
|
|
||||||
}
|
|
||||||
|
|
||||||
reader.setIPv4Start()
|
|
||||||
|
|
||||||
return reader, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Reader) setIPv4Start() {
|
|
||||||
if r.Metadata.IPVersion != 6 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
nodeCount := r.Metadata.NodeCount
|
|
||||||
|
|
||||||
node := uint(0)
|
|
||||||
i := 0
|
|
||||||
for ; i < 96 && node < nodeCount; i++ {
|
|
||||||
node = r.nodeReader.readLeft(node * r.nodeOffsetMult)
|
|
||||||
}
|
|
||||||
r.ipv4Start = node
|
|
||||||
r.ipv4StartBitDepth = i
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lookup retrieves the database record for ip and stores it in the value
|
|
||||||
// pointed to by result. If result is nil or not a pointer, an error is
|
|
||||||
// returned. If the data in the database record cannot be stored in result
|
|
||||||
// because of type differences, an UnmarshalTypeError is returned. If the
|
|
||||||
// database is invalid or otherwise cannot be read, an InvalidDatabaseError
|
|
||||||
// is returned.
|
|
||||||
func (r *Reader) Lookup(ip net.IP, result interface{}) error {
|
|
||||||
if r.buffer == nil {
|
|
||||||
return errors.New("cannot call Lookup on a closed database")
|
|
||||||
}
|
|
||||||
pointer, _, _, err := r.lookupPointer(ip)
|
|
||||||
if pointer == 0 || err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return r.retrieveData(pointer, result)
|
|
||||||
}
|
|
||||||
|
|
||||||
// LookupNetwork retrieves the database record for ip and stores it in the
|
|
||||||
// value pointed to by result. The network returned is the network associated
|
|
||||||
// with the data record in the database. The ok return value indicates whether
|
|
||||||
// the database contained a record for the ip.
|
|
||||||
//
|
|
||||||
// If result is nil or not a pointer, an error is returned. If the data in the
|
|
||||||
// database record cannot be stored in result because of type differences, an
|
|
||||||
// UnmarshalTypeError is returned. If the database is invalid or otherwise
|
|
||||||
// cannot be read, an InvalidDatabaseError is returned.
|
|
||||||
func (r *Reader) LookupNetwork(ip net.IP, result interface{}) (network *net.IPNet, ok bool, err error) {
|
|
||||||
if r.buffer == nil {
|
|
||||||
return nil, false, errors.New("cannot call Lookup on a closed database")
|
|
||||||
}
|
|
||||||
pointer, prefixLength, ip, err := r.lookupPointer(ip)
|
|
||||||
|
|
||||||
network = r.cidr(ip, prefixLength)
|
|
||||||
if pointer == 0 || err != nil {
|
|
||||||
return network, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return network, true, r.retrieveData(pointer, result)
|
|
||||||
}
|
|
||||||
|
|
||||||
// LookupOffset maps an argument net.IP to a corresponding record offset in the
|
|
||||||
// database. NotFound is returned if no such record is found, and a record may
|
|
||||||
// otherwise be extracted by passing the returned offset to Decode. LookupOffset
|
|
||||||
// is an advanced API, which exists to provide clients with a means to cache
|
|
||||||
// previously-decoded records.
|
|
||||||
func (r *Reader) LookupOffset(ip net.IP) (uintptr, error) {
|
|
||||||
if r.buffer == nil {
|
|
||||||
return 0, errors.New("cannot call LookupOffset on a closed database")
|
|
||||||
}
|
|
||||||
pointer, _, _, err := r.lookupPointer(ip)
|
|
||||||
if pointer == 0 || err != nil {
|
|
||||||
return NotFound, err
|
|
||||||
}
|
|
||||||
return r.resolveDataPointer(pointer)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Reader) cidr(ip net.IP, prefixLength int) *net.IPNet {
|
|
||||||
// This is necessary as the node that the IPv4 start is at may
|
|
||||||
// be at a bit depth that is less that 96, i.e., ipv4Start points
|
|
||||||
// to a leaf node. For instance, if a record was inserted at ::/8,
|
|
||||||
// the ipv4Start would point directly at the leaf node for the
|
|
||||||
// record and would have a bit depth of 8. This would not happen
|
|
||||||
// with databases currently distributed by MaxMind as all of them
|
|
||||||
// have an IPv4 subtree that is greater than a single node.
|
|
||||||
if r.Metadata.IPVersion == 6 &&
|
|
||||||
len(ip) == net.IPv4len &&
|
|
||||||
r.ipv4StartBitDepth != 96 {
|
|
||||||
return &net.IPNet{IP: net.ParseIP("::"), Mask: net.CIDRMask(r.ipv4StartBitDepth, 128)}
|
|
||||||
}
|
|
||||||
|
|
||||||
mask := net.CIDRMask(prefixLength, len(ip)*8)
|
|
||||||
return &net.IPNet{IP: ip.Mask(mask), Mask: mask}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decode the record at |offset| into |result|. The result value pointed to
|
|
||||||
// must be a data value that corresponds to a record in the database. This may
|
|
||||||
// include a struct representation of the data, a map capable of holding the
|
|
||||||
// data or an empty interface{} value.
|
|
||||||
//
|
|
||||||
// If result is a pointer to a struct, the struct need not include a field
|
|
||||||
// for every value that may be in the database. If a field is not present in
|
|
||||||
// the structure, the decoder will not decode that field, reducing the time
|
|
||||||
// required to decode the record.
|
|
||||||
//
|
|
||||||
// As a special case, a struct field of type uintptr will be used to capture
|
|
||||||
// the offset of the value. Decode may later be used to extract the stored
|
|
||||||
// value from the offset. MaxMind DBs are highly normalized: for example in
|
|
||||||
// the City database, all records of the same country will reference a
|
|
||||||
// single representative record for that country. This uintptr behavior allows
|
|
||||||
// clients to leverage this normalization in their own sub-record caching.
|
|
||||||
func (r *Reader) Decode(offset uintptr, result interface{}) error {
|
|
||||||
if r.buffer == nil {
|
|
||||||
return errors.New("cannot call Decode on a closed database")
|
|
||||||
}
|
|
||||||
return r.decode(offset, result)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Reader) decode(offset uintptr, result interface{}) error {
|
|
||||||
rv := reflect.ValueOf(result)
|
|
||||||
if rv.Kind() != reflect.Ptr || rv.IsNil() {
|
|
||||||
return errors.New("result param must be a pointer")
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := r.decoder.decode(uint(offset), rv, 0)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Reader) lookupPointer(ip net.IP) (uint, int, net.IP, error) {
|
|
||||||
if ip == nil {
|
|
||||||
return 0, 0, ip, errors.New("IP passed to Lookup cannot be nil")
|
|
||||||
}
|
|
||||||
|
|
||||||
ipV4Address := ip.To4()
|
|
||||||
if ipV4Address != nil {
|
|
||||||
ip = ipV4Address
|
|
||||||
}
|
|
||||||
if len(ip) == 16 && r.Metadata.IPVersion == 4 {
|
|
||||||
return 0, 0, ip, fmt.Errorf("error looking up '%s': you attempted to look up an IPv6 address in an IPv4-only database", ip.String())
|
|
||||||
}
|
|
||||||
|
|
||||||
bitCount := uint(len(ip) * 8)
|
|
||||||
|
|
||||||
var node uint
|
|
||||||
if bitCount == 32 {
|
|
||||||
node = r.ipv4Start
|
|
||||||
}
|
|
||||||
node, prefixLength := r.traverseTree(ip, node, bitCount)
|
|
||||||
|
|
||||||
nodeCount := r.Metadata.NodeCount
|
|
||||||
if node == nodeCount {
|
|
||||||
// Record is empty
|
|
||||||
return 0, prefixLength, ip, nil
|
|
||||||
} else if node > nodeCount {
|
|
||||||
return node, prefixLength, ip, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0, prefixLength, ip, newInvalidDatabaseError("invalid node in search tree")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Reader) traverseTree(ip net.IP, node uint, bitCount uint) (uint, int) {
|
|
||||||
nodeCount := r.Metadata.NodeCount
|
|
||||||
|
|
||||||
i := uint(0)
|
|
||||||
for ; i < bitCount && node < nodeCount; i++ {
|
|
||||||
bit := uint(1) & (uint(ip[i>>3]) >> (7 - (i % 8)))
|
|
||||||
|
|
||||||
offset := node * r.nodeOffsetMult
|
|
||||||
if bit == 0 {
|
|
||||||
node = r.nodeReader.readLeft(offset)
|
|
||||||
} else {
|
|
||||||
node = r.nodeReader.readRight(offset)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return node, int(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Reader) retrieveData(pointer uint, result interface{}) error {
|
|
||||||
offset, err := r.resolveDataPointer(pointer)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return r.decode(offset, result)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *Reader) resolveDataPointer(pointer uint) (uintptr, error) {
|
|
||||||
var resolved = uintptr(pointer - r.Metadata.NodeCount - dataSectionSeparatorSize)
|
|
||||||
|
|
||||||
if resolved >= uintptr(len(r.buffer)) {
|
|
||||||
return 0, newInvalidDatabaseError("the MaxMind DB file's search tree is corrupt")
|
|
||||||
}
|
|
||||||
return resolved, nil
|
|
||||||
}
|
|
28
vendor/github.com/oschwald/maxminddb-golang/reader_appengine.go
generated
vendored
28
vendor/github.com/oschwald/maxminddb-golang/reader_appengine.go
generated
vendored
@@ -1,28 +0,0 @@
|
|||||||
// +build appengine plan9
|
|
||||||
|
|
||||||
package maxminddb
|
|
||||||
|
|
||||||
import "io/ioutil"
|
|
||||||
|
|
||||||
// Open takes a string path to a MaxMind DB file and returns a Reader
|
|
||||||
// structure or an error. The database file is opened using a memory map,
|
|
||||||
// except on Google App Engine where mmap is not supported; there the database
|
|
||||||
// is loaded into memory. Use the Close method on the Reader object to return
|
|
||||||
// the resources to the system.
|
|
||||||
func Open(file string) (*Reader, error) {
|
|
||||||
bytes, err := ioutil.ReadFile(file)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return FromBytes(bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close unmaps the database file from virtual memory and returns the
|
|
||||||
// resources to the system. If called on a Reader opened using FromBytes
|
|
||||||
// or Open on Google App Engine, this method sets the underlying buffer
|
|
||||||
// to nil, returning the resources to the system.
|
|
||||||
func (r *Reader) Close() error {
|
|
||||||
r.buffer = nil
|
|
||||||
return nil
|
|
||||||
}
|
|
63
vendor/github.com/oschwald/maxminddb-golang/reader_other.go
generated
vendored
63
vendor/github.com/oschwald/maxminddb-golang/reader_other.go
generated
vendored
@@ -1,63 +0,0 @@
|
|||||||
// +build !appengine,!plan9
|
|
||||||
|
|
||||||
package maxminddb
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"runtime"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Open takes a string path to a MaxMind DB file and returns a Reader
|
|
||||||
// structure or an error. The database file is opened using a memory map,
|
|
||||||
// except on Google App Engine where mmap is not supported; there the database
|
|
||||||
// is loaded into memory. Use the Close method on the Reader object to return
|
|
||||||
// the resources to the system.
|
|
||||||
func Open(file string) (*Reader, error) {
|
|
||||||
mapFile, err := os.Open(file)
|
|
||||||
if err != nil {
|
|
||||||
_ = mapFile.Close()
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
stats, err := mapFile.Stat()
|
|
||||||
if err != nil {
|
|
||||||
_ = mapFile.Close()
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
fileSize := int(stats.Size())
|
|
||||||
mmap, err := mmap(int(mapFile.Fd()), fileSize)
|
|
||||||
if err != nil {
|
|
||||||
_ = mapFile.Close()
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := mapFile.Close(); err != nil {
|
|
||||||
_ = munmap(mmap)
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
reader, err := FromBytes(mmap)
|
|
||||||
if err != nil {
|
|
||||||
_ = munmap(mmap)
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
reader.hasMappedFile = true
|
|
||||||
runtime.SetFinalizer(reader, (*Reader).Close)
|
|
||||||
return reader, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close unmaps the database file from virtual memory and returns the
|
|
||||||
// resources to the system. If called on a Reader opened using FromBytes
|
|
||||||
// or Open on Google App Engine, this method does nothing.
|
|
||||||
func (r *Reader) Close() error {
|
|
||||||
var err error
|
|
||||||
if r.hasMappedFile {
|
|
||||||
runtime.SetFinalizer(r, nil)
|
|
||||||
r.hasMappedFile = false
|
|
||||||
err = munmap(r.buffer)
|
|
||||||
}
|
|
||||||
r.buffer = nil
|
|
||||||
return err
|
|
||||||
}
|
|
129
vendor/github.com/oschwald/maxminddb-golang/traverse.go
generated
vendored
129
vendor/github.com/oschwald/maxminddb-golang/traverse.go
generated
vendored
@@ -1,129 +0,0 @@
|
|||||||
package maxminddb
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Internal structure used to keep track of nodes we still need to visit.
|
|
||||||
type netNode struct {
|
|
||||||
ip net.IP
|
|
||||||
bit uint
|
|
||||||
pointer uint
|
|
||||||
}
|
|
||||||
|
|
||||||
// Networks represents a set of subnets that we are iterating over.
|
|
||||||
type Networks struct {
|
|
||||||
reader *Reader
|
|
||||||
nodes []netNode // Nodes we still have to visit.
|
|
||||||
lastNode netNode
|
|
||||||
err error
|
|
||||||
}
|
|
||||||
|
|
||||||
var allIPv4 = &net.IPNet{IP: make(net.IP, 4), Mask: net.CIDRMask(0, 32)}
|
|
||||||
var allIPv6 = &net.IPNet{IP: make(net.IP, 16), Mask: net.CIDRMask(0, 128)}
|
|
||||||
|
|
||||||
// Networks returns an iterator that can be used to traverse all networks in
|
|
||||||
// the database.
|
|
||||||
//
|
|
||||||
// Please note that a MaxMind DB may map IPv4 networks into several locations
|
|
||||||
// in an IPv6 database. This iterator will iterate over all of these
|
|
||||||
// locations separately.
|
|
||||||
func (r *Reader) Networks() *Networks {
|
|
||||||
var networks *Networks
|
|
||||||
if r.Metadata.IPVersion == 6 {
|
|
||||||
networks = r.NetworksWithin(allIPv6)
|
|
||||||
} else {
|
|
||||||
networks = r.NetworksWithin(allIPv4)
|
|
||||||
}
|
|
||||||
|
|
||||||
return networks
|
|
||||||
}
|
|
||||||
|
|
||||||
// NetworksWithin returns an iterator that can be used to traverse all networks
|
|
||||||
// in the database which are contained in a given network.
|
|
||||||
//
|
|
||||||
// Please note that a MaxMind DB may map IPv4 networks into several locations
|
|
||||||
// in an IPv6 database. This iterator will iterate over all of these locations
|
|
||||||
// separately.
|
|
||||||
//
|
|
||||||
// If the provided network is contained within a network in the database, the
|
|
||||||
// iterator will iterate over exactly one network, the containing network.
|
|
||||||
func (r *Reader) NetworksWithin(network *net.IPNet) *Networks {
|
|
||||||
ip := network.IP
|
|
||||||
prefixLength, _ := network.Mask.Size()
|
|
||||||
|
|
||||||
if r.Metadata.IPVersion == 6 && len(ip) == net.IPv4len {
|
|
||||||
ip = net.IP.To16(ip)
|
|
||||||
prefixLength += 96
|
|
||||||
}
|
|
||||||
|
|
||||||
pointer, bit := r.traverseTree(ip, 0, uint(prefixLength))
|
|
||||||
return &Networks{
|
|
||||||
reader: r,
|
|
||||||
nodes: []netNode{
|
|
||||||
{
|
|
||||||
ip: ip,
|
|
||||||
bit: uint(bit),
|
|
||||||
pointer: pointer,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Next prepares the next network for reading with the Network method. It
|
|
||||||
// returns true if there is another network to be processed and false if there
|
|
||||||
// are no more networks or if there is an error.
|
|
||||||
func (n *Networks) Next() bool {
|
|
||||||
for len(n.nodes) > 0 {
|
|
||||||
node := n.nodes[len(n.nodes)-1]
|
|
||||||
n.nodes = n.nodes[:len(n.nodes)-1]
|
|
||||||
|
|
||||||
for node.pointer != n.reader.Metadata.NodeCount {
|
|
||||||
if node.pointer > n.reader.Metadata.NodeCount {
|
|
||||||
n.lastNode = node
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
ipRight := make(net.IP, len(node.ip))
|
|
||||||
copy(ipRight, node.ip)
|
|
||||||
if len(ipRight) <= int(node.bit>>3) {
|
|
||||||
n.err = newInvalidDatabaseError(
|
|
||||||
"invalid search tree at %v/%v", ipRight, node.bit)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
ipRight[node.bit>>3] |= 1 << (7 - (node.bit % 8))
|
|
||||||
|
|
||||||
offset := node.pointer * n.reader.nodeOffsetMult
|
|
||||||
rightPointer := n.reader.nodeReader.readRight(offset)
|
|
||||||
|
|
||||||
node.bit++
|
|
||||||
n.nodes = append(n.nodes, netNode{
|
|
||||||
pointer: rightPointer,
|
|
||||||
ip: ipRight,
|
|
||||||
bit: node.bit,
|
|
||||||
})
|
|
||||||
|
|
||||||
node.pointer = n.reader.nodeReader.readLeft(offset)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Network returns the current network or an error if there is a problem
|
|
||||||
// decoding the data for the network. It takes a pointer to a result value to
|
|
||||||
// decode the network's data into.
|
|
||||||
func (n *Networks) Network(result interface{}) (*net.IPNet, error) {
|
|
||||||
if err := n.reader.retrieveData(n.lastNode.pointer, result); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &net.IPNet{
|
|
||||||
IP: n.lastNode.ip,
|
|
||||||
Mask: net.CIDRMask(int(n.lastNode.bit), len(n.lastNode.ip)*8),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Err returns an error, if any, that was encountered during iteration.
|
|
||||||
func (n *Networks) Err() error {
|
|
||||||
return n.err
|
|
||||||
}
|
|
190
vendor/github.com/oschwald/maxminddb-golang/verifier.go
generated
vendored
190
vendor/github.com/oschwald/maxminddb-golang/verifier.go
generated
vendored
@@ -1,190 +0,0 @@
|
|||||||
package maxminddb
|
|
||||||
|
|
||||||
import (
|
|
||||||
"reflect"
|
|
||||||
"runtime"
|
|
||||||
)
|
|
||||||
|
|
||||||
type verifier struct {
|
|
||||||
reader *Reader
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verify checks that the database is valid. It validates the search tree,
|
|
||||||
// the data section, and the metadata section. This verifier is stricter than
|
|
||||||
// the specification and may return errors on databases that are readable.
|
|
||||||
func (r *Reader) Verify() error {
|
|
||||||
v := verifier{r}
|
|
||||||
if err := v.verifyMetadata(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err := v.verifyDatabase()
|
|
||||||
runtime.KeepAlive(v.reader)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *verifier) verifyMetadata() error {
|
|
||||||
metadata := v.reader.Metadata
|
|
||||||
|
|
||||||
if metadata.BinaryFormatMajorVersion != 2 {
|
|
||||||
return testError(
|
|
||||||
"binary_format_major_version",
|
|
||||||
2,
|
|
||||||
metadata.BinaryFormatMajorVersion,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if metadata.BinaryFormatMinorVersion != 0 {
|
|
||||||
return testError(
|
|
||||||
"binary_format_minor_version",
|
|
||||||
0,
|
|
||||||
metadata.BinaryFormatMinorVersion,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if metadata.DatabaseType == "" {
|
|
||||||
return testError(
|
|
||||||
"database_type",
|
|
||||||
"non-empty string",
|
|
||||||
metadata.DatabaseType,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(metadata.Description) == 0 {
|
|
||||||
return testError(
|
|
||||||
"description",
|
|
||||||
"non-empty slice",
|
|
||||||
metadata.Description,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if metadata.IPVersion != 4 && metadata.IPVersion != 6 {
|
|
||||||
return testError(
|
|
||||||
"ip_version",
|
|
||||||
"4 or 6",
|
|
||||||
metadata.IPVersion,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if metadata.RecordSize != 24 &&
|
|
||||||
metadata.RecordSize != 28 &&
|
|
||||||
metadata.RecordSize != 32 {
|
|
||||||
return testError(
|
|
||||||
"record_size",
|
|
||||||
"24, 28, or 32",
|
|
||||||
metadata.RecordSize,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if metadata.NodeCount == 0 {
|
|
||||||
return testError(
|
|
||||||
"node_count",
|
|
||||||
"positive integer",
|
|
||||||
metadata.NodeCount,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *verifier) verifyDatabase() error {
|
|
||||||
offsets, err := v.verifySearchTree()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := v.verifyDataSectionSeparator(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return v.verifyDataSection(offsets)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *verifier) verifySearchTree() (map[uint]bool, error) {
|
|
||||||
offsets := make(map[uint]bool)
|
|
||||||
|
|
||||||
it := v.reader.Networks()
|
|
||||||
for it.Next() {
|
|
||||||
offset, err := v.reader.resolveDataPointer(it.lastNode.pointer)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
offsets[uint(offset)] = true
|
|
||||||
}
|
|
||||||
if err := it.Err(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return offsets, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *verifier) verifyDataSectionSeparator() error {
|
|
||||||
separatorStart := v.reader.Metadata.NodeCount * v.reader.Metadata.RecordSize / 4
|
|
||||||
|
|
||||||
separator := v.reader.buffer[separatorStart : separatorStart+dataSectionSeparatorSize]
|
|
||||||
|
|
||||||
for _, b := range separator {
|
|
||||||
if b != 0 {
|
|
||||||
return newInvalidDatabaseError("unexpected byte in data separator: %v", separator)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *verifier) verifyDataSection(offsets map[uint]bool) error {
|
|
||||||
pointerCount := len(offsets)
|
|
||||||
|
|
||||||
decoder := v.reader.decoder
|
|
||||||
|
|
||||||
var offset uint
|
|
||||||
bufferLen := uint(len(decoder.buffer))
|
|
||||||
for offset < bufferLen {
|
|
||||||
var data interface{}
|
|
||||||
rv := reflect.ValueOf(&data)
|
|
||||||
newOffset, err := decoder.decode(offset, rv, 0)
|
|
||||||
if err != nil {
|
|
||||||
return newInvalidDatabaseError("received decoding error (%v) at offset of %v", err, offset)
|
|
||||||
}
|
|
||||||
if newOffset <= offset {
|
|
||||||
return newInvalidDatabaseError("data section offset unexpectedly went from %v to %v", offset, newOffset)
|
|
||||||
}
|
|
||||||
|
|
||||||
pointer := offset
|
|
||||||
|
|
||||||
if _, ok := offsets[pointer]; ok {
|
|
||||||
delete(offsets, pointer)
|
|
||||||
} else {
|
|
||||||
return newInvalidDatabaseError("found data (%v) at %v that the search tree does not point to", data, pointer)
|
|
||||||
}
|
|
||||||
|
|
||||||
offset = newOffset
|
|
||||||
}
|
|
||||||
|
|
||||||
if offset != bufferLen {
|
|
||||||
return newInvalidDatabaseError(
|
|
||||||
"unexpected data at the end of the data section (last offset: %v, end: %v)",
|
|
||||||
offset,
|
|
||||||
bufferLen,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(offsets) != 0 {
|
|
||||||
return newInvalidDatabaseError(
|
|
||||||
"found %v pointers (of %v) in the search tree that we did not see in the data section",
|
|
||||||
len(offsets),
|
|
||||||
pointerCount,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func testError(
|
|
||||||
field string,
|
|
||||||
expected interface{},
|
|
||||||
actual interface{},
|
|
||||||
) error {
|
|
||||||
return newInvalidDatabaseError(
|
|
||||||
"%v - Expected: %v Actual: %v",
|
|
||||||
field,
|
|
||||||
expected,
|
|
||||||
actual,
|
|
||||||
)
|
|
||||||
}
|
|
3
vendor/golang.org/x/sys/AUTHORS
generated
vendored
3
vendor/golang.org/x/sys/AUTHORS
generated
vendored
@@ -1,3 +0,0 @@
|
|||||||
# This source code refers to The Go Authors for copyright purposes.
|
|
||||||
# The master list of authors is in the main Go distribution,
|
|
||||||
# visible at http://tip.golang.org/AUTHORS.
|
|
3
vendor/golang.org/x/sys/CONTRIBUTORS
generated
vendored
3
vendor/golang.org/x/sys/CONTRIBUTORS
generated
vendored
@@ -1,3 +0,0 @@
|
|||||||
# This source code was written by the Go contributors.
|
|
||||||
# The master list of contributors is in the main Go distribution,
|
|
||||||
# visible at http://tip.golang.org/CONTRIBUTORS.
|
|
27
vendor/golang.org/x/sys/LICENSE
generated
vendored
27
vendor/golang.org/x/sys/LICENSE
generated
vendored
@@ -1,27 +0,0 @@
|
|||||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, this list of conditions and the following disclaimer
|
|
||||||
in the documentation and/or other materials provided with the
|
|
||||||
distribution.
|
|
||||||
* Neither the name of Google Inc. nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
22
vendor/golang.org/x/sys/PATENTS
generated
vendored
22
vendor/golang.org/x/sys/PATENTS
generated
vendored
@@ -1,22 +0,0 @@
|
|||||||
Additional IP Rights Grant (Patents)
|
|
||||||
|
|
||||||
"This implementation" means the copyrightable works distributed by
|
|
||||||
Google as part of the Go project.
|
|
||||||
|
|
||||||
Google hereby grants to You a perpetual, worldwide, non-exclusive,
|
|
||||||
no-charge, royalty-free, irrevocable (except as stated in this section)
|
|
||||||
patent license to make, have made, use, offer to sell, sell, import,
|
|
||||||
transfer and otherwise run, modify and propagate the contents of this
|
|
||||||
implementation of Go, where such license applies only to those patent
|
|
||||||
claims, both currently owned or controlled by Google and acquired in
|
|
||||||
the future, licensable by Google that are necessarily infringed by this
|
|
||||||
implementation of Go. This grant does not include claims that would be
|
|
||||||
infringed only as a consequence of further modification of this
|
|
||||||
implementation. If you or your agent or exclusive licensee institute or
|
|
||||||
order or agree to the institution of patent litigation against any
|
|
||||||
entity (including a cross-claim or counterclaim in a lawsuit) alleging
|
|
||||||
that this implementation of Go or any code incorporated within this
|
|
||||||
implementation of Go constitutes direct or contributory patent
|
|
||||||
infringement, or inducement of patent infringement, then any patent
|
|
||||||
rights granted to you under this License for this implementation of Go
|
|
||||||
shall terminate as of the date such litigation is filed.
|
|
30
vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go
generated
vendored
30
vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go
generated
vendored
@@ -1,30 +0,0 @@
|
|||||||
// Copyright 2020 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Package unsafeheader contains header declarations for the Go runtime's
|
|
||||||
// slice and string implementations.
|
|
||||||
//
|
|
||||||
// This package allows x/sys to use types equivalent to
|
|
||||||
// reflect.SliceHeader and reflect.StringHeader without introducing
|
|
||||||
// a dependency on the (relatively heavy) "reflect" package.
|
|
||||||
package unsafeheader
|
|
||||||
|
|
||||||
import (
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Slice is the runtime representation of a slice.
|
|
||||||
// It cannot be used safely or portably and its representation may change in a later release.
|
|
||||||
type Slice struct {
|
|
||||||
Data unsafe.Pointer
|
|
||||||
Len int
|
|
||||||
Cap int
|
|
||||||
}
|
|
||||||
|
|
||||||
// String is the runtime representation of a string.
|
|
||||||
// It cannot be used safely or portably and its representation may change in a later release.
|
|
||||||
type String struct {
|
|
||||||
Data unsafe.Pointer
|
|
||||||
Len int
|
|
||||||
}
|
|
2
vendor/golang.org/x/sys/unix/.gitignore
generated
vendored
2
vendor/golang.org/x/sys/unix/.gitignore
generated
vendored
@@ -1,2 +0,0 @@
|
|||||||
_obj/
|
|
||||||
unix.test
|
|
184
vendor/golang.org/x/sys/unix/README.md
generated
vendored
184
vendor/golang.org/x/sys/unix/README.md
generated
vendored
@@ -1,184 +0,0 @@
|
|||||||
# Building `sys/unix`
|
|
||||||
|
|
||||||
The sys/unix package provides access to the raw system call interface of the
|
|
||||||
underlying operating system. See: https://godoc.org/golang.org/x/sys/unix
|
|
||||||
|
|
||||||
Porting Go to a new architecture/OS combination or adding syscalls, types, or
|
|
||||||
constants to an existing architecture/OS pair requires some manual effort;
|
|
||||||
however, there are tools that automate much of the process.
|
|
||||||
|
|
||||||
## Build Systems
|
|
||||||
|
|
||||||
There are currently two ways we generate the necessary files. We are currently
|
|
||||||
migrating the build system to use containers so the builds are reproducible.
|
|
||||||
This is being done on an OS-by-OS basis. Please update this documentation as
|
|
||||||
components of the build system change.
|
|
||||||
|
|
||||||
### Old Build System (currently for `GOOS != "linux"`)
|
|
||||||
|
|
||||||
The old build system generates the Go files based on the C header files
|
|
||||||
present on your system. This means that files
|
|
||||||
for a given GOOS/GOARCH pair must be generated on a system with that OS and
|
|
||||||
architecture. This also means that the generated code can differ from system
|
|
||||||
to system, based on differences in the header files.
|
|
||||||
|
|
||||||
To avoid this, if you are using the old build system, only generate the Go
|
|
||||||
files on an installation with unmodified header files. It is also important to
|
|
||||||
keep track of which version of the OS the files were generated from (ex.
|
|
||||||
Darwin 14 vs Darwin 15). This makes it easier to track the progress of changes
|
|
||||||
and have each OS upgrade correspond to a single change.
|
|
||||||
|
|
||||||
To build the files for your current OS and architecture, make sure GOOS and
|
|
||||||
GOARCH are set correctly and run `mkall.sh`. This will generate the files for
|
|
||||||
your specific system. Running `mkall.sh -n` shows the commands that will be run.
|
|
||||||
|
|
||||||
Requirements: bash, go
|
|
||||||
|
|
||||||
### New Build System (currently for `GOOS == "linux"`)
|
|
||||||
|
|
||||||
The new build system uses a Docker container to generate the go files directly
|
|
||||||
from source checkouts of the kernel and various system libraries. This means
|
|
||||||
that on any platform that supports Docker, all the files using the new build
|
|
||||||
system can be generated at once, and generated files will not change based on
|
|
||||||
what the person running the scripts has installed on their computer.
|
|
||||||
|
|
||||||
The OS specific files for the new build system are located in the `${GOOS}`
|
|
||||||
directory, and the build is coordinated by the `${GOOS}/mkall.go` program. When
|
|
||||||
the kernel or system library updates, modify the Dockerfile at
|
|
||||||
`${GOOS}/Dockerfile` to checkout the new release of the source.
|
|
||||||
|
|
||||||
To build all the files under the new build system, you must be on an amd64/Linux
|
|
||||||
system and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will
|
|
||||||
then generate all of the files for all of the GOOS/GOARCH pairs in the new build
|
|
||||||
system. Running `mkall.sh -n` shows the commands that will be run.
|
|
||||||
|
|
||||||
Requirements: bash, go, docker
|
|
||||||
|
|
||||||
## Component files
|
|
||||||
|
|
||||||
This section describes the various files used in the code generation process.
|
|
||||||
It also contains instructions on how to modify these files to add a new
|
|
||||||
architecture/OS or to add additional syscalls, types, or constants. Note that
|
|
||||||
if you are using the new build system, the scripts/programs cannot be called normally.
|
|
||||||
They must be called from within the docker container.
|
|
||||||
|
|
||||||
### asm files
|
|
||||||
|
|
||||||
The hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` implements system
|
|
||||||
call dispatch. There are three entry points:
|
|
||||||
```
|
|
||||||
func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
|
|
||||||
func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
|
|
||||||
func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
|
|
||||||
```
|
|
||||||
The first and second are the standard ones; they differ only in how many
|
|
||||||
arguments can be passed to the kernel. The third is for low-level use by the
|
|
||||||
ForkExec wrapper. Unlike the first two, it does not call into the scheduler to
|
|
||||||
let it know that a system call is running.
|
|
||||||
|
|
||||||
When porting Go to an new architecture/OS, this file must be implemented for
|
|
||||||
each GOOS/GOARCH pair.
|
|
||||||
|
|
||||||
### mksysnum
|
|
||||||
|
|
||||||
Mksysnum is a Go program located at `${GOOS}/mksysnum.go` (or `mksysnum_${GOOS}.go`
|
|
||||||
for the old system). This program takes in a list of header files containing the
|
|
||||||
syscall number declarations and parses them to produce the corresponding list of
|
|
||||||
Go numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated
|
|
||||||
constants.
|
|
||||||
|
|
||||||
Adding new syscall numbers is mostly done by running the build on a sufficiently
|
|
||||||
new installation of the target OS (or updating the source checkouts for the
|
|
||||||
new build system). However, depending on the OS, you may need to update the
|
|
||||||
parsing in mksysnum.
|
|
||||||
|
|
||||||
### mksyscall.go
|
|
||||||
|
|
||||||
The `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are
|
|
||||||
hand-written Go files which implement system calls (for unix, the specific OS,
|
|
||||||
or the specific OS/Architecture pair respectively) that need special handling
|
|
||||||
and list `//sys` comments giving prototypes for ones that can be generated.
|
|
||||||
|
|
||||||
The mksyscall.go program takes the `//sys` and `//sysnb` comments and converts
|
|
||||||
them into syscalls. This requires the name of the prototype in the comment to
|
|
||||||
match a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function
|
|
||||||
prototype can be exported (capitalized) or not.
|
|
||||||
|
|
||||||
Adding a new syscall often just requires adding a new `//sys` function prototype
|
|
||||||
with the desired arguments and a capitalized name so it is exported. However, if
|
|
||||||
you want the interface to the syscall to be different, often one will make an
|
|
||||||
unexported `//sys` prototype, an then write a custom wrapper in
|
|
||||||
`syscall_${GOOS}.go`.
|
|
||||||
|
|
||||||
### types files
|
|
||||||
|
|
||||||
For each OS, there is a hand-written Go file at `${GOOS}/types.go` (or
|
|
||||||
`types_${GOOS}.go` on the old system). This file includes standard C headers and
|
|
||||||
creates Go type aliases to the corresponding C types. The file is then fed
|
|
||||||
through godef to get the Go compatible definitions. Finally, the generated code
|
|
||||||
is fed though mkpost.go to format the code correctly and remove any hidden or
|
|
||||||
private identifiers. This cleaned-up code is written to
|
|
||||||
`ztypes_${GOOS}_${GOARCH}.go`.
|
|
||||||
|
|
||||||
The hardest part about preparing this file is figuring out which headers to
|
|
||||||
include and which symbols need to be `#define`d to get the actual data
|
|
||||||
structures that pass through to the kernel system calls. Some C libraries
|
|
||||||
preset alternate versions for binary compatibility and translate them on the
|
|
||||||
way in and out of system calls, but there is almost always a `#define` that can
|
|
||||||
get the real ones.
|
|
||||||
See `types_darwin.go` and `linux/types.go` for examples.
|
|
||||||
|
|
||||||
To add a new type, add in the necessary include statement at the top of the
|
|
||||||
file (if it is not already there) and add in a type alias line. Note that if
|
|
||||||
your type is significantly different on different architectures, you may need
|
|
||||||
some `#if/#elif` macros in your include statements.
|
|
||||||
|
|
||||||
### mkerrors.sh
|
|
||||||
|
|
||||||
This script is used to generate the system's various constants. This doesn't
|
|
||||||
just include the error numbers and error strings, but also the signal numbers
|
|
||||||
an a wide variety of miscellaneous constants. The constants come from the list
|
|
||||||
of include files in the `includes_${uname}` variable. A regex then picks out
|
|
||||||
the desired `#define` statements, and generates the corresponding Go constants.
|
|
||||||
The error numbers and strings are generated from `#include <errno.h>`, and the
|
|
||||||
signal numbers and strings are generated from `#include <signal.h>`. All of
|
|
||||||
these constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program,
|
|
||||||
`_errors.c`, which prints out all the constants.
|
|
||||||
|
|
||||||
To add a constant, add the header that includes it to the appropriate variable.
|
|
||||||
Then, edit the regex (if necessary) to match the desired constant. Avoid making
|
|
||||||
the regex too broad to avoid matching unintended constants.
|
|
||||||
|
|
||||||
### mkmerge.go
|
|
||||||
|
|
||||||
This program is used to extract duplicate const, func, and type declarations
|
|
||||||
from the generated architecture-specific files listed below, and merge these
|
|
||||||
into a common file for each OS.
|
|
||||||
|
|
||||||
The merge is performed in the following steps:
|
|
||||||
1. Construct the set of common code that is idential in all architecture-specific files.
|
|
||||||
2. Write this common code to the merged file.
|
|
||||||
3. Remove the common code from all architecture-specific files.
|
|
||||||
|
|
||||||
|
|
||||||
## Generated files
|
|
||||||
|
|
||||||
### `zerrors_${GOOS}_${GOARCH}.go`
|
|
||||||
|
|
||||||
A file containing all of the system's generated error numbers, error strings,
|
|
||||||
signal numbers, and constants. Generated by `mkerrors.sh` (see above).
|
|
||||||
|
|
||||||
### `zsyscall_${GOOS}_${GOARCH}.go`
|
|
||||||
|
|
||||||
A file containing all the generated syscalls for a specific GOOS and GOARCH.
|
|
||||||
Generated by `mksyscall.go` (see above).
|
|
||||||
|
|
||||||
### `zsysnum_${GOOS}_${GOARCH}.go`
|
|
||||||
|
|
||||||
A list of numeric constants for all the syscall number of the specific GOOS
|
|
||||||
and GOARCH. Generated by mksysnum (see above).
|
|
||||||
|
|
||||||
### `ztypes_${GOOS}_${GOARCH}.go`
|
|
||||||
|
|
||||||
A file containing Go types for passing into (or returning from) syscalls.
|
|
||||||
Generated by godefs and the types file (see above).
|
|
86
vendor/golang.org/x/sys/unix/affinity_linux.go
generated
vendored
86
vendor/golang.org/x/sys/unix/affinity_linux.go
generated
vendored
@@ -1,86 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// CPU affinity functions
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"math/bits"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
const cpuSetSize = _CPU_SETSIZE / _NCPUBITS
|
|
||||||
|
|
||||||
// CPUSet represents a CPU affinity mask.
|
|
||||||
type CPUSet [cpuSetSize]cpuMask
|
|
||||||
|
|
||||||
func schedAffinity(trap uintptr, pid int, set *CPUSet) error {
|
|
||||||
_, _, e := RawSyscall(trap, uintptr(pid), uintptr(unsafe.Sizeof(*set)), uintptr(unsafe.Pointer(set)))
|
|
||||||
if e != 0 {
|
|
||||||
return errnoErr(e)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SchedGetaffinity gets the CPU affinity mask of the thread specified by pid.
|
|
||||||
// If pid is 0 the calling thread is used.
|
|
||||||
func SchedGetaffinity(pid int, set *CPUSet) error {
|
|
||||||
return schedAffinity(SYS_SCHED_GETAFFINITY, pid, set)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SchedSetaffinity sets the CPU affinity mask of the thread specified by pid.
|
|
||||||
// If pid is 0 the calling thread is used.
|
|
||||||
func SchedSetaffinity(pid int, set *CPUSet) error {
|
|
||||||
return schedAffinity(SYS_SCHED_SETAFFINITY, pid, set)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zero clears the set s, so that it contains no CPUs.
|
|
||||||
func (s *CPUSet) Zero() {
|
|
||||||
for i := range s {
|
|
||||||
s[i] = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func cpuBitsIndex(cpu int) int {
|
|
||||||
return cpu / _NCPUBITS
|
|
||||||
}
|
|
||||||
|
|
||||||
func cpuBitsMask(cpu int) cpuMask {
|
|
||||||
return cpuMask(1 << (uint(cpu) % _NCPUBITS))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set adds cpu to the set s.
|
|
||||||
func (s *CPUSet) Set(cpu int) {
|
|
||||||
i := cpuBitsIndex(cpu)
|
|
||||||
if i < len(s) {
|
|
||||||
s[i] |= cpuBitsMask(cpu)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear removes cpu from the set s.
|
|
||||||
func (s *CPUSet) Clear(cpu int) {
|
|
||||||
i := cpuBitsIndex(cpu)
|
|
||||||
if i < len(s) {
|
|
||||||
s[i] &^= cpuBitsMask(cpu)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsSet reports whether cpu is in the set s.
|
|
||||||
func (s *CPUSet) IsSet(cpu int) bool {
|
|
||||||
i := cpuBitsIndex(cpu)
|
|
||||||
if i < len(s) {
|
|
||||||
return s[i]&cpuBitsMask(cpu) != 0
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Count returns the number of CPUs in the set s.
|
|
||||||
func (s *CPUSet) Count() int {
|
|
||||||
c := 0
|
|
||||||
for _, b := range s {
|
|
||||||
c += bits.OnesCount64(uint64(b))
|
|
||||||
}
|
|
||||||
return c
|
|
||||||
}
|
|
14
vendor/golang.org/x/sys/unix/aliases.go
generated
vendored
14
vendor/golang.org/x/sys/unix/aliases.go
generated
vendored
@@ -1,14 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
|
|
||||||
// +build go1.9
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
type Signal = syscall.Signal
|
|
||||||
type Errno = syscall.Errno
|
|
||||||
type SysProcAttr = syscall.SysProcAttr
|
|
17
vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
generated
vendored
17
vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
generated
vendored
@@ -1,17 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go
|
|
||||||
//
|
|
||||||
|
|
||||||
TEXT ·syscall6(SB),NOSPLIT,$0-88
|
|
||||||
JMP syscall·syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·rawSyscall6(SB),NOSPLIT,$0-88
|
|
||||||
JMP syscall·rawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_darwin_386.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_darwin_386.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for 386, Darwin
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-52
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_darwin_amd64.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_darwin_amd64.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for AMD64, Darwin
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-104
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
30
vendor/golang.org/x/sys/unix/asm_darwin_arm.s
generated
vendored
30
vendor/golang.org/x/sys/unix/asm_darwin_arm.s
generated
vendored
@@ -1,30 +0,0 @@
|
|||||||
// Copyright 2015 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
// +build arm,darwin
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for ARM, Darwin
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
|
|
||||||
B syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
|
|
||||||
B syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-52
|
|
||||||
B syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
B syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
B syscall·RawSyscall6(SB)
|
|
30
vendor/golang.org/x/sys/unix/asm_darwin_arm64.s
generated
vendored
30
vendor/golang.org/x/sys/unix/asm_darwin_arm64.s
generated
vendored
@@ -1,30 +0,0 @@
|
|||||||
// Copyright 2015 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
// +build arm64,darwin
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for AMD64, Darwin
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
B syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
B syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-104
|
|
||||||
B syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
B syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
B syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for AMD64, DragonFly
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-104
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_freebsd_386.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_freebsd_386.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for 386, FreeBSD
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-52
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for AMD64, FreeBSD
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-104
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_freebsd_arm.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_freebsd_arm.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for ARM, FreeBSD
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
|
|
||||||
B syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
|
|
||||||
B syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-52
|
|
||||||
B syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
B syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
B syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_freebsd_arm64.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_freebsd_arm64.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for ARM64, FreeBSD
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-104
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
65
vendor/golang.org/x/sys/unix/asm_linux_386.s
generated
vendored
65
vendor/golang.org/x/sys/unix/asm_linux_386.s
generated
vendored
@@ -1,65 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System calls for 386, Linux
|
|
||||||
//
|
|
||||||
|
|
||||||
// See ../runtime/sys_linux_386.s for the reason why we always use int 0x80
|
|
||||||
// instead of the glibc-specific "CALL 0x10(GS)".
|
|
||||||
#define INVOKE_SYSCALL INT $0x80
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-24
|
|
||||||
CALL runtime·entersyscall(SB)
|
|
||||||
MOVL trap+0(FP), AX // syscall entry
|
|
||||||
MOVL a1+4(FP), BX
|
|
||||||
MOVL a2+8(FP), CX
|
|
||||||
MOVL a3+12(FP), DX
|
|
||||||
MOVL $0, SI
|
|
||||||
MOVL $0, DI
|
|
||||||
INVOKE_SYSCALL
|
|
||||||
MOVL AX, r1+16(FP)
|
|
||||||
MOVL DX, r2+20(FP)
|
|
||||||
CALL runtime·exitsyscall(SB)
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24
|
|
||||||
MOVL trap+0(FP), AX // syscall entry
|
|
||||||
MOVL a1+4(FP), BX
|
|
||||||
MOVL a2+8(FP), CX
|
|
||||||
MOVL a3+12(FP), DX
|
|
||||||
MOVL $0, SI
|
|
||||||
MOVL $0, DI
|
|
||||||
INVOKE_SYSCALL
|
|
||||||
MOVL AX, r1+16(FP)
|
|
||||||
MOVL DX, r2+20(FP)
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT ·socketcall(SB),NOSPLIT,$0-36
|
|
||||||
JMP syscall·socketcall(SB)
|
|
||||||
|
|
||||||
TEXT ·rawsocketcall(SB),NOSPLIT,$0-36
|
|
||||||
JMP syscall·rawsocketcall(SB)
|
|
||||||
|
|
||||||
TEXT ·seek(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·seek(SB)
|
|
57
vendor/golang.org/x/sys/unix/asm_linux_amd64.s
generated
vendored
57
vendor/golang.org/x/sys/unix/asm_linux_amd64.s
generated
vendored
@@ -1,57 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System calls for AMD64, Linux
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
|
|
||||||
CALL runtime·entersyscall(SB)
|
|
||||||
MOVQ a1+8(FP), DI
|
|
||||||
MOVQ a2+16(FP), SI
|
|
||||||
MOVQ a3+24(FP), DX
|
|
||||||
MOVQ $0, R10
|
|
||||||
MOVQ $0, R8
|
|
||||||
MOVQ $0, R9
|
|
||||||
MOVQ trap+0(FP), AX // syscall entry
|
|
||||||
SYSCALL
|
|
||||||
MOVQ AX, r1+32(FP)
|
|
||||||
MOVQ DX, r2+40(FP)
|
|
||||||
CALL runtime·exitsyscall(SB)
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
|
|
||||||
MOVQ a1+8(FP), DI
|
|
||||||
MOVQ a2+16(FP), SI
|
|
||||||
MOVQ a3+24(FP), DX
|
|
||||||
MOVQ $0, R10
|
|
||||||
MOVQ $0, R8
|
|
||||||
MOVQ $0, R9
|
|
||||||
MOVQ trap+0(FP), AX // syscall entry
|
|
||||||
SYSCALL
|
|
||||||
MOVQ AX, r1+32(FP)
|
|
||||||
MOVQ DX, r2+40(FP)
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT ·gettimeofday(SB),NOSPLIT,$0-16
|
|
||||||
JMP syscall·gettimeofday(SB)
|
|
56
vendor/golang.org/x/sys/unix/asm_linux_arm.s
generated
vendored
56
vendor/golang.org/x/sys/unix/asm_linux_arm.s
generated
vendored
@@ -1,56 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System calls for arm, Linux
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
|
|
||||||
B syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
|
|
||||||
B syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-24
|
|
||||||
BL runtime·entersyscall(SB)
|
|
||||||
MOVW trap+0(FP), R7
|
|
||||||
MOVW a1+4(FP), R0
|
|
||||||
MOVW a2+8(FP), R1
|
|
||||||
MOVW a3+12(FP), R2
|
|
||||||
MOVW $0, R3
|
|
||||||
MOVW $0, R4
|
|
||||||
MOVW $0, R5
|
|
||||||
SWI $0
|
|
||||||
MOVW R0, r1+16(FP)
|
|
||||||
MOVW $0, R0
|
|
||||||
MOVW R0, r2+20(FP)
|
|
||||||
BL runtime·exitsyscall(SB)
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
B syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
B syscall·RawSyscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24
|
|
||||||
MOVW trap+0(FP), R7 // syscall entry
|
|
||||||
MOVW a1+4(FP), R0
|
|
||||||
MOVW a2+8(FP), R1
|
|
||||||
MOVW a3+12(FP), R2
|
|
||||||
SWI $0
|
|
||||||
MOVW R0, r1+16(FP)
|
|
||||||
MOVW $0, R0
|
|
||||||
MOVW R0, r2+20(FP)
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT ·seek(SB),NOSPLIT,$0-28
|
|
||||||
B syscall·seek(SB)
|
|
52
vendor/golang.org/x/sys/unix/asm_linux_arm64.s
generated
vendored
52
vendor/golang.org/x/sys/unix/asm_linux_arm64.s
generated
vendored
@@ -1,52 +0,0 @@
|
|||||||
// Copyright 2015 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build linux
|
|
||||||
// +build arm64
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
B syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
B syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
|
|
||||||
BL runtime·entersyscall(SB)
|
|
||||||
MOVD a1+8(FP), R0
|
|
||||||
MOVD a2+16(FP), R1
|
|
||||||
MOVD a3+24(FP), R2
|
|
||||||
MOVD $0, R3
|
|
||||||
MOVD $0, R4
|
|
||||||
MOVD $0, R5
|
|
||||||
MOVD trap+0(FP), R8 // syscall entry
|
|
||||||
SVC
|
|
||||||
MOVD R0, r1+32(FP) // r1
|
|
||||||
MOVD R1, r2+40(FP) // r2
|
|
||||||
BL runtime·exitsyscall(SB)
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
B syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
B syscall·RawSyscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
|
|
||||||
MOVD a1+8(FP), R0
|
|
||||||
MOVD a2+16(FP), R1
|
|
||||||
MOVD a3+24(FP), R2
|
|
||||||
MOVD $0, R3
|
|
||||||
MOVD $0, R4
|
|
||||||
MOVD $0, R5
|
|
||||||
MOVD trap+0(FP), R8 // syscall entry
|
|
||||||
SVC
|
|
||||||
MOVD R0, r1+32(FP)
|
|
||||||
MOVD R1, r2+40(FP)
|
|
||||||
RET
|
|
56
vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
generated
vendored
56
vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
generated
vendored
@@ -1,56 +0,0 @@
|
|||||||
// Copyright 2015 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build linux
|
|
||||||
// +build mips64 mips64le
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System calls for mips64, Linux
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
|
|
||||||
JAL runtime·entersyscall(SB)
|
|
||||||
MOVV a1+8(FP), R4
|
|
||||||
MOVV a2+16(FP), R5
|
|
||||||
MOVV a3+24(FP), R6
|
|
||||||
MOVV R0, R7
|
|
||||||
MOVV R0, R8
|
|
||||||
MOVV R0, R9
|
|
||||||
MOVV trap+0(FP), R2 // syscall entry
|
|
||||||
SYSCALL
|
|
||||||
MOVV R2, r1+32(FP)
|
|
||||||
MOVV R3, r2+40(FP)
|
|
||||||
JAL runtime·exitsyscall(SB)
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
|
|
||||||
MOVV a1+8(FP), R4
|
|
||||||
MOVV a2+16(FP), R5
|
|
||||||
MOVV a3+24(FP), R6
|
|
||||||
MOVV R0, R7
|
|
||||||
MOVV R0, R8
|
|
||||||
MOVV R0, R9
|
|
||||||
MOVV trap+0(FP), R2 // syscall entry
|
|
||||||
SYSCALL
|
|
||||||
MOVV R2, r1+32(FP)
|
|
||||||
MOVV R3, r2+40(FP)
|
|
||||||
RET
|
|
54
vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
generated
vendored
54
vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
generated
vendored
@@ -1,54 +0,0 @@
|
|||||||
// Copyright 2016 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build linux
|
|
||||||
// +build mips mipsle
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System calls for mips, Linux
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-52
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-24
|
|
||||||
JAL runtime·entersyscall(SB)
|
|
||||||
MOVW a1+4(FP), R4
|
|
||||||
MOVW a2+8(FP), R5
|
|
||||||
MOVW a3+12(FP), R6
|
|
||||||
MOVW R0, R7
|
|
||||||
MOVW trap+0(FP), R2 // syscall entry
|
|
||||||
SYSCALL
|
|
||||||
MOVW R2, r1+16(FP) // r1
|
|
||||||
MOVW R3, r2+20(FP) // r2
|
|
||||||
JAL runtime·exitsyscall(SB)
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24
|
|
||||||
MOVW a1+4(FP), R4
|
|
||||||
MOVW a2+8(FP), R5
|
|
||||||
MOVW a3+12(FP), R6
|
|
||||||
MOVW trap+0(FP), R2 // syscall entry
|
|
||||||
SYSCALL
|
|
||||||
MOVW R2, r1+16(FP)
|
|
||||||
MOVW R3, r2+20(FP)
|
|
||||||
RET
|
|
44
vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
generated
vendored
44
vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
generated
vendored
@@ -1,44 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build linux
|
|
||||||
// +build ppc64 ppc64le
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System calls for ppc64, Linux
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
|
|
||||||
BL runtime·entersyscall(SB)
|
|
||||||
MOVD a1+8(FP), R3
|
|
||||||
MOVD a2+16(FP), R4
|
|
||||||
MOVD a3+24(FP), R5
|
|
||||||
MOVD R0, R6
|
|
||||||
MOVD R0, R7
|
|
||||||
MOVD R0, R8
|
|
||||||
MOVD trap+0(FP), R9 // syscall entry
|
|
||||||
SYSCALL R9
|
|
||||||
MOVD R3, r1+32(FP)
|
|
||||||
MOVD R4, r2+40(FP)
|
|
||||||
BL runtime·exitsyscall(SB)
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
|
|
||||||
MOVD a1+8(FP), R3
|
|
||||||
MOVD a2+16(FP), R4
|
|
||||||
MOVD a3+24(FP), R5
|
|
||||||
MOVD R0, R6
|
|
||||||
MOVD R0, R7
|
|
||||||
MOVD R0, R8
|
|
||||||
MOVD trap+0(FP), R9 // syscall entry
|
|
||||||
SYSCALL R9
|
|
||||||
MOVD R3, r1+32(FP)
|
|
||||||
MOVD R4, r2+40(FP)
|
|
||||||
RET
|
|
47
vendor/golang.org/x/sys/unix/asm_linux_riscv64.s
generated
vendored
47
vendor/golang.org/x/sys/unix/asm_linux_riscv64.s
generated
vendored
@@ -1,47 +0,0 @@
|
|||||||
// Copyright 2019 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build riscv64,!gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System calls for linux/riscv64.
|
|
||||||
//
|
|
||||||
// Where available, just jump to package syscall's implementation of
|
|
||||||
// these functions.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
|
|
||||||
CALL runtime·entersyscall(SB)
|
|
||||||
MOV a1+8(FP), A0
|
|
||||||
MOV a2+16(FP), A1
|
|
||||||
MOV a3+24(FP), A2
|
|
||||||
MOV trap+0(FP), A7 // syscall entry
|
|
||||||
ECALL
|
|
||||||
MOV A0, r1+32(FP) // r1
|
|
||||||
MOV A1, r2+40(FP) // r2
|
|
||||||
CALL runtime·exitsyscall(SB)
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
|
|
||||||
MOV a1+8(FP), A0
|
|
||||||
MOV a2+16(FP), A1
|
|
||||||
MOV a3+24(FP), A2
|
|
||||||
MOV trap+0(FP), A7 // syscall entry
|
|
||||||
ECALL
|
|
||||||
MOV A0, r1+32(FP)
|
|
||||||
MOV A1, r2+40(FP)
|
|
||||||
RET
|
|
56
vendor/golang.org/x/sys/unix/asm_linux_s390x.s
generated
vendored
56
vendor/golang.org/x/sys/unix/asm_linux_s390x.s
generated
vendored
@@ -1,56 +0,0 @@
|
|||||||
// Copyright 2016 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build s390x
|
|
||||||
// +build linux
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System calls for s390x, Linux
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
BR syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
BR syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
|
|
||||||
BL runtime·entersyscall(SB)
|
|
||||||
MOVD a1+8(FP), R2
|
|
||||||
MOVD a2+16(FP), R3
|
|
||||||
MOVD a3+24(FP), R4
|
|
||||||
MOVD $0, R5
|
|
||||||
MOVD $0, R6
|
|
||||||
MOVD $0, R7
|
|
||||||
MOVD trap+0(FP), R1 // syscall entry
|
|
||||||
SYSCALL
|
|
||||||
MOVD R2, r1+32(FP)
|
|
||||||
MOVD R3, r2+40(FP)
|
|
||||||
BL runtime·exitsyscall(SB)
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
BR syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
BR syscall·RawSyscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
|
|
||||||
MOVD a1+8(FP), R2
|
|
||||||
MOVD a2+16(FP), R3
|
|
||||||
MOVD a3+24(FP), R4
|
|
||||||
MOVD $0, R5
|
|
||||||
MOVD $0, R6
|
|
||||||
MOVD $0, R7
|
|
||||||
MOVD trap+0(FP), R1 // syscall entry
|
|
||||||
SYSCALL
|
|
||||||
MOVD R2, r1+32(FP)
|
|
||||||
MOVD R3, r2+40(FP)
|
|
||||||
RET
|
|
29
vendor/golang.org/x/sys/unix/asm_netbsd_386.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_netbsd_386.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for 386, NetBSD
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-52
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for AMD64, NetBSD
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-104
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_netbsd_arm.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_netbsd_arm.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for ARM, NetBSD
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
|
|
||||||
B syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
|
|
||||||
B syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-52
|
|
||||||
B syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
B syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
B syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_netbsd_arm64.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_netbsd_arm64.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2019 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for ARM64, NetBSD
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
B syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
B syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-104
|
|
||||||
B syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
B syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
B syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_openbsd_386.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_openbsd_386.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for 386, OpenBSD
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-52
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for AMD64, OpenBSD
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-104
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_openbsd_arm.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_openbsd_arm.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for ARM, OpenBSD
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
|
|
||||||
B syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
|
|
||||||
B syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-52
|
|
||||||
B syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
B syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
B syscall·RawSyscall6(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_openbsd_arm64.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_openbsd_arm64.s
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2019 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System call support for arm64, OpenBSD
|
|
||||||
//
|
|
||||||
|
|
||||||
// Just jump to package syscall's implementation for all these functions.
|
|
||||||
// The runtime may know about them.
|
|
||||||
|
|
||||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-104
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
17
vendor/golang.org/x/sys/unix/asm_solaris_amd64.s
generated
vendored
17
vendor/golang.org/x/sys/unix/asm_solaris_amd64.s
generated
vendored
@@ -1,17 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build !gccgo
|
|
||||||
|
|
||||||
#include "textflag.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go
|
|
||||||
//
|
|
||||||
|
|
||||||
TEXT ·sysvicall6(SB),NOSPLIT,$0-88
|
|
||||||
JMP syscall·sysvicall6(SB)
|
|
||||||
|
|
||||||
TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88
|
|
||||||
JMP syscall·rawSysvicall6(SB)
|
|
36
vendor/golang.org/x/sys/unix/bluetooth_linux.go
generated
vendored
36
vendor/golang.org/x/sys/unix/bluetooth_linux.go
generated
vendored
@@ -1,36 +0,0 @@
|
|||||||
// Copyright 2016 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Bluetooth sockets and messages
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
// Bluetooth Protocols
|
|
||||||
const (
|
|
||||||
BTPROTO_L2CAP = 0
|
|
||||||
BTPROTO_HCI = 1
|
|
||||||
BTPROTO_SCO = 2
|
|
||||||
BTPROTO_RFCOMM = 3
|
|
||||||
BTPROTO_BNEP = 4
|
|
||||||
BTPROTO_CMTP = 5
|
|
||||||
BTPROTO_HIDP = 6
|
|
||||||
BTPROTO_AVDTP = 7
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
HCI_CHANNEL_RAW = 0
|
|
||||||
HCI_CHANNEL_USER = 1
|
|
||||||
HCI_CHANNEL_MONITOR = 2
|
|
||||||
HCI_CHANNEL_CONTROL = 3
|
|
||||||
HCI_CHANNEL_LOGGING = 4
|
|
||||||
)
|
|
||||||
|
|
||||||
// Socketoption Level
|
|
||||||
const (
|
|
||||||
SOL_BLUETOOTH = 0x112
|
|
||||||
SOL_HCI = 0x0
|
|
||||||
SOL_L2CAP = 0x6
|
|
||||||
SOL_RFCOMM = 0x12
|
|
||||||
SOL_SCO = 0x11
|
|
||||||
)
|
|
195
vendor/golang.org/x/sys/unix/cap_freebsd.go
generated
vendored
195
vendor/golang.org/x/sys/unix/cap_freebsd.go
generated
vendored
@@ -1,195 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build freebsd
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c
|
|
||||||
|
|
||||||
const (
|
|
||||||
// This is the version of CapRights this package understands. See C implementation for parallels.
|
|
||||||
capRightsGoVersion = CAP_RIGHTS_VERSION_00
|
|
||||||
capArSizeMin = CAP_RIGHTS_VERSION_00 + 2
|
|
||||||
capArSizeMax = capRightsGoVersion + 2
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
bit2idx = []int{
|
|
||||||
-1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1,
|
|
||||||
4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func capidxbit(right uint64) int {
|
|
||||||
return int((right >> 57) & 0x1f)
|
|
||||||
}
|
|
||||||
|
|
||||||
func rightToIndex(right uint64) (int, error) {
|
|
||||||
idx := capidxbit(right)
|
|
||||||
if idx < 0 || idx >= len(bit2idx) {
|
|
||||||
return -2, fmt.Errorf("index for right 0x%x out of range", right)
|
|
||||||
}
|
|
||||||
return bit2idx[idx], nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func caprver(right uint64) int {
|
|
||||||
return int(right >> 62)
|
|
||||||
}
|
|
||||||
|
|
||||||
func capver(rights *CapRights) int {
|
|
||||||
return caprver(rights.Rights[0])
|
|
||||||
}
|
|
||||||
|
|
||||||
func caparsize(rights *CapRights) int {
|
|
||||||
return capver(rights) + 2
|
|
||||||
}
|
|
||||||
|
|
||||||
// CapRightsSet sets the permissions in setrights in rights.
|
|
||||||
func CapRightsSet(rights *CapRights, setrights []uint64) error {
|
|
||||||
// This is essentially a copy of cap_rights_vset()
|
|
||||||
if capver(rights) != CAP_RIGHTS_VERSION_00 {
|
|
||||||
return fmt.Errorf("bad rights version %d", capver(rights))
|
|
||||||
}
|
|
||||||
|
|
||||||
n := caparsize(rights)
|
|
||||||
if n < capArSizeMin || n > capArSizeMax {
|
|
||||||
return errors.New("bad rights size")
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, right := range setrights {
|
|
||||||
if caprver(right) != CAP_RIGHTS_VERSION_00 {
|
|
||||||
return errors.New("bad right version")
|
|
||||||
}
|
|
||||||
i, err := rightToIndex(right)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if i >= n {
|
|
||||||
return errors.New("index overflow")
|
|
||||||
}
|
|
||||||
if capidxbit(rights.Rights[i]) != capidxbit(right) {
|
|
||||||
return errors.New("index mismatch")
|
|
||||||
}
|
|
||||||
rights.Rights[i] |= right
|
|
||||||
if capidxbit(rights.Rights[i]) != capidxbit(right) {
|
|
||||||
return errors.New("index mismatch (after assign)")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// CapRightsClear clears the permissions in clearrights from rights.
|
|
||||||
func CapRightsClear(rights *CapRights, clearrights []uint64) error {
|
|
||||||
// This is essentially a copy of cap_rights_vclear()
|
|
||||||
if capver(rights) != CAP_RIGHTS_VERSION_00 {
|
|
||||||
return fmt.Errorf("bad rights version %d", capver(rights))
|
|
||||||
}
|
|
||||||
|
|
||||||
n := caparsize(rights)
|
|
||||||
if n < capArSizeMin || n > capArSizeMax {
|
|
||||||
return errors.New("bad rights size")
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, right := range clearrights {
|
|
||||||
if caprver(right) != CAP_RIGHTS_VERSION_00 {
|
|
||||||
return errors.New("bad right version")
|
|
||||||
}
|
|
||||||
i, err := rightToIndex(right)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if i >= n {
|
|
||||||
return errors.New("index overflow")
|
|
||||||
}
|
|
||||||
if capidxbit(rights.Rights[i]) != capidxbit(right) {
|
|
||||||
return errors.New("index mismatch")
|
|
||||||
}
|
|
||||||
rights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF)
|
|
||||||
if capidxbit(rights.Rights[i]) != capidxbit(right) {
|
|
||||||
return errors.New("index mismatch (after assign)")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// CapRightsIsSet checks whether all the permissions in setrights are present in rights.
|
|
||||||
func CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) {
|
|
||||||
// This is essentially a copy of cap_rights_is_vset()
|
|
||||||
if capver(rights) != CAP_RIGHTS_VERSION_00 {
|
|
||||||
return false, fmt.Errorf("bad rights version %d", capver(rights))
|
|
||||||
}
|
|
||||||
|
|
||||||
n := caparsize(rights)
|
|
||||||
if n < capArSizeMin || n > capArSizeMax {
|
|
||||||
return false, errors.New("bad rights size")
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, right := range setrights {
|
|
||||||
if caprver(right) != CAP_RIGHTS_VERSION_00 {
|
|
||||||
return false, errors.New("bad right version")
|
|
||||||
}
|
|
||||||
i, err := rightToIndex(right)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
if i >= n {
|
|
||||||
return false, errors.New("index overflow")
|
|
||||||
}
|
|
||||||
if capidxbit(rights.Rights[i]) != capidxbit(right) {
|
|
||||||
return false, errors.New("index mismatch")
|
|
||||||
}
|
|
||||||
if (rights.Rights[i] & right) != right {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func capright(idx uint64, bit uint64) uint64 {
|
|
||||||
return ((1 << (57 + idx)) | bit)
|
|
||||||
}
|
|
||||||
|
|
||||||
// CapRightsInit returns a pointer to an initialised CapRights structure filled with rights.
|
|
||||||
// See man cap_rights_init(3) and rights(4).
|
|
||||||
func CapRightsInit(rights []uint64) (*CapRights, error) {
|
|
||||||
var r CapRights
|
|
||||||
r.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0)
|
|
||||||
r.Rights[1] = capright(1, 0)
|
|
||||||
|
|
||||||
err := CapRightsSet(&r, rights)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return &r, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// CapRightsLimit reduces the operations permitted on fd to at most those contained in rights.
|
|
||||||
// The capability rights on fd can never be increased by CapRightsLimit.
|
|
||||||
// See man cap_rights_limit(2) and rights(4).
|
|
||||||
func CapRightsLimit(fd uintptr, rights *CapRights) error {
|
|
||||||
return capRightsLimit(int(fd), rights)
|
|
||||||
}
|
|
||||||
|
|
||||||
// CapRightsGet returns a CapRights structure containing the operations permitted on fd.
|
|
||||||
// See man cap_rights_get(3) and rights(4).
|
|
||||||
func CapRightsGet(fd uintptr) (*CapRights, error) {
|
|
||||||
r, err := CapRightsInit(nil)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
err = capRightsGet(capRightsGoVersion, int(fd), r)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return r, nil
|
|
||||||
}
|
|
13
vendor/golang.org/x/sys/unix/constants.go
generated
vendored
13
vendor/golang.org/x/sys/unix/constants.go
generated
vendored
@@ -1,13 +0,0 @@
|
|||||||
// Copyright 2015 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
R_OK = 0x4
|
|
||||||
W_OK = 0x2
|
|
||||||
X_OK = 0x1
|
|
||||||
)
|
|
27
vendor/golang.org/x/sys/unix/dev_aix_ppc.go
generated
vendored
27
vendor/golang.org/x/sys/unix/dev_aix_ppc.go
generated
vendored
@@ -1,27 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build aix
|
|
||||||
// +build ppc
|
|
||||||
|
|
||||||
// Functions to access/create device major and minor numbers matching the
|
|
||||||
// encoding used by AIX.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
// Major returns the major component of a Linux device number.
|
|
||||||
func Major(dev uint64) uint32 {
|
|
||||||
return uint32((dev >> 16) & 0xffff)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Minor returns the minor component of a Linux device number.
|
|
||||||
func Minor(dev uint64) uint32 {
|
|
||||||
return uint32(dev & 0xffff)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mkdev returns a Linux device number generated from the given major and minor
|
|
||||||
// components.
|
|
||||||
func Mkdev(major, minor uint32) uint64 {
|
|
||||||
return uint64(((major) << 16) | (minor))
|
|
||||||
}
|
|
29
vendor/golang.org/x/sys/unix/dev_aix_ppc64.go
generated
vendored
29
vendor/golang.org/x/sys/unix/dev_aix_ppc64.go
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build aix
|
|
||||||
// +build ppc64
|
|
||||||
|
|
||||||
// Functions to access/create device major and minor numbers matching the
|
|
||||||
// encoding used AIX.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
// Major returns the major component of a Linux device number.
|
|
||||||
func Major(dev uint64) uint32 {
|
|
||||||
return uint32((dev & 0x3fffffff00000000) >> 32)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Minor returns the minor component of a Linux device number.
|
|
||||||
func Minor(dev uint64) uint32 {
|
|
||||||
return uint32((dev & 0x00000000ffffffff) >> 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mkdev returns a Linux device number generated from the given major and minor
|
|
||||||
// components.
|
|
||||||
func Mkdev(major, minor uint32) uint64 {
|
|
||||||
var DEVNO64 uint64
|
|
||||||
DEVNO64 = 0x8000000000000000
|
|
||||||
return ((uint64(major) << 32) | (uint64(minor) & 0x00000000FFFFFFFF) | DEVNO64)
|
|
||||||
}
|
|
24
vendor/golang.org/x/sys/unix/dev_darwin.go
generated
vendored
24
vendor/golang.org/x/sys/unix/dev_darwin.go
generated
vendored
@@ -1,24 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Functions to access/create device major and minor numbers matching the
|
|
||||||
// encoding used in Darwin's sys/types.h header.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
// Major returns the major component of a Darwin device number.
|
|
||||||
func Major(dev uint64) uint32 {
|
|
||||||
return uint32((dev >> 24) & 0xff)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Minor returns the minor component of a Darwin device number.
|
|
||||||
func Minor(dev uint64) uint32 {
|
|
||||||
return uint32(dev & 0xffffff)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mkdev returns a Darwin device number generated from the given major and minor
|
|
||||||
// components.
|
|
||||||
func Mkdev(major, minor uint32) uint64 {
|
|
||||||
return (uint64(major) << 24) | uint64(minor)
|
|
||||||
}
|
|
30
vendor/golang.org/x/sys/unix/dev_dragonfly.go
generated
vendored
30
vendor/golang.org/x/sys/unix/dev_dragonfly.go
generated
vendored
@@ -1,30 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Functions to access/create device major and minor numbers matching the
|
|
||||||
// encoding used in Dragonfly's sys/types.h header.
|
|
||||||
//
|
|
||||||
// The information below is extracted and adapted from sys/types.h:
|
|
||||||
//
|
|
||||||
// Minor gives a cookie instead of an index since in order to avoid changing the
|
|
||||||
// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for
|
|
||||||
// devices that don't use them.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
// Major returns the major component of a DragonFlyBSD device number.
|
|
||||||
func Major(dev uint64) uint32 {
|
|
||||||
return uint32((dev >> 8) & 0xff)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Minor returns the minor component of a DragonFlyBSD device number.
|
|
||||||
func Minor(dev uint64) uint32 {
|
|
||||||
return uint32(dev & 0xffff00ff)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mkdev returns a DragonFlyBSD device number generated from the given major and
|
|
||||||
// minor components.
|
|
||||||
func Mkdev(major, minor uint32) uint64 {
|
|
||||||
return (uint64(major) << 8) | uint64(minor)
|
|
||||||
}
|
|
30
vendor/golang.org/x/sys/unix/dev_freebsd.go
generated
vendored
30
vendor/golang.org/x/sys/unix/dev_freebsd.go
generated
vendored
@@ -1,30 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Functions to access/create device major and minor numbers matching the
|
|
||||||
// encoding used in FreeBSD's sys/types.h header.
|
|
||||||
//
|
|
||||||
// The information below is extracted and adapted from sys/types.h:
|
|
||||||
//
|
|
||||||
// Minor gives a cookie instead of an index since in order to avoid changing the
|
|
||||||
// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for
|
|
||||||
// devices that don't use them.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
// Major returns the major component of a FreeBSD device number.
|
|
||||||
func Major(dev uint64) uint32 {
|
|
||||||
return uint32((dev >> 8) & 0xff)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Minor returns the minor component of a FreeBSD device number.
|
|
||||||
func Minor(dev uint64) uint32 {
|
|
||||||
return uint32(dev & 0xffff00ff)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mkdev returns a FreeBSD device number generated from the given major and
|
|
||||||
// minor components.
|
|
||||||
func Mkdev(major, minor uint32) uint64 {
|
|
||||||
return (uint64(major) << 8) | uint64(minor)
|
|
||||||
}
|
|
42
vendor/golang.org/x/sys/unix/dev_linux.go
generated
vendored
42
vendor/golang.org/x/sys/unix/dev_linux.go
generated
vendored
@@ -1,42 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Functions to access/create device major and minor numbers matching the
|
|
||||||
// encoding used by the Linux kernel and glibc.
|
|
||||||
//
|
|
||||||
// The information below is extracted and adapted from bits/sysmacros.h in the
|
|
||||||
// glibc sources:
|
|
||||||
//
|
|
||||||
// dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's
|
|
||||||
// default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major
|
|
||||||
// number and m is a hex digit of the minor number. This is backward compatible
|
|
||||||
// with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also
|
|
||||||
// backward compatible with the Linux kernel, which for some architectures uses
|
|
||||||
// 32-bit dev_t, encoded as mmmM MMmm.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
// Major returns the major component of a Linux device number.
|
|
||||||
func Major(dev uint64) uint32 {
|
|
||||||
major := uint32((dev & 0x00000000000fff00) >> 8)
|
|
||||||
major |= uint32((dev & 0xfffff00000000000) >> 32)
|
|
||||||
return major
|
|
||||||
}
|
|
||||||
|
|
||||||
// Minor returns the minor component of a Linux device number.
|
|
||||||
func Minor(dev uint64) uint32 {
|
|
||||||
minor := uint32((dev & 0x00000000000000ff) >> 0)
|
|
||||||
minor |= uint32((dev & 0x00000ffffff00000) >> 12)
|
|
||||||
return minor
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mkdev returns a Linux device number generated from the given major and minor
|
|
||||||
// components.
|
|
||||||
func Mkdev(major, minor uint32) uint64 {
|
|
||||||
dev := (uint64(major) & 0x00000fff) << 8
|
|
||||||
dev |= (uint64(major) & 0xfffff000) << 32
|
|
||||||
dev |= (uint64(minor) & 0x000000ff) << 0
|
|
||||||
dev |= (uint64(minor) & 0xffffff00) << 12
|
|
||||||
return dev
|
|
||||||
}
|
|
29
vendor/golang.org/x/sys/unix/dev_netbsd.go
generated
vendored
29
vendor/golang.org/x/sys/unix/dev_netbsd.go
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Functions to access/create device major and minor numbers matching the
|
|
||||||
// encoding used in NetBSD's sys/types.h header.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
// Major returns the major component of a NetBSD device number.
|
|
||||||
func Major(dev uint64) uint32 {
|
|
||||||
return uint32((dev & 0x000fff00) >> 8)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Minor returns the minor component of a NetBSD device number.
|
|
||||||
func Minor(dev uint64) uint32 {
|
|
||||||
minor := uint32((dev & 0x000000ff) >> 0)
|
|
||||||
minor |= uint32((dev & 0xfff00000) >> 12)
|
|
||||||
return minor
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mkdev returns a NetBSD device number generated from the given major and minor
|
|
||||||
// components.
|
|
||||||
func Mkdev(major, minor uint32) uint64 {
|
|
||||||
dev := (uint64(major) << 8) & 0x000fff00
|
|
||||||
dev |= (uint64(minor) << 12) & 0xfff00000
|
|
||||||
dev |= (uint64(minor) << 0) & 0x000000ff
|
|
||||||
return dev
|
|
||||||
}
|
|
29
vendor/golang.org/x/sys/unix/dev_openbsd.go
generated
vendored
29
vendor/golang.org/x/sys/unix/dev_openbsd.go
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Functions to access/create device major and minor numbers matching the
|
|
||||||
// encoding used in OpenBSD's sys/types.h header.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
// Major returns the major component of an OpenBSD device number.
|
|
||||||
func Major(dev uint64) uint32 {
|
|
||||||
return uint32((dev & 0x0000ff00) >> 8)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Minor returns the minor component of an OpenBSD device number.
|
|
||||||
func Minor(dev uint64) uint32 {
|
|
||||||
minor := uint32((dev & 0x000000ff) >> 0)
|
|
||||||
minor |= uint32((dev & 0xffff0000) >> 8)
|
|
||||||
return minor
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mkdev returns an OpenBSD device number generated from the given major and minor
|
|
||||||
// components.
|
|
||||||
func Mkdev(major, minor uint32) uint64 {
|
|
||||||
dev := (uint64(major) << 8) & 0x0000ff00
|
|
||||||
dev |= (uint64(minor) << 8) & 0xffff0000
|
|
||||||
dev |= (uint64(minor) << 0) & 0x000000ff
|
|
||||||
return dev
|
|
||||||
}
|
|
102
vendor/golang.org/x/sys/unix/dirent.go
generated
vendored
102
vendor/golang.org/x/sys/unix/dirent.go
generated
vendored
@@ -1,102 +0,0 @@
|
|||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import "unsafe"
|
|
||||||
|
|
||||||
// readInt returns the size-bytes unsigned integer in native byte order at offset off.
|
|
||||||
func readInt(b []byte, off, size uintptr) (u uint64, ok bool) {
|
|
||||||
if len(b) < int(off+size) {
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
if isBigEndian {
|
|
||||||
return readIntBE(b[off:], size), true
|
|
||||||
}
|
|
||||||
return readIntLE(b[off:], size), true
|
|
||||||
}
|
|
||||||
|
|
||||||
func readIntBE(b []byte, size uintptr) uint64 {
|
|
||||||
switch size {
|
|
||||||
case 1:
|
|
||||||
return uint64(b[0])
|
|
||||||
case 2:
|
|
||||||
_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
|
|
||||||
return uint64(b[1]) | uint64(b[0])<<8
|
|
||||||
case 4:
|
|
||||||
_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
|
|
||||||
return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24
|
|
||||||
case 8:
|
|
||||||
_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
|
|
||||||
return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
|
|
||||||
uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
|
|
||||||
default:
|
|
||||||
panic("syscall: readInt with unsupported size")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func readIntLE(b []byte, size uintptr) uint64 {
|
|
||||||
switch size {
|
|
||||||
case 1:
|
|
||||||
return uint64(b[0])
|
|
||||||
case 2:
|
|
||||||
_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
|
|
||||||
return uint64(b[0]) | uint64(b[1])<<8
|
|
||||||
case 4:
|
|
||||||
_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
|
|
||||||
return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24
|
|
||||||
case 8:
|
|
||||||
_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
|
|
||||||
return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
|
|
||||||
uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
|
|
||||||
default:
|
|
||||||
panic("syscall: readInt with unsupported size")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParseDirent parses up to max directory entries in buf,
|
|
||||||
// appending the names to names. It returns the number of
|
|
||||||
// bytes consumed from buf, the number of entries added
|
|
||||||
// to names, and the new names slice.
|
|
||||||
func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
|
|
||||||
origlen := len(buf)
|
|
||||||
count = 0
|
|
||||||
for max != 0 && len(buf) > 0 {
|
|
||||||
reclen, ok := direntReclen(buf)
|
|
||||||
if !ok || reclen > uint64(len(buf)) {
|
|
||||||
return origlen, count, names
|
|
||||||
}
|
|
||||||
rec := buf[:reclen]
|
|
||||||
buf = buf[reclen:]
|
|
||||||
ino, ok := direntIno(rec)
|
|
||||||
if !ok {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if ino == 0 { // File absent in directory.
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
const namoff = uint64(unsafe.Offsetof(Dirent{}.Name))
|
|
||||||
namlen, ok := direntNamlen(rec)
|
|
||||||
if !ok || namoff+namlen > uint64(len(rec)) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
name := rec[namoff : namoff+namlen]
|
|
||||||
for i, c := range name {
|
|
||||||
if c == 0 {
|
|
||||||
name = name[:i]
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Check for useless names before allocating a string.
|
|
||||||
if string(name) == "." || string(name) == ".." {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
max--
|
|
||||||
count++
|
|
||||||
names = append(names, string(name))
|
|
||||||
}
|
|
||||||
return origlen - len(buf), count, names
|
|
||||||
}
|
|
9
vendor/golang.org/x/sys/unix/endian_big.go
generated
vendored
9
vendor/golang.org/x/sys/unix/endian_big.go
generated
vendored
@@ -1,9 +0,0 @@
|
|||||||
// Copyright 2016 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
//
|
|
||||||
// +build ppc64 s390x mips mips64
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const isBigEndian = true
|
|
9
vendor/golang.org/x/sys/unix/endian_little.go
generated
vendored
9
vendor/golang.org/x/sys/unix/endian_little.go
generated
vendored
@@ -1,9 +0,0 @@
|
|||||||
// Copyright 2016 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
//
|
|
||||||
// +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le riscv64
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const isBigEndian = false
|
|
31
vendor/golang.org/x/sys/unix/env_unix.go
generated
vendored
31
vendor/golang.org/x/sys/unix/env_unix.go
generated
vendored
@@ -1,31 +0,0 @@
|
|||||||
// Copyright 2010 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
|
|
||||||
|
|
||||||
// Unix environment variables.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
func Getenv(key string) (value string, found bool) {
|
|
||||||
return syscall.Getenv(key)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Setenv(key, value string) error {
|
|
||||||
return syscall.Setenv(key, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Clearenv() {
|
|
||||||
syscall.Clearenv()
|
|
||||||
}
|
|
||||||
|
|
||||||
func Environ() []string {
|
|
||||||
return syscall.Environ()
|
|
||||||
}
|
|
||||||
|
|
||||||
func Unsetenv(key string) error {
|
|
||||||
return syscall.Unsetenv(key)
|
|
||||||
}
|
|
233
vendor/golang.org/x/sys/unix/errors_freebsd_386.go
generated
vendored
233
vendor/golang.org/x/sys/unix/errors_freebsd_386.go
generated
vendored
@@ -1,233 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep
|
|
||||||
// them here for backwards compatibility.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
DLT_HHDLC = 0x79
|
|
||||||
IFF_SMART = 0x20
|
|
||||||
IFT_1822 = 0x2
|
|
||||||
IFT_A12MPPSWITCH = 0x82
|
|
||||||
IFT_AAL2 = 0xbb
|
|
||||||
IFT_AAL5 = 0x31
|
|
||||||
IFT_ADSL = 0x5e
|
|
||||||
IFT_AFLANE8023 = 0x3b
|
|
||||||
IFT_AFLANE8025 = 0x3c
|
|
||||||
IFT_ARAP = 0x58
|
|
||||||
IFT_ARCNET = 0x23
|
|
||||||
IFT_ARCNETPLUS = 0x24
|
|
||||||
IFT_ASYNC = 0x54
|
|
||||||
IFT_ATM = 0x25
|
|
||||||
IFT_ATMDXI = 0x69
|
|
||||||
IFT_ATMFUNI = 0x6a
|
|
||||||
IFT_ATMIMA = 0x6b
|
|
||||||
IFT_ATMLOGICAL = 0x50
|
|
||||||
IFT_ATMRADIO = 0xbd
|
|
||||||
IFT_ATMSUBINTERFACE = 0x86
|
|
||||||
IFT_ATMVCIENDPT = 0xc2
|
|
||||||
IFT_ATMVIRTUAL = 0x95
|
|
||||||
IFT_BGPPOLICYACCOUNTING = 0xa2
|
|
||||||
IFT_BSC = 0x53
|
|
||||||
IFT_CCTEMUL = 0x3d
|
|
||||||
IFT_CEPT = 0x13
|
|
||||||
IFT_CES = 0x85
|
|
||||||
IFT_CHANNEL = 0x46
|
|
||||||
IFT_CNR = 0x55
|
|
||||||
IFT_COFFEE = 0x84
|
|
||||||
IFT_COMPOSITELINK = 0x9b
|
|
||||||
IFT_DCN = 0x8d
|
|
||||||
IFT_DIGITALPOWERLINE = 0x8a
|
|
||||||
IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
|
|
||||||
IFT_DLSW = 0x4a
|
|
||||||
IFT_DOCSCABLEDOWNSTREAM = 0x80
|
|
||||||
IFT_DOCSCABLEMACLAYER = 0x7f
|
|
||||||
IFT_DOCSCABLEUPSTREAM = 0x81
|
|
||||||
IFT_DS0 = 0x51
|
|
||||||
IFT_DS0BUNDLE = 0x52
|
|
||||||
IFT_DS1FDL = 0xaa
|
|
||||||
IFT_DS3 = 0x1e
|
|
||||||
IFT_DTM = 0x8c
|
|
||||||
IFT_DVBASILN = 0xac
|
|
||||||
IFT_DVBASIOUT = 0xad
|
|
||||||
IFT_DVBRCCDOWNSTREAM = 0x93
|
|
||||||
IFT_DVBRCCMACLAYER = 0x92
|
|
||||||
IFT_DVBRCCUPSTREAM = 0x94
|
|
||||||
IFT_ENC = 0xf4
|
|
||||||
IFT_EON = 0x19
|
|
||||||
IFT_EPLRS = 0x57
|
|
||||||
IFT_ESCON = 0x49
|
|
||||||
IFT_ETHER = 0x6
|
|
||||||
IFT_FAITH = 0xf2
|
|
||||||
IFT_FAST = 0x7d
|
|
||||||
IFT_FASTETHER = 0x3e
|
|
||||||
IFT_FASTETHERFX = 0x45
|
|
||||||
IFT_FDDI = 0xf
|
|
||||||
IFT_FIBRECHANNEL = 0x38
|
|
||||||
IFT_FRAMERELAYINTERCONNECT = 0x3a
|
|
||||||
IFT_FRAMERELAYMPI = 0x5c
|
|
||||||
IFT_FRDLCIENDPT = 0xc1
|
|
||||||
IFT_FRELAY = 0x20
|
|
||||||
IFT_FRELAYDCE = 0x2c
|
|
||||||
IFT_FRF16MFRBUNDLE = 0xa3
|
|
||||||
IFT_FRFORWARD = 0x9e
|
|
||||||
IFT_G703AT2MB = 0x43
|
|
||||||
IFT_G703AT64K = 0x42
|
|
||||||
IFT_GIF = 0xf0
|
|
||||||
IFT_GIGABITETHERNET = 0x75
|
|
||||||
IFT_GR303IDT = 0xb2
|
|
||||||
IFT_GR303RDT = 0xb1
|
|
||||||
IFT_H323GATEKEEPER = 0xa4
|
|
||||||
IFT_H323PROXY = 0xa5
|
|
||||||
IFT_HDH1822 = 0x3
|
|
||||||
IFT_HDLC = 0x76
|
|
||||||
IFT_HDSL2 = 0xa8
|
|
||||||
IFT_HIPERLAN2 = 0xb7
|
|
||||||
IFT_HIPPI = 0x2f
|
|
||||||
IFT_HIPPIINTERFACE = 0x39
|
|
||||||
IFT_HOSTPAD = 0x5a
|
|
||||||
IFT_HSSI = 0x2e
|
|
||||||
IFT_HY = 0xe
|
|
||||||
IFT_IBM370PARCHAN = 0x48
|
|
||||||
IFT_IDSL = 0x9a
|
|
||||||
IFT_IEEE80211 = 0x47
|
|
||||||
IFT_IEEE80212 = 0x37
|
|
||||||
IFT_IEEE8023ADLAG = 0xa1
|
|
||||||
IFT_IFGSN = 0x91
|
|
||||||
IFT_IMT = 0xbe
|
|
||||||
IFT_INTERLEAVE = 0x7c
|
|
||||||
IFT_IP = 0x7e
|
|
||||||
IFT_IPFORWARD = 0x8e
|
|
||||||
IFT_IPOVERATM = 0x72
|
|
||||||
IFT_IPOVERCDLC = 0x6d
|
|
||||||
IFT_IPOVERCLAW = 0x6e
|
|
||||||
IFT_IPSWITCH = 0x4e
|
|
||||||
IFT_IPXIP = 0xf9
|
|
||||||
IFT_ISDN = 0x3f
|
|
||||||
IFT_ISDNBASIC = 0x14
|
|
||||||
IFT_ISDNPRIMARY = 0x15
|
|
||||||
IFT_ISDNS = 0x4b
|
|
||||||
IFT_ISDNU = 0x4c
|
|
||||||
IFT_ISO88022LLC = 0x29
|
|
||||||
IFT_ISO88023 = 0x7
|
|
||||||
IFT_ISO88024 = 0x8
|
|
||||||
IFT_ISO88025 = 0x9
|
|
||||||
IFT_ISO88025CRFPINT = 0x62
|
|
||||||
IFT_ISO88025DTR = 0x56
|
|
||||||
IFT_ISO88025FIBER = 0x73
|
|
||||||
IFT_ISO88026 = 0xa
|
|
||||||
IFT_ISUP = 0xb3
|
|
||||||
IFT_L3IPXVLAN = 0x89
|
|
||||||
IFT_LAPB = 0x10
|
|
||||||
IFT_LAPD = 0x4d
|
|
||||||
IFT_LAPF = 0x77
|
|
||||||
IFT_LOCALTALK = 0x2a
|
|
||||||
IFT_LOOP = 0x18
|
|
||||||
IFT_MEDIAMAILOVERIP = 0x8b
|
|
||||||
IFT_MFSIGLINK = 0xa7
|
|
||||||
IFT_MIOX25 = 0x26
|
|
||||||
IFT_MODEM = 0x30
|
|
||||||
IFT_MPC = 0x71
|
|
||||||
IFT_MPLS = 0xa6
|
|
||||||
IFT_MPLSTUNNEL = 0x96
|
|
||||||
IFT_MSDSL = 0x8f
|
|
||||||
IFT_MVL = 0xbf
|
|
||||||
IFT_MYRINET = 0x63
|
|
||||||
IFT_NFAS = 0xaf
|
|
||||||
IFT_NSIP = 0x1b
|
|
||||||
IFT_OPTICALCHANNEL = 0xc3
|
|
||||||
IFT_OPTICALTRANSPORT = 0xc4
|
|
||||||
IFT_OTHER = 0x1
|
|
||||||
IFT_P10 = 0xc
|
|
||||||
IFT_P80 = 0xd
|
|
||||||
IFT_PARA = 0x22
|
|
||||||
IFT_PFLOG = 0xf6
|
|
||||||
IFT_PFSYNC = 0xf7
|
|
||||||
IFT_PLC = 0xae
|
|
||||||
IFT_POS = 0xab
|
|
||||||
IFT_PPPMULTILINKBUNDLE = 0x6c
|
|
||||||
IFT_PROPBWAP2MP = 0xb8
|
|
||||||
IFT_PROPCNLS = 0x59
|
|
||||||
IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5
|
|
||||||
IFT_PROPDOCSWIRELESSMACLAYER = 0xb4
|
|
||||||
IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6
|
|
||||||
IFT_PROPMUX = 0x36
|
|
||||||
IFT_PROPWIRELESSP2P = 0x9d
|
|
||||||
IFT_PTPSERIAL = 0x16
|
|
||||||
IFT_PVC = 0xf1
|
|
||||||
IFT_QLLC = 0x44
|
|
||||||
IFT_RADIOMAC = 0xbc
|
|
||||||
IFT_RADSL = 0x5f
|
|
||||||
IFT_REACHDSL = 0xc0
|
|
||||||
IFT_RFC1483 = 0x9f
|
|
||||||
IFT_RS232 = 0x21
|
|
||||||
IFT_RSRB = 0x4f
|
|
||||||
IFT_SDLC = 0x11
|
|
||||||
IFT_SDSL = 0x60
|
|
||||||
IFT_SHDSL = 0xa9
|
|
||||||
IFT_SIP = 0x1f
|
|
||||||
IFT_SLIP = 0x1c
|
|
||||||
IFT_SMDSDXI = 0x2b
|
|
||||||
IFT_SMDSICIP = 0x34
|
|
||||||
IFT_SONET = 0x27
|
|
||||||
IFT_SONETOVERHEADCHANNEL = 0xb9
|
|
||||||
IFT_SONETPATH = 0x32
|
|
||||||
IFT_SONETVT = 0x33
|
|
||||||
IFT_SRP = 0x97
|
|
||||||
IFT_SS7SIGLINK = 0x9c
|
|
||||||
IFT_STACKTOSTACK = 0x6f
|
|
||||||
IFT_STARLAN = 0xb
|
|
||||||
IFT_STF = 0xd7
|
|
||||||
IFT_T1 = 0x12
|
|
||||||
IFT_TDLC = 0x74
|
|
||||||
IFT_TERMPAD = 0x5b
|
|
||||||
IFT_TR008 = 0xb0
|
|
||||||
IFT_TRANSPHDLC = 0x7b
|
|
||||||
IFT_TUNNEL = 0x83
|
|
||||||
IFT_ULTRA = 0x1d
|
|
||||||
IFT_USB = 0xa0
|
|
||||||
IFT_V11 = 0x40
|
|
||||||
IFT_V35 = 0x2d
|
|
||||||
IFT_V36 = 0x41
|
|
||||||
IFT_V37 = 0x78
|
|
||||||
IFT_VDSL = 0x61
|
|
||||||
IFT_VIRTUALIPADDRESS = 0x70
|
|
||||||
IFT_VOICEEM = 0x64
|
|
||||||
IFT_VOICEENCAP = 0x67
|
|
||||||
IFT_VOICEFXO = 0x65
|
|
||||||
IFT_VOICEFXS = 0x66
|
|
||||||
IFT_VOICEOVERATM = 0x98
|
|
||||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
|
||||||
IFT_VOICEOVERIP = 0x68
|
|
||||||
IFT_X213 = 0x5d
|
|
||||||
IFT_X25 = 0x5
|
|
||||||
IFT_X25DDN = 0x4
|
|
||||||
IFT_X25HUNTGROUP = 0x7a
|
|
||||||
IFT_X25MLP = 0x79
|
|
||||||
IFT_X25PLE = 0x28
|
|
||||||
IFT_XETHER = 0x1a
|
|
||||||
IPPROTO_MAXID = 0x34
|
|
||||||
IPV6_FAITH = 0x1d
|
|
||||||
IPV6_MIN_MEMBERSHIPS = 0x1f
|
|
||||||
IP_FAITH = 0x16
|
|
||||||
IP_MAX_SOURCE_FILTER = 0x400
|
|
||||||
IP_MIN_MEMBERSHIPS = 0x1f
|
|
||||||
MAP_NORESERVE = 0x40
|
|
||||||
MAP_RENAME = 0x20
|
|
||||||
NET_RT_MAXID = 0x6
|
|
||||||
RTF_PRCLONING = 0x10000
|
|
||||||
RTM_OLDADD = 0x9
|
|
||||||
RTM_OLDDEL = 0xa
|
|
||||||
RT_CACHING_CONTEXT = 0x1
|
|
||||||
RT_NORTREF = 0x2
|
|
||||||
SIOCADDRT = 0x8030720a
|
|
||||||
SIOCALIFADDR = 0x8118691b
|
|
||||||
SIOCDELRT = 0x8030720b
|
|
||||||
SIOCDLIFADDR = 0x8118691d
|
|
||||||
SIOCGLIFADDR = 0xc118691c
|
|
||||||
SIOCGLIFPHYADDR = 0xc118694b
|
|
||||||
SIOCSLIFPHYADDR = 0x8118694a
|
|
||||||
)
|
|
233
vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go
generated
vendored
233
vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go
generated
vendored
@@ -1,233 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep
|
|
||||||
// them here for backwards compatibility.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
DLT_HHDLC = 0x79
|
|
||||||
IFF_SMART = 0x20
|
|
||||||
IFT_1822 = 0x2
|
|
||||||
IFT_A12MPPSWITCH = 0x82
|
|
||||||
IFT_AAL2 = 0xbb
|
|
||||||
IFT_AAL5 = 0x31
|
|
||||||
IFT_ADSL = 0x5e
|
|
||||||
IFT_AFLANE8023 = 0x3b
|
|
||||||
IFT_AFLANE8025 = 0x3c
|
|
||||||
IFT_ARAP = 0x58
|
|
||||||
IFT_ARCNET = 0x23
|
|
||||||
IFT_ARCNETPLUS = 0x24
|
|
||||||
IFT_ASYNC = 0x54
|
|
||||||
IFT_ATM = 0x25
|
|
||||||
IFT_ATMDXI = 0x69
|
|
||||||
IFT_ATMFUNI = 0x6a
|
|
||||||
IFT_ATMIMA = 0x6b
|
|
||||||
IFT_ATMLOGICAL = 0x50
|
|
||||||
IFT_ATMRADIO = 0xbd
|
|
||||||
IFT_ATMSUBINTERFACE = 0x86
|
|
||||||
IFT_ATMVCIENDPT = 0xc2
|
|
||||||
IFT_ATMVIRTUAL = 0x95
|
|
||||||
IFT_BGPPOLICYACCOUNTING = 0xa2
|
|
||||||
IFT_BSC = 0x53
|
|
||||||
IFT_CCTEMUL = 0x3d
|
|
||||||
IFT_CEPT = 0x13
|
|
||||||
IFT_CES = 0x85
|
|
||||||
IFT_CHANNEL = 0x46
|
|
||||||
IFT_CNR = 0x55
|
|
||||||
IFT_COFFEE = 0x84
|
|
||||||
IFT_COMPOSITELINK = 0x9b
|
|
||||||
IFT_DCN = 0x8d
|
|
||||||
IFT_DIGITALPOWERLINE = 0x8a
|
|
||||||
IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
|
|
||||||
IFT_DLSW = 0x4a
|
|
||||||
IFT_DOCSCABLEDOWNSTREAM = 0x80
|
|
||||||
IFT_DOCSCABLEMACLAYER = 0x7f
|
|
||||||
IFT_DOCSCABLEUPSTREAM = 0x81
|
|
||||||
IFT_DS0 = 0x51
|
|
||||||
IFT_DS0BUNDLE = 0x52
|
|
||||||
IFT_DS1FDL = 0xaa
|
|
||||||
IFT_DS3 = 0x1e
|
|
||||||
IFT_DTM = 0x8c
|
|
||||||
IFT_DVBASILN = 0xac
|
|
||||||
IFT_DVBASIOUT = 0xad
|
|
||||||
IFT_DVBRCCDOWNSTREAM = 0x93
|
|
||||||
IFT_DVBRCCMACLAYER = 0x92
|
|
||||||
IFT_DVBRCCUPSTREAM = 0x94
|
|
||||||
IFT_ENC = 0xf4
|
|
||||||
IFT_EON = 0x19
|
|
||||||
IFT_EPLRS = 0x57
|
|
||||||
IFT_ESCON = 0x49
|
|
||||||
IFT_ETHER = 0x6
|
|
||||||
IFT_FAITH = 0xf2
|
|
||||||
IFT_FAST = 0x7d
|
|
||||||
IFT_FASTETHER = 0x3e
|
|
||||||
IFT_FASTETHERFX = 0x45
|
|
||||||
IFT_FDDI = 0xf
|
|
||||||
IFT_FIBRECHANNEL = 0x38
|
|
||||||
IFT_FRAMERELAYINTERCONNECT = 0x3a
|
|
||||||
IFT_FRAMERELAYMPI = 0x5c
|
|
||||||
IFT_FRDLCIENDPT = 0xc1
|
|
||||||
IFT_FRELAY = 0x20
|
|
||||||
IFT_FRELAYDCE = 0x2c
|
|
||||||
IFT_FRF16MFRBUNDLE = 0xa3
|
|
||||||
IFT_FRFORWARD = 0x9e
|
|
||||||
IFT_G703AT2MB = 0x43
|
|
||||||
IFT_G703AT64K = 0x42
|
|
||||||
IFT_GIF = 0xf0
|
|
||||||
IFT_GIGABITETHERNET = 0x75
|
|
||||||
IFT_GR303IDT = 0xb2
|
|
||||||
IFT_GR303RDT = 0xb1
|
|
||||||
IFT_H323GATEKEEPER = 0xa4
|
|
||||||
IFT_H323PROXY = 0xa5
|
|
||||||
IFT_HDH1822 = 0x3
|
|
||||||
IFT_HDLC = 0x76
|
|
||||||
IFT_HDSL2 = 0xa8
|
|
||||||
IFT_HIPERLAN2 = 0xb7
|
|
||||||
IFT_HIPPI = 0x2f
|
|
||||||
IFT_HIPPIINTERFACE = 0x39
|
|
||||||
IFT_HOSTPAD = 0x5a
|
|
||||||
IFT_HSSI = 0x2e
|
|
||||||
IFT_HY = 0xe
|
|
||||||
IFT_IBM370PARCHAN = 0x48
|
|
||||||
IFT_IDSL = 0x9a
|
|
||||||
IFT_IEEE80211 = 0x47
|
|
||||||
IFT_IEEE80212 = 0x37
|
|
||||||
IFT_IEEE8023ADLAG = 0xa1
|
|
||||||
IFT_IFGSN = 0x91
|
|
||||||
IFT_IMT = 0xbe
|
|
||||||
IFT_INTERLEAVE = 0x7c
|
|
||||||
IFT_IP = 0x7e
|
|
||||||
IFT_IPFORWARD = 0x8e
|
|
||||||
IFT_IPOVERATM = 0x72
|
|
||||||
IFT_IPOVERCDLC = 0x6d
|
|
||||||
IFT_IPOVERCLAW = 0x6e
|
|
||||||
IFT_IPSWITCH = 0x4e
|
|
||||||
IFT_IPXIP = 0xf9
|
|
||||||
IFT_ISDN = 0x3f
|
|
||||||
IFT_ISDNBASIC = 0x14
|
|
||||||
IFT_ISDNPRIMARY = 0x15
|
|
||||||
IFT_ISDNS = 0x4b
|
|
||||||
IFT_ISDNU = 0x4c
|
|
||||||
IFT_ISO88022LLC = 0x29
|
|
||||||
IFT_ISO88023 = 0x7
|
|
||||||
IFT_ISO88024 = 0x8
|
|
||||||
IFT_ISO88025 = 0x9
|
|
||||||
IFT_ISO88025CRFPINT = 0x62
|
|
||||||
IFT_ISO88025DTR = 0x56
|
|
||||||
IFT_ISO88025FIBER = 0x73
|
|
||||||
IFT_ISO88026 = 0xa
|
|
||||||
IFT_ISUP = 0xb3
|
|
||||||
IFT_L3IPXVLAN = 0x89
|
|
||||||
IFT_LAPB = 0x10
|
|
||||||
IFT_LAPD = 0x4d
|
|
||||||
IFT_LAPF = 0x77
|
|
||||||
IFT_LOCALTALK = 0x2a
|
|
||||||
IFT_LOOP = 0x18
|
|
||||||
IFT_MEDIAMAILOVERIP = 0x8b
|
|
||||||
IFT_MFSIGLINK = 0xa7
|
|
||||||
IFT_MIOX25 = 0x26
|
|
||||||
IFT_MODEM = 0x30
|
|
||||||
IFT_MPC = 0x71
|
|
||||||
IFT_MPLS = 0xa6
|
|
||||||
IFT_MPLSTUNNEL = 0x96
|
|
||||||
IFT_MSDSL = 0x8f
|
|
||||||
IFT_MVL = 0xbf
|
|
||||||
IFT_MYRINET = 0x63
|
|
||||||
IFT_NFAS = 0xaf
|
|
||||||
IFT_NSIP = 0x1b
|
|
||||||
IFT_OPTICALCHANNEL = 0xc3
|
|
||||||
IFT_OPTICALTRANSPORT = 0xc4
|
|
||||||
IFT_OTHER = 0x1
|
|
||||||
IFT_P10 = 0xc
|
|
||||||
IFT_P80 = 0xd
|
|
||||||
IFT_PARA = 0x22
|
|
||||||
IFT_PFLOG = 0xf6
|
|
||||||
IFT_PFSYNC = 0xf7
|
|
||||||
IFT_PLC = 0xae
|
|
||||||
IFT_POS = 0xab
|
|
||||||
IFT_PPPMULTILINKBUNDLE = 0x6c
|
|
||||||
IFT_PROPBWAP2MP = 0xb8
|
|
||||||
IFT_PROPCNLS = 0x59
|
|
||||||
IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5
|
|
||||||
IFT_PROPDOCSWIRELESSMACLAYER = 0xb4
|
|
||||||
IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6
|
|
||||||
IFT_PROPMUX = 0x36
|
|
||||||
IFT_PROPWIRELESSP2P = 0x9d
|
|
||||||
IFT_PTPSERIAL = 0x16
|
|
||||||
IFT_PVC = 0xf1
|
|
||||||
IFT_QLLC = 0x44
|
|
||||||
IFT_RADIOMAC = 0xbc
|
|
||||||
IFT_RADSL = 0x5f
|
|
||||||
IFT_REACHDSL = 0xc0
|
|
||||||
IFT_RFC1483 = 0x9f
|
|
||||||
IFT_RS232 = 0x21
|
|
||||||
IFT_RSRB = 0x4f
|
|
||||||
IFT_SDLC = 0x11
|
|
||||||
IFT_SDSL = 0x60
|
|
||||||
IFT_SHDSL = 0xa9
|
|
||||||
IFT_SIP = 0x1f
|
|
||||||
IFT_SLIP = 0x1c
|
|
||||||
IFT_SMDSDXI = 0x2b
|
|
||||||
IFT_SMDSICIP = 0x34
|
|
||||||
IFT_SONET = 0x27
|
|
||||||
IFT_SONETOVERHEADCHANNEL = 0xb9
|
|
||||||
IFT_SONETPATH = 0x32
|
|
||||||
IFT_SONETVT = 0x33
|
|
||||||
IFT_SRP = 0x97
|
|
||||||
IFT_SS7SIGLINK = 0x9c
|
|
||||||
IFT_STACKTOSTACK = 0x6f
|
|
||||||
IFT_STARLAN = 0xb
|
|
||||||
IFT_STF = 0xd7
|
|
||||||
IFT_T1 = 0x12
|
|
||||||
IFT_TDLC = 0x74
|
|
||||||
IFT_TERMPAD = 0x5b
|
|
||||||
IFT_TR008 = 0xb0
|
|
||||||
IFT_TRANSPHDLC = 0x7b
|
|
||||||
IFT_TUNNEL = 0x83
|
|
||||||
IFT_ULTRA = 0x1d
|
|
||||||
IFT_USB = 0xa0
|
|
||||||
IFT_V11 = 0x40
|
|
||||||
IFT_V35 = 0x2d
|
|
||||||
IFT_V36 = 0x41
|
|
||||||
IFT_V37 = 0x78
|
|
||||||
IFT_VDSL = 0x61
|
|
||||||
IFT_VIRTUALIPADDRESS = 0x70
|
|
||||||
IFT_VOICEEM = 0x64
|
|
||||||
IFT_VOICEENCAP = 0x67
|
|
||||||
IFT_VOICEFXO = 0x65
|
|
||||||
IFT_VOICEFXS = 0x66
|
|
||||||
IFT_VOICEOVERATM = 0x98
|
|
||||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
|
||||||
IFT_VOICEOVERIP = 0x68
|
|
||||||
IFT_X213 = 0x5d
|
|
||||||
IFT_X25 = 0x5
|
|
||||||
IFT_X25DDN = 0x4
|
|
||||||
IFT_X25HUNTGROUP = 0x7a
|
|
||||||
IFT_X25MLP = 0x79
|
|
||||||
IFT_X25PLE = 0x28
|
|
||||||
IFT_XETHER = 0x1a
|
|
||||||
IPPROTO_MAXID = 0x34
|
|
||||||
IPV6_FAITH = 0x1d
|
|
||||||
IPV6_MIN_MEMBERSHIPS = 0x1f
|
|
||||||
IP_FAITH = 0x16
|
|
||||||
IP_MAX_SOURCE_FILTER = 0x400
|
|
||||||
IP_MIN_MEMBERSHIPS = 0x1f
|
|
||||||
MAP_NORESERVE = 0x40
|
|
||||||
MAP_RENAME = 0x20
|
|
||||||
NET_RT_MAXID = 0x6
|
|
||||||
RTF_PRCLONING = 0x10000
|
|
||||||
RTM_OLDADD = 0x9
|
|
||||||
RTM_OLDDEL = 0xa
|
|
||||||
RT_CACHING_CONTEXT = 0x1
|
|
||||||
RT_NORTREF = 0x2
|
|
||||||
SIOCADDRT = 0x8040720a
|
|
||||||
SIOCALIFADDR = 0x8118691b
|
|
||||||
SIOCDELRT = 0x8040720b
|
|
||||||
SIOCDLIFADDR = 0x8118691d
|
|
||||||
SIOCGLIFADDR = 0xc118691c
|
|
||||||
SIOCGLIFPHYADDR = 0xc118694b
|
|
||||||
SIOCSLIFPHYADDR = 0x8118694a
|
|
||||||
)
|
|
226
vendor/golang.org/x/sys/unix/errors_freebsd_arm.go
generated
vendored
226
vendor/golang.org/x/sys/unix/errors_freebsd_arm.go
generated
vendored
@@ -1,226 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
IFT_1822 = 0x2
|
|
||||||
IFT_A12MPPSWITCH = 0x82
|
|
||||||
IFT_AAL2 = 0xbb
|
|
||||||
IFT_AAL5 = 0x31
|
|
||||||
IFT_ADSL = 0x5e
|
|
||||||
IFT_AFLANE8023 = 0x3b
|
|
||||||
IFT_AFLANE8025 = 0x3c
|
|
||||||
IFT_ARAP = 0x58
|
|
||||||
IFT_ARCNET = 0x23
|
|
||||||
IFT_ARCNETPLUS = 0x24
|
|
||||||
IFT_ASYNC = 0x54
|
|
||||||
IFT_ATM = 0x25
|
|
||||||
IFT_ATMDXI = 0x69
|
|
||||||
IFT_ATMFUNI = 0x6a
|
|
||||||
IFT_ATMIMA = 0x6b
|
|
||||||
IFT_ATMLOGICAL = 0x50
|
|
||||||
IFT_ATMRADIO = 0xbd
|
|
||||||
IFT_ATMSUBINTERFACE = 0x86
|
|
||||||
IFT_ATMVCIENDPT = 0xc2
|
|
||||||
IFT_ATMVIRTUAL = 0x95
|
|
||||||
IFT_BGPPOLICYACCOUNTING = 0xa2
|
|
||||||
IFT_BSC = 0x53
|
|
||||||
IFT_CCTEMUL = 0x3d
|
|
||||||
IFT_CEPT = 0x13
|
|
||||||
IFT_CES = 0x85
|
|
||||||
IFT_CHANNEL = 0x46
|
|
||||||
IFT_CNR = 0x55
|
|
||||||
IFT_COFFEE = 0x84
|
|
||||||
IFT_COMPOSITELINK = 0x9b
|
|
||||||
IFT_DCN = 0x8d
|
|
||||||
IFT_DIGITALPOWERLINE = 0x8a
|
|
||||||
IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
|
|
||||||
IFT_DLSW = 0x4a
|
|
||||||
IFT_DOCSCABLEDOWNSTREAM = 0x80
|
|
||||||
IFT_DOCSCABLEMACLAYER = 0x7f
|
|
||||||
IFT_DOCSCABLEUPSTREAM = 0x81
|
|
||||||
IFT_DS0 = 0x51
|
|
||||||
IFT_DS0BUNDLE = 0x52
|
|
||||||
IFT_DS1FDL = 0xaa
|
|
||||||
IFT_DS3 = 0x1e
|
|
||||||
IFT_DTM = 0x8c
|
|
||||||
IFT_DVBASILN = 0xac
|
|
||||||
IFT_DVBASIOUT = 0xad
|
|
||||||
IFT_DVBRCCDOWNSTREAM = 0x93
|
|
||||||
IFT_DVBRCCMACLAYER = 0x92
|
|
||||||
IFT_DVBRCCUPSTREAM = 0x94
|
|
||||||
IFT_ENC = 0xf4
|
|
||||||
IFT_EON = 0x19
|
|
||||||
IFT_EPLRS = 0x57
|
|
||||||
IFT_ESCON = 0x49
|
|
||||||
IFT_ETHER = 0x6
|
|
||||||
IFT_FAST = 0x7d
|
|
||||||
IFT_FASTETHER = 0x3e
|
|
||||||
IFT_FASTETHERFX = 0x45
|
|
||||||
IFT_FDDI = 0xf
|
|
||||||
IFT_FIBRECHANNEL = 0x38
|
|
||||||
IFT_FRAMERELAYINTERCONNECT = 0x3a
|
|
||||||
IFT_FRAMERELAYMPI = 0x5c
|
|
||||||
IFT_FRDLCIENDPT = 0xc1
|
|
||||||
IFT_FRELAY = 0x20
|
|
||||||
IFT_FRELAYDCE = 0x2c
|
|
||||||
IFT_FRF16MFRBUNDLE = 0xa3
|
|
||||||
IFT_FRFORWARD = 0x9e
|
|
||||||
IFT_G703AT2MB = 0x43
|
|
||||||
IFT_G703AT64K = 0x42
|
|
||||||
IFT_GIF = 0xf0
|
|
||||||
IFT_GIGABITETHERNET = 0x75
|
|
||||||
IFT_GR303IDT = 0xb2
|
|
||||||
IFT_GR303RDT = 0xb1
|
|
||||||
IFT_H323GATEKEEPER = 0xa4
|
|
||||||
IFT_H323PROXY = 0xa5
|
|
||||||
IFT_HDH1822 = 0x3
|
|
||||||
IFT_HDLC = 0x76
|
|
||||||
IFT_HDSL2 = 0xa8
|
|
||||||
IFT_HIPERLAN2 = 0xb7
|
|
||||||
IFT_HIPPI = 0x2f
|
|
||||||
IFT_HIPPIINTERFACE = 0x39
|
|
||||||
IFT_HOSTPAD = 0x5a
|
|
||||||
IFT_HSSI = 0x2e
|
|
||||||
IFT_HY = 0xe
|
|
||||||
IFT_IBM370PARCHAN = 0x48
|
|
||||||
IFT_IDSL = 0x9a
|
|
||||||
IFT_IEEE80211 = 0x47
|
|
||||||
IFT_IEEE80212 = 0x37
|
|
||||||
IFT_IEEE8023ADLAG = 0xa1
|
|
||||||
IFT_IFGSN = 0x91
|
|
||||||
IFT_IMT = 0xbe
|
|
||||||
IFT_INTERLEAVE = 0x7c
|
|
||||||
IFT_IP = 0x7e
|
|
||||||
IFT_IPFORWARD = 0x8e
|
|
||||||
IFT_IPOVERATM = 0x72
|
|
||||||
IFT_IPOVERCDLC = 0x6d
|
|
||||||
IFT_IPOVERCLAW = 0x6e
|
|
||||||
IFT_IPSWITCH = 0x4e
|
|
||||||
IFT_ISDN = 0x3f
|
|
||||||
IFT_ISDNBASIC = 0x14
|
|
||||||
IFT_ISDNPRIMARY = 0x15
|
|
||||||
IFT_ISDNS = 0x4b
|
|
||||||
IFT_ISDNU = 0x4c
|
|
||||||
IFT_ISO88022LLC = 0x29
|
|
||||||
IFT_ISO88023 = 0x7
|
|
||||||
IFT_ISO88024 = 0x8
|
|
||||||
IFT_ISO88025 = 0x9
|
|
||||||
IFT_ISO88025CRFPINT = 0x62
|
|
||||||
IFT_ISO88025DTR = 0x56
|
|
||||||
IFT_ISO88025FIBER = 0x73
|
|
||||||
IFT_ISO88026 = 0xa
|
|
||||||
IFT_ISUP = 0xb3
|
|
||||||
IFT_L3IPXVLAN = 0x89
|
|
||||||
IFT_LAPB = 0x10
|
|
||||||
IFT_LAPD = 0x4d
|
|
||||||
IFT_LAPF = 0x77
|
|
||||||
IFT_LOCALTALK = 0x2a
|
|
||||||
IFT_LOOP = 0x18
|
|
||||||
IFT_MEDIAMAILOVERIP = 0x8b
|
|
||||||
IFT_MFSIGLINK = 0xa7
|
|
||||||
IFT_MIOX25 = 0x26
|
|
||||||
IFT_MODEM = 0x30
|
|
||||||
IFT_MPC = 0x71
|
|
||||||
IFT_MPLS = 0xa6
|
|
||||||
IFT_MPLSTUNNEL = 0x96
|
|
||||||
IFT_MSDSL = 0x8f
|
|
||||||
IFT_MVL = 0xbf
|
|
||||||
IFT_MYRINET = 0x63
|
|
||||||
IFT_NFAS = 0xaf
|
|
||||||
IFT_NSIP = 0x1b
|
|
||||||
IFT_OPTICALCHANNEL = 0xc3
|
|
||||||
IFT_OPTICALTRANSPORT = 0xc4
|
|
||||||
IFT_OTHER = 0x1
|
|
||||||
IFT_P10 = 0xc
|
|
||||||
IFT_P80 = 0xd
|
|
||||||
IFT_PARA = 0x22
|
|
||||||
IFT_PFLOG = 0xf6
|
|
||||||
IFT_PFSYNC = 0xf7
|
|
||||||
IFT_PLC = 0xae
|
|
||||||
IFT_POS = 0xab
|
|
||||||
IFT_PPPMULTILINKBUNDLE = 0x6c
|
|
||||||
IFT_PROPBWAP2MP = 0xb8
|
|
||||||
IFT_PROPCNLS = 0x59
|
|
||||||
IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5
|
|
||||||
IFT_PROPDOCSWIRELESSMACLAYER = 0xb4
|
|
||||||
IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6
|
|
||||||
IFT_PROPMUX = 0x36
|
|
||||||
IFT_PROPWIRELESSP2P = 0x9d
|
|
||||||
IFT_PTPSERIAL = 0x16
|
|
||||||
IFT_PVC = 0xf1
|
|
||||||
IFT_QLLC = 0x44
|
|
||||||
IFT_RADIOMAC = 0xbc
|
|
||||||
IFT_RADSL = 0x5f
|
|
||||||
IFT_REACHDSL = 0xc0
|
|
||||||
IFT_RFC1483 = 0x9f
|
|
||||||
IFT_RS232 = 0x21
|
|
||||||
IFT_RSRB = 0x4f
|
|
||||||
IFT_SDLC = 0x11
|
|
||||||
IFT_SDSL = 0x60
|
|
||||||
IFT_SHDSL = 0xa9
|
|
||||||
IFT_SIP = 0x1f
|
|
||||||
IFT_SLIP = 0x1c
|
|
||||||
IFT_SMDSDXI = 0x2b
|
|
||||||
IFT_SMDSICIP = 0x34
|
|
||||||
IFT_SONET = 0x27
|
|
||||||
IFT_SONETOVERHEADCHANNEL = 0xb9
|
|
||||||
IFT_SONETPATH = 0x32
|
|
||||||
IFT_SONETVT = 0x33
|
|
||||||
IFT_SRP = 0x97
|
|
||||||
IFT_SS7SIGLINK = 0x9c
|
|
||||||
IFT_STACKTOSTACK = 0x6f
|
|
||||||
IFT_STARLAN = 0xb
|
|
||||||
IFT_STF = 0xd7
|
|
||||||
IFT_T1 = 0x12
|
|
||||||
IFT_TDLC = 0x74
|
|
||||||
IFT_TERMPAD = 0x5b
|
|
||||||
IFT_TR008 = 0xb0
|
|
||||||
IFT_TRANSPHDLC = 0x7b
|
|
||||||
IFT_TUNNEL = 0x83
|
|
||||||
IFT_ULTRA = 0x1d
|
|
||||||
IFT_USB = 0xa0
|
|
||||||
IFT_V11 = 0x40
|
|
||||||
IFT_V35 = 0x2d
|
|
||||||
IFT_V36 = 0x41
|
|
||||||
IFT_V37 = 0x78
|
|
||||||
IFT_VDSL = 0x61
|
|
||||||
IFT_VIRTUALIPADDRESS = 0x70
|
|
||||||
IFT_VOICEEM = 0x64
|
|
||||||
IFT_VOICEENCAP = 0x67
|
|
||||||
IFT_VOICEFXO = 0x65
|
|
||||||
IFT_VOICEFXS = 0x66
|
|
||||||
IFT_VOICEOVERATM = 0x98
|
|
||||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
|
||||||
IFT_VOICEOVERIP = 0x68
|
|
||||||
IFT_X213 = 0x5d
|
|
||||||
IFT_X25 = 0x5
|
|
||||||
IFT_X25DDN = 0x4
|
|
||||||
IFT_X25HUNTGROUP = 0x7a
|
|
||||||
IFT_X25MLP = 0x79
|
|
||||||
IFT_X25PLE = 0x28
|
|
||||||
IFT_XETHER = 0x1a
|
|
||||||
|
|
||||||
// missing constants on FreeBSD-11.1-RELEASE, copied from old values in ztypes_freebsd_arm.go
|
|
||||||
IFF_SMART = 0x20
|
|
||||||
IFT_FAITH = 0xf2
|
|
||||||
IFT_IPXIP = 0xf9
|
|
||||||
IPPROTO_MAXID = 0x34
|
|
||||||
IPV6_FAITH = 0x1d
|
|
||||||
IP_FAITH = 0x16
|
|
||||||
MAP_NORESERVE = 0x40
|
|
||||||
MAP_RENAME = 0x20
|
|
||||||
NET_RT_MAXID = 0x6
|
|
||||||
RTF_PRCLONING = 0x10000
|
|
||||||
RTM_OLDADD = 0x9
|
|
||||||
RTM_OLDDEL = 0xa
|
|
||||||
SIOCADDRT = 0x8030720a
|
|
||||||
SIOCALIFADDR = 0x8118691b
|
|
||||||
SIOCDELRT = 0x8030720b
|
|
||||||
SIOCDLIFADDR = 0x8118691d
|
|
||||||
SIOCGLIFADDR = 0xc118691c
|
|
||||||
SIOCGLIFPHYADDR = 0xc118694b
|
|
||||||
SIOCSLIFPHYADDR = 0x8118694a
|
|
||||||
)
|
|
17
vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go
generated
vendored
17
vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go
generated
vendored
@@ -1,17 +0,0 @@
|
|||||||
// Copyright 2020 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep
|
|
||||||
// them here for backwards compatibility.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
DLT_HHDLC = 0x79
|
|
||||||
IPV6_MIN_MEMBERSHIPS = 0x1f
|
|
||||||
IP_MAX_SOURCE_FILTER = 0x400
|
|
||||||
IP_MIN_MEMBERSHIPS = 0x1f
|
|
||||||
RT_CACHING_CONTEXT = 0x1
|
|
||||||
RT_NORTREF = 0x2
|
|
||||||
)
|
|
36
vendor/golang.org/x/sys/unix/fcntl.go
generated
vendored
36
vendor/golang.org/x/sys/unix/fcntl.go
generated
vendored
@@ -1,36 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build dragonfly freebsd linux netbsd openbsd
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import "unsafe"
|
|
||||||
|
|
||||||
// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux
|
|
||||||
// systems by fcntl_linux_32bit.go to be SYS_FCNTL64.
|
|
||||||
var fcntl64Syscall uintptr = SYS_FCNTL
|
|
||||||
|
|
||||||
func fcntl(fd int, cmd, arg int) (int, error) {
|
|
||||||
valptr, _, errno := Syscall(fcntl64Syscall, uintptr(fd), uintptr(cmd), uintptr(arg))
|
|
||||||
var err error
|
|
||||||
if errno != 0 {
|
|
||||||
err = errno
|
|
||||||
}
|
|
||||||
return int(valptr), err
|
|
||||||
}
|
|
||||||
|
|
||||||
// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
|
|
||||||
func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
|
|
||||||
return fcntl(int(fd), cmd, arg)
|
|
||||||
}
|
|
||||||
|
|
||||||
// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
|
|
||||||
func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
|
|
||||||
_, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk)))
|
|
||||||
if errno == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return errno
|
|
||||||
}
|
|
18
vendor/golang.org/x/sys/unix/fcntl_darwin.go
generated
vendored
18
vendor/golang.org/x/sys/unix/fcntl_darwin.go
generated
vendored
@@ -1,18 +0,0 @@
|
|||||||
// Copyright 2019 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import "unsafe"
|
|
||||||
|
|
||||||
// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
|
|
||||||
func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
|
|
||||||
return fcntl(int(fd), cmd, arg)
|
|
||||||
}
|
|
||||||
|
|
||||||
// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
|
|
||||||
func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
|
|
||||||
_, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk))))
|
|
||||||
return err
|
|
||||||
}
|
|
13
vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go
generated
vendored
13
vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go
generated
vendored
@@ -1,13 +0,0 @@
|
|||||||
// +build linux,386 linux,arm linux,mips linux,mipsle
|
|
||||||
|
|
||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
// On 32-bit Linux systems, the fcntl syscall that matches Go's
|
|
||||||
// Flock_t type is SYS_FCNTL64, not SYS_FCNTL.
|
|
||||||
fcntl64Syscall = SYS_FCNTL64
|
|
||||||
}
|
|
29
vendor/golang.org/x/sys/unix/fdset.go
generated
vendored
29
vendor/golang.org/x/sys/unix/fdset.go
generated
vendored
@@ -1,29 +0,0 @@
|
|||||||
// Copyright 2019 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
// Set adds fd to the set fds.
|
|
||||||
func (fds *FdSet) Set(fd int) {
|
|
||||||
fds.Bits[fd/NFDBITS] |= (1 << (uintptr(fd) % NFDBITS))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear removes fd from the set fds.
|
|
||||||
func (fds *FdSet) Clear(fd int) {
|
|
||||||
fds.Bits[fd/NFDBITS] &^= (1 << (uintptr(fd) % NFDBITS))
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsSet returns whether fd is in the set fds.
|
|
||||||
func (fds *FdSet) IsSet(fd int) bool {
|
|
||||||
return fds.Bits[fd/NFDBITS]&(1<<(uintptr(fd)%NFDBITS)) != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zero clears the set fds.
|
|
||||||
func (fds *FdSet) Zero() {
|
|
||||||
for i := range fds.Bits {
|
|
||||||
fds.Bits[i] = 0
|
|
||||||
}
|
|
||||||
}
|
|
62
vendor/golang.org/x/sys/unix/gccgo.go
generated
vendored
62
vendor/golang.org/x/sys/unix/gccgo.go
generated
vendored
@@ -1,62 +0,0 @@
|
|||||||
// Copyright 2015 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build gccgo
|
|
||||||
// +build !aix
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
// We can't use the gc-syntax .s files for gccgo. On the plus side
|
|
||||||
// much of the functionality can be written directly in Go.
|
|
||||||
|
|
||||||
//extern gccgoRealSyscallNoError
|
|
||||||
func realSyscallNoError(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r uintptr)
|
|
||||||
|
|
||||||
//extern gccgoRealSyscall
|
|
||||||
func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr)
|
|
||||||
|
|
||||||
func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {
|
|
||||||
syscall.Entersyscall()
|
|
||||||
r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
|
|
||||||
syscall.Exitsyscall()
|
|
||||||
return r, 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
|
|
||||||
syscall.Entersyscall()
|
|
||||||
r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
|
|
||||||
syscall.Exitsyscall()
|
|
||||||
return r, 0, syscall.Errno(errno)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
|
|
||||||
syscall.Entersyscall()
|
|
||||||
r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)
|
|
||||||
syscall.Exitsyscall()
|
|
||||||
return r, 0, syscall.Errno(errno)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) {
|
|
||||||
syscall.Entersyscall()
|
|
||||||
r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9)
|
|
||||||
syscall.Exitsyscall()
|
|
||||||
return r, 0, syscall.Errno(errno)
|
|
||||||
}
|
|
||||||
|
|
||||||
func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {
|
|
||||||
r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
|
|
||||||
return r, 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
|
|
||||||
r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
|
|
||||||
return r, 0, syscall.Errno(errno)
|
|
||||||
}
|
|
||||||
|
|
||||||
func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
|
|
||||||
r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)
|
|
||||||
return r, 0, syscall.Errno(errno)
|
|
||||||
}
|
|
39
vendor/golang.org/x/sys/unix/gccgo_c.c
generated
vendored
39
vendor/golang.org/x/sys/unix/gccgo_c.c
generated
vendored
@@ -1,39 +0,0 @@
|
|||||||
// Copyright 2015 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build gccgo
|
|
||||||
// +build !aix
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#define _STRINGIFY2_(x) #x
|
|
||||||
#define _STRINGIFY_(x) _STRINGIFY2_(x)
|
|
||||||
#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__)
|
|
||||||
|
|
||||||
// Call syscall from C code because the gccgo support for calling from
|
|
||||||
// Go to C does not support varargs functions.
|
|
||||||
|
|
||||||
struct ret {
|
|
||||||
uintptr_t r;
|
|
||||||
uintptr_t err;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ret
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
struct ret r;
|
|
||||||
|
|
||||||
errno = 0;
|
|
||||||
r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);
|
|
||||||
r.err = errno;
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
uintptr_t
|
|
||||||
gccgoRealSyscallNoError(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)
|
|
||||||
{
|
|
||||||
return syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);
|
|
||||||
}
|
|
20
vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go
generated
vendored
20
vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go
generated
vendored
@@ -1,20 +0,0 @@
|
|||||||
// Copyright 2015 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build gccgo,linux,amd64
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
//extern gettimeofday
|
|
||||||
func realGettimeofday(*Timeval, *byte) int32
|
|
||||||
|
|
||||||
func gettimeofday(tv *Timeval) (err syscall.Errno) {
|
|
||||||
r := realGettimeofday(tv, nil)
|
|
||||||
if r < 0 {
|
|
||||||
return syscall.GetErrno()
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
65
vendor/golang.org/x/sys/unix/ioctl.go
generated
vendored
65
vendor/golang.org/x/sys/unix/ioctl.go
generated
vendored
@@ -1,65 +0,0 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"runtime"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ioctl itself should not be exposed directly, but additional get/set
|
|
||||||
// functions for specific types are permissible.
|
|
||||||
|
|
||||||
// IoctlSetInt performs an ioctl operation which sets an integer value
|
|
||||||
// on fd, using the specified request number.
|
|
||||||
func IoctlSetInt(fd int, req uint, value int) error {
|
|
||||||
return ioctl(fd, req, uintptr(value))
|
|
||||||
}
|
|
||||||
|
|
||||||
// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.
|
|
||||||
//
|
|
||||||
// To change fd's window size, the req argument should be TIOCSWINSZ.
|
|
||||||
func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
|
|
||||||
// TODO: if we get the chance, remove the req parameter and
|
|
||||||
// hardcode TIOCSWINSZ.
|
|
||||||
err := ioctl(fd, req, uintptr(unsafe.Pointer(value)))
|
|
||||||
runtime.KeepAlive(value)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// IoctlSetTermios performs an ioctl on fd with a *Termios.
|
|
||||||
//
|
|
||||||
// The req value will usually be TCSETA or TIOCSETA.
|
|
||||||
func IoctlSetTermios(fd int, req uint, value *Termios) error {
|
|
||||||
// TODO: if we get the chance, remove the req parameter.
|
|
||||||
err := ioctl(fd, req, uintptr(unsafe.Pointer(value)))
|
|
||||||
runtime.KeepAlive(value)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// IoctlGetInt performs an ioctl operation which gets an integer value
|
|
||||||
// from fd, using the specified request number.
|
|
||||||
//
|
|
||||||
// A few ioctl requests use the return value as an output parameter;
|
|
||||||
// for those, IoctlRetInt should be used instead of this function.
|
|
||||||
func IoctlGetInt(fd int, req uint) (int, error) {
|
|
||||||
var value int
|
|
||||||
err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
|
|
||||||
return value, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
|
|
||||||
var value Winsize
|
|
||||||
err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
|
|
||||||
return &value, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func IoctlGetTermios(fd int, req uint) (*Termios, error) {
|
|
||||||
var value Termios
|
|
||||||
err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
|
|
||||||
return &value, err
|
|
||||||
}
|
|
240
vendor/golang.org/x/sys/unix/mkall.sh
generated
vendored
240
vendor/golang.org/x/sys/unix/mkall.sh
generated
vendored
@@ -1,240 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
# Use of this source code is governed by a BSD-style
|
|
||||||
# license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
# This script runs or (given -n) prints suggested commands to generate files for
|
|
||||||
# the Architecture/OS specified by the GOARCH and GOOS environment variables.
|
|
||||||
# See README.md for more information about how the build system works.
|
|
||||||
|
|
||||||
GOOSARCH="${GOOS}_${GOARCH}"
|
|
||||||
|
|
||||||
# defaults
|
|
||||||
mksyscall="go run mksyscall.go"
|
|
||||||
mkerrors="./mkerrors.sh"
|
|
||||||
zerrors="zerrors_$GOOSARCH.go"
|
|
||||||
mksysctl=""
|
|
||||||
zsysctl="zsysctl_$GOOSARCH.go"
|
|
||||||
mksysnum=
|
|
||||||
mktypes=
|
|
||||||
mkasm=
|
|
||||||
run="sh"
|
|
||||||
cmd=""
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
-syscalls)
|
|
||||||
for i in zsyscall*go
|
|
||||||
do
|
|
||||||
# Run the command line that appears in the first line
|
|
||||||
# of the generated file to regenerate it.
|
|
||||||
sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i
|
|
||||||
rm _$i
|
|
||||||
done
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
-n)
|
|
||||||
run="cat"
|
|
||||||
cmd="echo"
|
|
||||||
shift
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "$#" in
|
|
||||||
0)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo 'usage: mkall.sh [-n]' 1>&2
|
|
||||||
exit 2
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [[ "$GOOS" = "linux" ]]; then
|
|
||||||
# Use the Docker-based build system
|
|
||||||
# Files generated through docker (use $cmd so you can Ctl-C the build or run)
|
|
||||||
$cmd docker build --tag generate:$GOOS $GOOS
|
|
||||||
$cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")" && /bin/pwd):/build generate:$GOOS
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
GOOSARCH_in=syscall_$GOOSARCH.go
|
|
||||||
case "$GOOSARCH" in
|
|
||||||
_* | *_ | _)
|
|
||||||
echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
aix_ppc)
|
|
||||||
mkerrors="$mkerrors -maix32"
|
|
||||||
mksyscall="go run mksyscall_aix_ppc.go -aix"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
aix_ppc64)
|
|
||||||
mkerrors="$mkerrors -maix64"
|
|
||||||
mksyscall="go run mksyscall_aix_ppc64.go -aix"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
darwin_386)
|
|
||||||
mkerrors="$mkerrors -m32"
|
|
||||||
mksyscall="go run mksyscall.go -l32"
|
|
||||||
mksysnum="go run mksysnum.go $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
mkasm="go run mkasm_darwin.go"
|
|
||||||
;;
|
|
||||||
darwin_amd64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum="go run mksysnum.go $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
mkasm="go run mkasm_darwin.go"
|
|
||||||
;;
|
|
||||||
darwin_arm)
|
|
||||||
mkerrors="$mkerrors"
|
|
||||||
mksyscall="go run mksyscall.go -l32"
|
|
||||||
mksysnum="go run mksysnum.go $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
mkasm="go run mkasm_darwin.go"
|
|
||||||
;;
|
|
||||||
darwin_arm64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum="go run mksysnum.go $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
mkasm="go run mkasm_darwin.go"
|
|
||||||
;;
|
|
||||||
dragonfly_amd64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksyscall="go run mksyscall.go -dragonfly"
|
|
||||||
mksysnum="go run mksysnum.go 'https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master'"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
freebsd_386)
|
|
||||||
mkerrors="$mkerrors -m32"
|
|
||||||
mksyscall="go run mksyscall.go -l32"
|
|
||||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
freebsd_amd64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
freebsd_arm)
|
|
||||||
mkerrors="$mkerrors"
|
|
||||||
mksyscall="go run mksyscall.go -l32 -arm"
|
|
||||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
|
|
||||||
# Let the type of C char be signed for making the bare syscall
|
|
||||||
# API consistent across platforms.
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
|
||||||
;;
|
|
||||||
freebsd_arm64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
|
||||||
;;
|
|
||||||
netbsd_386)
|
|
||||||
mkerrors="$mkerrors -m32"
|
|
||||||
mksyscall="go run mksyscall.go -l32 -netbsd"
|
|
||||||
mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
netbsd_amd64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksyscall="go run mksyscall.go -netbsd"
|
|
||||||
mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
netbsd_arm)
|
|
||||||
mkerrors="$mkerrors"
|
|
||||||
mksyscall="go run mksyscall.go -l32 -netbsd -arm"
|
|
||||||
mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
# Let the type of C char be signed for making the bare syscall
|
|
||||||
# API consistent across platforms.
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
|
||||||
;;
|
|
||||||
netbsd_arm64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksyscall="go run mksyscall.go -netbsd"
|
|
||||||
mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
openbsd_386)
|
|
||||||
mkerrors="$mkerrors -m32"
|
|
||||||
mksyscall="go run mksyscall.go -l32 -openbsd"
|
|
||||||
mksysctl="go run mksysctl_openbsd.go"
|
|
||||||
mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
openbsd_amd64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksyscall="go run mksyscall.go -openbsd"
|
|
||||||
mksysctl="go run mksysctl_openbsd.go"
|
|
||||||
mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
openbsd_arm)
|
|
||||||
mkerrors="$mkerrors"
|
|
||||||
mksyscall="go run mksyscall.go -l32 -openbsd -arm"
|
|
||||||
mksysctl="go run mksysctl_openbsd.go"
|
|
||||||
mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
# Let the type of C char be signed for making the bare syscall
|
|
||||||
# API consistent across platforms.
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
|
||||||
;;
|
|
||||||
openbsd_arm64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksyscall="go run mksyscall.go -openbsd"
|
|
||||||
mksysctl="go run mksysctl_openbsd.go"
|
|
||||||
mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
|
||||||
# Let the type of C char be signed for making the bare syscall
|
|
||||||
# API consistent across platforms.
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
|
||||||
;;
|
|
||||||
solaris_amd64)
|
|
||||||
mksyscall="go run mksyscall_solaris.go"
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum=
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
illumos_amd64)
|
|
||||||
mksyscall="go run mksyscall_solaris.go"
|
|
||||||
mkerrors=
|
|
||||||
mksysnum=
|
|
||||||
mktypes=
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
(
|
|
||||||
if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi
|
|
||||||
case "$GOOS" in
|
|
||||||
*)
|
|
||||||
syscall_goos="syscall_$GOOS.go"
|
|
||||||
case "$GOOS" in
|
|
||||||
darwin | dragonfly | freebsd | netbsd | openbsd)
|
|
||||||
syscall_goos="syscall_bsd.go $syscall_goos"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
if [ -n "$mksyscall" ]; then
|
|
||||||
if [ "$GOOSARCH" == "aix_ppc64" ]; then
|
|
||||||
# aix/ppc64 script generates files instead of writing to stdin.
|
|
||||||
echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_"$GOOSARCH"_gccgo.go && gofmt -w zsyscall_"$GOOSARCH"_gc.go " ;
|
|
||||||
elif [ "$GOOS" == "darwin" ]; then
|
|
||||||
# pre-1.12, direct syscalls
|
|
||||||
echo "$mksyscall -tags $GOOS,$GOARCH,!go1.12 $syscall_goos syscall_darwin_${GOARCH}.1_11.go $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.1_11.go";
|
|
||||||
# 1.12 and later, syscalls via libSystem
|
|
||||||
echo "$mksyscall -tags $GOOS,$GOARCH,go1.12 $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go";
|
|
||||||
# 1.13 and later, syscalls via libSystem (including syscallPtr)
|
|
||||||
echo "$mksyscall -tags $GOOS,$GOARCH,go1.13 syscall_darwin.1_13.go |gofmt >zsyscall_$GOOSARCH.1_13.go";
|
|
||||||
elif [ "$GOOS" == "illumos" ]; then
|
|
||||||
# illumos code generation requires a --illumos switch
|
|
||||||
echo "$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go";
|
|
||||||
# illumos implies solaris, so solaris code generation is also required
|
|
||||||
echo "$mksyscall -tags solaris,$GOARCH syscall_solaris.go syscall_solaris_$GOARCH.go |gofmt >zsyscall_solaris_$GOARCH.go";
|
|
||||||
else
|
|
||||||
echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go";
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
esac
|
|
||||||
if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi
|
|
||||||
if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi
|
|
||||||
if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi
|
|
||||||
if [ -n "$mkasm" ]; then echo "$mkasm $GOARCH"; fi
|
|
||||||
) | $run
|
|
708
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
708
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
@@ -1,708 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Copyright 2009 The Go Authors. All rights reserved.
|
|
||||||
# Use of this source code is governed by a BSD-style
|
|
||||||
# license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
# Generate Go code listing errors and other #defined constant
|
|
||||||
# values (ENAMETOOLONG etc.), by asking the preprocessor
|
|
||||||
# about the definitions.
|
|
||||||
|
|
||||||
unset LANG
|
|
||||||
export LC_ALL=C
|
|
||||||
export LC_CTYPE=C
|
|
||||||
|
|
||||||
if test -z "$GOARCH" -o -z "$GOOS"; then
|
|
||||||
echo 1>&2 "GOARCH or GOOS not defined in environment"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check that we are using the new build system if we should
|
|
||||||
if [[ "$GOOS" = "linux" ]] && [[ "$GOLANG_SYS_BUILD" != "docker" ]]; then
|
|
||||||
echo 1>&2 "In the Docker based build system, mkerrors should not be called directly."
|
|
||||||
echo 1>&2 "See README.md"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$GOOS" = "aix" ]]; then
|
|
||||||
CC=${CC:-gcc}
|
|
||||||
else
|
|
||||||
CC=${CC:-cc}
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$GOOS" = "solaris" ]]; then
|
|
||||||
# Assumes GNU versions of utilities in PATH.
|
|
||||||
export PATH=/usr/gnu/bin:$PATH
|
|
||||||
fi
|
|
||||||
|
|
||||||
uname=$(uname)
|
|
||||||
|
|
||||||
includes_AIX='
|
|
||||||
#include <net/if.h>
|
|
||||||
#include <net/netopt.h>
|
|
||||||
#include <netinet/ip_mroute.h>
|
|
||||||
#include <sys/protosw.h>
|
|
||||||
#include <sys/stropts.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/poll.h>
|
|
||||||
#include <sys/select.h>
|
|
||||||
#include <sys/termio.h>
|
|
||||||
#include <termios.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
|
|
||||||
#define AF_LOCAL AF_UNIX
|
|
||||||
'
|
|
||||||
|
|
||||||
includes_Darwin='
|
|
||||||
#define _DARWIN_C_SOURCE
|
|
||||||
#define KERNEL
|
|
||||||
#define _DARWIN_USE_64_BIT_INODE
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <sys/attr.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/event.h>
|
|
||||||
#include <sys/ptrace.h>
|
|
||||||
#include <sys/select.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/sockio.h>
|
|
||||||
#include <sys/sysctl.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/mount.h>
|
|
||||||
#include <sys/utsname.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <sys/xattr.h>
|
|
||||||
#include <net/bpf.h>
|
|
||||||
#include <net/if.h>
|
|
||||||
#include <net/if_types.h>
|
|
||||||
#include <net/route.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netinet/ip.h>
|
|
||||||
#include <termios.h>
|
|
||||||
'
|
|
||||||
|
|
||||||
includes_DragonFly='
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/event.h>
|
|
||||||
#include <sys/select.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/sockio.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/sysctl.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/mount.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <net/bpf.h>
|
|
||||||
#include <net/if.h>
|
|
||||||
#include <net/if_types.h>
|
|
||||||
#include <net/route.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <termios.h>
|
|
||||||
#include <netinet/ip.h>
|
|
||||||
#include <net/ip_mroute/ip_mroute.h>
|
|
||||||
'
|
|
||||||
|
|
||||||
includes_FreeBSD='
|
|
||||||
#include <sys/capsicum.h>
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/disk.h>
|
|
||||||
#include <sys/event.h>
|
|
||||||
#include <sys/sched.h>
|
|
||||||
#include <sys/select.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/sockio.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/sysctl.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/mount.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <net/bpf.h>
|
|
||||||
#include <net/if.h>
|
|
||||||
#include <net/if_types.h>
|
|
||||||
#include <net/route.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <termios.h>
|
|
||||||
#include <netinet/ip.h>
|
|
||||||
#include <netinet/ip_mroute.h>
|
|
||||||
#include <sys/extattr.h>
|
|
||||||
|
|
||||||
#if __FreeBSD__ >= 10
|
|
||||||
#define IFT_CARP 0xf8 // IFT_CARP is deprecated in FreeBSD 10
|
|
||||||
#undef SIOCAIFADDR
|
|
||||||
#define SIOCAIFADDR _IOW(105, 26, struct oifaliasreq) // ifaliasreq contains if_data
|
|
||||||
#undef SIOCSIFPHYADDR
|
|
||||||
#define SIOCSIFPHYADDR _IOW(105, 70, struct oifaliasreq) // ifaliasreq contains if_data
|
|
||||||
#endif
|
|
||||||
'
|
|
||||||
|
|
||||||
includes_Linux='
|
|
||||||
#define _LARGEFILE_SOURCE
|
|
||||||
#define _LARGEFILE64_SOURCE
|
|
||||||
#ifndef __LP64__
|
|
||||||
#define _FILE_OFFSET_BITS 64
|
|
||||||
#endif
|
|
||||||
#define _GNU_SOURCE
|
|
||||||
|
|
||||||
// <sys/ioctl.h> is broken on powerpc64, as it fails to include definitions of
|
|
||||||
// these structures. We just include them copied from <bits/termios.h>.
|
|
||||||
#if defined(__powerpc__)
|
|
||||||
struct sgttyb {
|
|
||||||
char sg_ispeed;
|
|
||||||
char sg_ospeed;
|
|
||||||
char sg_erase;
|
|
||||||
char sg_kill;
|
|
||||||
short sg_flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct tchars {
|
|
||||||
char t_intrc;
|
|
||||||
char t_quitc;
|
|
||||||
char t_startc;
|
|
||||||
char t_stopc;
|
|
||||||
char t_eofc;
|
|
||||||
char t_brkc;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ltchars {
|
|
||||||
char t_suspc;
|
|
||||||
char t_dsuspc;
|
|
||||||
char t_rprntc;
|
|
||||||
char t_flushc;
|
|
||||||
char t_werasc;
|
|
||||||
char t_lnextc;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <bits/sockaddr.h>
|
|
||||||
#include <sys/epoll.h>
|
|
||||||
#include <sys/eventfd.h>
|
|
||||||
#include <sys/inotify.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/mount.h>
|
|
||||||
#include <sys/prctl.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/select.h>
|
|
||||||
#include <sys/signalfd.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/timerfd.h>
|
|
||||||
#include <sys/uio.h>
|
|
||||||
#include <sys/xattr.h>
|
|
||||||
#include <linux/bpf.h>
|
|
||||||
#include <linux/can.h>
|
|
||||||
#include <linux/capability.h>
|
|
||||||
#include <linux/cryptouser.h>
|
|
||||||
#include <linux/devlink.h>
|
|
||||||
#include <linux/errqueue.h>
|
|
||||||
#include <linux/falloc.h>
|
|
||||||
#include <linux/fanotify.h>
|
|
||||||
#include <linux/filter.h>
|
|
||||||
#include <linux/fs.h>
|
|
||||||
#include <linux/fscrypt.h>
|
|
||||||
#include <linux/fsverity.h>
|
|
||||||
#include <linux/genetlink.h>
|
|
||||||
#include <linux/hdreg.h>
|
|
||||||
#include <linux/icmpv6.h>
|
|
||||||
#include <linux/if.h>
|
|
||||||
#include <linux/if_addr.h>
|
|
||||||
#include <linux/if_alg.h>
|
|
||||||
#include <linux/if_arp.h>
|
|
||||||
#include <linux/if_ether.h>
|
|
||||||
#include <linux/if_ppp.h>
|
|
||||||
#include <linux/if_tun.h>
|
|
||||||
#include <linux/if_packet.h>
|
|
||||||
#include <linux/if_xdp.h>
|
|
||||||
#include <linux/kexec.h>
|
|
||||||
#include <linux/keyctl.h>
|
|
||||||
#include <linux/loop.h>
|
|
||||||
#include <linux/magic.h>
|
|
||||||
#include <linux/memfd.h>
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/netfilter/nfnetlink.h>
|
|
||||||
#include <linux/netlink.h>
|
|
||||||
#include <linux/net_namespace.h>
|
|
||||||
#include <linux/nsfs.h>
|
|
||||||
#include <linux/perf_event.h>
|
|
||||||
#include <linux/ptrace.h>
|
|
||||||
#include <linux/random.h>
|
|
||||||
#include <linux/reboot.h>
|
|
||||||
#include <linux/rtc.h>
|
|
||||||
#include <linux/rtnetlink.h>
|
|
||||||
#include <linux/sched.h>
|
|
||||||
#include <linux/seccomp.h>
|
|
||||||
#include <linux/serial.h>
|
|
||||||
#include <linux/sockios.h>
|
|
||||||
#include <linux/taskstats.h>
|
|
||||||
#include <linux/tipc.h>
|
|
||||||
#include <linux/vm_sockets.h>
|
|
||||||
#include <linux/wait.h>
|
|
||||||
#include <linux/watchdog.h>
|
|
||||||
|
|
||||||
#include <mtd/ubi-user.h>
|
|
||||||
#include <net/route.h>
|
|
||||||
|
|
||||||
#if defined(__sparc__)
|
|
||||||
// On sparc{,64}, the kernel defines struct termios2 itself which clashes with the
|
|
||||||
// definition in glibc. As only the error constants are needed here, include the
|
|
||||||
// generic termibits.h (which is included by termbits.h on sparc).
|
|
||||||
#include <asm-generic/termbits.h>
|
|
||||||
#else
|
|
||||||
#include <asm/termbits.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MSG_FASTOPEN
|
|
||||||
#define MSG_FASTOPEN 0x20000000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef PTRACE_GETREGS
|
|
||||||
#define PTRACE_GETREGS 0xc
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef PTRACE_SETREGS
|
|
||||||
#define PTRACE_SETREGS 0xd
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef SOL_NETLINK
|
|
||||||
#define SOL_NETLINK 270
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SOL_BLUETOOTH
|
|
||||||
// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h
|
|
||||||
// but it is already in bluetooth_linux.go
|
|
||||||
#undef SOL_BLUETOOTH
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Certain constants are missing from the fs/crypto UAPI
|
|
||||||
#define FS_KEY_DESC_PREFIX "fscrypt:"
|
|
||||||
#define FS_KEY_DESC_PREFIX_SIZE 8
|
|
||||||
#define FS_MAX_KEY_SIZE 64
|
|
||||||
|
|
||||||
// The code generator produces -0x1 for (~0), but an unsigned value is necessary
|
|
||||||
// for the tipc_subscr timeout __u32 field.
|
|
||||||
#undef TIPC_WAIT_FOREVER
|
|
||||||
#define TIPC_WAIT_FOREVER 0xffffffff
|
|
||||||
|
|
||||||
// Copied from linux/l2tp.h
|
|
||||||
// Including linux/l2tp.h here causes conflicts between linux/in.h
|
|
||||||
// and netinet/in.h included via net/route.h above.
|
|
||||||
#define IPPROTO_L2TP 115
|
|
||||||
'
|
|
||||||
|
|
||||||
includes_NetBSD='
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/event.h>
|
|
||||||
#include <sys/extattr.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/mount.h>
|
|
||||||
#include <sys/sched.h>
|
|
||||||
#include <sys/select.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/sockio.h>
|
|
||||||
#include <sys/sysctl.h>
|
|
||||||
#include <sys/termios.h>
|
|
||||||
#include <sys/ttycom.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <net/bpf.h>
|
|
||||||
#include <net/if.h>
|
|
||||||
#include <net/if_types.h>
|
|
||||||
#include <net/route.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netinet/in_systm.h>
|
|
||||||
#include <netinet/ip.h>
|
|
||||||
#include <netinet/ip_mroute.h>
|
|
||||||
#include <netinet/if_ether.h>
|
|
||||||
|
|
||||||
// Needed since <sys/param.h> refers to it...
|
|
||||||
#define schedppq 1
|
|
||||||
'
|
|
||||||
|
|
||||||
includes_OpenBSD='
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/event.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/mount.h>
|
|
||||||
#include <sys/select.h>
|
|
||||||
#include <sys/sched.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/sockio.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/sysctl.h>
|
|
||||||
#include <sys/termios.h>
|
|
||||||
#include <sys/ttycom.h>
|
|
||||||
#include <sys/unistd.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <net/bpf.h>
|
|
||||||
#include <net/if.h>
|
|
||||||
#include <net/if_types.h>
|
|
||||||
#include <net/if_var.h>
|
|
||||||
#include <net/route.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netinet/in_systm.h>
|
|
||||||
#include <netinet/ip.h>
|
|
||||||
#include <netinet/ip_mroute.h>
|
|
||||||
#include <netinet/if_ether.h>
|
|
||||||
#include <net/if_bridge.h>
|
|
||||||
|
|
||||||
// We keep some constants not supported in OpenBSD 5.5 and beyond for
|
|
||||||
// the promise of compatibility.
|
|
||||||
#define EMUL_ENABLED 0x1
|
|
||||||
#define EMUL_NATIVE 0x2
|
|
||||||
#define IPV6_FAITH 0x1d
|
|
||||||
#define IPV6_OPTIONS 0x1
|
|
||||||
#define IPV6_RTHDR_STRICT 0x1
|
|
||||||
#define IPV6_SOCKOPT_RESERVED1 0x3
|
|
||||||
#define SIOCGIFGENERIC 0xc020693a
|
|
||||||
#define SIOCSIFGENERIC 0x80206939
|
|
||||||
#define WALTSIG 0x4
|
|
||||||
'
|
|
||||||
|
|
||||||
includes_SunOS='
|
|
||||||
#include <limits.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/select.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/sockio.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <sys/mkdev.h>
|
|
||||||
#include <net/bpf.h>
|
|
||||||
#include <net/if.h>
|
|
||||||
#include <net/if_arp.h>
|
|
||||||
#include <net/if_types.h>
|
|
||||||
#include <net/route.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <termios.h>
|
|
||||||
#include <netinet/ip.h>
|
|
||||||
#include <netinet/ip_mroute.h>
|
|
||||||
'
|
|
||||||
|
|
||||||
|
|
||||||
includes='
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/file.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netinet/ip.h>
|
|
||||||
#include <netinet/ip6.h>
|
|
||||||
#include <netinet/tcp.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <sys/signal.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <sys/resource.h>
|
|
||||||
#include <time.h>
|
|
||||||
'
|
|
||||||
ccflags="$@"
|
|
||||||
|
|
||||||
# Write go tool cgo -godefs input.
|
|
||||||
(
|
|
||||||
echo package unix
|
|
||||||
echo
|
|
||||||
echo '/*'
|
|
||||||
indirect="includes_$(uname)"
|
|
||||||
echo "${!indirect} $includes"
|
|
||||||
echo '*/'
|
|
||||||
echo 'import "C"'
|
|
||||||
echo 'import "syscall"'
|
|
||||||
echo
|
|
||||||
echo 'const ('
|
|
||||||
|
|
||||||
# The gcc command line prints all the #defines
|
|
||||||
# it encounters while processing the input
|
|
||||||
echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags |
|
|
||||||
awk '
|
|
||||||
$1 != "#define" || $2 ~ /\(/ || $3 == "" {next}
|
|
||||||
|
|
||||||
$2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next} # 386 registers
|
|
||||||
$2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next}
|
|
||||||
$2 ~ /^(SCM_SRCRT)$/ {next}
|
|
||||||
$2 ~ /^(MAP_FAILED)$/ {next}
|
|
||||||
$2 ~ /^ELF_.*$/ {next}# <asm/elf.h> contains ELF_ARCH, etc.
|
|
||||||
|
|
||||||
$2 ~ /^EXTATTR_NAMESPACE_NAMES/ ||
|
|
||||||
$2 ~ /^EXTATTR_NAMESPACE_[A-Z]+_STRING/ {next}
|
|
||||||
|
|
||||||
$2 !~ /^ECCAPBITS/ &&
|
|
||||||
$2 !~ /^ETH_/ &&
|
|
||||||
$2 !~ /^EPROC_/ &&
|
|
||||||
$2 !~ /^EQUIV_/ &&
|
|
||||||
$2 !~ /^EXPR_/ &&
|
|
||||||
$2 ~ /^E[A-Z0-9_]+$/ ||
|
|
||||||
$2 ~ /^B[0-9_]+$/ ||
|
|
||||||
$2 ~ /^(OLD|NEW)DEV$/ ||
|
|
||||||
$2 == "BOTHER" ||
|
|
||||||
$2 ~ /^CI?BAUD(EX)?$/ ||
|
|
||||||
$2 == "IBSHIFT" ||
|
|
||||||
$2 ~ /^V[A-Z0-9]+$/ ||
|
|
||||||
$2 ~ /^CS[A-Z0-9]/ ||
|
|
||||||
$2 ~ /^I(SIG|CANON|CRNL|UCLC|EXTEN|MAXBEL|STRIP|UTF8)$/ ||
|
|
||||||
$2 ~ /^IGN/ ||
|
|
||||||
$2 ~ /^IX(ON|ANY|OFF)$/ ||
|
|
||||||
$2 ~ /^IN(LCR|PCK)$/ ||
|
|
||||||
$2 !~ "X86_CR3_PCID_NOFLUSH" &&
|
|
||||||
$2 ~ /(^FLU?SH)|(FLU?SH$)/ ||
|
|
||||||
$2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ ||
|
|
||||||
$2 == "BRKINT" ||
|
|
||||||
$2 == "HUPCL" ||
|
|
||||||
$2 == "PENDIN" ||
|
|
||||||
$2 == "TOSTOP" ||
|
|
||||||
$2 == "XCASE" ||
|
|
||||||
$2 == "ALTWERASE" ||
|
|
||||||
$2 == "NOKERNINFO" ||
|
|
||||||
$2 == "NFDBITS" ||
|
|
||||||
$2 ~ /^PAR/ ||
|
|
||||||
$2 ~ /^SIG[^_]/ ||
|
|
||||||
$2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ ||
|
|
||||||
$2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ ||
|
|
||||||
$2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ ||
|
|
||||||
$2 ~ /^O?XTABS$/ ||
|
|
||||||
$2 ~ /^TC[IO](ON|OFF)$/ ||
|
|
||||||
$2 ~ /^IN_/ ||
|
|
||||||
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
|
|
||||||
$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
|
|
||||||
$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||
|
|
||||||
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|MCAST|EVFILT|NOTE|EV|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ ||
|
|
||||||
$2 ~ /^TP_STATUS_/ ||
|
|
||||||
$2 ~ /^FALLOC_/ ||
|
|
||||||
$2 == "ICMPV6_FILTER" ||
|
|
||||||
$2 == "SOMAXCONN" ||
|
|
||||||
$2 == "NAME_MAX" ||
|
|
||||||
$2 == "IFNAMSIZ" ||
|
|
||||||
$2 ~ /^CTL_(HW|KERN|MAXNAME|NET|QUERY)$/ ||
|
|
||||||
$2 ~ /^KERN_(HOSTNAME|OS(RELEASE|TYPE)|VERSION)$/ ||
|
|
||||||
$2 ~ /^HW_MACHINE$/ ||
|
|
||||||
$2 ~ /^SYSCTL_VERS/ ||
|
|
||||||
$2 !~ "MNT_BITS" &&
|
|
||||||
$2 ~ /^(MS|MNT|UMOUNT)_/ ||
|
|
||||||
$2 ~ /^NS_GET_/ ||
|
|
||||||
$2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||
|
|
||||||
$2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|TFD)_/ ||
|
|
||||||
$2 ~ /^KEXEC_/ ||
|
|
||||||
$2 ~ /^LINUX_REBOOT_CMD_/ ||
|
|
||||||
$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ ||
|
|
||||||
$2 ~ /^MODULE_INIT_/ ||
|
|
||||||
$2 !~ "NLA_TYPE_MASK" &&
|
|
||||||
$2 !~ /^RTC_VL_(ACCURACY|BACKUP|DATA)/ &&
|
|
||||||
$2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ ||
|
|
||||||
$2 ~ /^SIOC/ ||
|
|
||||||
$2 ~ /^TIOC/ ||
|
|
||||||
$2 ~ /^TCGET/ ||
|
|
||||||
$2 ~ /^TCSET/ ||
|
|
||||||
$2 ~ /^TC(FLSH|SBRKP?|XONC)$/ ||
|
|
||||||
$2 !~ "RTF_BITS" &&
|
|
||||||
$2 ~ /^(IFF|IFT|NET_RT|RTM(GRP)?|RTF|RTV|RTA|RTAX)_/ ||
|
|
||||||
$2 ~ /^BIOC/ ||
|
|
||||||
$2 ~ /^DIOC/ ||
|
|
||||||
$2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ ||
|
|
||||||
$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ ||
|
|
||||||
$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||
|
|
||||||
$2 ~ /^CLONE_[A-Z_]+/ ||
|
|
||||||
$2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+)$/ &&
|
|
||||||
$2 ~ /^(BPF|DLT)_/ ||
|
|
||||||
$2 ~ /^(CLOCK|TIMER)_/ ||
|
|
||||||
$2 ~ /^CAN_/ ||
|
|
||||||
$2 ~ /^CAP_/ ||
|
|
||||||
$2 ~ /^CP_/ ||
|
|
||||||
$2 ~ /^CPUSTATES$/ ||
|
|
||||||
$2 ~ /^ALG_/ ||
|
|
||||||
$2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE)/ ||
|
|
||||||
$2 ~ /^FS_IOC_.*(ENCRYPTION|VERITY|[GS]ETFLAGS)/ ||
|
|
||||||
$2 ~ /^FS_VERITY_/ ||
|
|
||||||
$2 ~ /^FSCRYPT_/ ||
|
|
||||||
$2 ~ /^GRND_/ ||
|
|
||||||
$2 ~ /^RND/ ||
|
|
||||||
$2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ ||
|
|
||||||
$2 ~ /^KEYCTL_/ ||
|
|
||||||
$2 ~ /^PERF_EVENT_IOC_/ ||
|
|
||||||
$2 ~ /^SECCOMP_MODE_/ ||
|
|
||||||
$2 ~ /^SPLICE_/ ||
|
|
||||||
$2 ~ /^SYNC_FILE_RANGE_/ ||
|
|
||||||
$2 !~ /^AUDIT_RECORD_MAGIC/ &&
|
|
||||||
$2 !~ /IOC_MAGIC/ &&
|
|
||||||
$2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ ||
|
|
||||||
$2 ~ /^(VM|VMADDR)_/ ||
|
|
||||||
$2 ~ /^IOCTL_VM_SOCKETS_/ ||
|
|
||||||
$2 ~ /^(TASKSTATS|TS)_/ ||
|
|
||||||
$2 ~ /^CGROUPSTATS_/ ||
|
|
||||||
$2 ~ /^GENL_/ ||
|
|
||||||
$2 ~ /^STATX_/ ||
|
|
||||||
$2 ~ /^RENAME/ ||
|
|
||||||
$2 ~ /^UBI_IOC[A-Z]/ ||
|
|
||||||
$2 ~ /^UTIME_/ ||
|
|
||||||
$2 ~ /^XATTR_(CREATE|REPLACE|NO(DEFAULT|FOLLOW|SECURITY)|SHOWCOMPRESSION)/ ||
|
|
||||||
$2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ ||
|
|
||||||
$2 ~ /^FSOPT_/ ||
|
|
||||||
$2 ~ /^WDIOC_/ ||
|
|
||||||
$2 ~ /^NFN/ ||
|
|
||||||
$2 ~ /^XDP_/ ||
|
|
||||||
$2 ~ /^RWF_/ ||
|
|
||||||
$2 ~ /^(HDIO|WIN|SMART)_/ ||
|
|
||||||
$2 ~ /^CRYPTO_/ ||
|
|
||||||
$2 ~ /^TIPC_/ ||
|
|
||||||
$2 ~ /^DEVLINK_/ ||
|
|
||||||
$2 !~ "WMESGLEN" &&
|
|
||||||
$2 ~ /^W[A-Z0-9]+$/ ||
|
|
||||||
$2 ~/^PPPIOC/ ||
|
|
||||||
$2 ~ /^FAN_|FANOTIFY_/ ||
|
|
||||||
$2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)}
|
|
||||||
$2 ~ /^__WCOREFLAG$/ {next}
|
|
||||||
$2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)}
|
|
||||||
|
|
||||||
{next}
|
|
||||||
' | sort
|
|
||||||
|
|
||||||
echo ')'
|
|
||||||
) >_const.go
|
|
||||||
|
|
||||||
# Pull out the error names for later.
|
|
||||||
errors=$(
|
|
||||||
echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
|
|
||||||
awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' |
|
|
||||||
sort
|
|
||||||
)
|
|
||||||
|
|
||||||
# Pull out the signal names for later.
|
|
||||||
signals=$(
|
|
||||||
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
|
||||||
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |
|
|
||||||
egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |
|
|
||||||
sort
|
|
||||||
)
|
|
||||||
|
|
||||||
# Again, writing regexps to a file.
|
|
||||||
echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
|
|
||||||
awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' |
|
|
||||||
sort >_error.grep
|
|
||||||
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
|
||||||
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' |
|
|
||||||
egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |
|
|
||||||
sort >_signal.grep
|
|
||||||
|
|
||||||
echo '// mkerrors.sh' "$@"
|
|
||||||
echo '// Code generated by the command above; see README.md. DO NOT EDIT.'
|
|
||||||
echo
|
|
||||||
echo "// +build ${GOARCH},${GOOS}"
|
|
||||||
echo
|
|
||||||
go tool cgo -godefs -- "$@" _const.go >_error.out
|
|
||||||
cat _error.out | grep -vf _error.grep | grep -vf _signal.grep
|
|
||||||
echo
|
|
||||||
echo '// Errors'
|
|
||||||
echo 'const ('
|
|
||||||
cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= syscall.Errno(\1)/'
|
|
||||||
echo ')'
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo '// Signals'
|
|
||||||
echo 'const ('
|
|
||||||
cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= syscall.Signal(\1)/'
|
|
||||||
echo ')'
|
|
||||||
|
|
||||||
# Run C program to print error and syscall strings.
|
|
||||||
(
|
|
||||||
echo -E "
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <signal.h>
|
|
||||||
|
|
||||||
#define nelem(x) (sizeof(x)/sizeof((x)[0]))
|
|
||||||
|
|
||||||
enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below
|
|
||||||
|
|
||||||
struct tuple {
|
|
||||||
int num;
|
|
||||||
const char *name;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct tuple errors[] = {
|
|
||||||
"
|
|
||||||
for i in $errors
|
|
||||||
do
|
|
||||||
echo -E ' {'$i', "'$i'" },'
|
|
||||||
done
|
|
||||||
|
|
||||||
echo -E "
|
|
||||||
};
|
|
||||||
|
|
||||||
struct tuple signals[] = {
|
|
||||||
"
|
|
||||||
for i in $signals
|
|
||||||
do
|
|
||||||
echo -E ' {'$i', "'$i'" },'
|
|
||||||
done
|
|
||||||
|
|
||||||
# Use -E because on some systems bash builtin interprets \n itself.
|
|
||||||
echo -E '
|
|
||||||
};
|
|
||||||
|
|
||||||
static int
|
|
||||||
tuplecmp(const void *a, const void *b)
|
|
||||||
{
|
|
||||||
return ((struct tuple *)a)->num - ((struct tuple *)b)->num;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(void)
|
|
||||||
{
|
|
||||||
int i, e;
|
|
||||||
char buf[1024], *p;
|
|
||||||
|
|
||||||
printf("\n\n// Error table\n");
|
|
||||||
printf("var errorList = [...]struct {\n");
|
|
||||||
printf("\tnum syscall.Errno\n");
|
|
||||||
printf("\tname string\n");
|
|
||||||
printf("\tdesc string\n");
|
|
||||||
printf("} {\n");
|
|
||||||
qsort(errors, nelem(errors), sizeof errors[0], tuplecmp);
|
|
||||||
for(i=0; i<nelem(errors); i++) {
|
|
||||||
e = errors[i].num;
|
|
||||||
if(i > 0 && errors[i-1].num == e)
|
|
||||||
continue;
|
|
||||||
strcpy(buf, strerror(e));
|
|
||||||
// lowercase first letter: Bad -> bad, but STREAM -> STREAM.
|
|
||||||
if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)
|
|
||||||
buf[0] += a - A;
|
|
||||||
printf("\t{ %d, \"%s\", \"%s\" },\n", e, errors[i].name, buf);
|
|
||||||
}
|
|
||||||
printf("}\n\n");
|
|
||||||
|
|
||||||
printf("\n\n// Signal table\n");
|
|
||||||
printf("var signalList = [...]struct {\n");
|
|
||||||
printf("\tnum syscall.Signal\n");
|
|
||||||
printf("\tname string\n");
|
|
||||||
printf("\tdesc string\n");
|
|
||||||
printf("} {\n");
|
|
||||||
qsort(signals, nelem(signals), sizeof signals[0], tuplecmp);
|
|
||||||
for(i=0; i<nelem(signals); i++) {
|
|
||||||
e = signals[i].num;
|
|
||||||
if(i > 0 && signals[i-1].num == e)
|
|
||||||
continue;
|
|
||||||
strcpy(buf, strsignal(e));
|
|
||||||
// lowercase first letter: Bad -> bad, but STREAM -> STREAM.
|
|
||||||
if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)
|
|
||||||
buf[0] += a - A;
|
|
||||||
// cut trailing : number.
|
|
||||||
p = strrchr(buf, ":"[0]);
|
|
||||||
if(p)
|
|
||||||
*p = '\0';
|
|
||||||
printf("\t{ %d, \"%s\", \"%s\" },\n", e, signals[i].name, buf);
|
|
||||||
}
|
|
||||||
printf("}\n\n");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
'
|
|
||||||
) >_errors.c
|
|
||||||
|
|
||||||
$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user