mirror of
https://github.com/ericchiang/pup
synced 2025-02-19 02:22:01 +00:00
*: cleanup repo and add github actions CI
This commit is contained in:
parent
681d7bb639
commit
5a57cf1113
27
.github/workflows/test.yaml
vendored
Normal file
27
.github/workflows/test.yaml
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
name: test
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
go-version: [1.17.x, 1.16.x]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
steps:
|
||||||
|
- name: Install Go
|
||||||
|
uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: ${{ matrix.go-version }}
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Build
|
||||||
|
run: go build ./...
|
||||||
|
- name: Test
|
||||||
|
run: go test -v ./...
|
@ -1 +0,0 @@
|
|||||||
package css
|
|
@ -1 +0,0 @@
|
|||||||
package css
|
|
65
release.sh
65
release.sh
@ -1,65 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
VERSION="0.4.0"
|
|
||||||
|
|
||||||
rm -rf dist
|
|
||||||
mkdir dist
|
|
||||||
|
|
||||||
for ENV in $( go tool dist list | grep -v 'android' | grep -v 'darwin/arm' | grep -v 's390x' | grep -v 'plan9/arm'); do
|
|
||||||
eval $( echo $ENV | tr '/' ' ' | xargs printf 'export GOOS=%s; export GOARCH=%s\n' )
|
|
||||||
|
|
||||||
GOOS=${GOOS:-linux}
|
|
||||||
GOARCH=${GOARCH:-amd64}
|
|
||||||
|
|
||||||
BIN="pup"
|
|
||||||
if [ ${GOOS} == "windows" ]; then
|
|
||||||
BIN="pup.exe"
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p dist
|
|
||||||
|
|
||||||
echo "Building for GOOS=$GOOS GOARCH=$GOARCH"
|
|
||||||
|
|
||||||
sudo rkt run \
|
|
||||||
--set-env=GOOS=${GOOS} \
|
|
||||||
--set-env=GOARCH=${GOARCH} \
|
|
||||||
--set-env=CGO_ENABLED=0 \
|
|
||||||
--volume pup,kind=host,source=${PWD} \
|
|
||||||
--mount volume=pup,target=/go/src/github.com/ericchiang/pup \
|
|
||||||
--insecure-options=image \
|
|
||||||
docker://golang:1.6.3 \
|
|
||||||
--exec go -- build -v -a \
|
|
||||||
-o /go/src/github.com/ericchiang/pup/dist/${BIN} \
|
|
||||||
github.com/ericchiang/pup
|
|
||||||
|
|
||||||
sudo rkt gc --grace-period=0s
|
|
||||||
|
|
||||||
zip dist/pup_v${VERSION}_${GOOS}_${GOARCH}.zip -j dist/${BIN}
|
|
||||||
rm -f dist/${BIN}
|
|
||||||
done
|
|
||||||
|
|
||||||
DARWIN_AMD64=pup_v${VERSION}_darwin_amd64.zip
|
|
||||||
DARWIN_386=pup_v${VERSION}_darwin_386.zip
|
|
||||||
|
|
||||||
cat << EOF > pup.rb
|
|
||||||
# This file was generated by release.sh
|
|
||||||
require 'formula'
|
|
||||||
class Pup < Formula
|
|
||||||
homepage 'https://github.com/ericchiang/pup'
|
|
||||||
version '0.4.0'
|
|
||||||
|
|
||||||
if Hardware::CPU.is_64_bit?
|
|
||||||
url 'https://github.com/ericchiang/pup/releases/download/v${VERSION}/${DARWIN_AMD64}'
|
|
||||||
sha256 '$( sha256sum dist/${DARWIN_AMD64} | awk '{ print $1 }' | xargs printf )'
|
|
||||||
else
|
|
||||||
url 'https://github.com/ericchiang/pup/releases/download/v${VERSION}/${DARWIN_386}'
|
|
||||||
sha256 '$( sha256sum dist/${DARWIN_386} | awk '{ print $1 }' | xargs printf )'
|
|
||||||
end
|
|
||||||
|
|
||||||
def install
|
|
||||||
bin.install 'pup'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
EOF
|
|
5
vendor/github.com/fatih/color/.travis.yml
generated
vendored
5
vendor/github.com/fatih/color/.travis.yml
generated
vendored
@ -1,5 +0,0 @@
|
|||||||
language: go
|
|
||||||
go:
|
|
||||||
- 1.6
|
|
||||||
- tip
|
|
||||||
|
|
20
vendor/github.com/fatih/color/LICENSE.md
generated
vendored
20
vendor/github.com/fatih/color/LICENSE.md
generated
vendored
@ -1,20 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2013 Fatih Arslan
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
154
vendor/github.com/fatih/color/README.md
generated
vendored
154
vendor/github.com/fatih/color/README.md
generated
vendored
@ -1,154 +0,0 @@
|
|||||||
# Color [](http://godoc.org/github.com/fatih/color) [](https://travis-ci.org/fatih/color)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Color lets you use colorized outputs in terms of [ANSI Escape
|
|
||||||
Codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors) in Go (Golang). It
|
|
||||||
has support for Windows too! The API can be used in several ways, pick one that
|
|
||||||
suits you.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go get github.com/fatih/color
|
|
||||||
```
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
### Standard colors
|
|
||||||
|
|
||||||
```go
|
|
||||||
// Print with default helper functions
|
|
||||||
color.Cyan("Prints text in cyan.")
|
|
||||||
|
|
||||||
// A newline will be appended automatically
|
|
||||||
color.Blue("Prints %s in blue.", "text")
|
|
||||||
|
|
||||||
// These are using the default foreground colors
|
|
||||||
color.Red("We have red")
|
|
||||||
color.Magenta("And many others ..")
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### Mix and reuse colors
|
|
||||||
|
|
||||||
```go
|
|
||||||
// Create a new color object
|
|
||||||
c := color.New(color.FgCyan).Add(color.Underline)
|
|
||||||
c.Println("Prints cyan text with an underline.")
|
|
||||||
|
|
||||||
// Or just add them to New()
|
|
||||||
d := color.New(color.FgCyan, color.Bold)
|
|
||||||
d.Printf("This prints bold cyan %s\n", "too!.")
|
|
||||||
|
|
||||||
// Mix up foreground and background colors, create new mixes!
|
|
||||||
red := color.New(color.FgRed)
|
|
||||||
|
|
||||||
boldRed := red.Add(color.Bold)
|
|
||||||
boldRed.Println("This will print text in bold red.")
|
|
||||||
|
|
||||||
whiteBackground := red.Add(color.BgWhite)
|
|
||||||
whiteBackground.Println("Red text with white background.")
|
|
||||||
```
|
|
||||||
|
|
||||||
### Custom print functions (PrintFunc)
|
|
||||||
|
|
||||||
```go
|
|
||||||
// Create a custom print function for convenience
|
|
||||||
red := color.New(color.FgRed).PrintfFunc()
|
|
||||||
red("Warning")
|
|
||||||
red("Error: %s", err)
|
|
||||||
|
|
||||||
// Mix up multiple attributes
|
|
||||||
notice := color.New(color.Bold, color.FgGreen).PrintlnFunc()
|
|
||||||
notice("Don't forget this...")
|
|
||||||
```
|
|
||||||
|
|
||||||
### Insert into noncolor strings (SprintFunc)
|
|
||||||
|
|
||||||
```go
|
|
||||||
// Create SprintXxx functions to mix strings with other non-colorized strings:
|
|
||||||
yellow := color.New(color.FgYellow).SprintFunc()
|
|
||||||
red := color.New(color.FgRed).SprintFunc()
|
|
||||||
fmt.Printf("This is a %s and this is %s.\n", yellow("warning"), red("error"))
|
|
||||||
|
|
||||||
info := color.New(color.FgWhite, color.BgGreen).SprintFunc()
|
|
||||||
fmt.Printf("This %s rocks!\n", info("package"))
|
|
||||||
|
|
||||||
// Use helper functions
|
|
||||||
fmt.Printf("This", color.RedString("warning"), "should be not neglected.")
|
|
||||||
fmt.Printf(color.GreenString("Info:"), "an important message." )
|
|
||||||
|
|
||||||
// Windows supported too! Just don't forget to change the output to color.Output
|
|
||||||
fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS"))
|
|
||||||
```
|
|
||||||
|
|
||||||
### Plug into existing code
|
|
||||||
|
|
||||||
```go
|
|
||||||
// Use handy standard colors
|
|
||||||
color.Set(color.FgYellow)
|
|
||||||
|
|
||||||
fmt.Println("Existing text will now be in yellow")
|
|
||||||
fmt.Printf("This one %s\n", "too")
|
|
||||||
|
|
||||||
color.Unset() // Don't forget to unset
|
|
||||||
|
|
||||||
// You can mix up parameters
|
|
||||||
color.Set(color.FgMagenta, color.Bold)
|
|
||||||
defer color.Unset() // Use it in your function
|
|
||||||
|
|
||||||
fmt.Println("All text will now be bold magenta.")
|
|
||||||
```
|
|
||||||
|
|
||||||
### Disable color
|
|
||||||
|
|
||||||
There might be a case where you want to disable color output (for example to
|
|
||||||
pipe the standard output of your app to somewhere else). `Color` has support to
|
|
||||||
disable colors both globally and for single color definition. For example
|
|
||||||
suppose you have a CLI app and a `--no-color` bool flag. You can easily disable
|
|
||||||
the color output with:
|
|
||||||
|
|
||||||
```go
|
|
||||||
|
|
||||||
var flagNoColor = flag.Bool("no-color", false, "Disable color output")
|
|
||||||
|
|
||||||
if *flagNoColor {
|
|
||||||
color.NoColor = true // disables colorized output
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
It also has support for single color definitions (local). You can
|
|
||||||
disable/enable color output on the fly:
|
|
||||||
|
|
||||||
```go
|
|
||||||
c := color.New(color.FgCyan)
|
|
||||||
c.Println("Prints cyan text")
|
|
||||||
|
|
||||||
c.DisableColor()
|
|
||||||
c.Println("This is printed without any color")
|
|
||||||
|
|
||||||
c.EnableColor()
|
|
||||||
c.Println("This prints again cyan...")
|
|
||||||
```
|
|
||||||
|
|
||||||
## Todo
|
|
||||||
|
|
||||||
* Save/Return previous values
|
|
||||||
* Evaluate fmt.Formatter interface
|
|
||||||
|
|
||||||
|
|
||||||
## Credits
|
|
||||||
|
|
||||||
* [Fatih Arslan](https://github.com/fatih)
|
|
||||||
* Windows support via @mattn: [colorable](https://github.com/mattn/go-colorable)
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
The MIT License (MIT) - see [`LICENSE.md`](https://github.com/fatih/color/blob/master/LICENSE.md) for more details
|
|
||||||
|
|
402
vendor/github.com/fatih/color/color.go
generated
vendored
402
vendor/github.com/fatih/color/color.go
generated
vendored
@ -1,402 +0,0 @@
|
|||||||
package color
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/mattn/go-colorable"
|
|
||||||
"github.com/mattn/go-isatty"
|
|
||||||
)
|
|
||||||
|
|
||||||
// NoColor defines if the output is colorized or not. It's dynamically set to
|
|
||||||
// false or true based on the stdout's file descriptor referring to a terminal
|
|
||||||
// or not. This is a global option and affects all colors. For more control
|
|
||||||
// over each color block use the methods DisableColor() individually.
|
|
||||||
var NoColor = !isatty.IsTerminal(os.Stdout.Fd())
|
|
||||||
|
|
||||||
// Color defines a custom color object which is defined by SGR parameters.
|
|
||||||
type Color struct {
|
|
||||||
params []Attribute
|
|
||||||
noColor *bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// Attribute defines a single SGR Code
|
|
||||||
type Attribute int
|
|
||||||
|
|
||||||
const escape = "\x1b"
|
|
||||||
|
|
||||||
// Base attributes
|
|
||||||
const (
|
|
||||||
Reset Attribute = iota
|
|
||||||
Bold
|
|
||||||
Faint
|
|
||||||
Italic
|
|
||||||
Underline
|
|
||||||
BlinkSlow
|
|
||||||
BlinkRapid
|
|
||||||
ReverseVideo
|
|
||||||
Concealed
|
|
||||||
CrossedOut
|
|
||||||
)
|
|
||||||
|
|
||||||
// Foreground text colors
|
|
||||||
const (
|
|
||||||
FgBlack Attribute = iota + 30
|
|
||||||
FgRed
|
|
||||||
FgGreen
|
|
||||||
FgYellow
|
|
||||||
FgBlue
|
|
||||||
FgMagenta
|
|
||||||
FgCyan
|
|
||||||
FgWhite
|
|
||||||
)
|
|
||||||
|
|
||||||
// Foreground Hi-Intensity text colors
|
|
||||||
const (
|
|
||||||
FgHiBlack Attribute = iota + 90
|
|
||||||
FgHiRed
|
|
||||||
FgHiGreen
|
|
||||||
FgHiYellow
|
|
||||||
FgHiBlue
|
|
||||||
FgHiMagenta
|
|
||||||
FgHiCyan
|
|
||||||
FgHiWhite
|
|
||||||
)
|
|
||||||
|
|
||||||
// Background text colors
|
|
||||||
const (
|
|
||||||
BgBlack Attribute = iota + 40
|
|
||||||
BgRed
|
|
||||||
BgGreen
|
|
||||||
BgYellow
|
|
||||||
BgBlue
|
|
||||||
BgMagenta
|
|
||||||
BgCyan
|
|
||||||
BgWhite
|
|
||||||
)
|
|
||||||
|
|
||||||
// Background Hi-Intensity text colors
|
|
||||||
const (
|
|
||||||
BgHiBlack Attribute = iota + 100
|
|
||||||
BgHiRed
|
|
||||||
BgHiGreen
|
|
||||||
BgHiYellow
|
|
||||||
BgHiBlue
|
|
||||||
BgHiMagenta
|
|
||||||
BgHiCyan
|
|
||||||
BgHiWhite
|
|
||||||
)
|
|
||||||
|
|
||||||
// New returns a newly created color object.
|
|
||||||
func New(value ...Attribute) *Color {
|
|
||||||
c := &Color{params: make([]Attribute, 0)}
|
|
||||||
c.Add(value...)
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set sets the given parameters immediately. It will change the color of
|
|
||||||
// output with the given SGR parameters until color.Unset() is called.
|
|
||||||
func Set(p ...Attribute) *Color {
|
|
||||||
c := New(p...)
|
|
||||||
c.Set()
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unset resets all escape attributes and clears the output. Usually should
|
|
||||||
// be called after Set().
|
|
||||||
func Unset() {
|
|
||||||
if NoColor {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Fprintf(Output, "%s[%dm", escape, Reset)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set sets the SGR sequence.
|
|
||||||
func (c *Color) Set() *Color {
|
|
||||||
if c.isNoColorSet() {
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Fprintf(Output, c.format())
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Color) unset() {
|
|
||||||
if c.isNoColorSet() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
Unset()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add is used to chain SGR parameters. Use as many as parameters to combine
|
|
||||||
// and create custom color objects. Example: Add(color.FgRed, color.Underline).
|
|
||||||
func (c *Color) Add(value ...Attribute) *Color {
|
|
||||||
c.params = append(c.params, value...)
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Color) prepend(value Attribute) {
|
|
||||||
c.params = append(c.params, 0)
|
|
||||||
copy(c.params[1:], c.params[0:])
|
|
||||||
c.params[0] = value
|
|
||||||
}
|
|
||||||
|
|
||||||
// Output defines the standard output of the print functions. By default
|
|
||||||
// os.Stdout is used.
|
|
||||||
var Output = colorable.NewColorableStdout()
|
|
||||||
|
|
||||||
// Print formats using the default formats for its operands and writes to
|
|
||||||
// standard output. Spaces are added between operands when neither is a
|
|
||||||
// string. It returns the number of bytes written and any write error
|
|
||||||
// encountered. This is the standard fmt.Print() method wrapped with the given
|
|
||||||
// color.
|
|
||||||
func (c *Color) Print(a ...interface{}) (n int, err error) {
|
|
||||||
c.Set()
|
|
||||||
defer c.unset()
|
|
||||||
|
|
||||||
return fmt.Fprint(Output, a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Printf formats according to a format specifier and writes to standard output.
|
|
||||||
// It returns the number of bytes written and any write error encountered.
|
|
||||||
// This is the standard fmt.Printf() method wrapped with the given color.
|
|
||||||
func (c *Color) Printf(format string, a ...interface{}) (n int, err error) {
|
|
||||||
c.Set()
|
|
||||||
defer c.unset()
|
|
||||||
|
|
||||||
return fmt.Fprintf(Output, format, a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Println formats using the default formats for its operands and writes to
|
|
||||||
// standard output. Spaces are always added between operands and a newline is
|
|
||||||
// appended. It returns the number of bytes written and any write error
|
|
||||||
// encountered. This is the standard fmt.Print() method wrapped with the given
|
|
||||||
// color.
|
|
||||||
func (c *Color) Println(a ...interface{}) (n int, err error) {
|
|
||||||
c.Set()
|
|
||||||
defer c.unset()
|
|
||||||
|
|
||||||
return fmt.Fprintln(Output, a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// PrintFunc returns a new function that prints the passed arguments as
|
|
||||||
// colorized with color.Print().
|
|
||||||
func (c *Color) PrintFunc() func(a ...interface{}) {
|
|
||||||
return func(a ...interface{}) { c.Print(a...) }
|
|
||||||
}
|
|
||||||
|
|
||||||
// PrintfFunc returns a new function that prints the passed arguments as
|
|
||||||
// colorized with color.Printf().
|
|
||||||
func (c *Color) PrintfFunc() func(format string, a ...interface{}) {
|
|
||||||
return func(format string, a ...interface{}) { c.Printf(format, a...) }
|
|
||||||
}
|
|
||||||
|
|
||||||
// PrintlnFunc returns a new function that prints the passed arguments as
|
|
||||||
// colorized with color.Println().
|
|
||||||
func (c *Color) PrintlnFunc() func(a ...interface{}) {
|
|
||||||
return func(a ...interface{}) { c.Println(a...) }
|
|
||||||
}
|
|
||||||
|
|
||||||
// SprintFunc returns a new function that returns colorized strings for the
|
|
||||||
// given arguments with fmt.Sprint(). Useful to put into or mix into other
|
|
||||||
// string. Windows users should use this in conjuction with color.Output, example:
|
|
||||||
//
|
|
||||||
// put := New(FgYellow).SprintFunc()
|
|
||||||
// fmt.Fprintf(color.Output, "This is a %s", put("warning"))
|
|
||||||
func (c *Color) SprintFunc() func(a ...interface{}) string {
|
|
||||||
return func(a ...interface{}) string {
|
|
||||||
return c.wrap(fmt.Sprint(a...))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SprintfFunc returns a new function that returns colorized strings for the
|
|
||||||
// given arguments with fmt.Sprintf(). Useful to put into or mix into other
|
|
||||||
// string. Windows users should use this in conjuction with color.Output.
|
|
||||||
func (c *Color) SprintfFunc() func(format string, a ...interface{}) string {
|
|
||||||
return func(format string, a ...interface{}) string {
|
|
||||||
return c.wrap(fmt.Sprintf(format, a...))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SprintlnFunc returns a new function that returns colorized strings for the
|
|
||||||
// given arguments with fmt.Sprintln(). Useful to put into or mix into other
|
|
||||||
// string. Windows users should use this in conjuction with color.Output.
|
|
||||||
func (c *Color) SprintlnFunc() func(a ...interface{}) string {
|
|
||||||
return func(a ...interface{}) string {
|
|
||||||
return c.wrap(fmt.Sprintln(a...))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// sequence returns a formated SGR sequence to be plugged into a "\x1b[...m"
|
|
||||||
// an example output might be: "1;36" -> bold cyan
|
|
||||||
func (c *Color) sequence() string {
|
|
||||||
format := make([]string, len(c.params))
|
|
||||||
for i, v := range c.params {
|
|
||||||
format[i] = strconv.Itoa(int(v))
|
|
||||||
}
|
|
||||||
|
|
||||||
return strings.Join(format, ";")
|
|
||||||
}
|
|
||||||
|
|
||||||
// wrap wraps the s string with the colors attributes. The string is ready to
|
|
||||||
// be printed.
|
|
||||||
func (c *Color) wrap(s string) string {
|
|
||||||
if c.isNoColorSet() {
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.format() + s + c.unformat()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Color) format() string {
|
|
||||||
return fmt.Sprintf("%s[%sm", escape, c.sequence())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Color) unformat() string {
|
|
||||||
return fmt.Sprintf("%s[%dm", escape, Reset)
|
|
||||||
}
|
|
||||||
|
|
||||||
// DisableColor disables the color output. Useful to not change any existing
|
|
||||||
// code and still being able to output. Can be used for flags like
|
|
||||||
// "--no-color". To enable back use EnableColor() method.
|
|
||||||
func (c *Color) DisableColor() {
|
|
||||||
c.noColor = boolPtr(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
// EnableColor enables the color output. Use it in conjuction with
|
|
||||||
// DisableColor(). Otherwise this method has no side effects.
|
|
||||||
func (c *Color) EnableColor() {
|
|
||||||
c.noColor = boolPtr(false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Color) isNoColorSet() bool {
|
|
||||||
// check first if we have user setted action
|
|
||||||
if c.noColor != nil {
|
|
||||||
return *c.noColor
|
|
||||||
}
|
|
||||||
|
|
||||||
// if not return the global option, which is disabled by default
|
|
||||||
return NoColor
|
|
||||||
}
|
|
||||||
|
|
||||||
// Equals returns a boolean value indicating whether two colors are equal.
|
|
||||||
func (c *Color) Equals(c2 *Color) bool {
|
|
||||||
if len(c.params) != len(c2.params) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, attr := range c.params {
|
|
||||||
if !c2.attrExists(attr) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Color) attrExists(a Attribute) bool {
|
|
||||||
for _, attr := range c.params {
|
|
||||||
if attr == a {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func boolPtr(v bool) *bool {
|
|
||||||
return &v
|
|
||||||
}
|
|
||||||
|
|
||||||
// Black is an convenient helper function to print with black foreground. A
|
|
||||||
// newline is appended to format by default.
|
|
||||||
func Black(format string, a ...interface{}) { printColor(format, FgBlack, a...) }
|
|
||||||
|
|
||||||
// Red is an convenient helper function to print with red foreground. A
|
|
||||||
// newline is appended to format by default.
|
|
||||||
func Red(format string, a ...interface{}) { printColor(format, FgRed, a...) }
|
|
||||||
|
|
||||||
// Green is an convenient helper function to print with green foreground. A
|
|
||||||
// newline is appended to format by default.
|
|
||||||
func Green(format string, a ...interface{}) { printColor(format, FgGreen, a...) }
|
|
||||||
|
|
||||||
// Yellow is an convenient helper function to print with yellow foreground.
|
|
||||||
// A newline is appended to format by default.
|
|
||||||
func Yellow(format string, a ...interface{}) { printColor(format, FgYellow, a...) }
|
|
||||||
|
|
||||||
// Blue is an convenient helper function to print with blue foreground. A
|
|
||||||
// newline is appended to format by default.
|
|
||||||
func Blue(format string, a ...interface{}) { printColor(format, FgBlue, a...) }
|
|
||||||
|
|
||||||
// Magenta is an convenient helper function to print with magenta foreground.
|
|
||||||
// A newline is appended to format by default.
|
|
||||||
func Magenta(format string, a ...interface{}) { printColor(format, FgMagenta, a...) }
|
|
||||||
|
|
||||||
// Cyan is an convenient helper function to print with cyan foreground. A
|
|
||||||
// newline is appended to format by default.
|
|
||||||
func Cyan(format string, a ...interface{}) { printColor(format, FgCyan, a...) }
|
|
||||||
|
|
||||||
// White is an convenient helper function to print with white foreground. A
|
|
||||||
// newline is appended to format by default.
|
|
||||||
func White(format string, a ...interface{}) { printColor(format, FgWhite, a...) }
|
|
||||||
|
|
||||||
func printColor(format string, p Attribute, a ...interface{}) {
|
|
||||||
if !strings.HasSuffix(format, "\n") {
|
|
||||||
format += "\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
c := &Color{params: []Attribute{p}}
|
|
||||||
c.Printf(format, a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// BlackString is an convenient helper function to return a string with black
|
|
||||||
// foreground.
|
|
||||||
func BlackString(format string, a ...interface{}) string {
|
|
||||||
return New(FgBlack).SprintfFunc()(format, a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// RedString is an convenient helper function to return a string with red
|
|
||||||
// foreground.
|
|
||||||
func RedString(format string, a ...interface{}) string {
|
|
||||||
return New(FgRed).SprintfFunc()(format, a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GreenString is an convenient helper function to return a string with green
|
|
||||||
// foreground.
|
|
||||||
func GreenString(format string, a ...interface{}) string {
|
|
||||||
return New(FgGreen).SprintfFunc()(format, a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// YellowString is an convenient helper function to return a string with yellow
|
|
||||||
// foreground.
|
|
||||||
func YellowString(format string, a ...interface{}) string {
|
|
||||||
return New(FgYellow).SprintfFunc()(format, a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// BlueString is an convenient helper function to return a string with blue
|
|
||||||
// foreground.
|
|
||||||
func BlueString(format string, a ...interface{}) string {
|
|
||||||
return New(FgBlue).SprintfFunc()(format, a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MagentaString is an convenient helper function to return a string with magenta
|
|
||||||
// foreground.
|
|
||||||
func MagentaString(format string, a ...interface{}) string {
|
|
||||||
return New(FgMagenta).SprintfFunc()(format, a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// CyanString is an convenient helper function to return a string with cyan
|
|
||||||
// foreground.
|
|
||||||
func CyanString(format string, a ...interface{}) string {
|
|
||||||
return New(FgCyan).SprintfFunc()(format, a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// WhiteString is an convenient helper function to return a string with white
|
|
||||||
// foreground.
|
|
||||||
func WhiteString(format string, a ...interface{}) string {
|
|
||||||
return New(FgWhite).SprintfFunc()(format, a...)
|
|
||||||
}
|
|
114
vendor/github.com/fatih/color/doc.go
generated
vendored
114
vendor/github.com/fatih/color/doc.go
generated
vendored
@ -1,114 +0,0 @@
|
|||||||
/*
|
|
||||||
Package color is an ANSI color package to output colorized or SGR defined
|
|
||||||
output to the standard output. The API can be used in several way, pick one
|
|
||||||
that suits you.
|
|
||||||
|
|
||||||
Use simple and default helper functions with predefined foreground colors:
|
|
||||||
|
|
||||||
color.Cyan("Prints text in cyan.")
|
|
||||||
|
|
||||||
// a newline will be appended automatically
|
|
||||||
color.Blue("Prints %s in blue.", "text")
|
|
||||||
|
|
||||||
// More default foreground colors..
|
|
||||||
color.Red("We have red")
|
|
||||||
color.Yellow("Yellow color too!")
|
|
||||||
color.Magenta("And many others ..")
|
|
||||||
|
|
||||||
However there are times where custom color mixes are required. Below are some
|
|
||||||
examples to create custom color objects and use the print functions of each
|
|
||||||
separate color object.
|
|
||||||
|
|
||||||
// Create a new color object
|
|
||||||
c := color.New(color.FgCyan).Add(color.Underline)
|
|
||||||
c.Println("Prints cyan text with an underline.")
|
|
||||||
|
|
||||||
// Or just add them to New()
|
|
||||||
d := color.New(color.FgCyan, color.Bold)
|
|
||||||
d.Printf("This prints bold cyan %s\n", "too!.")
|
|
||||||
|
|
||||||
|
|
||||||
// Mix up foreground and background colors, create new mixes!
|
|
||||||
red := color.New(color.FgRed)
|
|
||||||
|
|
||||||
boldRed := red.Add(color.Bold)
|
|
||||||
boldRed.Println("This will print text in bold red.")
|
|
||||||
|
|
||||||
whiteBackground := red.Add(color.BgWhite)
|
|
||||||
whiteBackground.Println("Red text with White background.")
|
|
||||||
|
|
||||||
|
|
||||||
You can create PrintXxx functions to simplify even more:
|
|
||||||
|
|
||||||
// Create a custom print function for convenient
|
|
||||||
red := color.New(color.FgRed).PrintfFunc()
|
|
||||||
red("warning")
|
|
||||||
red("error: %s", err)
|
|
||||||
|
|
||||||
// Mix up multiple attributes
|
|
||||||
notice := color.New(color.Bold, color.FgGreen).PrintlnFunc()
|
|
||||||
notice("don't forget this...")
|
|
||||||
|
|
||||||
|
|
||||||
Or create SprintXxx functions to mix strings with other non-colorized strings:
|
|
||||||
|
|
||||||
yellow := New(FgYellow).SprintFunc()
|
|
||||||
red := New(FgRed).SprintFunc()
|
|
||||||
|
|
||||||
fmt.Printf("this is a %s and this is %s.\n", yellow("warning"), red("error"))
|
|
||||||
|
|
||||||
info := New(FgWhite, BgGreen).SprintFunc()
|
|
||||||
fmt.Printf("this %s rocks!\n", info("package"))
|
|
||||||
|
|
||||||
Windows support is enabled by default. All Print functions works as intended.
|
|
||||||
However only for color.SprintXXX functions, user should use fmt.FprintXXX and
|
|
||||||
set the output to color.Output:
|
|
||||||
|
|
||||||
fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS"))
|
|
||||||
|
|
||||||
info := New(FgWhite, BgGreen).SprintFunc()
|
|
||||||
fmt.Fprintf(color.Output, "this %s rocks!\n", info("package"))
|
|
||||||
|
|
||||||
Using with existing code is possible. Just use the Set() method to set the
|
|
||||||
standard output to the given parameters. That way a rewrite of an existing
|
|
||||||
code is not required.
|
|
||||||
|
|
||||||
// Use handy standard colors.
|
|
||||||
color.Set(color.FgYellow)
|
|
||||||
|
|
||||||
fmt.Println("Existing text will be now in Yellow")
|
|
||||||
fmt.Printf("This one %s\n", "too")
|
|
||||||
|
|
||||||
color.Unset() // don't forget to unset
|
|
||||||
|
|
||||||
// You can mix up parameters
|
|
||||||
color.Set(color.FgMagenta, color.Bold)
|
|
||||||
defer color.Unset() // use it in your function
|
|
||||||
|
|
||||||
fmt.Println("All text will be now bold magenta.")
|
|
||||||
|
|
||||||
There might be a case where you want to disable color output (for example to
|
|
||||||
pipe the standard output of your app to somewhere else). `Color` has support to
|
|
||||||
disable colors both globally and for single color definition. For example
|
|
||||||
suppose you have a CLI app and a `--no-color` bool flag. You can easily disable
|
|
||||||
the color output with:
|
|
||||||
|
|
||||||
var flagNoColor = flag.Bool("no-color", false, "Disable color output")
|
|
||||||
|
|
||||||
if *flagNoColor {
|
|
||||||
color.NoColor = true // disables colorized output
|
|
||||||
}
|
|
||||||
|
|
||||||
It also has support for single color definitions (local). You can
|
|
||||||
disable/enable color output on the fly:
|
|
||||||
|
|
||||||
c := color.New(color.FgCyan)
|
|
||||||
c.Println("Prints cyan text")
|
|
||||||
|
|
||||||
c.DisableColor()
|
|
||||||
c.Println("This is printed without any color")
|
|
||||||
|
|
||||||
c.EnableColor()
|
|
||||||
c.Println("This prints again cyan...")
|
|
||||||
*/
|
|
||||||
package color
|
|
21
vendor/github.com/mattn/go-colorable/LICENSE
generated
vendored
21
vendor/github.com/mattn/go-colorable/LICENSE
generated
vendored
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2016 Yasuhiro Matsumoto
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
43
vendor/github.com/mattn/go-colorable/README.md
generated
vendored
43
vendor/github.com/mattn/go-colorable/README.md
generated
vendored
@ -1,43 +0,0 @@
|
|||||||
# go-colorable
|
|
||||||
|
|
||||||
Colorable writer for windows.
|
|
||||||
|
|
||||||
For example, most of logger packages doesn't show colors on windows. (I know we can do it with ansicon. But I don't want.)
|
|
||||||
This package is possible to handle escape sequence for ansi color on windows.
|
|
||||||
|
|
||||||
## Too Bad!
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
## So Good!
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```go
|
|
||||||
logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true})
|
|
||||||
logrus.SetOutput(colorable.NewColorableStdout())
|
|
||||||
|
|
||||||
logrus.Info("succeeded")
|
|
||||||
logrus.Warn("not correct")
|
|
||||||
logrus.Error("something error")
|
|
||||||
logrus.Fatal("panic")
|
|
||||||
```
|
|
||||||
|
|
||||||
You can compile above code on non-windows OSs.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
```
|
|
||||||
$ go get github.com/mattn/go-colorable
|
|
||||||
```
|
|
||||||
|
|
||||||
# License
|
|
||||||
|
|
||||||
MIT
|
|
||||||
|
|
||||||
# Author
|
|
||||||
|
|
||||||
Yasuhiro Matsumoto (a.k.a mattn)
|
|
24
vendor/github.com/mattn/go-colorable/colorable_others.go
generated
vendored
24
vendor/github.com/mattn/go-colorable/colorable_others.go
generated
vendored
@ -1,24 +0,0 @@
|
|||||||
// +build !windows
|
|
||||||
|
|
||||||
package colorable
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io"
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
func NewColorable(file *os.File) io.Writer {
|
|
||||||
if file == nil {
|
|
||||||
panic("nil passed instead of *os.File to NewColorable()")
|
|
||||||
}
|
|
||||||
|
|
||||||
return file
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewColorableStdout() io.Writer {
|
|
||||||
return os.Stdout
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewColorableStderr() io.Writer {
|
|
||||||
return os.Stderr
|
|
||||||
}
|
|
809
vendor/github.com/mattn/go-colorable/colorable_windows.go
generated
vendored
809
vendor/github.com/mattn/go-colorable/colorable_windows.go
generated
vendored
@ -1,809 +0,0 @@
|
|||||||
package colorable
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"math"
|
|
||||||
"os"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"github.com/mattn/go-isatty"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
foregroundBlue = 0x1
|
|
||||||
foregroundGreen = 0x2
|
|
||||||
foregroundRed = 0x4
|
|
||||||
foregroundIntensity = 0x8
|
|
||||||
foregroundMask = (foregroundRed | foregroundBlue | foregroundGreen | foregroundIntensity)
|
|
||||||
backgroundBlue = 0x10
|
|
||||||
backgroundGreen = 0x20
|
|
||||||
backgroundRed = 0x40
|
|
||||||
backgroundIntensity = 0x80
|
|
||||||
backgroundMask = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity)
|
|
||||||
)
|
|
||||||
|
|
||||||
type wchar uint16
|
|
||||||
type short int16
|
|
||||||
type dword uint32
|
|
||||||
type word uint16
|
|
||||||
|
|
||||||
type coord struct {
|
|
||||||
x short
|
|
||||||
y short
|
|
||||||
}
|
|
||||||
|
|
||||||
type smallRect struct {
|
|
||||||
left short
|
|
||||||
top short
|
|
||||||
right short
|
|
||||||
bottom short
|
|
||||||
}
|
|
||||||
|
|
||||||
type consoleScreenBufferInfo struct {
|
|
||||||
size coord
|
|
||||||
cursorPosition coord
|
|
||||||
attributes word
|
|
||||||
window smallRect
|
|
||||||
maximumWindowSize coord
|
|
||||||
}
|
|
||||||
|
|
||||||
type consoleCursorInfo struct {
|
|
||||||
size dword
|
|
||||||
visible int32
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
kernel32 = syscall.NewLazyDLL("kernel32.dll")
|
|
||||||
procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo")
|
|
||||||
procSetConsoleTextAttribute = kernel32.NewProc("SetConsoleTextAttribute")
|
|
||||||
procSetConsoleCursorPosition = kernel32.NewProc("SetConsoleCursorPosition")
|
|
||||||
procFillConsoleOutputCharacter = kernel32.NewProc("FillConsoleOutputCharacterW")
|
|
||||||
procFillConsoleOutputAttribute = kernel32.NewProc("FillConsoleOutputAttribute")
|
|
||||||
procGetConsoleCursorInfo = kernel32.NewProc("GetConsoleCursorInfo")
|
|
||||||
procSetConsoleCursorInfo = kernel32.NewProc("SetConsoleCursorInfo")
|
|
||||||
)
|
|
||||||
|
|
||||||
type Writer struct {
|
|
||||||
out io.Writer
|
|
||||||
handle syscall.Handle
|
|
||||||
lastbuf bytes.Buffer
|
|
||||||
oldattr word
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewColorable(file *os.File) io.Writer {
|
|
||||||
if file == nil {
|
|
||||||
panic("nil passed instead of *os.File to NewColorable()")
|
|
||||||
}
|
|
||||||
|
|
||||||
if isatty.IsTerminal(file.Fd()) {
|
|
||||||
var csbi consoleScreenBufferInfo
|
|
||||||
handle := syscall.Handle(file.Fd())
|
|
||||||
procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
return &Writer{out: file, handle: handle, oldattr: csbi.attributes}
|
|
||||||
} else {
|
|
||||||
return file
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewColorableStdout() io.Writer {
|
|
||||||
return NewColorable(os.Stdout)
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewColorableStderr() io.Writer {
|
|
||||||
return NewColorable(os.Stderr)
|
|
||||||
}
|
|
||||||
|
|
||||||
var color256 = map[int]int{
|
|
||||||
0: 0x000000,
|
|
||||||
1: 0x800000,
|
|
||||||
2: 0x008000,
|
|
||||||
3: 0x808000,
|
|
||||||
4: 0x000080,
|
|
||||||
5: 0x800080,
|
|
||||||
6: 0x008080,
|
|
||||||
7: 0xc0c0c0,
|
|
||||||
8: 0x808080,
|
|
||||||
9: 0xff0000,
|
|
||||||
10: 0x00ff00,
|
|
||||||
11: 0xffff00,
|
|
||||||
12: 0x0000ff,
|
|
||||||
13: 0xff00ff,
|
|
||||||
14: 0x00ffff,
|
|
||||||
15: 0xffffff,
|
|
||||||
16: 0x000000,
|
|
||||||
17: 0x00005f,
|
|
||||||
18: 0x000087,
|
|
||||||
19: 0x0000af,
|
|
||||||
20: 0x0000d7,
|
|
||||||
21: 0x0000ff,
|
|
||||||
22: 0x005f00,
|
|
||||||
23: 0x005f5f,
|
|
||||||
24: 0x005f87,
|
|
||||||
25: 0x005faf,
|
|
||||||
26: 0x005fd7,
|
|
||||||
27: 0x005fff,
|
|
||||||
28: 0x008700,
|
|
||||||
29: 0x00875f,
|
|
||||||
30: 0x008787,
|
|
||||||
31: 0x0087af,
|
|
||||||
32: 0x0087d7,
|
|
||||||
33: 0x0087ff,
|
|
||||||
34: 0x00af00,
|
|
||||||
35: 0x00af5f,
|
|
||||||
36: 0x00af87,
|
|
||||||
37: 0x00afaf,
|
|
||||||
38: 0x00afd7,
|
|
||||||
39: 0x00afff,
|
|
||||||
40: 0x00d700,
|
|
||||||
41: 0x00d75f,
|
|
||||||
42: 0x00d787,
|
|
||||||
43: 0x00d7af,
|
|
||||||
44: 0x00d7d7,
|
|
||||||
45: 0x00d7ff,
|
|
||||||
46: 0x00ff00,
|
|
||||||
47: 0x00ff5f,
|
|
||||||
48: 0x00ff87,
|
|
||||||
49: 0x00ffaf,
|
|
||||||
50: 0x00ffd7,
|
|
||||||
51: 0x00ffff,
|
|
||||||
52: 0x5f0000,
|
|
||||||
53: 0x5f005f,
|
|
||||||
54: 0x5f0087,
|
|
||||||
55: 0x5f00af,
|
|
||||||
56: 0x5f00d7,
|
|
||||||
57: 0x5f00ff,
|
|
||||||
58: 0x5f5f00,
|
|
||||||
59: 0x5f5f5f,
|
|
||||||
60: 0x5f5f87,
|
|
||||||
61: 0x5f5faf,
|
|
||||||
62: 0x5f5fd7,
|
|
||||||
63: 0x5f5fff,
|
|
||||||
64: 0x5f8700,
|
|
||||||
65: 0x5f875f,
|
|
||||||
66: 0x5f8787,
|
|
||||||
67: 0x5f87af,
|
|
||||||
68: 0x5f87d7,
|
|
||||||
69: 0x5f87ff,
|
|
||||||
70: 0x5faf00,
|
|
||||||
71: 0x5faf5f,
|
|
||||||
72: 0x5faf87,
|
|
||||||
73: 0x5fafaf,
|
|
||||||
74: 0x5fafd7,
|
|
||||||
75: 0x5fafff,
|
|
||||||
76: 0x5fd700,
|
|
||||||
77: 0x5fd75f,
|
|
||||||
78: 0x5fd787,
|
|
||||||
79: 0x5fd7af,
|
|
||||||
80: 0x5fd7d7,
|
|
||||||
81: 0x5fd7ff,
|
|
||||||
82: 0x5fff00,
|
|
||||||
83: 0x5fff5f,
|
|
||||||
84: 0x5fff87,
|
|
||||||
85: 0x5fffaf,
|
|
||||||
86: 0x5fffd7,
|
|
||||||
87: 0x5fffff,
|
|
||||||
88: 0x870000,
|
|
||||||
89: 0x87005f,
|
|
||||||
90: 0x870087,
|
|
||||||
91: 0x8700af,
|
|
||||||
92: 0x8700d7,
|
|
||||||
93: 0x8700ff,
|
|
||||||
94: 0x875f00,
|
|
||||||
95: 0x875f5f,
|
|
||||||
96: 0x875f87,
|
|
||||||
97: 0x875faf,
|
|
||||||
98: 0x875fd7,
|
|
||||||
99: 0x875fff,
|
|
||||||
100: 0x878700,
|
|
||||||
101: 0x87875f,
|
|
||||||
102: 0x878787,
|
|
||||||
103: 0x8787af,
|
|
||||||
104: 0x8787d7,
|
|
||||||
105: 0x8787ff,
|
|
||||||
106: 0x87af00,
|
|
||||||
107: 0x87af5f,
|
|
||||||
108: 0x87af87,
|
|
||||||
109: 0x87afaf,
|
|
||||||
110: 0x87afd7,
|
|
||||||
111: 0x87afff,
|
|
||||||
112: 0x87d700,
|
|
||||||
113: 0x87d75f,
|
|
||||||
114: 0x87d787,
|
|
||||||
115: 0x87d7af,
|
|
||||||
116: 0x87d7d7,
|
|
||||||
117: 0x87d7ff,
|
|
||||||
118: 0x87ff00,
|
|
||||||
119: 0x87ff5f,
|
|
||||||
120: 0x87ff87,
|
|
||||||
121: 0x87ffaf,
|
|
||||||
122: 0x87ffd7,
|
|
||||||
123: 0x87ffff,
|
|
||||||
124: 0xaf0000,
|
|
||||||
125: 0xaf005f,
|
|
||||||
126: 0xaf0087,
|
|
||||||
127: 0xaf00af,
|
|
||||||
128: 0xaf00d7,
|
|
||||||
129: 0xaf00ff,
|
|
||||||
130: 0xaf5f00,
|
|
||||||
131: 0xaf5f5f,
|
|
||||||
132: 0xaf5f87,
|
|
||||||
133: 0xaf5faf,
|
|
||||||
134: 0xaf5fd7,
|
|
||||||
135: 0xaf5fff,
|
|
||||||
136: 0xaf8700,
|
|
||||||
137: 0xaf875f,
|
|
||||||
138: 0xaf8787,
|
|
||||||
139: 0xaf87af,
|
|
||||||
140: 0xaf87d7,
|
|
||||||
141: 0xaf87ff,
|
|
||||||
142: 0xafaf00,
|
|
||||||
143: 0xafaf5f,
|
|
||||||
144: 0xafaf87,
|
|
||||||
145: 0xafafaf,
|
|
||||||
146: 0xafafd7,
|
|
||||||
147: 0xafafff,
|
|
||||||
148: 0xafd700,
|
|
||||||
149: 0xafd75f,
|
|
||||||
150: 0xafd787,
|
|
||||||
151: 0xafd7af,
|
|
||||||
152: 0xafd7d7,
|
|
||||||
153: 0xafd7ff,
|
|
||||||
154: 0xafff00,
|
|
||||||
155: 0xafff5f,
|
|
||||||
156: 0xafff87,
|
|
||||||
157: 0xafffaf,
|
|
||||||
158: 0xafffd7,
|
|
||||||
159: 0xafffff,
|
|
||||||
160: 0xd70000,
|
|
||||||
161: 0xd7005f,
|
|
||||||
162: 0xd70087,
|
|
||||||
163: 0xd700af,
|
|
||||||
164: 0xd700d7,
|
|
||||||
165: 0xd700ff,
|
|
||||||
166: 0xd75f00,
|
|
||||||
167: 0xd75f5f,
|
|
||||||
168: 0xd75f87,
|
|
||||||
169: 0xd75faf,
|
|
||||||
170: 0xd75fd7,
|
|
||||||
171: 0xd75fff,
|
|
||||||
172: 0xd78700,
|
|
||||||
173: 0xd7875f,
|
|
||||||
174: 0xd78787,
|
|
||||||
175: 0xd787af,
|
|
||||||
176: 0xd787d7,
|
|
||||||
177: 0xd787ff,
|
|
||||||
178: 0xd7af00,
|
|
||||||
179: 0xd7af5f,
|
|
||||||
180: 0xd7af87,
|
|
||||||
181: 0xd7afaf,
|
|
||||||
182: 0xd7afd7,
|
|
||||||
183: 0xd7afff,
|
|
||||||
184: 0xd7d700,
|
|
||||||
185: 0xd7d75f,
|
|
||||||
186: 0xd7d787,
|
|
||||||
187: 0xd7d7af,
|
|
||||||
188: 0xd7d7d7,
|
|
||||||
189: 0xd7d7ff,
|
|
||||||
190: 0xd7ff00,
|
|
||||||
191: 0xd7ff5f,
|
|
||||||
192: 0xd7ff87,
|
|
||||||
193: 0xd7ffaf,
|
|
||||||
194: 0xd7ffd7,
|
|
||||||
195: 0xd7ffff,
|
|
||||||
196: 0xff0000,
|
|
||||||
197: 0xff005f,
|
|
||||||
198: 0xff0087,
|
|
||||||
199: 0xff00af,
|
|
||||||
200: 0xff00d7,
|
|
||||||
201: 0xff00ff,
|
|
||||||
202: 0xff5f00,
|
|
||||||
203: 0xff5f5f,
|
|
||||||
204: 0xff5f87,
|
|
||||||
205: 0xff5faf,
|
|
||||||
206: 0xff5fd7,
|
|
||||||
207: 0xff5fff,
|
|
||||||
208: 0xff8700,
|
|
||||||
209: 0xff875f,
|
|
||||||
210: 0xff8787,
|
|
||||||
211: 0xff87af,
|
|
||||||
212: 0xff87d7,
|
|
||||||
213: 0xff87ff,
|
|
||||||
214: 0xffaf00,
|
|
||||||
215: 0xffaf5f,
|
|
||||||
216: 0xffaf87,
|
|
||||||
217: 0xffafaf,
|
|
||||||
218: 0xffafd7,
|
|
||||||
219: 0xffafff,
|
|
||||||
220: 0xffd700,
|
|
||||||
221: 0xffd75f,
|
|
||||||
222: 0xffd787,
|
|
||||||
223: 0xffd7af,
|
|
||||||
224: 0xffd7d7,
|
|
||||||
225: 0xffd7ff,
|
|
||||||
226: 0xffff00,
|
|
||||||
227: 0xffff5f,
|
|
||||||
228: 0xffff87,
|
|
||||||
229: 0xffffaf,
|
|
||||||
230: 0xffffd7,
|
|
||||||
231: 0xffffff,
|
|
||||||
232: 0x080808,
|
|
||||||
233: 0x121212,
|
|
||||||
234: 0x1c1c1c,
|
|
||||||
235: 0x262626,
|
|
||||||
236: 0x303030,
|
|
||||||
237: 0x3a3a3a,
|
|
||||||
238: 0x444444,
|
|
||||||
239: 0x4e4e4e,
|
|
||||||
240: 0x585858,
|
|
||||||
241: 0x626262,
|
|
||||||
242: 0x6c6c6c,
|
|
||||||
243: 0x767676,
|
|
||||||
244: 0x808080,
|
|
||||||
245: 0x8a8a8a,
|
|
||||||
246: 0x949494,
|
|
||||||
247: 0x9e9e9e,
|
|
||||||
248: 0xa8a8a8,
|
|
||||||
249: 0xb2b2b2,
|
|
||||||
250: 0xbcbcbc,
|
|
||||||
251: 0xc6c6c6,
|
|
||||||
252: 0xd0d0d0,
|
|
||||||
253: 0xdadada,
|
|
||||||
254: 0xe4e4e4,
|
|
||||||
255: 0xeeeeee,
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w *Writer) Write(data []byte) (n int, err error) {
|
|
||||||
var csbi consoleScreenBufferInfo
|
|
||||||
procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
|
|
||||||
er := bytes.NewBuffer(data)
|
|
||||||
loop:
|
|
||||||
for {
|
|
||||||
r1, _, err := procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
if r1 == 0 {
|
|
||||||
break loop
|
|
||||||
}
|
|
||||||
|
|
||||||
c1, _, err := er.ReadRune()
|
|
||||||
if err != nil {
|
|
||||||
break loop
|
|
||||||
}
|
|
||||||
if c1 != 0x1b {
|
|
||||||
fmt.Fprint(w.out, string(c1))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
c2, _, err := er.ReadRune()
|
|
||||||
if err != nil {
|
|
||||||
w.lastbuf.WriteRune(c1)
|
|
||||||
break loop
|
|
||||||
}
|
|
||||||
if c2 != 0x5b {
|
|
||||||
w.lastbuf.WriteRune(c1)
|
|
||||||
w.lastbuf.WriteRune(c2)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
var buf bytes.Buffer
|
|
||||||
var m rune
|
|
||||||
for {
|
|
||||||
c, _, err := er.ReadRune()
|
|
||||||
if err != nil {
|
|
||||||
w.lastbuf.WriteRune(c1)
|
|
||||||
w.lastbuf.WriteRune(c2)
|
|
||||||
w.lastbuf.Write(buf.Bytes())
|
|
||||||
break loop
|
|
||||||
}
|
|
||||||
if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {
|
|
||||||
m = c
|
|
||||||
break
|
|
||||||
}
|
|
||||||
buf.Write([]byte(string(c)))
|
|
||||||
}
|
|
||||||
|
|
||||||
var csbi consoleScreenBufferInfo
|
|
||||||
switch m {
|
|
||||||
case 'A':
|
|
||||||
n, err = strconv.Atoi(buf.String())
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
csbi.cursorPosition.y -= short(n)
|
|
||||||
procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
|
|
||||||
case 'B':
|
|
||||||
n, err = strconv.Atoi(buf.String())
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
csbi.cursorPosition.y += short(n)
|
|
||||||
procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
|
|
||||||
case 'C':
|
|
||||||
n, err = strconv.Atoi(buf.String())
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
csbi.cursorPosition.x -= short(n)
|
|
||||||
procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
|
|
||||||
case 'D':
|
|
||||||
n, err = strconv.Atoi(buf.String())
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if n, err = strconv.Atoi(buf.String()); err == nil {
|
|
||||||
var csbi consoleScreenBufferInfo
|
|
||||||
procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
csbi.cursorPosition.x += short(n)
|
|
||||||
procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
|
|
||||||
}
|
|
||||||
case 'E':
|
|
||||||
n, err = strconv.Atoi(buf.String())
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
csbi.cursorPosition.x = 0
|
|
||||||
csbi.cursorPosition.y += short(n)
|
|
||||||
procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
|
|
||||||
case 'F':
|
|
||||||
n, err = strconv.Atoi(buf.String())
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
csbi.cursorPosition.x = 0
|
|
||||||
csbi.cursorPosition.y -= short(n)
|
|
||||||
procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
|
|
||||||
case 'G':
|
|
||||||
n, err = strconv.Atoi(buf.String())
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
csbi.cursorPosition.x = short(n)
|
|
||||||
procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
|
|
||||||
case 'H':
|
|
||||||
token := strings.Split(buf.String(), ";")
|
|
||||||
if len(token) != 2 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
n1, err := strconv.Atoi(token[0])
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
n2, err := strconv.Atoi(token[1])
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
csbi.cursorPosition.x = short(n2)
|
|
||||||
csbi.cursorPosition.y = short(n1)
|
|
||||||
procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
|
|
||||||
case 'J':
|
|
||||||
n, err := strconv.Atoi(buf.String())
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
var cursor coord
|
|
||||||
switch n {
|
|
||||||
case 0:
|
|
||||||
cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}
|
|
||||||
case 1:
|
|
||||||
cursor = coord{x: csbi.window.left, y: csbi.window.top}
|
|
||||||
case 2:
|
|
||||||
cursor = coord{x: csbi.window.left, y: csbi.window.top}
|
|
||||||
}
|
|
||||||
var count, written dword
|
|
||||||
count = dword(csbi.size.x - csbi.cursorPosition.x + (csbi.size.y-csbi.cursorPosition.y)*csbi.size.x)
|
|
||||||
procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
|
|
||||||
procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
|
|
||||||
case 'K':
|
|
||||||
n, err := strconv.Atoi(buf.String())
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
var cursor coord
|
|
||||||
switch n {
|
|
||||||
case 0:
|
|
||||||
cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}
|
|
||||||
case 1:
|
|
||||||
cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y}
|
|
||||||
case 2:
|
|
||||||
cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y}
|
|
||||||
}
|
|
||||||
var count, written dword
|
|
||||||
count = dword(csbi.size.x - csbi.cursorPosition.x)
|
|
||||||
procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
|
|
||||||
procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
|
|
||||||
case 'm':
|
|
||||||
procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
|
||||||
attr := csbi.attributes
|
|
||||||
cs := buf.String()
|
|
||||||
if cs == "" {
|
|
||||||
procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(w.oldattr))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
token := strings.Split(cs, ";")
|
|
||||||
for i := 0; i < len(token); i++ {
|
|
||||||
ns := token[i]
|
|
||||||
if n, err = strconv.Atoi(ns); err == nil {
|
|
||||||
switch {
|
|
||||||
case n == 0 || n == 100:
|
|
||||||
attr = w.oldattr
|
|
||||||
case 1 <= n && n <= 5:
|
|
||||||
attr |= foregroundIntensity
|
|
||||||
case n == 7:
|
|
||||||
attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4)
|
|
||||||
case 22 == n || n == 25 || n == 25:
|
|
||||||
attr |= foregroundIntensity
|
|
||||||
case n == 27:
|
|
||||||
attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4)
|
|
||||||
case 30 <= n && n <= 37:
|
|
||||||
attr &= backgroundMask
|
|
||||||
if (n-30)&1 != 0 {
|
|
||||||
attr |= foregroundRed
|
|
||||||
}
|
|
||||||
if (n-30)&2 != 0 {
|
|
||||||
attr |= foregroundGreen
|
|
||||||
}
|
|
||||||
if (n-30)&4 != 0 {
|
|
||||||
attr |= foregroundBlue
|
|
||||||
}
|
|
||||||
case n == 38: // set foreground color.
|
|
||||||
if i < len(token)-2 && (token[i+1] == "5" || token[i+1] == "05") {
|
|
||||||
if n256, err := strconv.Atoi(token[i+2]); err == nil {
|
|
||||||
if n256foreAttr == nil {
|
|
||||||
n256setup()
|
|
||||||
}
|
|
||||||
attr &= backgroundMask
|
|
||||||
attr |= n256foreAttr[n256]
|
|
||||||
i += 2
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
attr = attr & (w.oldattr & backgroundMask)
|
|
||||||
}
|
|
||||||
case n == 39: // reset foreground color.
|
|
||||||
attr &= backgroundMask
|
|
||||||
attr |= w.oldattr & foregroundMask
|
|
||||||
case 40 <= n && n <= 47:
|
|
||||||
attr &= foregroundMask
|
|
||||||
if (n-40)&1 != 0 {
|
|
||||||
attr |= backgroundRed
|
|
||||||
}
|
|
||||||
if (n-40)&2 != 0 {
|
|
||||||
attr |= backgroundGreen
|
|
||||||
}
|
|
||||||
if (n-40)&4 != 0 {
|
|
||||||
attr |= backgroundBlue
|
|
||||||
}
|
|
||||||
case n == 48: // set background color.
|
|
||||||
if i < len(token)-2 && token[i+1] == "5" {
|
|
||||||
if n256, err := strconv.Atoi(token[i+2]); err == nil {
|
|
||||||
if n256backAttr == nil {
|
|
||||||
n256setup()
|
|
||||||
}
|
|
||||||
attr &= foregroundMask
|
|
||||||
attr |= n256backAttr[n256]
|
|
||||||
i += 2
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
attr = attr & (w.oldattr & foregroundMask)
|
|
||||||
}
|
|
||||||
case n == 49: // reset foreground color.
|
|
||||||
attr &= foregroundMask
|
|
||||||
attr |= w.oldattr & backgroundMask
|
|
||||||
case 90 <= n && n <= 97:
|
|
||||||
attr = (attr & backgroundMask)
|
|
||||||
attr |= foregroundIntensity
|
|
||||||
if (n-90)&1 != 0 {
|
|
||||||
attr |= foregroundRed
|
|
||||||
}
|
|
||||||
if (n-90)&2 != 0 {
|
|
||||||
attr |= foregroundGreen
|
|
||||||
}
|
|
||||||
if (n-90)&4 != 0 {
|
|
||||||
attr |= foregroundBlue
|
|
||||||
}
|
|
||||||
case 100 <= n && n <= 107:
|
|
||||||
attr = (attr & foregroundMask)
|
|
||||||
attr |= backgroundIntensity
|
|
||||||
if (n-100)&1 != 0 {
|
|
||||||
attr |= backgroundRed
|
|
||||||
}
|
|
||||||
if (n-100)&2 != 0 {
|
|
||||||
attr |= backgroundGreen
|
|
||||||
}
|
|
||||||
if (n-100)&4 != 0 {
|
|
||||||
attr |= backgroundBlue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(attr))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case 'h':
|
|
||||||
cs := buf.String()
|
|
||||||
if cs == "?25" {
|
|
||||||
var ci consoleCursorInfo
|
|
||||||
procGetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci)))
|
|
||||||
ci.visible = 1
|
|
||||||
procSetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci)))
|
|
||||||
}
|
|
||||||
case 'l':
|
|
||||||
cs := buf.String()
|
|
||||||
if cs == "?25" {
|
|
||||||
var ci consoleCursorInfo
|
|
||||||
procGetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci)))
|
|
||||||
ci.visible = 0
|
|
||||||
procSetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return len(data) - w.lastbuf.Len(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type consoleColor struct {
|
|
||||||
rgb int
|
|
||||||
red bool
|
|
||||||
green bool
|
|
||||||
blue bool
|
|
||||||
intensity bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c consoleColor) foregroundAttr() (attr word) {
|
|
||||||
if c.red {
|
|
||||||
attr |= foregroundRed
|
|
||||||
}
|
|
||||||
if c.green {
|
|
||||||
attr |= foregroundGreen
|
|
||||||
}
|
|
||||||
if c.blue {
|
|
||||||
attr |= foregroundBlue
|
|
||||||
}
|
|
||||||
if c.intensity {
|
|
||||||
attr |= foregroundIntensity
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c consoleColor) backgroundAttr() (attr word) {
|
|
||||||
if c.red {
|
|
||||||
attr |= backgroundRed
|
|
||||||
}
|
|
||||||
if c.green {
|
|
||||||
attr |= backgroundGreen
|
|
||||||
}
|
|
||||||
if c.blue {
|
|
||||||
attr |= backgroundBlue
|
|
||||||
}
|
|
||||||
if c.intensity {
|
|
||||||
attr |= backgroundIntensity
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var color16 = []consoleColor{
|
|
||||||
consoleColor{0x000000, false, false, false, false},
|
|
||||||
consoleColor{0x000080, false, false, true, false},
|
|
||||||
consoleColor{0x008000, false, true, false, false},
|
|
||||||
consoleColor{0x008080, false, true, true, false},
|
|
||||||
consoleColor{0x800000, true, false, false, false},
|
|
||||||
consoleColor{0x800080, true, false, true, false},
|
|
||||||
consoleColor{0x808000, true, true, false, false},
|
|
||||||
consoleColor{0xc0c0c0, true, true, true, false},
|
|
||||||
consoleColor{0x808080, false, false, false, true},
|
|
||||||
consoleColor{0x0000ff, false, false, true, true},
|
|
||||||
consoleColor{0x00ff00, false, true, false, true},
|
|
||||||
consoleColor{0x00ffff, false, true, true, true},
|
|
||||||
consoleColor{0xff0000, true, false, false, true},
|
|
||||||
consoleColor{0xff00ff, true, false, true, true},
|
|
||||||
consoleColor{0xffff00, true, true, false, true},
|
|
||||||
consoleColor{0xffffff, true, true, true, true},
|
|
||||||
}
|
|
||||||
|
|
||||||
type hsv struct {
|
|
||||||
h, s, v float32
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a hsv) dist(b hsv) float32 {
|
|
||||||
dh := a.h - b.h
|
|
||||||
switch {
|
|
||||||
case dh > 0.5:
|
|
||||||
dh = 1 - dh
|
|
||||||
case dh < -0.5:
|
|
||||||
dh = -1 - dh
|
|
||||||
}
|
|
||||||
ds := a.s - b.s
|
|
||||||
dv := a.v - b.v
|
|
||||||
return float32(math.Sqrt(float64(dh*dh + ds*ds + dv*dv)))
|
|
||||||
}
|
|
||||||
|
|
||||||
func toHSV(rgb int) hsv {
|
|
||||||
r, g, b := float32((rgb&0xFF0000)>>16)/256.0,
|
|
||||||
float32((rgb&0x00FF00)>>8)/256.0,
|
|
||||||
float32(rgb&0x0000FF)/256.0
|
|
||||||
min, max := minmax3f(r, g, b)
|
|
||||||
h := max - min
|
|
||||||
if h > 0 {
|
|
||||||
if max == r {
|
|
||||||
h = (g - b) / h
|
|
||||||
if h < 0 {
|
|
||||||
h += 6
|
|
||||||
}
|
|
||||||
} else if max == g {
|
|
||||||
h = 2 + (b-r)/h
|
|
||||||
} else {
|
|
||||||
h = 4 + (r-g)/h
|
|
||||||
}
|
|
||||||
}
|
|
||||||
h /= 6.0
|
|
||||||
s := max - min
|
|
||||||
if max != 0 {
|
|
||||||
s /= max
|
|
||||||
}
|
|
||||||
v := max
|
|
||||||
return hsv{h: h, s: s, v: v}
|
|
||||||
}
|
|
||||||
|
|
||||||
type hsvTable []hsv
|
|
||||||
|
|
||||||
func toHSVTable(rgbTable []consoleColor) hsvTable {
|
|
||||||
t := make(hsvTable, len(rgbTable))
|
|
||||||
for i, c := range rgbTable {
|
|
||||||
t[i] = toHSV(c.rgb)
|
|
||||||
}
|
|
||||||
return t
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t hsvTable) find(rgb int) consoleColor {
|
|
||||||
hsv := toHSV(rgb)
|
|
||||||
n := 7
|
|
||||||
l := float32(5.0)
|
|
||||||
for i, p := range t {
|
|
||||||
d := hsv.dist(p)
|
|
||||||
if d < l {
|
|
||||||
l, n = d, i
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return color16[n]
|
|
||||||
}
|
|
||||||
|
|
||||||
func minmax3f(a, b, c float32) (min, max float32) {
|
|
||||||
if a < b {
|
|
||||||
if b < c {
|
|
||||||
return a, c
|
|
||||||
} else if a < c {
|
|
||||||
return a, b
|
|
||||||
} else {
|
|
||||||
return c, b
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if a < c {
|
|
||||||
return b, c
|
|
||||||
} else if b < c {
|
|
||||||
return b, a
|
|
||||||
} else {
|
|
||||||
return c, a
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var n256foreAttr []word
|
|
||||||
var n256backAttr []word
|
|
||||||
|
|
||||||
func n256setup() {
|
|
||||||
n256foreAttr = make([]word, 256)
|
|
||||||
n256backAttr = make([]word, 256)
|
|
||||||
t := toHSVTable(color16)
|
|
||||||
for i, rgb := range color256 {
|
|
||||||
c := t.find(rgb)
|
|
||||||
n256foreAttr[i] = c.foregroundAttr()
|
|
||||||
n256backAttr[i] = c.backgroundAttr()
|
|
||||||
}
|
|
||||||
}
|
|
57
vendor/github.com/mattn/go-colorable/noncolorable.go
generated
vendored
57
vendor/github.com/mattn/go-colorable/noncolorable.go
generated
vendored
@ -1,57 +0,0 @@
|
|||||||
package colorable
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
)
|
|
||||||
|
|
||||||
type NonColorable struct {
|
|
||||||
out io.Writer
|
|
||||||
lastbuf bytes.Buffer
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewNonColorable(w io.Writer) io.Writer {
|
|
||||||
return &NonColorable{out: w}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w *NonColorable) Write(data []byte) (n int, err error) {
|
|
||||||
er := bytes.NewBuffer(data)
|
|
||||||
loop:
|
|
||||||
for {
|
|
||||||
c1, _, err := er.ReadRune()
|
|
||||||
if err != nil {
|
|
||||||
break loop
|
|
||||||
}
|
|
||||||
if c1 != 0x1b {
|
|
||||||
fmt.Fprint(w.out, string(c1))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
c2, _, err := er.ReadRune()
|
|
||||||
if err != nil {
|
|
||||||
w.lastbuf.WriteRune(c1)
|
|
||||||
break loop
|
|
||||||
}
|
|
||||||
if c2 != 0x5b {
|
|
||||||
w.lastbuf.WriteRune(c1)
|
|
||||||
w.lastbuf.WriteRune(c2)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
var buf bytes.Buffer
|
|
||||||
for {
|
|
||||||
c, _, err := er.ReadRune()
|
|
||||||
if err != nil {
|
|
||||||
w.lastbuf.WriteRune(c1)
|
|
||||||
w.lastbuf.WriteRune(c2)
|
|
||||||
w.lastbuf.Write(buf.Bytes())
|
|
||||||
break loop
|
|
||||||
}
|
|
||||||
if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
buf.Write([]byte(string(c)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return len(data) - w.lastbuf.Len(), nil
|
|
||||||
}
|
|
9
vendor/github.com/mattn/go-isatty/LICENSE
generated
vendored
9
vendor/github.com/mattn/go-isatty/LICENSE
generated
vendored
@ -1,9 +0,0 @@
|
|||||||
Copyright (c) Yasuhiro MATSUMOTO <mattn.jp@gmail.com>
|
|
||||||
|
|
||||||
MIT License (Expat)
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
37
vendor/github.com/mattn/go-isatty/README.md
generated
vendored
37
vendor/github.com/mattn/go-isatty/README.md
generated
vendored
@ -1,37 +0,0 @@
|
|||||||
# go-isatty
|
|
||||||
|
|
||||||
isatty for golang
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```go
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"github.com/mattn/go-isatty"
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
if isatty.IsTerminal(os.Stdout.Fd()) {
|
|
||||||
fmt.Println("Is Terminal")
|
|
||||||
} else {
|
|
||||||
fmt.Println("Is Not Terminal")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
```
|
|
||||||
$ go get github.com/mattn/go-isatty
|
|
||||||
```
|
|
||||||
|
|
||||||
# License
|
|
||||||
|
|
||||||
MIT
|
|
||||||
|
|
||||||
# Author
|
|
||||||
|
|
||||||
Yasuhiro Matsumoto (a.k.a mattn)
|
|
2
vendor/github.com/mattn/go-isatty/doc.go
generated
vendored
2
vendor/github.com/mattn/go-isatty/doc.go
generated
vendored
@ -1,2 +0,0 @@
|
|||||||
// Package isatty implements interface to isatty
|
|
||||||
package isatty
|
|
9
vendor/github.com/mattn/go-isatty/isatty_appengine.go
generated
vendored
9
vendor/github.com/mattn/go-isatty/isatty_appengine.go
generated
vendored
@ -1,9 +0,0 @@
|
|||||||
// +build appengine
|
|
||||||
|
|
||||||
package isatty
|
|
||||||
|
|
||||||
// IsTerminal returns true if the file descriptor is terminal which
|
|
||||||
// is always false on on appengine classic which is a sandboxed PaaS.
|
|
||||||
func IsTerminal(fd uintptr) bool {
|
|
||||||
return false
|
|
||||||
}
|
|
18
vendor/github.com/mattn/go-isatty/isatty_bsd.go
generated
vendored
18
vendor/github.com/mattn/go-isatty/isatty_bsd.go
generated
vendored
@ -1,18 +0,0 @@
|
|||||||
// +build darwin freebsd openbsd netbsd
|
|
||||||
// +build !appengine
|
|
||||||
|
|
||||||
package isatty
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
const ioctlReadTermios = syscall.TIOCGETA
|
|
||||||
|
|
||||||
// IsTerminal return true if the file descriptor is terminal.
|
|
||||||
func IsTerminal(fd uintptr) bool {
|
|
||||||
var termios syscall.Termios
|
|
||||||
_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)
|
|
||||||
return err == 0
|
|
||||||
}
|
|
18
vendor/github.com/mattn/go-isatty/isatty_linux.go
generated
vendored
18
vendor/github.com/mattn/go-isatty/isatty_linux.go
generated
vendored
@ -1,18 +0,0 @@
|
|||||||
// +build linux
|
|
||||||
// +build !appengine
|
|
||||||
|
|
||||||
package isatty
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
const ioctlReadTermios = syscall.TCGETS
|
|
||||||
|
|
||||||
// IsTerminal return true if the file descriptor is terminal.
|
|
||||||
func IsTerminal(fd uintptr) bool {
|
|
||||||
var termios syscall.Termios
|
|
||||||
_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)
|
|
||||||
return err == 0
|
|
||||||
}
|
|
16
vendor/github.com/mattn/go-isatty/isatty_solaris.go
generated
vendored
16
vendor/github.com/mattn/go-isatty/isatty_solaris.go
generated
vendored
@ -1,16 +0,0 @@
|
|||||||
// +build solaris
|
|
||||||
// +build !appengine
|
|
||||||
|
|
||||||
package isatty
|
|
||||||
|
|
||||||
import (
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
// IsTerminal returns true if the given file descriptor is a terminal.
|
|
||||||
// see: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c
|
|
||||||
func IsTerminal(fd uintptr) bool {
|
|
||||||
var termio unix.Termio
|
|
||||||
err := unix.IoctlSetTermio(int(fd), unix.TCGETA, &termio)
|
|
||||||
return err == nil
|
|
||||||
}
|
|
19
vendor/github.com/mattn/go-isatty/isatty_windows.go
generated
vendored
19
vendor/github.com/mattn/go-isatty/isatty_windows.go
generated
vendored
@ -1,19 +0,0 @@
|
|||||||
// +build windows
|
|
||||||
// +build !appengine
|
|
||||||
|
|
||||||
package isatty
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
var kernel32 = syscall.NewLazyDLL("kernel32.dll")
|
|
||||||
var procGetConsoleMode = kernel32.NewProc("GetConsoleMode")
|
|
||||||
|
|
||||||
// IsTerminal return true if the file descriptor is terminal.
|
|
||||||
func IsTerminal(fd uintptr) bool {
|
|
||||||
var st uint32
|
|
||||||
r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0)
|
|
||||||
return r != 0 && e == 0
|
|
||||||
}
|
|
3
vendor/golang.org/x/net/AUTHORS
generated
vendored
3
vendor/golang.org/x/net/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/net/CONTRIBUTORS
generated
vendored
3
vendor/golang.org/x/net/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/net/LICENSE
generated
vendored
27
vendor/golang.org/x/net/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/net/PATENTS
generated
vendored
22
vendor/golang.org/x/net/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.
|
|
78
vendor/golang.org/x/net/html/atom/atom.go
generated
vendored
78
vendor/golang.org/x/net/html/atom/atom.go
generated
vendored
@ -1,78 +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.
|
|
||||||
|
|
||||||
// Package atom provides integer codes (also known as atoms) for a fixed set of
|
|
||||||
// frequently occurring HTML strings: tag names and attribute keys such as "p"
|
|
||||||
// and "id".
|
|
||||||
//
|
|
||||||
// Sharing an atom's name between all elements with the same tag can result in
|
|
||||||
// fewer string allocations when tokenizing and parsing HTML. Integer
|
|
||||||
// comparisons are also generally faster than string comparisons.
|
|
||||||
//
|
|
||||||
// The value of an atom's particular code is not guaranteed to stay the same
|
|
||||||
// between versions of this package. Neither is any ordering guaranteed:
|
|
||||||
// whether atom.H1 < atom.H2 may also change. The codes are not guaranteed to
|
|
||||||
// be dense. The only guarantees are that e.g. looking up "div" will yield
|
|
||||||
// atom.Div, calling atom.Div.String will return "div", and atom.Div != 0.
|
|
||||||
package atom // import "golang.org/x/net/html/atom"
|
|
||||||
|
|
||||||
// Atom is an integer code for a string. The zero value maps to "".
|
|
||||||
type Atom uint32
|
|
||||||
|
|
||||||
// String returns the atom's name.
|
|
||||||
func (a Atom) String() string {
|
|
||||||
start := uint32(a >> 8)
|
|
||||||
n := uint32(a & 0xff)
|
|
||||||
if start+n > uint32(len(atomText)) {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return atomText[start : start+n]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a Atom) string() string {
|
|
||||||
return atomText[a>>8 : a>>8+a&0xff]
|
|
||||||
}
|
|
||||||
|
|
||||||
// fnv computes the FNV hash with an arbitrary starting value h.
|
|
||||||
func fnv(h uint32, s []byte) uint32 {
|
|
||||||
for i := range s {
|
|
||||||
h ^= uint32(s[i])
|
|
||||||
h *= 16777619
|
|
||||||
}
|
|
||||||
return h
|
|
||||||
}
|
|
||||||
|
|
||||||
func match(s string, t []byte) bool {
|
|
||||||
for i, c := range t {
|
|
||||||
if s[i] != c {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lookup returns the atom whose name is s. It returns zero if there is no
|
|
||||||
// such atom. The lookup is case sensitive.
|
|
||||||
func Lookup(s []byte) Atom {
|
|
||||||
if len(s) == 0 || len(s) > maxAtomLen {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
h := fnv(hash0, s)
|
|
||||||
if a := table[h&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {
|
|
||||||
return a
|
|
||||||
}
|
|
||||||
if a := table[(h>>16)&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {
|
|
||||||
return a
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// String returns a string whose contents are equal to s. In that sense, it is
|
|
||||||
// equivalent to string(s) but may be more efficient.
|
|
||||||
func String(s []byte) string {
|
|
||||||
if a := Lookup(s); a != 0 {
|
|
||||||
return a.String()
|
|
||||||
}
|
|
||||||
return string(s)
|
|
||||||
}
|
|
713
vendor/golang.org/x/net/html/atom/table.go
generated
vendored
713
vendor/golang.org/x/net/html/atom/table.go
generated
vendored
@ -1,713 +0,0 @@
|
|||||||
// generated by go run gen.go; DO NOT EDIT
|
|
||||||
|
|
||||||
package atom
|
|
||||||
|
|
||||||
const (
|
|
||||||
A Atom = 0x1
|
|
||||||
Abbr Atom = 0x4
|
|
||||||
Accept Atom = 0x2106
|
|
||||||
AcceptCharset Atom = 0x210e
|
|
||||||
Accesskey Atom = 0x3309
|
|
||||||
Action Atom = 0x1f606
|
|
||||||
Address Atom = 0x4f307
|
|
||||||
Align Atom = 0x1105
|
|
||||||
Alt Atom = 0x4503
|
|
||||||
Annotation Atom = 0x1670a
|
|
||||||
AnnotationXml Atom = 0x1670e
|
|
||||||
Applet Atom = 0x2b306
|
|
||||||
Area Atom = 0x2fa04
|
|
||||||
Article Atom = 0x38807
|
|
||||||
Aside Atom = 0x8305
|
|
||||||
Async Atom = 0x7b05
|
|
||||||
Audio Atom = 0xa605
|
|
||||||
Autocomplete Atom = 0x1fc0c
|
|
||||||
Autofocus Atom = 0xb309
|
|
||||||
Autoplay Atom = 0xce08
|
|
||||||
B Atom = 0x101
|
|
||||||
Base Atom = 0xd604
|
|
||||||
Basefont Atom = 0xd608
|
|
||||||
Bdi Atom = 0x1a03
|
|
||||||
Bdo Atom = 0xe703
|
|
||||||
Bgsound Atom = 0x11807
|
|
||||||
Big Atom = 0x12403
|
|
||||||
Blink Atom = 0x12705
|
|
||||||
Blockquote Atom = 0x12c0a
|
|
||||||
Body Atom = 0x2f04
|
|
||||||
Br Atom = 0x202
|
|
||||||
Button Atom = 0x13606
|
|
||||||
Canvas Atom = 0x7f06
|
|
||||||
Caption Atom = 0x1bb07
|
|
||||||
Center Atom = 0x5b506
|
|
||||||
Challenge Atom = 0x21f09
|
|
||||||
Charset Atom = 0x2807
|
|
||||||
Checked Atom = 0x32807
|
|
||||||
Cite Atom = 0x3c804
|
|
||||||
Class Atom = 0x4de05
|
|
||||||
Code Atom = 0x14904
|
|
||||||
Col Atom = 0x15003
|
|
||||||
Colgroup Atom = 0x15008
|
|
||||||
Color Atom = 0x15d05
|
|
||||||
Cols Atom = 0x16204
|
|
||||||
Colspan Atom = 0x16207
|
|
||||||
Command Atom = 0x17507
|
|
||||||
Content Atom = 0x42307
|
|
||||||
Contenteditable Atom = 0x4230f
|
|
||||||
Contextmenu Atom = 0x3310b
|
|
||||||
Controls Atom = 0x18808
|
|
||||||
Coords Atom = 0x19406
|
|
||||||
Crossorigin Atom = 0x19f0b
|
|
||||||
Data Atom = 0x44a04
|
|
||||||
Datalist Atom = 0x44a08
|
|
||||||
Datetime Atom = 0x23c08
|
|
||||||
Dd Atom = 0x26702
|
|
||||||
Default Atom = 0x8607
|
|
||||||
Defer Atom = 0x14b05
|
|
||||||
Del Atom = 0x3ef03
|
|
||||||
Desc Atom = 0x4db04
|
|
||||||
Details Atom = 0x4807
|
|
||||||
Dfn Atom = 0x6103
|
|
||||||
Dialog Atom = 0x1b06
|
|
||||||
Dir Atom = 0x6903
|
|
||||||
Dirname Atom = 0x6907
|
|
||||||
Disabled Atom = 0x10c08
|
|
||||||
Div Atom = 0x11303
|
|
||||||
Dl Atom = 0x11e02
|
|
||||||
Download Atom = 0x40008
|
|
||||||
Draggable Atom = 0x17b09
|
|
||||||
Dropzone Atom = 0x39108
|
|
||||||
Dt Atom = 0x50902
|
|
||||||
Em Atom = 0x6502
|
|
||||||
Embed Atom = 0x6505
|
|
||||||
Enctype Atom = 0x21107
|
|
||||||
Face Atom = 0x5b304
|
|
||||||
Fieldset Atom = 0x1b008
|
|
||||||
Figcaption Atom = 0x1b80a
|
|
||||||
Figure Atom = 0x1cc06
|
|
||||||
Font Atom = 0xda04
|
|
||||||
Footer Atom = 0x8d06
|
|
||||||
For Atom = 0x1d803
|
|
||||||
ForeignObject Atom = 0x1d80d
|
|
||||||
Foreignobject Atom = 0x1e50d
|
|
||||||
Form Atom = 0x1f204
|
|
||||||
Formaction Atom = 0x1f20a
|
|
||||||
Formenctype Atom = 0x20d0b
|
|
||||||
Formmethod Atom = 0x2280a
|
|
||||||
Formnovalidate Atom = 0x2320e
|
|
||||||
Formtarget Atom = 0x2470a
|
|
||||||
Frame Atom = 0x9a05
|
|
||||||
Frameset Atom = 0x9a08
|
|
||||||
H1 Atom = 0x26e02
|
|
||||||
H2 Atom = 0x29402
|
|
||||||
H3 Atom = 0x2a702
|
|
||||||
H4 Atom = 0x2e902
|
|
||||||
H5 Atom = 0x2f302
|
|
||||||
H6 Atom = 0x50b02
|
|
||||||
Head Atom = 0x2d504
|
|
||||||
Header Atom = 0x2d506
|
|
||||||
Headers Atom = 0x2d507
|
|
||||||
Height Atom = 0x25106
|
|
||||||
Hgroup Atom = 0x25906
|
|
||||||
Hidden Atom = 0x26506
|
|
||||||
High Atom = 0x26b04
|
|
||||||
Hr Atom = 0x27002
|
|
||||||
Href Atom = 0x27004
|
|
||||||
Hreflang Atom = 0x27008
|
|
||||||
Html Atom = 0x25504
|
|
||||||
HttpEquiv Atom = 0x2780a
|
|
||||||
I Atom = 0x601
|
|
||||||
Icon Atom = 0x42204
|
|
||||||
Id Atom = 0x8502
|
|
||||||
Iframe Atom = 0x29606
|
|
||||||
Image Atom = 0x29c05
|
|
||||||
Img Atom = 0x2a103
|
|
||||||
Input Atom = 0x3e805
|
|
||||||
Inputmode Atom = 0x3e809
|
|
||||||
Ins Atom = 0x1a803
|
|
||||||
Isindex Atom = 0x2a907
|
|
||||||
Ismap Atom = 0x2b005
|
|
||||||
Itemid Atom = 0x33c06
|
|
||||||
Itemprop Atom = 0x3c908
|
|
||||||
Itemref Atom = 0x5ad07
|
|
||||||
Itemscope Atom = 0x2b909
|
|
||||||
Itemtype Atom = 0x2c308
|
|
||||||
Kbd Atom = 0x1903
|
|
||||||
Keygen Atom = 0x3906
|
|
||||||
Keytype Atom = 0x53707
|
|
||||||
Kind Atom = 0x10904
|
|
||||||
Label Atom = 0xf005
|
|
||||||
Lang Atom = 0x27404
|
|
||||||
Legend Atom = 0x18206
|
|
||||||
Li Atom = 0x1202
|
|
||||||
Link Atom = 0x12804
|
|
||||||
List Atom = 0x44e04
|
|
||||||
Listing Atom = 0x44e07
|
|
||||||
Loop Atom = 0xf404
|
|
||||||
Low Atom = 0x11f03
|
|
||||||
Malignmark Atom = 0x100a
|
|
||||||
Manifest Atom = 0x5f108
|
|
||||||
Map Atom = 0x2b203
|
|
||||||
Mark Atom = 0x1604
|
|
||||||
Marquee Atom = 0x2cb07
|
|
||||||
Math Atom = 0x2d204
|
|
||||||
Max Atom = 0x2e103
|
|
||||||
Maxlength Atom = 0x2e109
|
|
||||||
Media Atom = 0x6e05
|
|
||||||
Mediagroup Atom = 0x6e0a
|
|
||||||
Menu Atom = 0x33804
|
|
||||||
Menuitem Atom = 0x33808
|
|
||||||
Meta Atom = 0x45d04
|
|
||||||
Meter Atom = 0x24205
|
|
||||||
Method Atom = 0x22c06
|
|
||||||
Mglyph Atom = 0x2a206
|
|
||||||
Mi Atom = 0x2eb02
|
|
||||||
Min Atom = 0x2eb03
|
|
||||||
Minlength Atom = 0x2eb09
|
|
||||||
Mn Atom = 0x23502
|
|
||||||
Mo Atom = 0x3ed02
|
|
||||||
Ms Atom = 0x2bc02
|
|
||||||
Mtext Atom = 0x2f505
|
|
||||||
Multiple Atom = 0x30308
|
|
||||||
Muted Atom = 0x30b05
|
|
||||||
Name Atom = 0x6c04
|
|
||||||
Nav Atom = 0x3e03
|
|
||||||
Nobr Atom = 0x5704
|
|
||||||
Noembed Atom = 0x6307
|
|
||||||
Noframes Atom = 0x9808
|
|
||||||
Noscript Atom = 0x3d208
|
|
||||||
Novalidate Atom = 0x2360a
|
|
||||||
Object Atom = 0x1ec06
|
|
||||||
Ol Atom = 0xc902
|
|
||||||
Onabort Atom = 0x13a07
|
|
||||||
Onafterprint Atom = 0x1c00c
|
|
||||||
Onautocomplete Atom = 0x1fa0e
|
|
||||||
Onautocompleteerror Atom = 0x1fa13
|
|
||||||
Onbeforeprint Atom = 0x6040d
|
|
||||||
Onbeforeunload Atom = 0x4e70e
|
|
||||||
Onblur Atom = 0xaa06
|
|
||||||
Oncancel Atom = 0xe908
|
|
||||||
Oncanplay Atom = 0x28509
|
|
||||||
Oncanplaythrough Atom = 0x28510
|
|
||||||
Onchange Atom = 0x3a708
|
|
||||||
Onclick Atom = 0x31007
|
|
||||||
Onclose Atom = 0x31707
|
|
||||||
Oncontextmenu Atom = 0x32f0d
|
|
||||||
Oncuechange Atom = 0x3420b
|
|
||||||
Ondblclick Atom = 0x34d0a
|
|
||||||
Ondrag Atom = 0x35706
|
|
||||||
Ondragend Atom = 0x35709
|
|
||||||
Ondragenter Atom = 0x3600b
|
|
||||||
Ondragleave Atom = 0x36b0b
|
|
||||||
Ondragover Atom = 0x3760a
|
|
||||||
Ondragstart Atom = 0x3800b
|
|
||||||
Ondrop Atom = 0x38f06
|
|
||||||
Ondurationchange Atom = 0x39f10
|
|
||||||
Onemptied Atom = 0x39609
|
|
||||||
Onended Atom = 0x3af07
|
|
||||||
Onerror Atom = 0x3b607
|
|
||||||
Onfocus Atom = 0x3bd07
|
|
||||||
Onhashchange Atom = 0x3da0c
|
|
||||||
Oninput Atom = 0x3e607
|
|
||||||
Oninvalid Atom = 0x3f209
|
|
||||||
Onkeydown Atom = 0x3fb09
|
|
||||||
Onkeypress Atom = 0x4080a
|
|
||||||
Onkeyup Atom = 0x41807
|
|
||||||
Onlanguagechange Atom = 0x43210
|
|
||||||
Onload Atom = 0x44206
|
|
||||||
Onloadeddata Atom = 0x4420c
|
|
||||||
Onloadedmetadata Atom = 0x45510
|
|
||||||
Onloadstart Atom = 0x46b0b
|
|
||||||
Onmessage Atom = 0x47609
|
|
||||||
Onmousedown Atom = 0x47f0b
|
|
||||||
Onmousemove Atom = 0x48a0b
|
|
||||||
Onmouseout Atom = 0x4950a
|
|
||||||
Onmouseover Atom = 0x4a20b
|
|
||||||
Onmouseup Atom = 0x4ad09
|
|
||||||
Onmousewheel Atom = 0x4b60c
|
|
||||||
Onoffline Atom = 0x4c209
|
|
||||||
Ononline Atom = 0x4cb08
|
|
||||||
Onpagehide Atom = 0x4d30a
|
|
||||||
Onpageshow Atom = 0x4fe0a
|
|
||||||
Onpause Atom = 0x50d07
|
|
||||||
Onplay Atom = 0x51706
|
|
||||||
Onplaying Atom = 0x51709
|
|
||||||
Onpopstate Atom = 0x5200a
|
|
||||||
Onprogress Atom = 0x52a0a
|
|
||||||
Onratechange Atom = 0x53e0c
|
|
||||||
Onreset Atom = 0x54a07
|
|
||||||
Onresize Atom = 0x55108
|
|
||||||
Onscroll Atom = 0x55f08
|
|
||||||
Onseeked Atom = 0x56708
|
|
||||||
Onseeking Atom = 0x56f09
|
|
||||||
Onselect Atom = 0x57808
|
|
||||||
Onshow Atom = 0x58206
|
|
||||||
Onsort Atom = 0x58b06
|
|
||||||
Onstalled Atom = 0x59509
|
|
||||||
Onstorage Atom = 0x59e09
|
|
||||||
Onsubmit Atom = 0x5a708
|
|
||||||
Onsuspend Atom = 0x5bb09
|
|
||||||
Ontimeupdate Atom = 0xdb0c
|
|
||||||
Ontoggle Atom = 0x5c408
|
|
||||||
Onunload Atom = 0x5cc08
|
|
||||||
Onvolumechange Atom = 0x5d40e
|
|
||||||
Onwaiting Atom = 0x5e209
|
|
||||||
Open Atom = 0x3cf04
|
|
||||||
Optgroup Atom = 0xf608
|
|
||||||
Optimum Atom = 0x5eb07
|
|
||||||
Option Atom = 0x60006
|
|
||||||
Output Atom = 0x49c06
|
|
||||||
P Atom = 0xc01
|
|
||||||
Param Atom = 0xc05
|
|
||||||
Pattern Atom = 0x5107
|
|
||||||
Ping Atom = 0x7704
|
|
||||||
Placeholder Atom = 0xc30b
|
|
||||||
Plaintext Atom = 0xfd09
|
|
||||||
Poster Atom = 0x15706
|
|
||||||
Pre Atom = 0x25e03
|
|
||||||
Preload Atom = 0x25e07
|
|
||||||
Progress Atom = 0x52c08
|
|
||||||
Prompt Atom = 0x5fa06
|
|
||||||
Public Atom = 0x41e06
|
|
||||||
Q Atom = 0x13101
|
|
||||||
Radiogroup Atom = 0x30a
|
|
||||||
Readonly Atom = 0x2fb08
|
|
||||||
Rel Atom = 0x25f03
|
|
||||||
Required Atom = 0x1d008
|
|
||||||
Reversed Atom = 0x5a08
|
|
||||||
Rows Atom = 0x9204
|
|
||||||
Rowspan Atom = 0x9207
|
|
||||||
Rp Atom = 0x1c602
|
|
||||||
Rt Atom = 0x13f02
|
|
||||||
Ruby Atom = 0xaf04
|
|
||||||
S Atom = 0x2c01
|
|
||||||
Samp Atom = 0x4e04
|
|
||||||
Sandbox Atom = 0xbb07
|
|
||||||
Scope Atom = 0x2bd05
|
|
||||||
Scoped Atom = 0x2bd06
|
|
||||||
Script Atom = 0x3d406
|
|
||||||
Seamless Atom = 0x31c08
|
|
||||||
Section Atom = 0x4e207
|
|
||||||
Select Atom = 0x57a06
|
|
||||||
Selected Atom = 0x57a08
|
|
||||||
Shape Atom = 0x4f905
|
|
||||||
Size Atom = 0x55504
|
|
||||||
Sizes Atom = 0x55505
|
|
||||||
Small Atom = 0x18f05
|
|
||||||
Sortable Atom = 0x58d08
|
|
||||||
Sorted Atom = 0x19906
|
|
||||||
Source Atom = 0x1aa06
|
|
||||||
Spacer Atom = 0x2db06
|
|
||||||
Span Atom = 0x9504
|
|
||||||
Spellcheck Atom = 0x3230a
|
|
||||||
Src Atom = 0x3c303
|
|
||||||
Srcdoc Atom = 0x3c306
|
|
||||||
Srclang Atom = 0x41107
|
|
||||||
Start Atom = 0x38605
|
|
||||||
Step Atom = 0x5f704
|
|
||||||
Strike Atom = 0x53306
|
|
||||||
Strong Atom = 0x55906
|
|
||||||
Style Atom = 0x61105
|
|
||||||
Sub Atom = 0x5a903
|
|
||||||
Summary Atom = 0x61607
|
|
||||||
Sup Atom = 0x61d03
|
|
||||||
Svg Atom = 0x62003
|
|
||||||
System Atom = 0x62306
|
|
||||||
Tabindex Atom = 0x46308
|
|
||||||
Table Atom = 0x42d05
|
|
||||||
Target Atom = 0x24b06
|
|
||||||
Tbody Atom = 0x2e05
|
|
||||||
Td Atom = 0x4702
|
|
||||||
Template Atom = 0x62608
|
|
||||||
Textarea Atom = 0x2f608
|
|
||||||
Tfoot Atom = 0x8c05
|
|
||||||
Th Atom = 0x22e02
|
|
||||||
Thead Atom = 0x2d405
|
|
||||||
Time Atom = 0xdd04
|
|
||||||
Title Atom = 0xa105
|
|
||||||
Tr Atom = 0x10502
|
|
||||||
Track Atom = 0x10505
|
|
||||||
Translate Atom = 0x14009
|
|
||||||
Tt Atom = 0x5302
|
|
||||||
Type Atom = 0x21404
|
|
||||||
Typemustmatch Atom = 0x2140d
|
|
||||||
U Atom = 0xb01
|
|
||||||
Ul Atom = 0x8a02
|
|
||||||
Usemap Atom = 0x51106
|
|
||||||
Value Atom = 0x4005
|
|
||||||
Var Atom = 0x11503
|
|
||||||
Video Atom = 0x28105
|
|
||||||
Wbr Atom = 0x12103
|
|
||||||
Width Atom = 0x50705
|
|
||||||
Wrap Atom = 0x58704
|
|
||||||
Xmp Atom = 0xc103
|
|
||||||
)
|
|
||||||
|
|
||||||
const hash0 = 0xc17da63e
|
|
||||||
|
|
||||||
const maxAtomLen = 19
|
|
||||||
|
|
||||||
var table = [1 << 9]Atom{
|
|
||||||
0x1: 0x48a0b, // onmousemove
|
|
||||||
0x2: 0x5e209, // onwaiting
|
|
||||||
0x3: 0x1fa13, // onautocompleteerror
|
|
||||||
0x4: 0x5fa06, // prompt
|
|
||||||
0x7: 0x5eb07, // optimum
|
|
||||||
0x8: 0x1604, // mark
|
|
||||||
0xa: 0x5ad07, // itemref
|
|
||||||
0xb: 0x4fe0a, // onpageshow
|
|
||||||
0xc: 0x57a06, // select
|
|
||||||
0xd: 0x17b09, // draggable
|
|
||||||
0xe: 0x3e03, // nav
|
|
||||||
0xf: 0x17507, // command
|
|
||||||
0x11: 0xb01, // u
|
|
||||||
0x14: 0x2d507, // headers
|
|
||||||
0x15: 0x44a08, // datalist
|
|
||||||
0x17: 0x4e04, // samp
|
|
||||||
0x1a: 0x3fb09, // onkeydown
|
|
||||||
0x1b: 0x55f08, // onscroll
|
|
||||||
0x1c: 0x15003, // col
|
|
||||||
0x20: 0x3c908, // itemprop
|
|
||||||
0x21: 0x2780a, // http-equiv
|
|
||||||
0x22: 0x61d03, // sup
|
|
||||||
0x24: 0x1d008, // required
|
|
||||||
0x2b: 0x25e07, // preload
|
|
||||||
0x2c: 0x6040d, // onbeforeprint
|
|
||||||
0x2d: 0x3600b, // ondragenter
|
|
||||||
0x2e: 0x50902, // dt
|
|
||||||
0x2f: 0x5a708, // onsubmit
|
|
||||||
0x30: 0x27002, // hr
|
|
||||||
0x31: 0x32f0d, // oncontextmenu
|
|
||||||
0x33: 0x29c05, // image
|
|
||||||
0x34: 0x50d07, // onpause
|
|
||||||
0x35: 0x25906, // hgroup
|
|
||||||
0x36: 0x7704, // ping
|
|
||||||
0x37: 0x57808, // onselect
|
|
||||||
0x3a: 0x11303, // div
|
|
||||||
0x3b: 0x1fa0e, // onautocomplete
|
|
||||||
0x40: 0x2eb02, // mi
|
|
||||||
0x41: 0x31c08, // seamless
|
|
||||||
0x42: 0x2807, // charset
|
|
||||||
0x43: 0x8502, // id
|
|
||||||
0x44: 0x5200a, // onpopstate
|
|
||||||
0x45: 0x3ef03, // del
|
|
||||||
0x46: 0x2cb07, // marquee
|
|
||||||
0x47: 0x3309, // accesskey
|
|
||||||
0x49: 0x8d06, // footer
|
|
||||||
0x4a: 0x44e04, // list
|
|
||||||
0x4b: 0x2b005, // ismap
|
|
||||||
0x51: 0x33804, // menu
|
|
||||||
0x52: 0x2f04, // body
|
|
||||||
0x55: 0x9a08, // frameset
|
|
||||||
0x56: 0x54a07, // onreset
|
|
||||||
0x57: 0x12705, // blink
|
|
||||||
0x58: 0xa105, // title
|
|
||||||
0x59: 0x38807, // article
|
|
||||||
0x5b: 0x22e02, // th
|
|
||||||
0x5d: 0x13101, // q
|
|
||||||
0x5e: 0x3cf04, // open
|
|
||||||
0x5f: 0x2fa04, // area
|
|
||||||
0x61: 0x44206, // onload
|
|
||||||
0x62: 0xda04, // font
|
|
||||||
0x63: 0xd604, // base
|
|
||||||
0x64: 0x16207, // colspan
|
|
||||||
0x65: 0x53707, // keytype
|
|
||||||
0x66: 0x11e02, // dl
|
|
||||||
0x68: 0x1b008, // fieldset
|
|
||||||
0x6a: 0x2eb03, // min
|
|
||||||
0x6b: 0x11503, // var
|
|
||||||
0x6f: 0x2d506, // header
|
|
||||||
0x70: 0x13f02, // rt
|
|
||||||
0x71: 0x15008, // colgroup
|
|
||||||
0x72: 0x23502, // mn
|
|
||||||
0x74: 0x13a07, // onabort
|
|
||||||
0x75: 0x3906, // keygen
|
|
||||||
0x76: 0x4c209, // onoffline
|
|
||||||
0x77: 0x21f09, // challenge
|
|
||||||
0x78: 0x2b203, // map
|
|
||||||
0x7a: 0x2e902, // h4
|
|
||||||
0x7b: 0x3b607, // onerror
|
|
||||||
0x7c: 0x2e109, // maxlength
|
|
||||||
0x7d: 0x2f505, // mtext
|
|
||||||
0x7e: 0xbb07, // sandbox
|
|
||||||
0x7f: 0x58b06, // onsort
|
|
||||||
0x80: 0x100a, // malignmark
|
|
||||||
0x81: 0x45d04, // meta
|
|
||||||
0x82: 0x7b05, // async
|
|
||||||
0x83: 0x2a702, // h3
|
|
||||||
0x84: 0x26702, // dd
|
|
||||||
0x85: 0x27004, // href
|
|
||||||
0x86: 0x6e0a, // mediagroup
|
|
||||||
0x87: 0x19406, // coords
|
|
||||||
0x88: 0x41107, // srclang
|
|
||||||
0x89: 0x34d0a, // ondblclick
|
|
||||||
0x8a: 0x4005, // value
|
|
||||||
0x8c: 0xe908, // oncancel
|
|
||||||
0x8e: 0x3230a, // spellcheck
|
|
||||||
0x8f: 0x9a05, // frame
|
|
||||||
0x91: 0x12403, // big
|
|
||||||
0x94: 0x1f606, // action
|
|
||||||
0x95: 0x6903, // dir
|
|
||||||
0x97: 0x2fb08, // readonly
|
|
||||||
0x99: 0x42d05, // table
|
|
||||||
0x9a: 0x61607, // summary
|
|
||||||
0x9b: 0x12103, // wbr
|
|
||||||
0x9c: 0x30a, // radiogroup
|
|
||||||
0x9d: 0x6c04, // name
|
|
||||||
0x9f: 0x62306, // system
|
|
||||||
0xa1: 0x15d05, // color
|
|
||||||
0xa2: 0x7f06, // canvas
|
|
||||||
0xa3: 0x25504, // html
|
|
||||||
0xa5: 0x56f09, // onseeking
|
|
||||||
0xac: 0x4f905, // shape
|
|
||||||
0xad: 0x25f03, // rel
|
|
||||||
0xae: 0x28510, // oncanplaythrough
|
|
||||||
0xaf: 0x3760a, // ondragover
|
|
||||||
0xb0: 0x62608, // template
|
|
||||||
0xb1: 0x1d80d, // foreignObject
|
|
||||||
0xb3: 0x9204, // rows
|
|
||||||
0xb6: 0x44e07, // listing
|
|
||||||
0xb7: 0x49c06, // output
|
|
||||||
0xb9: 0x3310b, // contextmenu
|
|
||||||
0xbb: 0x11f03, // low
|
|
||||||
0xbc: 0x1c602, // rp
|
|
||||||
0xbd: 0x5bb09, // onsuspend
|
|
||||||
0xbe: 0x13606, // button
|
|
||||||
0xbf: 0x4db04, // desc
|
|
||||||
0xc1: 0x4e207, // section
|
|
||||||
0xc2: 0x52a0a, // onprogress
|
|
||||||
0xc3: 0x59e09, // onstorage
|
|
||||||
0xc4: 0x2d204, // math
|
|
||||||
0xc5: 0x4503, // alt
|
|
||||||
0xc7: 0x8a02, // ul
|
|
||||||
0xc8: 0x5107, // pattern
|
|
||||||
0xc9: 0x4b60c, // onmousewheel
|
|
||||||
0xca: 0x35709, // ondragend
|
|
||||||
0xcb: 0xaf04, // ruby
|
|
||||||
0xcc: 0xc01, // p
|
|
||||||
0xcd: 0x31707, // onclose
|
|
||||||
0xce: 0x24205, // meter
|
|
||||||
0xcf: 0x11807, // bgsound
|
|
||||||
0xd2: 0x25106, // height
|
|
||||||
0xd4: 0x101, // b
|
|
||||||
0xd5: 0x2c308, // itemtype
|
|
||||||
0xd8: 0x1bb07, // caption
|
|
||||||
0xd9: 0x10c08, // disabled
|
|
||||||
0xdb: 0x33808, // menuitem
|
|
||||||
0xdc: 0x62003, // svg
|
|
||||||
0xdd: 0x18f05, // small
|
|
||||||
0xde: 0x44a04, // data
|
|
||||||
0xe0: 0x4cb08, // ononline
|
|
||||||
0xe1: 0x2a206, // mglyph
|
|
||||||
0xe3: 0x6505, // embed
|
|
||||||
0xe4: 0x10502, // tr
|
|
||||||
0xe5: 0x46b0b, // onloadstart
|
|
||||||
0xe7: 0x3c306, // srcdoc
|
|
||||||
0xeb: 0x5c408, // ontoggle
|
|
||||||
0xed: 0xe703, // bdo
|
|
||||||
0xee: 0x4702, // td
|
|
||||||
0xef: 0x8305, // aside
|
|
||||||
0xf0: 0x29402, // h2
|
|
||||||
0xf1: 0x52c08, // progress
|
|
||||||
0xf2: 0x12c0a, // blockquote
|
|
||||||
0xf4: 0xf005, // label
|
|
||||||
0xf5: 0x601, // i
|
|
||||||
0xf7: 0x9207, // rowspan
|
|
||||||
0xfb: 0x51709, // onplaying
|
|
||||||
0xfd: 0x2a103, // img
|
|
||||||
0xfe: 0xf608, // optgroup
|
|
||||||
0xff: 0x42307, // content
|
|
||||||
0x101: 0x53e0c, // onratechange
|
|
||||||
0x103: 0x3da0c, // onhashchange
|
|
||||||
0x104: 0x4807, // details
|
|
||||||
0x106: 0x40008, // download
|
|
||||||
0x109: 0x14009, // translate
|
|
||||||
0x10b: 0x4230f, // contenteditable
|
|
||||||
0x10d: 0x36b0b, // ondragleave
|
|
||||||
0x10e: 0x2106, // accept
|
|
||||||
0x10f: 0x57a08, // selected
|
|
||||||
0x112: 0x1f20a, // formaction
|
|
||||||
0x113: 0x5b506, // center
|
|
||||||
0x115: 0x45510, // onloadedmetadata
|
|
||||||
0x116: 0x12804, // link
|
|
||||||
0x117: 0xdd04, // time
|
|
||||||
0x118: 0x19f0b, // crossorigin
|
|
||||||
0x119: 0x3bd07, // onfocus
|
|
||||||
0x11a: 0x58704, // wrap
|
|
||||||
0x11b: 0x42204, // icon
|
|
||||||
0x11d: 0x28105, // video
|
|
||||||
0x11e: 0x4de05, // class
|
|
||||||
0x121: 0x5d40e, // onvolumechange
|
|
||||||
0x122: 0xaa06, // onblur
|
|
||||||
0x123: 0x2b909, // itemscope
|
|
||||||
0x124: 0x61105, // style
|
|
||||||
0x127: 0x41e06, // public
|
|
||||||
0x129: 0x2320e, // formnovalidate
|
|
||||||
0x12a: 0x58206, // onshow
|
|
||||||
0x12c: 0x51706, // onplay
|
|
||||||
0x12d: 0x3c804, // cite
|
|
||||||
0x12e: 0x2bc02, // ms
|
|
||||||
0x12f: 0xdb0c, // ontimeupdate
|
|
||||||
0x130: 0x10904, // kind
|
|
||||||
0x131: 0x2470a, // formtarget
|
|
||||||
0x135: 0x3af07, // onended
|
|
||||||
0x136: 0x26506, // hidden
|
|
||||||
0x137: 0x2c01, // s
|
|
||||||
0x139: 0x2280a, // formmethod
|
|
||||||
0x13a: 0x3e805, // input
|
|
||||||
0x13c: 0x50b02, // h6
|
|
||||||
0x13d: 0xc902, // ol
|
|
||||||
0x13e: 0x3420b, // oncuechange
|
|
||||||
0x13f: 0x1e50d, // foreignobject
|
|
||||||
0x143: 0x4e70e, // onbeforeunload
|
|
||||||
0x144: 0x2bd05, // scope
|
|
||||||
0x145: 0x39609, // onemptied
|
|
||||||
0x146: 0x14b05, // defer
|
|
||||||
0x147: 0xc103, // xmp
|
|
||||||
0x148: 0x39f10, // ondurationchange
|
|
||||||
0x149: 0x1903, // kbd
|
|
||||||
0x14c: 0x47609, // onmessage
|
|
||||||
0x14d: 0x60006, // option
|
|
||||||
0x14e: 0x2eb09, // minlength
|
|
||||||
0x14f: 0x32807, // checked
|
|
||||||
0x150: 0xce08, // autoplay
|
|
||||||
0x152: 0x202, // br
|
|
||||||
0x153: 0x2360a, // novalidate
|
|
||||||
0x156: 0x6307, // noembed
|
|
||||||
0x159: 0x31007, // onclick
|
|
||||||
0x15a: 0x47f0b, // onmousedown
|
|
||||||
0x15b: 0x3a708, // onchange
|
|
||||||
0x15e: 0x3f209, // oninvalid
|
|
||||||
0x15f: 0x2bd06, // scoped
|
|
||||||
0x160: 0x18808, // controls
|
|
||||||
0x161: 0x30b05, // muted
|
|
||||||
0x162: 0x58d08, // sortable
|
|
||||||
0x163: 0x51106, // usemap
|
|
||||||
0x164: 0x1b80a, // figcaption
|
|
||||||
0x165: 0x35706, // ondrag
|
|
||||||
0x166: 0x26b04, // high
|
|
||||||
0x168: 0x3c303, // src
|
|
||||||
0x169: 0x15706, // poster
|
|
||||||
0x16b: 0x1670e, // annotation-xml
|
|
||||||
0x16c: 0x5f704, // step
|
|
||||||
0x16d: 0x4, // abbr
|
|
||||||
0x16e: 0x1b06, // dialog
|
|
||||||
0x170: 0x1202, // li
|
|
||||||
0x172: 0x3ed02, // mo
|
|
||||||
0x175: 0x1d803, // for
|
|
||||||
0x176: 0x1a803, // ins
|
|
||||||
0x178: 0x55504, // size
|
|
||||||
0x179: 0x43210, // onlanguagechange
|
|
||||||
0x17a: 0x8607, // default
|
|
||||||
0x17b: 0x1a03, // bdi
|
|
||||||
0x17c: 0x4d30a, // onpagehide
|
|
||||||
0x17d: 0x6907, // dirname
|
|
||||||
0x17e: 0x21404, // type
|
|
||||||
0x17f: 0x1f204, // form
|
|
||||||
0x181: 0x28509, // oncanplay
|
|
||||||
0x182: 0x6103, // dfn
|
|
||||||
0x183: 0x46308, // tabindex
|
|
||||||
0x186: 0x6502, // em
|
|
||||||
0x187: 0x27404, // lang
|
|
||||||
0x189: 0x39108, // dropzone
|
|
||||||
0x18a: 0x4080a, // onkeypress
|
|
||||||
0x18b: 0x23c08, // datetime
|
|
||||||
0x18c: 0x16204, // cols
|
|
||||||
0x18d: 0x1, // a
|
|
||||||
0x18e: 0x4420c, // onloadeddata
|
|
||||||
0x190: 0xa605, // audio
|
|
||||||
0x192: 0x2e05, // tbody
|
|
||||||
0x193: 0x22c06, // method
|
|
||||||
0x195: 0xf404, // loop
|
|
||||||
0x196: 0x29606, // iframe
|
|
||||||
0x198: 0x2d504, // head
|
|
||||||
0x19e: 0x5f108, // manifest
|
|
||||||
0x19f: 0xb309, // autofocus
|
|
||||||
0x1a0: 0x14904, // code
|
|
||||||
0x1a1: 0x55906, // strong
|
|
||||||
0x1a2: 0x30308, // multiple
|
|
||||||
0x1a3: 0xc05, // param
|
|
||||||
0x1a6: 0x21107, // enctype
|
|
||||||
0x1a7: 0x5b304, // face
|
|
||||||
0x1a8: 0xfd09, // plaintext
|
|
||||||
0x1a9: 0x26e02, // h1
|
|
||||||
0x1aa: 0x59509, // onstalled
|
|
||||||
0x1ad: 0x3d406, // script
|
|
||||||
0x1ae: 0x2db06, // spacer
|
|
||||||
0x1af: 0x55108, // onresize
|
|
||||||
0x1b0: 0x4a20b, // onmouseover
|
|
||||||
0x1b1: 0x5cc08, // onunload
|
|
||||||
0x1b2: 0x56708, // onseeked
|
|
||||||
0x1b4: 0x2140d, // typemustmatch
|
|
||||||
0x1b5: 0x1cc06, // figure
|
|
||||||
0x1b6: 0x4950a, // onmouseout
|
|
||||||
0x1b7: 0x25e03, // pre
|
|
||||||
0x1b8: 0x50705, // width
|
|
||||||
0x1b9: 0x19906, // sorted
|
|
||||||
0x1bb: 0x5704, // nobr
|
|
||||||
0x1be: 0x5302, // tt
|
|
||||||
0x1bf: 0x1105, // align
|
|
||||||
0x1c0: 0x3e607, // oninput
|
|
||||||
0x1c3: 0x41807, // onkeyup
|
|
||||||
0x1c6: 0x1c00c, // onafterprint
|
|
||||||
0x1c7: 0x210e, // accept-charset
|
|
||||||
0x1c8: 0x33c06, // itemid
|
|
||||||
0x1c9: 0x3e809, // inputmode
|
|
||||||
0x1cb: 0x53306, // strike
|
|
||||||
0x1cc: 0x5a903, // sub
|
|
||||||
0x1cd: 0x10505, // track
|
|
||||||
0x1ce: 0x38605, // start
|
|
||||||
0x1d0: 0xd608, // basefont
|
|
||||||
0x1d6: 0x1aa06, // source
|
|
||||||
0x1d7: 0x18206, // legend
|
|
||||||
0x1d8: 0x2d405, // thead
|
|
||||||
0x1da: 0x8c05, // tfoot
|
|
||||||
0x1dd: 0x1ec06, // object
|
|
||||||
0x1de: 0x6e05, // media
|
|
||||||
0x1df: 0x1670a, // annotation
|
|
||||||
0x1e0: 0x20d0b, // formenctype
|
|
||||||
0x1e2: 0x3d208, // noscript
|
|
||||||
0x1e4: 0x55505, // sizes
|
|
||||||
0x1e5: 0x1fc0c, // autocomplete
|
|
||||||
0x1e6: 0x9504, // span
|
|
||||||
0x1e7: 0x9808, // noframes
|
|
||||||
0x1e8: 0x24b06, // target
|
|
||||||
0x1e9: 0x38f06, // ondrop
|
|
||||||
0x1ea: 0x2b306, // applet
|
|
||||||
0x1ec: 0x5a08, // reversed
|
|
||||||
0x1f0: 0x2a907, // isindex
|
|
||||||
0x1f3: 0x27008, // hreflang
|
|
||||||
0x1f5: 0x2f302, // h5
|
|
||||||
0x1f6: 0x4f307, // address
|
|
||||||
0x1fa: 0x2e103, // max
|
|
||||||
0x1fb: 0xc30b, // placeholder
|
|
||||||
0x1fc: 0x2f608, // textarea
|
|
||||||
0x1fe: 0x4ad09, // onmouseup
|
|
||||||
0x1ff: 0x3800b, // ondragstart
|
|
||||||
}
|
|
||||||
|
|
||||||
const atomText = "abbradiogrouparamalignmarkbdialogaccept-charsetbodyaccesskey" +
|
|
||||||
"genavaluealtdetailsampatternobreversedfnoembedirnamediagroup" +
|
|
||||||
"ingasyncanvasidefaultfooterowspanoframesetitleaudionblurubya" +
|
|
||||||
"utofocusandboxmplaceholderautoplaybasefontimeupdatebdoncance" +
|
|
||||||
"labelooptgrouplaintextrackindisabledivarbgsoundlowbrbigblink" +
|
|
||||||
"blockquotebuttonabortranslatecodefercolgroupostercolorcolspa" +
|
|
||||||
"nnotation-xmlcommandraggablegendcontrolsmallcoordsortedcross" +
|
|
||||||
"originsourcefieldsetfigcaptionafterprintfigurequiredforeignO" +
|
|
||||||
"bjectforeignobjectformactionautocompleteerrorformenctypemust" +
|
|
||||||
"matchallengeformmethodformnovalidatetimeterformtargetheightm" +
|
|
||||||
"lhgroupreloadhiddenhigh1hreflanghttp-equivideoncanplaythroug" +
|
|
||||||
"h2iframeimageimglyph3isindexismappletitemscopeditemtypemarqu" +
|
|
||||||
"eematheaderspacermaxlength4minlength5mtextareadonlymultiplem" +
|
|
||||||
"utedonclickoncloseamlesspellcheckedoncontextmenuitemidoncuec" +
|
|
||||||
"hangeondblclickondragendondragenterondragleaveondragoverondr" +
|
|
||||||
"agstarticleondropzonemptiedondurationchangeonendedonerroronf" +
|
|
||||||
"ocusrcdocitempropenoscriptonhashchangeoninputmodeloninvalido" +
|
|
||||||
"nkeydownloadonkeypressrclangonkeyupublicontenteditableonlang" +
|
|
||||||
"uagechangeonloadeddatalistingonloadedmetadatabindexonloadsta" +
|
|
||||||
"rtonmessageonmousedownonmousemoveonmouseoutputonmouseoveronm" +
|
|
||||||
"ouseuponmousewheelonofflineononlineonpagehidesclassectionbef" +
|
|
||||||
"oreunloaddresshapeonpageshowidth6onpausemaponplayingonpopsta" +
|
|
||||||
"teonprogresstrikeytypeonratechangeonresetonresizestrongonscr" +
|
|
||||||
"ollonseekedonseekingonselectedonshowraponsortableonstalledon" +
|
|
||||||
"storageonsubmitemrefacenteronsuspendontoggleonunloadonvolume" +
|
|
||||||
"changeonwaitingoptimumanifestepromptoptionbeforeprintstylesu" +
|
|
||||||
"mmarysupsvgsystemplate"
|
|
257
vendor/golang.org/x/net/html/charset/charset.go
generated
vendored
257
vendor/golang.org/x/net/html/charset/charset.go
generated
vendored
@ -1,257 +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.
|
|
||||||
|
|
||||||
// Package charset provides common text encodings for HTML documents.
|
|
||||||
//
|
|
||||||
// The mapping from encoding labels to encodings is defined at
|
|
||||||
// https://encoding.spec.whatwg.org/.
|
|
||||||
package charset // import "golang.org/x/net/html/charset"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"mime"
|
|
||||||
"strings"
|
|
||||||
"unicode/utf8"
|
|
||||||
|
|
||||||
"golang.org/x/net/html"
|
|
||||||
"golang.org/x/text/encoding"
|
|
||||||
"golang.org/x/text/encoding/charmap"
|
|
||||||
"golang.org/x/text/encoding/htmlindex"
|
|
||||||
"golang.org/x/text/transform"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Lookup returns the encoding with the specified label, and its canonical
|
|
||||||
// name. It returns nil and the empty string if label is not one of the
|
|
||||||
// standard encodings for HTML. Matching is case-insensitive and ignores
|
|
||||||
// leading and trailing whitespace. Encoders will use HTML escape sequences for
|
|
||||||
// runes that are not supported by the character set.
|
|
||||||
func Lookup(label string) (e encoding.Encoding, name string) {
|
|
||||||
e, err := htmlindex.Get(label)
|
|
||||||
if err != nil {
|
|
||||||
return nil, ""
|
|
||||||
}
|
|
||||||
name, _ = htmlindex.Name(e)
|
|
||||||
return &htmlEncoding{e}, name
|
|
||||||
}
|
|
||||||
|
|
||||||
type htmlEncoding struct{ encoding.Encoding }
|
|
||||||
|
|
||||||
func (h *htmlEncoding) NewEncoder() *encoding.Encoder {
|
|
||||||
// HTML requires a non-terminating legacy encoder. We use HTML escapes to
|
|
||||||
// substitute unsupported code points.
|
|
||||||
return encoding.HTMLEscapeUnsupported(h.Encoding.NewEncoder())
|
|
||||||
}
|
|
||||||
|
|
||||||
// DetermineEncoding determines the encoding of an HTML document by examining
|
|
||||||
// up to the first 1024 bytes of content and the declared Content-Type.
|
|
||||||
//
|
|
||||||
// See http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#determining-the-character-encoding
|
|
||||||
func DetermineEncoding(content []byte, contentType string) (e encoding.Encoding, name string, certain bool) {
|
|
||||||
if len(content) > 1024 {
|
|
||||||
content = content[:1024]
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, b := range boms {
|
|
||||||
if bytes.HasPrefix(content, b.bom) {
|
|
||||||
e, name = Lookup(b.enc)
|
|
||||||
return e, name, true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, params, err := mime.ParseMediaType(contentType); err == nil {
|
|
||||||
if cs, ok := params["charset"]; ok {
|
|
||||||
if e, name = Lookup(cs); e != nil {
|
|
||||||
return e, name, true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(content) > 0 {
|
|
||||||
e, name = prescan(content)
|
|
||||||
if e != nil {
|
|
||||||
return e, name, false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to detect UTF-8.
|
|
||||||
// First eliminate any partial rune at the end.
|
|
||||||
for i := len(content) - 1; i >= 0 && i > len(content)-4; i-- {
|
|
||||||
b := content[i]
|
|
||||||
if b < 0x80 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if utf8.RuneStart(b) {
|
|
||||||
content = content[:i]
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
hasHighBit := false
|
|
||||||
for _, c := range content {
|
|
||||||
if c >= 0x80 {
|
|
||||||
hasHighBit = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if hasHighBit && utf8.Valid(content) {
|
|
||||||
return encoding.Nop, "utf-8", false
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: change default depending on user's locale?
|
|
||||||
return charmap.Windows1252, "windows-1252", false
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewReader returns an io.Reader that converts the content of r to UTF-8.
|
|
||||||
// It calls DetermineEncoding to find out what r's encoding is.
|
|
||||||
func NewReader(r io.Reader, contentType string) (io.Reader, error) {
|
|
||||||
preview := make([]byte, 1024)
|
|
||||||
n, err := io.ReadFull(r, preview)
|
|
||||||
switch {
|
|
||||||
case err == io.ErrUnexpectedEOF:
|
|
||||||
preview = preview[:n]
|
|
||||||
r = bytes.NewReader(preview)
|
|
||||||
case err != nil:
|
|
||||||
return nil, err
|
|
||||||
default:
|
|
||||||
r = io.MultiReader(bytes.NewReader(preview), r)
|
|
||||||
}
|
|
||||||
|
|
||||||
if e, _, _ := DetermineEncoding(preview, contentType); e != encoding.Nop {
|
|
||||||
r = transform.NewReader(r, e.NewDecoder())
|
|
||||||
}
|
|
||||||
return r, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewReaderLabel returns a reader that converts from the specified charset to
|
|
||||||
// UTF-8. It uses Lookup to find the encoding that corresponds to label, and
|
|
||||||
// returns an error if Lookup returns nil. It is suitable for use as
|
|
||||||
// encoding/xml.Decoder's CharsetReader function.
|
|
||||||
func NewReaderLabel(label string, input io.Reader) (io.Reader, error) {
|
|
||||||
e, _ := Lookup(label)
|
|
||||||
if e == nil {
|
|
||||||
return nil, fmt.Errorf("unsupported charset: %q", label)
|
|
||||||
}
|
|
||||||
return transform.NewReader(input, e.NewDecoder()), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func prescan(content []byte) (e encoding.Encoding, name string) {
|
|
||||||
z := html.NewTokenizer(bytes.NewReader(content))
|
|
||||||
for {
|
|
||||||
switch z.Next() {
|
|
||||||
case html.ErrorToken:
|
|
||||||
return nil, ""
|
|
||||||
|
|
||||||
case html.StartTagToken, html.SelfClosingTagToken:
|
|
||||||
tagName, hasAttr := z.TagName()
|
|
||||||
if !bytes.Equal(tagName, []byte("meta")) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
attrList := make(map[string]bool)
|
|
||||||
gotPragma := false
|
|
||||||
|
|
||||||
const (
|
|
||||||
dontKnow = iota
|
|
||||||
doNeedPragma
|
|
||||||
doNotNeedPragma
|
|
||||||
)
|
|
||||||
needPragma := dontKnow
|
|
||||||
|
|
||||||
name = ""
|
|
||||||
e = nil
|
|
||||||
for hasAttr {
|
|
||||||
var key, val []byte
|
|
||||||
key, val, hasAttr = z.TagAttr()
|
|
||||||
ks := string(key)
|
|
||||||
if attrList[ks] {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
attrList[ks] = true
|
|
||||||
for i, c := range val {
|
|
||||||
if 'A' <= c && c <= 'Z' {
|
|
||||||
val[i] = c + 0x20
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ks {
|
|
||||||
case "http-equiv":
|
|
||||||
if bytes.Equal(val, []byte("content-type")) {
|
|
||||||
gotPragma = true
|
|
||||||
}
|
|
||||||
|
|
||||||
case "content":
|
|
||||||
if e == nil {
|
|
||||||
name = fromMetaElement(string(val))
|
|
||||||
if name != "" {
|
|
||||||
e, name = Lookup(name)
|
|
||||||
if e != nil {
|
|
||||||
needPragma = doNeedPragma
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
case "charset":
|
|
||||||
e, name = Lookup(string(val))
|
|
||||||
needPragma = doNotNeedPragma
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if needPragma == dontKnow || needPragma == doNeedPragma && !gotPragma {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.HasPrefix(name, "utf-16") {
|
|
||||||
name = "utf-8"
|
|
||||||
e = encoding.Nop
|
|
||||||
}
|
|
||||||
|
|
||||||
if e != nil {
|
|
||||||
return e, name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func fromMetaElement(s string) string {
|
|
||||||
for s != "" {
|
|
||||||
csLoc := strings.Index(s, "charset")
|
|
||||||
if csLoc == -1 {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
s = s[csLoc+len("charset"):]
|
|
||||||
s = strings.TrimLeft(s, " \t\n\f\r")
|
|
||||||
if !strings.HasPrefix(s, "=") {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
s = s[1:]
|
|
||||||
s = strings.TrimLeft(s, " \t\n\f\r")
|
|
||||||
if s == "" {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
if q := s[0]; q == '"' || q == '\'' {
|
|
||||||
s = s[1:]
|
|
||||||
closeQuote := strings.IndexRune(s, rune(q))
|
|
||||||
if closeQuote == -1 {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return s[:closeQuote]
|
|
||||||
}
|
|
||||||
|
|
||||||
end := strings.IndexAny(s, "; \t\n\f\r")
|
|
||||||
if end == -1 {
|
|
||||||
end = len(s)
|
|
||||||
}
|
|
||||||
return s[:end]
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
var boms = []struct {
|
|
||||||
bom []byte
|
|
||||||
enc string
|
|
||||||
}{
|
|
||||||
{[]byte{0xfe, 0xff}, "utf-16be"},
|
|
||||||
{[]byte{0xff, 0xfe}, "utf-16le"},
|
|
||||||
{[]byte{0xef, 0xbb, 0xbf}, "utf-8"},
|
|
||||||
}
|
|
102
vendor/golang.org/x/net/html/const.go
generated
vendored
102
vendor/golang.org/x/net/html/const.go
generated
vendored
@ -1,102 +0,0 @@
|
|||||||
// Copyright 2011 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 html
|
|
||||||
|
|
||||||
// Section 12.2.3.2 of the HTML5 specification says "The following elements
|
|
||||||
// have varying levels of special parsing rules".
|
|
||||||
// https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements
|
|
||||||
var isSpecialElementMap = map[string]bool{
|
|
||||||
"address": true,
|
|
||||||
"applet": true,
|
|
||||||
"area": true,
|
|
||||||
"article": true,
|
|
||||||
"aside": true,
|
|
||||||
"base": true,
|
|
||||||
"basefont": true,
|
|
||||||
"bgsound": true,
|
|
||||||
"blockquote": true,
|
|
||||||
"body": true,
|
|
||||||
"br": true,
|
|
||||||
"button": true,
|
|
||||||
"caption": true,
|
|
||||||
"center": true,
|
|
||||||
"col": true,
|
|
||||||
"colgroup": true,
|
|
||||||
"dd": true,
|
|
||||||
"details": true,
|
|
||||||
"dir": true,
|
|
||||||
"div": true,
|
|
||||||
"dl": true,
|
|
||||||
"dt": true,
|
|
||||||
"embed": true,
|
|
||||||
"fieldset": true,
|
|
||||||
"figcaption": true,
|
|
||||||
"figure": true,
|
|
||||||
"footer": true,
|
|
||||||
"form": true,
|
|
||||||
"frame": true,
|
|
||||||
"frameset": true,
|
|
||||||
"h1": true,
|
|
||||||
"h2": true,
|
|
||||||
"h3": true,
|
|
||||||
"h4": true,
|
|
||||||
"h5": true,
|
|
||||||
"h6": true,
|
|
||||||
"head": true,
|
|
||||||
"header": true,
|
|
||||||
"hgroup": true,
|
|
||||||
"hr": true,
|
|
||||||
"html": true,
|
|
||||||
"iframe": true,
|
|
||||||
"img": true,
|
|
||||||
"input": true,
|
|
||||||
"isindex": true,
|
|
||||||
"li": true,
|
|
||||||
"link": true,
|
|
||||||
"listing": true,
|
|
||||||
"marquee": true,
|
|
||||||
"menu": true,
|
|
||||||
"meta": true,
|
|
||||||
"nav": true,
|
|
||||||
"noembed": true,
|
|
||||||
"noframes": true,
|
|
||||||
"noscript": true,
|
|
||||||
"object": true,
|
|
||||||
"ol": true,
|
|
||||||
"p": true,
|
|
||||||
"param": true,
|
|
||||||
"plaintext": true,
|
|
||||||
"pre": true,
|
|
||||||
"script": true,
|
|
||||||
"section": true,
|
|
||||||
"select": true,
|
|
||||||
"source": true,
|
|
||||||
"style": true,
|
|
||||||
"summary": true,
|
|
||||||
"table": true,
|
|
||||||
"tbody": true,
|
|
||||||
"td": true,
|
|
||||||
"template": true,
|
|
||||||
"textarea": true,
|
|
||||||
"tfoot": true,
|
|
||||||
"th": true,
|
|
||||||
"thead": true,
|
|
||||||
"title": true,
|
|
||||||
"tr": true,
|
|
||||||
"track": true,
|
|
||||||
"ul": true,
|
|
||||||
"wbr": true,
|
|
||||||
"xmp": true,
|
|
||||||
}
|
|
||||||
|
|
||||||
func isSpecialElement(element *Node) bool {
|
|
||||||
switch element.Namespace {
|
|
||||||
case "", "html":
|
|
||||||
return isSpecialElementMap[element.Data]
|
|
||||||
case "svg":
|
|
||||||
return element.Data == "foreignObject"
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
106
vendor/golang.org/x/net/html/doc.go
generated
vendored
106
vendor/golang.org/x/net/html/doc.go
generated
vendored
@ -1,106 +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.
|
|
||||||
|
|
||||||
/*
|
|
||||||
Package html implements an HTML5-compliant tokenizer and parser.
|
|
||||||
|
|
||||||
Tokenization is done by creating a Tokenizer for an io.Reader r. It is the
|
|
||||||
caller's responsibility to ensure that r provides UTF-8 encoded HTML.
|
|
||||||
|
|
||||||
z := html.NewTokenizer(r)
|
|
||||||
|
|
||||||
Given a Tokenizer z, the HTML is tokenized by repeatedly calling z.Next(),
|
|
||||||
which parses the next token and returns its type, or an error:
|
|
||||||
|
|
||||||
for {
|
|
||||||
tt := z.Next()
|
|
||||||
if tt == html.ErrorToken {
|
|
||||||
// ...
|
|
||||||
return ...
|
|
||||||
}
|
|
||||||
// Process the current token.
|
|
||||||
}
|
|
||||||
|
|
||||||
There are two APIs for retrieving the current token. The high-level API is to
|
|
||||||
call Token; the low-level API is to call Text or TagName / TagAttr. Both APIs
|
|
||||||
allow optionally calling Raw after Next but before Token, Text, TagName, or
|
|
||||||
TagAttr. In EBNF notation, the valid call sequence per token is:
|
|
||||||
|
|
||||||
Next {Raw} [ Token | Text | TagName {TagAttr} ]
|
|
||||||
|
|
||||||
Token returns an independent data structure that completely describes a token.
|
|
||||||
Entities (such as "<") are unescaped, tag names and attribute keys are
|
|
||||||
lower-cased, and attributes are collected into a []Attribute. For example:
|
|
||||||
|
|
||||||
for {
|
|
||||||
if z.Next() == html.ErrorToken {
|
|
||||||
// Returning io.EOF indicates success.
|
|
||||||
return z.Err()
|
|
||||||
}
|
|
||||||
emitToken(z.Token())
|
|
||||||
}
|
|
||||||
|
|
||||||
The low-level API performs fewer allocations and copies, but the contents of
|
|
||||||
the []byte values returned by Text, TagName and TagAttr may change on the next
|
|
||||||
call to Next. For example, to extract an HTML page's anchor text:
|
|
||||||
|
|
||||||
depth := 0
|
|
||||||
for {
|
|
||||||
tt := z.Next()
|
|
||||||
switch tt {
|
|
||||||
case ErrorToken:
|
|
||||||
return z.Err()
|
|
||||||
case TextToken:
|
|
||||||
if depth > 0 {
|
|
||||||
// emitBytes should copy the []byte it receives,
|
|
||||||
// if it doesn't process it immediately.
|
|
||||||
emitBytes(z.Text())
|
|
||||||
}
|
|
||||||
case StartTagToken, EndTagToken:
|
|
||||||
tn, _ := z.TagName()
|
|
||||||
if len(tn) == 1 && tn[0] == 'a' {
|
|
||||||
if tt == StartTagToken {
|
|
||||||
depth++
|
|
||||||
} else {
|
|
||||||
depth--
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Parsing is done by calling Parse with an io.Reader, which returns the root of
|
|
||||||
the parse tree (the document element) as a *Node. It is the caller's
|
|
||||||
responsibility to ensure that the Reader provides UTF-8 encoded HTML. For
|
|
||||||
example, to process each anchor node in depth-first order:
|
|
||||||
|
|
||||||
doc, err := html.Parse(r)
|
|
||||||
if err != nil {
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
var f func(*html.Node)
|
|
||||||
f = func(n *html.Node) {
|
|
||||||
if n.Type == html.ElementNode && n.Data == "a" {
|
|
||||||
// Do something with n...
|
|
||||||
}
|
|
||||||
for c := n.FirstChild; c != nil; c = c.NextSibling {
|
|
||||||
f(c)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
f(doc)
|
|
||||||
|
|
||||||
The relevant specifications include:
|
|
||||||
https://html.spec.whatwg.org/multipage/syntax.html and
|
|
||||||
https://html.spec.whatwg.org/multipage/syntax.html#tokenization
|
|
||||||
*/
|
|
||||||
package html // import "golang.org/x/net/html"
|
|
||||||
|
|
||||||
// The tokenization algorithm implemented by this package is not a line-by-line
|
|
||||||
// transliteration of the relatively verbose state-machine in the WHATWG
|
|
||||||
// specification. A more direct approach is used instead, where the program
|
|
||||||
// counter implies the state, such as whether it is tokenizing a tag or a text
|
|
||||||
// node. Specification compliance is verified by checking expected and actual
|
|
||||||
// outputs over a test suite rather than aiming for algorithmic fidelity.
|
|
||||||
|
|
||||||
// TODO(nigeltao): Does a DOM API belong in this package or a separate one?
|
|
||||||
// TODO(nigeltao): How does parsing interact with a JavaScript engine?
|
|
156
vendor/golang.org/x/net/html/doctype.go
generated
vendored
156
vendor/golang.org/x/net/html/doctype.go
generated
vendored
@ -1,156 +0,0 @@
|
|||||||
// Copyright 2011 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 html
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
// parseDoctype parses the data from a DoctypeToken into a name,
|
|
||||||
// public identifier, and system identifier. It returns a Node whose Type
|
|
||||||
// is DoctypeNode, whose Data is the name, and which has attributes
|
|
||||||
// named "system" and "public" for the two identifiers if they were present.
|
|
||||||
// quirks is whether the document should be parsed in "quirks mode".
|
|
||||||
func parseDoctype(s string) (n *Node, quirks bool) {
|
|
||||||
n = &Node{Type: DoctypeNode}
|
|
||||||
|
|
||||||
// Find the name.
|
|
||||||
space := strings.IndexAny(s, whitespace)
|
|
||||||
if space == -1 {
|
|
||||||
space = len(s)
|
|
||||||
}
|
|
||||||
n.Data = s[:space]
|
|
||||||
// The comparison to "html" is case-sensitive.
|
|
||||||
if n.Data != "html" {
|
|
||||||
quirks = true
|
|
||||||
}
|
|
||||||
n.Data = strings.ToLower(n.Data)
|
|
||||||
s = strings.TrimLeft(s[space:], whitespace)
|
|
||||||
|
|
||||||
if len(s) < 6 {
|
|
||||||
// It can't start with "PUBLIC" or "SYSTEM".
|
|
||||||
// Ignore the rest of the string.
|
|
||||||
return n, quirks || s != ""
|
|
||||||
}
|
|
||||||
|
|
||||||
key := strings.ToLower(s[:6])
|
|
||||||
s = s[6:]
|
|
||||||
for key == "public" || key == "system" {
|
|
||||||
s = strings.TrimLeft(s, whitespace)
|
|
||||||
if s == "" {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
quote := s[0]
|
|
||||||
if quote != '"' && quote != '\'' {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
s = s[1:]
|
|
||||||
q := strings.IndexRune(s, rune(quote))
|
|
||||||
var id string
|
|
||||||
if q == -1 {
|
|
||||||
id = s
|
|
||||||
s = ""
|
|
||||||
} else {
|
|
||||||
id = s[:q]
|
|
||||||
s = s[q+1:]
|
|
||||||
}
|
|
||||||
n.Attr = append(n.Attr, Attribute{Key: key, Val: id})
|
|
||||||
if key == "public" {
|
|
||||||
key = "system"
|
|
||||||
} else {
|
|
||||||
key = ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if key != "" || s != "" {
|
|
||||||
quirks = true
|
|
||||||
} else if len(n.Attr) > 0 {
|
|
||||||
if n.Attr[0].Key == "public" {
|
|
||||||
public := strings.ToLower(n.Attr[0].Val)
|
|
||||||
switch public {
|
|
||||||
case "-//w3o//dtd w3 html strict 3.0//en//", "-/w3d/dtd html 4.0 transitional/en", "html":
|
|
||||||
quirks = true
|
|
||||||
default:
|
|
||||||
for _, q := range quirkyIDs {
|
|
||||||
if strings.HasPrefix(public, q) {
|
|
||||||
quirks = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// The following two public IDs only cause quirks mode if there is no system ID.
|
|
||||||
if len(n.Attr) == 1 && (strings.HasPrefix(public, "-//w3c//dtd html 4.01 frameset//") ||
|
|
||||||
strings.HasPrefix(public, "-//w3c//dtd html 4.01 transitional//")) {
|
|
||||||
quirks = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" &&
|
|
||||||
strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" {
|
|
||||||
quirks = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return n, quirks
|
|
||||||
}
|
|
||||||
|
|
||||||
// quirkyIDs is a list of public doctype identifiers that cause a document
|
|
||||||
// to be interpreted in quirks mode. The identifiers should be in lower case.
|
|
||||||
var quirkyIDs = []string{
|
|
||||||
"+//silmaril//dtd html pro v0r11 19970101//",
|
|
||||||
"-//advasoft ltd//dtd html 3.0 aswedit + extensions//",
|
|
||||||
"-//as//dtd html 3.0 aswedit + extensions//",
|
|
||||||
"-//ietf//dtd html 2.0 level 1//",
|
|
||||||
"-//ietf//dtd html 2.0 level 2//",
|
|
||||||
"-//ietf//dtd html 2.0 strict level 1//",
|
|
||||||
"-//ietf//dtd html 2.0 strict level 2//",
|
|
||||||
"-//ietf//dtd html 2.0 strict//",
|
|
||||||
"-//ietf//dtd html 2.0//",
|
|
||||||
"-//ietf//dtd html 2.1e//",
|
|
||||||
"-//ietf//dtd html 3.0//",
|
|
||||||
"-//ietf//dtd html 3.2 final//",
|
|
||||||
"-//ietf//dtd html 3.2//",
|
|
||||||
"-//ietf//dtd html 3//",
|
|
||||||
"-//ietf//dtd html level 0//",
|
|
||||||
"-//ietf//dtd html level 1//",
|
|
||||||
"-//ietf//dtd html level 2//",
|
|
||||||
"-//ietf//dtd html level 3//",
|
|
||||||
"-//ietf//dtd html strict level 0//",
|
|
||||||
"-//ietf//dtd html strict level 1//",
|
|
||||||
"-//ietf//dtd html strict level 2//",
|
|
||||||
"-//ietf//dtd html strict level 3//",
|
|
||||||
"-//ietf//dtd html strict//",
|
|
||||||
"-//ietf//dtd html//",
|
|
||||||
"-//metrius//dtd metrius presentational//",
|
|
||||||
"-//microsoft//dtd internet explorer 2.0 html strict//",
|
|
||||||
"-//microsoft//dtd internet explorer 2.0 html//",
|
|
||||||
"-//microsoft//dtd internet explorer 2.0 tables//",
|
|
||||||
"-//microsoft//dtd internet explorer 3.0 html strict//",
|
|
||||||
"-//microsoft//dtd internet explorer 3.0 html//",
|
|
||||||
"-//microsoft//dtd internet explorer 3.0 tables//",
|
|
||||||
"-//netscape comm. corp.//dtd html//",
|
|
||||||
"-//netscape comm. corp.//dtd strict html//",
|
|
||||||
"-//o'reilly and associates//dtd html 2.0//",
|
|
||||||
"-//o'reilly and associates//dtd html extended 1.0//",
|
|
||||||
"-//o'reilly and associates//dtd html extended relaxed 1.0//",
|
|
||||||
"-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//",
|
|
||||||
"-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//",
|
|
||||||
"-//spyglass//dtd html 2.0 extended//",
|
|
||||||
"-//sq//dtd html 2.0 hotmetal + extensions//",
|
|
||||||
"-//sun microsystems corp.//dtd hotjava html//",
|
|
||||||
"-//sun microsystems corp.//dtd hotjava strict html//",
|
|
||||||
"-//w3c//dtd html 3 1995-03-24//",
|
|
||||||
"-//w3c//dtd html 3.2 draft//",
|
|
||||||
"-//w3c//dtd html 3.2 final//",
|
|
||||||
"-//w3c//dtd html 3.2//",
|
|
||||||
"-//w3c//dtd html 3.2s draft//",
|
|
||||||
"-//w3c//dtd html 4.0 frameset//",
|
|
||||||
"-//w3c//dtd html 4.0 transitional//",
|
|
||||||
"-//w3c//dtd html experimental 19960712//",
|
|
||||||
"-//w3c//dtd html experimental 970421//",
|
|
||||||
"-//w3c//dtd w3 html//",
|
|
||||||
"-//w3o//dtd w3 html 3.0//",
|
|
||||||
"-//webtechs//dtd mozilla html 2.0//",
|
|
||||||
"-//webtechs//dtd mozilla html//",
|
|
||||||
}
|
|
2253
vendor/golang.org/x/net/html/entity.go
generated
vendored
2253
vendor/golang.org/x/net/html/entity.go
generated
vendored
File diff suppressed because it is too large
Load Diff
258
vendor/golang.org/x/net/html/escape.go
generated
vendored
258
vendor/golang.org/x/net/html/escape.go
generated
vendored
@ -1,258 +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.
|
|
||||||
|
|
||||||
package html
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"strings"
|
|
||||||
"unicode/utf8"
|
|
||||||
)
|
|
||||||
|
|
||||||
// These replacements permit compatibility with old numeric entities that
|
|
||||||
// assumed Windows-1252 encoding.
|
|
||||||
// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference
|
|
||||||
var replacementTable = [...]rune{
|
|
||||||
'\u20AC', // First entry is what 0x80 should be replaced with.
|
|
||||||
'\u0081',
|
|
||||||
'\u201A',
|
|
||||||
'\u0192',
|
|
||||||
'\u201E',
|
|
||||||
'\u2026',
|
|
||||||
'\u2020',
|
|
||||||
'\u2021',
|
|
||||||
'\u02C6',
|
|
||||||
'\u2030',
|
|
||||||
'\u0160',
|
|
||||||
'\u2039',
|
|
||||||
'\u0152',
|
|
||||||
'\u008D',
|
|
||||||
'\u017D',
|
|
||||||
'\u008F',
|
|
||||||
'\u0090',
|
|
||||||
'\u2018',
|
|
||||||
'\u2019',
|
|
||||||
'\u201C',
|
|
||||||
'\u201D',
|
|
||||||
'\u2022',
|
|
||||||
'\u2013',
|
|
||||||
'\u2014',
|
|
||||||
'\u02DC',
|
|
||||||
'\u2122',
|
|
||||||
'\u0161',
|
|
||||||
'\u203A',
|
|
||||||
'\u0153',
|
|
||||||
'\u009D',
|
|
||||||
'\u017E',
|
|
||||||
'\u0178', // Last entry is 0x9F.
|
|
||||||
// 0x00->'\uFFFD' is handled programmatically.
|
|
||||||
// 0x0D->'\u000D' is a no-op.
|
|
||||||
}
|
|
||||||
|
|
||||||
// unescapeEntity reads an entity like "<" from b[src:] and writes the
|
|
||||||
// corresponding "<" to b[dst:], returning the incremented dst and src cursors.
|
|
||||||
// Precondition: b[src] == '&' && dst <= src.
|
|
||||||
// attribute should be true if parsing an attribute value.
|
|
||||||
func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) {
|
|
||||||
// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference
|
|
||||||
|
|
||||||
// i starts at 1 because we already know that s[0] == '&'.
|
|
||||||
i, s := 1, b[src:]
|
|
||||||
|
|
||||||
if len(s) <= 1 {
|
|
||||||
b[dst] = b[src]
|
|
||||||
return dst + 1, src + 1
|
|
||||||
}
|
|
||||||
|
|
||||||
if s[i] == '#' {
|
|
||||||
if len(s) <= 3 { // We need to have at least "&#.".
|
|
||||||
b[dst] = b[src]
|
|
||||||
return dst + 1, src + 1
|
|
||||||
}
|
|
||||||
i++
|
|
||||||
c := s[i]
|
|
||||||
hex := false
|
|
||||||
if c == 'x' || c == 'X' {
|
|
||||||
hex = true
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
|
|
||||||
x := '\x00'
|
|
||||||
for i < len(s) {
|
|
||||||
c = s[i]
|
|
||||||
i++
|
|
||||||
if hex {
|
|
||||||
if '0' <= c && c <= '9' {
|
|
||||||
x = 16*x + rune(c) - '0'
|
|
||||||
continue
|
|
||||||
} else if 'a' <= c && c <= 'f' {
|
|
||||||
x = 16*x + rune(c) - 'a' + 10
|
|
||||||
continue
|
|
||||||
} else if 'A' <= c && c <= 'F' {
|
|
||||||
x = 16*x + rune(c) - 'A' + 10
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
} else if '0' <= c && c <= '9' {
|
|
||||||
x = 10*x + rune(c) - '0'
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if c != ';' {
|
|
||||||
i--
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
if i <= 3 { // No characters matched.
|
|
||||||
b[dst] = b[src]
|
|
||||||
return dst + 1, src + 1
|
|
||||||
}
|
|
||||||
|
|
||||||
if 0x80 <= x && x <= 0x9F {
|
|
||||||
// Replace characters from Windows-1252 with UTF-8 equivalents.
|
|
||||||
x = replacementTable[x-0x80]
|
|
||||||
} else if x == 0 || (0xD800 <= x && x <= 0xDFFF) || x > 0x10FFFF {
|
|
||||||
// Replace invalid characters with the replacement character.
|
|
||||||
x = '\uFFFD'
|
|
||||||
}
|
|
||||||
|
|
||||||
return dst + utf8.EncodeRune(b[dst:], x), src + i
|
|
||||||
}
|
|
||||||
|
|
||||||
// Consume the maximum number of characters possible, with the
|
|
||||||
// consumed characters matching one of the named references.
|
|
||||||
|
|
||||||
for i < len(s) {
|
|
||||||
c := s[i]
|
|
||||||
i++
|
|
||||||
// Lower-cased characters are more common in entities, so we check for them first.
|
|
||||||
if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if c != ';' {
|
|
||||||
i--
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
entityName := string(s[1:i])
|
|
||||||
if entityName == "" {
|
|
||||||
// No-op.
|
|
||||||
} else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' {
|
|
||||||
// No-op.
|
|
||||||
} else if x := entity[entityName]; x != 0 {
|
|
||||||
return dst + utf8.EncodeRune(b[dst:], x), src + i
|
|
||||||
} else if x := entity2[entityName]; x[0] != 0 {
|
|
||||||
dst1 := dst + utf8.EncodeRune(b[dst:], x[0])
|
|
||||||
return dst1 + utf8.EncodeRune(b[dst1:], x[1]), src + i
|
|
||||||
} else if !attribute {
|
|
||||||
maxLen := len(entityName) - 1
|
|
||||||
if maxLen > longestEntityWithoutSemicolon {
|
|
||||||
maxLen = longestEntityWithoutSemicolon
|
|
||||||
}
|
|
||||||
for j := maxLen; j > 1; j-- {
|
|
||||||
if x := entity[entityName[:j]]; x != 0 {
|
|
||||||
return dst + utf8.EncodeRune(b[dst:], x), src + j + 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dst1, src1 = dst+i, src+i
|
|
||||||
copy(b[dst:dst1], b[src:src1])
|
|
||||||
return dst1, src1
|
|
||||||
}
|
|
||||||
|
|
||||||
// unescape unescapes b's entities in-place, so that "a<b" becomes "a<b".
|
|
||||||
// attribute should be true if parsing an attribute value.
|
|
||||||
func unescape(b []byte, attribute bool) []byte {
|
|
||||||
for i, c := range b {
|
|
||||||
if c == '&' {
|
|
||||||
dst, src := unescapeEntity(b, i, i, attribute)
|
|
||||||
for src < len(b) {
|
|
||||||
c := b[src]
|
|
||||||
if c == '&' {
|
|
||||||
dst, src = unescapeEntity(b, dst, src, attribute)
|
|
||||||
} else {
|
|
||||||
b[dst] = c
|
|
||||||
dst, src = dst+1, src+1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return b[0:dst]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// lower lower-cases the A-Z bytes in b in-place, so that "aBc" becomes "abc".
|
|
||||||
func lower(b []byte) []byte {
|
|
||||||
for i, c := range b {
|
|
||||||
if 'A' <= c && c <= 'Z' {
|
|
||||||
b[i] = c + 'a' - 'A'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
const escapedChars = "&'<>\"\r"
|
|
||||||
|
|
||||||
func escape(w writer, s string) error {
|
|
||||||
i := strings.IndexAny(s, escapedChars)
|
|
||||||
for i != -1 {
|
|
||||||
if _, err := w.WriteString(s[:i]); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
var esc string
|
|
||||||
switch s[i] {
|
|
||||||
case '&':
|
|
||||||
esc = "&"
|
|
||||||
case '\'':
|
|
||||||
// "'" is shorter than "'" and apos was not in HTML until HTML5.
|
|
||||||
esc = "'"
|
|
||||||
case '<':
|
|
||||||
esc = "<"
|
|
||||||
case '>':
|
|
||||||
esc = ">"
|
|
||||||
case '"':
|
|
||||||
// """ is shorter than """.
|
|
||||||
esc = """
|
|
||||||
case '\r':
|
|
||||||
esc = " "
|
|
||||||
default:
|
|
||||||
panic("unrecognized escape character")
|
|
||||||
}
|
|
||||||
s = s[i+1:]
|
|
||||||
if _, err := w.WriteString(esc); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
i = strings.IndexAny(s, escapedChars)
|
|
||||||
}
|
|
||||||
_, err := w.WriteString(s)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// EscapeString escapes special characters like "<" to become "<". It
|
|
||||||
// escapes only five such characters: <, >, &, ' and ".
|
|
||||||
// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't
|
|
||||||
// always true.
|
|
||||||
func EscapeString(s string) string {
|
|
||||||
if strings.IndexAny(s, escapedChars) == -1 {
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
var buf bytes.Buffer
|
|
||||||
escape(&buf, s)
|
|
||||||
return buf.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnescapeString unescapes entities like "<" to become "<". It unescapes a
|
|
||||||
// larger range of entities than EscapeString escapes. For example, "á"
|
|
||||||
// unescapes to "á", as does "á" and "&xE1;".
|
|
||||||
// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't
|
|
||||||
// always true.
|
|
||||||
func UnescapeString(s string) string {
|
|
||||||
for _, c := range s {
|
|
||||||
if c == '&' {
|
|
||||||
return string(unescape([]byte(s), false))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
226
vendor/golang.org/x/net/html/foreign.go
generated
vendored
226
vendor/golang.org/x/net/html/foreign.go
generated
vendored
@ -1,226 +0,0 @@
|
|||||||
// Copyright 2011 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 html
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func adjustAttributeNames(aa []Attribute, nameMap map[string]string) {
|
|
||||||
for i := range aa {
|
|
||||||
if newName, ok := nameMap[aa[i].Key]; ok {
|
|
||||||
aa[i].Key = newName
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func adjustForeignAttributes(aa []Attribute) {
|
|
||||||
for i, a := range aa {
|
|
||||||
if a.Key == "" || a.Key[0] != 'x' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
switch a.Key {
|
|
||||||
case "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show",
|
|
||||||
"xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "xmlns:xlink":
|
|
||||||
j := strings.Index(a.Key, ":")
|
|
||||||
aa[i].Namespace = a.Key[:j]
|
|
||||||
aa[i].Key = a.Key[j+1:]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func htmlIntegrationPoint(n *Node) bool {
|
|
||||||
if n.Type != ElementNode {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
switch n.Namespace {
|
|
||||||
case "math":
|
|
||||||
if n.Data == "annotation-xml" {
|
|
||||||
for _, a := range n.Attr {
|
|
||||||
if a.Key == "encoding" {
|
|
||||||
val := strings.ToLower(a.Val)
|
|
||||||
if val == "text/html" || val == "application/xhtml+xml" {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case "svg":
|
|
||||||
switch n.Data {
|
|
||||||
case "desc", "foreignObject", "title":
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func mathMLTextIntegrationPoint(n *Node) bool {
|
|
||||||
if n.Namespace != "math" {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
switch n.Data {
|
|
||||||
case "mi", "mo", "mn", "ms", "mtext":
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Section 12.2.5.5.
|
|
||||||
var breakout = map[string]bool{
|
|
||||||
"b": true,
|
|
||||||
"big": true,
|
|
||||||
"blockquote": true,
|
|
||||||
"body": true,
|
|
||||||
"br": true,
|
|
||||||
"center": true,
|
|
||||||
"code": true,
|
|
||||||
"dd": true,
|
|
||||||
"div": true,
|
|
||||||
"dl": true,
|
|
||||||
"dt": true,
|
|
||||||
"em": true,
|
|
||||||
"embed": true,
|
|
||||||
"h1": true,
|
|
||||||
"h2": true,
|
|
||||||
"h3": true,
|
|
||||||
"h4": true,
|
|
||||||
"h5": true,
|
|
||||||
"h6": true,
|
|
||||||
"head": true,
|
|
||||||
"hr": true,
|
|
||||||
"i": true,
|
|
||||||
"img": true,
|
|
||||||
"li": true,
|
|
||||||
"listing": true,
|
|
||||||
"menu": true,
|
|
||||||
"meta": true,
|
|
||||||
"nobr": true,
|
|
||||||
"ol": true,
|
|
||||||
"p": true,
|
|
||||||
"pre": true,
|
|
||||||
"ruby": true,
|
|
||||||
"s": true,
|
|
||||||
"small": true,
|
|
||||||
"span": true,
|
|
||||||
"strong": true,
|
|
||||||
"strike": true,
|
|
||||||
"sub": true,
|
|
||||||
"sup": true,
|
|
||||||
"table": true,
|
|
||||||
"tt": true,
|
|
||||||
"u": true,
|
|
||||||
"ul": true,
|
|
||||||
"var": true,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Section 12.2.5.5.
|
|
||||||
var svgTagNameAdjustments = map[string]string{
|
|
||||||
"altglyph": "altGlyph",
|
|
||||||
"altglyphdef": "altGlyphDef",
|
|
||||||
"altglyphitem": "altGlyphItem",
|
|
||||||
"animatecolor": "animateColor",
|
|
||||||
"animatemotion": "animateMotion",
|
|
||||||
"animatetransform": "animateTransform",
|
|
||||||
"clippath": "clipPath",
|
|
||||||
"feblend": "feBlend",
|
|
||||||
"fecolormatrix": "feColorMatrix",
|
|
||||||
"fecomponenttransfer": "feComponentTransfer",
|
|
||||||
"fecomposite": "feComposite",
|
|
||||||
"feconvolvematrix": "feConvolveMatrix",
|
|
||||||
"fediffuselighting": "feDiffuseLighting",
|
|
||||||
"fedisplacementmap": "feDisplacementMap",
|
|
||||||
"fedistantlight": "feDistantLight",
|
|
||||||
"feflood": "feFlood",
|
|
||||||
"fefunca": "feFuncA",
|
|
||||||
"fefuncb": "feFuncB",
|
|
||||||
"fefuncg": "feFuncG",
|
|
||||||
"fefuncr": "feFuncR",
|
|
||||||
"fegaussianblur": "feGaussianBlur",
|
|
||||||
"feimage": "feImage",
|
|
||||||
"femerge": "feMerge",
|
|
||||||
"femergenode": "feMergeNode",
|
|
||||||
"femorphology": "feMorphology",
|
|
||||||
"feoffset": "feOffset",
|
|
||||||
"fepointlight": "fePointLight",
|
|
||||||
"fespecularlighting": "feSpecularLighting",
|
|
||||||
"fespotlight": "feSpotLight",
|
|
||||||
"fetile": "feTile",
|
|
||||||
"feturbulence": "feTurbulence",
|
|
||||||
"foreignobject": "foreignObject",
|
|
||||||
"glyphref": "glyphRef",
|
|
||||||
"lineargradient": "linearGradient",
|
|
||||||
"radialgradient": "radialGradient",
|
|
||||||
"textpath": "textPath",
|
|
||||||
}
|
|
||||||
|
|
||||||
// Section 12.2.5.1
|
|
||||||
var mathMLAttributeAdjustments = map[string]string{
|
|
||||||
"definitionurl": "definitionURL",
|
|
||||||
}
|
|
||||||
|
|
||||||
var svgAttributeAdjustments = map[string]string{
|
|
||||||
"attributename": "attributeName",
|
|
||||||
"attributetype": "attributeType",
|
|
||||||
"basefrequency": "baseFrequency",
|
|
||||||
"baseprofile": "baseProfile",
|
|
||||||
"calcmode": "calcMode",
|
|
||||||
"clippathunits": "clipPathUnits",
|
|
||||||
"contentscripttype": "contentScriptType",
|
|
||||||
"contentstyletype": "contentStyleType",
|
|
||||||
"diffuseconstant": "diffuseConstant",
|
|
||||||
"edgemode": "edgeMode",
|
|
||||||
"externalresourcesrequired": "externalResourcesRequired",
|
|
||||||
"filterres": "filterRes",
|
|
||||||
"filterunits": "filterUnits",
|
|
||||||
"glyphref": "glyphRef",
|
|
||||||
"gradienttransform": "gradientTransform",
|
|
||||||
"gradientunits": "gradientUnits",
|
|
||||||
"kernelmatrix": "kernelMatrix",
|
|
||||||
"kernelunitlength": "kernelUnitLength",
|
|
||||||
"keypoints": "keyPoints",
|
|
||||||
"keysplines": "keySplines",
|
|
||||||
"keytimes": "keyTimes",
|
|
||||||
"lengthadjust": "lengthAdjust",
|
|
||||||
"limitingconeangle": "limitingConeAngle",
|
|
||||||
"markerheight": "markerHeight",
|
|
||||||
"markerunits": "markerUnits",
|
|
||||||
"markerwidth": "markerWidth",
|
|
||||||
"maskcontentunits": "maskContentUnits",
|
|
||||||
"maskunits": "maskUnits",
|
|
||||||
"numoctaves": "numOctaves",
|
|
||||||
"pathlength": "pathLength",
|
|
||||||
"patterncontentunits": "patternContentUnits",
|
|
||||||
"patterntransform": "patternTransform",
|
|
||||||
"patternunits": "patternUnits",
|
|
||||||
"pointsatx": "pointsAtX",
|
|
||||||
"pointsaty": "pointsAtY",
|
|
||||||
"pointsatz": "pointsAtZ",
|
|
||||||
"preservealpha": "preserveAlpha",
|
|
||||||
"preserveaspectratio": "preserveAspectRatio",
|
|
||||||
"primitiveunits": "primitiveUnits",
|
|
||||||
"refx": "refX",
|
|
||||||
"refy": "refY",
|
|
||||||
"repeatcount": "repeatCount",
|
|
||||||
"repeatdur": "repeatDur",
|
|
||||||
"requiredextensions": "requiredExtensions",
|
|
||||||
"requiredfeatures": "requiredFeatures",
|
|
||||||
"specularconstant": "specularConstant",
|
|
||||||
"specularexponent": "specularExponent",
|
|
||||||
"spreadmethod": "spreadMethod",
|
|
||||||
"startoffset": "startOffset",
|
|
||||||
"stddeviation": "stdDeviation",
|
|
||||||
"stitchtiles": "stitchTiles",
|
|
||||||
"surfacescale": "surfaceScale",
|
|
||||||
"systemlanguage": "systemLanguage",
|
|
||||||
"tablevalues": "tableValues",
|
|
||||||
"targetx": "targetX",
|
|
||||||
"targety": "targetY",
|
|
||||||
"textlength": "textLength",
|
|
||||||
"viewbox": "viewBox",
|
|
||||||
"viewtarget": "viewTarget",
|
|
||||||
"xchannelselector": "xChannelSelector",
|
|
||||||
"ychannelselector": "yChannelSelector",
|
|
||||||
"zoomandpan": "zoomAndPan",
|
|
||||||
}
|
|
193
vendor/golang.org/x/net/html/node.go
generated
vendored
193
vendor/golang.org/x/net/html/node.go
generated
vendored
@ -1,193 +0,0 @@
|
|||||||
// Copyright 2011 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 html
|
|
||||||
|
|
||||||
import (
|
|
||||||
"golang.org/x/net/html/atom"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A NodeType is the type of a Node.
|
|
||||||
type NodeType uint32
|
|
||||||
|
|
||||||
const (
|
|
||||||
ErrorNode NodeType = iota
|
|
||||||
TextNode
|
|
||||||
DocumentNode
|
|
||||||
ElementNode
|
|
||||||
CommentNode
|
|
||||||
DoctypeNode
|
|
||||||
scopeMarkerNode
|
|
||||||
)
|
|
||||||
|
|
||||||
// Section 12.2.3.3 says "scope markers are inserted when entering applet
|
|
||||||
// elements, buttons, object elements, marquees, table cells, and table
|
|
||||||
// captions, and are used to prevent formatting from 'leaking'".
|
|
||||||
var scopeMarker = Node{Type: scopeMarkerNode}
|
|
||||||
|
|
||||||
// A Node consists of a NodeType and some Data (tag name for element nodes,
|
|
||||||
// content for text) and are part of a tree of Nodes. Element nodes may also
|
|
||||||
// have a Namespace and contain a slice of Attributes. Data is unescaped, so
|
|
||||||
// that it looks like "a<b" rather than "a<b". For element nodes, DataAtom
|
|
||||||
// is the atom for Data, or zero if Data is not a known tag name.
|
|
||||||
//
|
|
||||||
// An empty Namespace implies a "http://www.w3.org/1999/xhtml" namespace.
|
|
||||||
// Similarly, "math" is short for "http://www.w3.org/1998/Math/MathML", and
|
|
||||||
// "svg" is short for "http://www.w3.org/2000/svg".
|
|
||||||
type Node struct {
|
|
||||||
Parent, FirstChild, LastChild, PrevSibling, NextSibling *Node
|
|
||||||
|
|
||||||
Type NodeType
|
|
||||||
DataAtom atom.Atom
|
|
||||||
Data string
|
|
||||||
Namespace string
|
|
||||||
Attr []Attribute
|
|
||||||
}
|
|
||||||
|
|
||||||
// InsertBefore inserts newChild as a child of n, immediately before oldChild
|
|
||||||
// in the sequence of n's children. oldChild may be nil, in which case newChild
|
|
||||||
// is appended to the end of n's children.
|
|
||||||
//
|
|
||||||
// It will panic if newChild already has a parent or siblings.
|
|
||||||
func (n *Node) InsertBefore(newChild, oldChild *Node) {
|
|
||||||
if newChild.Parent != nil || newChild.PrevSibling != nil || newChild.NextSibling != nil {
|
|
||||||
panic("html: InsertBefore called for an attached child Node")
|
|
||||||
}
|
|
||||||
var prev, next *Node
|
|
||||||
if oldChild != nil {
|
|
||||||
prev, next = oldChild.PrevSibling, oldChild
|
|
||||||
} else {
|
|
||||||
prev = n.LastChild
|
|
||||||
}
|
|
||||||
if prev != nil {
|
|
||||||
prev.NextSibling = newChild
|
|
||||||
} else {
|
|
||||||
n.FirstChild = newChild
|
|
||||||
}
|
|
||||||
if next != nil {
|
|
||||||
next.PrevSibling = newChild
|
|
||||||
} else {
|
|
||||||
n.LastChild = newChild
|
|
||||||
}
|
|
||||||
newChild.Parent = n
|
|
||||||
newChild.PrevSibling = prev
|
|
||||||
newChild.NextSibling = next
|
|
||||||
}
|
|
||||||
|
|
||||||
// AppendChild adds a node c as a child of n.
|
|
||||||
//
|
|
||||||
// It will panic if c already has a parent or siblings.
|
|
||||||
func (n *Node) AppendChild(c *Node) {
|
|
||||||
if c.Parent != nil || c.PrevSibling != nil || c.NextSibling != nil {
|
|
||||||
panic("html: AppendChild called for an attached child Node")
|
|
||||||
}
|
|
||||||
last := n.LastChild
|
|
||||||
if last != nil {
|
|
||||||
last.NextSibling = c
|
|
||||||
} else {
|
|
||||||
n.FirstChild = c
|
|
||||||
}
|
|
||||||
n.LastChild = c
|
|
||||||
c.Parent = n
|
|
||||||
c.PrevSibling = last
|
|
||||||
}
|
|
||||||
|
|
||||||
// RemoveChild removes a node c that is a child of n. Afterwards, c will have
|
|
||||||
// no parent and no siblings.
|
|
||||||
//
|
|
||||||
// It will panic if c's parent is not n.
|
|
||||||
func (n *Node) RemoveChild(c *Node) {
|
|
||||||
if c.Parent != n {
|
|
||||||
panic("html: RemoveChild called for a non-child Node")
|
|
||||||
}
|
|
||||||
if n.FirstChild == c {
|
|
||||||
n.FirstChild = c.NextSibling
|
|
||||||
}
|
|
||||||
if c.NextSibling != nil {
|
|
||||||
c.NextSibling.PrevSibling = c.PrevSibling
|
|
||||||
}
|
|
||||||
if n.LastChild == c {
|
|
||||||
n.LastChild = c.PrevSibling
|
|
||||||
}
|
|
||||||
if c.PrevSibling != nil {
|
|
||||||
c.PrevSibling.NextSibling = c.NextSibling
|
|
||||||
}
|
|
||||||
c.Parent = nil
|
|
||||||
c.PrevSibling = nil
|
|
||||||
c.NextSibling = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// reparentChildren reparents all of src's child nodes to dst.
|
|
||||||
func reparentChildren(dst, src *Node) {
|
|
||||||
for {
|
|
||||||
child := src.FirstChild
|
|
||||||
if child == nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
src.RemoveChild(child)
|
|
||||||
dst.AppendChild(child)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// clone returns a new node with the same type, data and attributes.
|
|
||||||
// The clone has no parent, no siblings and no children.
|
|
||||||
func (n *Node) clone() *Node {
|
|
||||||
m := &Node{
|
|
||||||
Type: n.Type,
|
|
||||||
DataAtom: n.DataAtom,
|
|
||||||
Data: n.Data,
|
|
||||||
Attr: make([]Attribute, len(n.Attr)),
|
|
||||||
}
|
|
||||||
copy(m.Attr, n.Attr)
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
// nodeStack is a stack of nodes.
|
|
||||||
type nodeStack []*Node
|
|
||||||
|
|
||||||
// pop pops the stack. It will panic if s is empty.
|
|
||||||
func (s *nodeStack) pop() *Node {
|
|
||||||
i := len(*s)
|
|
||||||
n := (*s)[i-1]
|
|
||||||
*s = (*s)[:i-1]
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
// top returns the most recently pushed node, or nil if s is empty.
|
|
||||||
func (s *nodeStack) top() *Node {
|
|
||||||
if i := len(*s); i > 0 {
|
|
||||||
return (*s)[i-1]
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// index returns the index of the top-most occurrence of n in the stack, or -1
|
|
||||||
// if n is not present.
|
|
||||||
func (s *nodeStack) index(n *Node) int {
|
|
||||||
for i := len(*s) - 1; i >= 0; i-- {
|
|
||||||
if (*s)[i] == n {
|
|
||||||
return i
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
|
|
||||||
// insert inserts a node at the given index.
|
|
||||||
func (s *nodeStack) insert(i int, n *Node) {
|
|
||||||
(*s) = append(*s, nil)
|
|
||||||
copy((*s)[i+1:], (*s)[i:])
|
|
||||||
(*s)[i] = n
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove removes a node from the stack. It is a no-op if n is not present.
|
|
||||||
func (s *nodeStack) remove(n *Node) {
|
|
||||||
i := s.index(n)
|
|
||||||
if i == -1 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
copy((*s)[i:], (*s)[i+1:])
|
|
||||||
j := len(*s) - 1
|
|
||||||
(*s)[j] = nil
|
|
||||||
*s = (*s)[:j]
|
|
||||||
}
|
|
2094
vendor/golang.org/x/net/html/parse.go
generated
vendored
2094
vendor/golang.org/x/net/html/parse.go
generated
vendored
File diff suppressed because it is too large
Load Diff
271
vendor/golang.org/x/net/html/render.go
generated
vendored
271
vendor/golang.org/x/net/html/render.go
generated
vendored
@ -1,271 +0,0 @@
|
|||||||
// Copyright 2011 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 html
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
type writer interface {
|
|
||||||
io.Writer
|
|
||||||
io.ByteWriter
|
|
||||||
WriteString(string) (int, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Render renders the parse tree n to the given writer.
|
|
||||||
//
|
|
||||||
// Rendering is done on a 'best effort' basis: calling Parse on the output of
|
|
||||||
// Render will always result in something similar to the original tree, but it
|
|
||||||
// is not necessarily an exact clone unless the original tree was 'well-formed'.
|
|
||||||
// 'Well-formed' is not easily specified; the HTML5 specification is
|
|
||||||
// complicated.
|
|
||||||
//
|
|
||||||
// Calling Parse on arbitrary input typically results in a 'well-formed' parse
|
|
||||||
// tree. However, it is possible for Parse to yield a 'badly-formed' parse tree.
|
|
||||||
// For example, in a 'well-formed' parse tree, no <a> element is a child of
|
|
||||||
// another <a> element: parsing "<a><a>" results in two sibling elements.
|
|
||||||
// Similarly, in a 'well-formed' parse tree, no <a> element is a child of a
|
|
||||||
// <table> element: parsing "<p><table><a>" results in a <p> with two sibling
|
|
||||||
// children; the <a> is reparented to the <table>'s parent. However, calling
|
|
||||||
// Parse on "<a><table><a>" does not return an error, but the result has an <a>
|
|
||||||
// element with an <a> child, and is therefore not 'well-formed'.
|
|
||||||
//
|
|
||||||
// Programmatically constructed trees are typically also 'well-formed', but it
|
|
||||||
// is possible to construct a tree that looks innocuous but, when rendered and
|
|
||||||
// re-parsed, results in a different tree. A simple example is that a solitary
|
|
||||||
// text node would become a tree containing <html>, <head> and <body> elements.
|
|
||||||
// Another example is that the programmatic equivalent of "a<head>b</head>c"
|
|
||||||
// becomes "<html><head><head/><body>abc</body></html>".
|
|
||||||
func Render(w io.Writer, n *Node) error {
|
|
||||||
if x, ok := w.(writer); ok {
|
|
||||||
return render(x, n)
|
|
||||||
}
|
|
||||||
buf := bufio.NewWriter(w)
|
|
||||||
if err := render(buf, n); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return buf.Flush()
|
|
||||||
}
|
|
||||||
|
|
||||||
// plaintextAbort is returned from render1 when a <plaintext> element
|
|
||||||
// has been rendered. No more end tags should be rendered after that.
|
|
||||||
var plaintextAbort = errors.New("html: internal error (plaintext abort)")
|
|
||||||
|
|
||||||
func render(w writer, n *Node) error {
|
|
||||||
err := render1(w, n)
|
|
||||||
if err == plaintextAbort {
|
|
||||||
err = nil
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func render1(w writer, n *Node) error {
|
|
||||||
// Render non-element nodes; these are the easy cases.
|
|
||||||
switch n.Type {
|
|
||||||
case ErrorNode:
|
|
||||||
return errors.New("html: cannot render an ErrorNode node")
|
|
||||||
case TextNode:
|
|
||||||
return escape(w, n.Data)
|
|
||||||
case DocumentNode:
|
|
||||||
for c := n.FirstChild; c != nil; c = c.NextSibling {
|
|
||||||
if err := render1(w, c); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
case ElementNode:
|
|
||||||
// No-op.
|
|
||||||
case CommentNode:
|
|
||||||
if _, err := w.WriteString("<!--"); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := w.WriteString(n.Data); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := w.WriteString("-->"); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
case DoctypeNode:
|
|
||||||
if _, err := w.WriteString("<!DOCTYPE "); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := w.WriteString(n.Data); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if n.Attr != nil {
|
|
||||||
var p, s string
|
|
||||||
for _, a := range n.Attr {
|
|
||||||
switch a.Key {
|
|
||||||
case "public":
|
|
||||||
p = a.Val
|
|
||||||
case "system":
|
|
||||||
s = a.Val
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if p != "" {
|
|
||||||
if _, err := w.WriteString(" PUBLIC "); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := writeQuoted(w, p); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if s != "" {
|
|
||||||
if err := w.WriteByte(' '); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := writeQuoted(w, s); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if s != "" {
|
|
||||||
if _, err := w.WriteString(" SYSTEM "); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := writeQuoted(w, s); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return w.WriteByte('>')
|
|
||||||
default:
|
|
||||||
return errors.New("html: unknown node type")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Render the <xxx> opening tag.
|
|
||||||
if err := w.WriteByte('<'); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := w.WriteString(n.Data); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
for _, a := range n.Attr {
|
|
||||||
if err := w.WriteByte(' '); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if a.Namespace != "" {
|
|
||||||
if _, err := w.WriteString(a.Namespace); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := w.WriteByte(':'); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if _, err := w.WriteString(a.Key); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := w.WriteString(`="`); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := escape(w, a.Val); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := w.WriteByte('"'); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if voidElements[n.Data] {
|
|
||||||
if n.FirstChild != nil {
|
|
||||||
return fmt.Errorf("html: void element <%s> has child nodes", n.Data)
|
|
||||||
}
|
|
||||||
_, err := w.WriteString("/>")
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := w.WriteByte('>'); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add initial newline where there is danger of a newline beging ignored.
|
|
||||||
if c := n.FirstChild; c != nil && c.Type == TextNode && strings.HasPrefix(c.Data, "\n") {
|
|
||||||
switch n.Data {
|
|
||||||
case "pre", "listing", "textarea":
|
|
||||||
if err := w.WriteByte('\n'); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Render any child nodes.
|
|
||||||
switch n.Data {
|
|
||||||
case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp":
|
|
||||||
for c := n.FirstChild; c != nil; c = c.NextSibling {
|
|
||||||
if c.Type == TextNode {
|
|
||||||
if _, err := w.WriteString(c.Data); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if err := render1(w, c); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if n.Data == "plaintext" {
|
|
||||||
// Don't render anything else. <plaintext> must be the
|
|
||||||
// last element in the file, with no closing tag.
|
|
||||||
return plaintextAbort
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
for c := n.FirstChild; c != nil; c = c.NextSibling {
|
|
||||||
if err := render1(w, c); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Render the </xxx> closing tag.
|
|
||||||
if _, err := w.WriteString("</"); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := w.WriteString(n.Data); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return w.WriteByte('>')
|
|
||||||
}
|
|
||||||
|
|
||||||
// writeQuoted writes s to w surrounded by quotes. Normally it will use double
|
|
||||||
// quotes, but if s contains a double quote, it will use single quotes.
|
|
||||||
// It is used for writing the identifiers in a doctype declaration.
|
|
||||||
// In valid HTML, they can't contain both types of quotes.
|
|
||||||
func writeQuoted(w writer, s string) error {
|
|
||||||
var q byte = '"'
|
|
||||||
if strings.Contains(s, `"`) {
|
|
||||||
q = '\''
|
|
||||||
}
|
|
||||||
if err := w.WriteByte(q); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := w.WriteString(s); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := w.WriteByte(q); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Section 12.1.2, "Elements", gives this list of void elements. Void elements
|
|
||||||
// are those that can't have any contents.
|
|
||||||
var voidElements = map[string]bool{
|
|
||||||
"area": true,
|
|
||||||
"base": true,
|
|
||||||
"br": true,
|
|
||||||
"col": true,
|
|
||||||
"command": true,
|
|
||||||
"embed": true,
|
|
||||||
"hr": true,
|
|
||||||
"img": true,
|
|
||||||
"input": true,
|
|
||||||
"keygen": true,
|
|
||||||
"link": true,
|
|
||||||
"meta": true,
|
|
||||||
"param": true,
|
|
||||||
"source": true,
|
|
||||||
"track": true,
|
|
||||||
"wbr": true,
|
|
||||||
}
|
|
1219
vendor/golang.org/x/net/html/token.go
generated
vendored
1219
vendor/golang.org/x/net/html/token.go
generated
vendored
File diff suppressed because it is too large
Load Diff
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.
|
|
1
vendor/golang.org/x/sys/unix/.gitignore
generated
vendored
1
vendor/golang.org/x/sys/unix/.gitignore
generated
vendored
@ -1 +0,0 @@
|
|||||||
_obj/
|
|
10
vendor/golang.org/x/sys/unix/asm.s
generated
vendored
10
vendor/golang.org/x/sys/unix/asm.s
generated
vendored
@ -1,10 +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"
|
|
||||||
|
|
||||||
TEXT ·use(SB),NOSPLIT,$0
|
|
||||||
RET
|
|
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-64
|
|
||||||
JMP syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-88
|
|
||||||
JMP syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall9(SB),NOSPLIT,$0-112
|
|
||||||
JMP syscall·Syscall9(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-64
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-88
|
|
||||||
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)
|
|
35
vendor/golang.org/x/sys/unix/asm_linux_386.s
generated
vendored
35
vendor/golang.org/x/sys/unix/asm_linux_386.s
generated
vendored
@ -1,35 +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
|
|
||||||
//
|
|
||||||
|
|
||||||
// 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 ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
||||||
|
|
||||||
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)
|
|
29
vendor/golang.org/x/sys/unix/asm_linux_amd64.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_linux_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 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 ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·gettimeofday(SB),NOSPLIT,$0-16
|
|
||||||
JMP syscall·gettimeofday(SB)
|
|
29
vendor/golang.org/x/sys/unix/asm_linux_arm.s
generated
vendored
29
vendor/golang.org/x/sys/unix/asm_linux_arm.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 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 ·RawSyscall(SB),NOSPLIT,$0-28
|
|
||||||
B syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
|
||||||
B syscall·RawSyscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·seek(SB),NOSPLIT,$0-32
|
|
||||||
B syscall·seek(SB)
|
|
24
vendor/golang.org/x/sys/unix/asm_linux_arm64.s
generated
vendored
24
vendor/golang.org/x/sys/unix/asm_linux_arm64.s
generated
vendored
@ -1,24 +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 ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
B syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
B syscall·RawSyscall6(SB)
|
|
28
vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
generated
vendored
28
vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
generated
vendored
@ -1,28 +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 ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
JMP syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
JMP syscall·RawSyscall6(SB)
|
|
28
vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
generated
vendored
28
vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
generated
vendored
@ -1,28 +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 ·Syscall(SB),NOSPLIT,$0-56
|
|
||||||
BR syscall·Syscall(SB)
|
|
||||||
|
|
||||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
|
||||||
BR syscall·Syscall6(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
BR syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
BR syscall·RawSyscall6(SB)
|
|
28
vendor/golang.org/x/sys/unix/asm_linux_s390x.s
generated
vendored
28
vendor/golang.org/x/sys/unix/asm_linux_s390x.s
generated
vendored
@ -1,28 +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 ·RawSyscall(SB),NOSPLIT,$0-56
|
|
||||||
BR syscall·RawSyscall(SB)
|
|
||||||
|
|
||||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
|
||||||
BR syscall·RawSyscall6(SB)
|
|
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_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)
|
|
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-64
|
|
||||||
JMP syscall·sysvicall6(SB)
|
|
||||||
|
|
||||||
TEXT ·rawSysvicall6(SB),NOSPLIT,$0-64
|
|
||||||
JMP syscall·rawSysvicall6(SB)
|
|
35
vendor/golang.org/x/sys/unix/bluetooth_linux.go
generated
vendored
35
vendor/golang.org/x/sys/unix/bluetooth_linux.go
generated
vendored
@ -1,35 +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
|
|
||||||
)
|
|
||||||
|
|
||||||
// Socketoption Level
|
|
||||||
const (
|
|
||||||
SOL_BLUETOOTH = 0x112
|
|
||||||
SOL_HCI = 0x0
|
|
||||||
SOL_L2CAP = 0x6
|
|
||||||
SOL_RFCOMM = 0x12
|
|
||||||
SOL_SCO = 0x11
|
|
||||||
)
|
|
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 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/env_unix.go
generated
vendored
27
vendor/golang.org/x/sys/unix/env_unix.go
generated
vendored
@ -1,27 +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 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()
|
|
||||||
}
|
|
14
vendor/golang.org/x/sys/unix/env_unset.go
generated
vendored
14
vendor/golang.org/x/sys/unix/env_unset.go
generated
vendored
@ -1,14 +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 go1.4
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import "syscall"
|
|
||||||
|
|
||||||
func Unsetenv(key string) error {
|
|
||||||
// This was added in Go 1.4.
|
|
||||||
return syscall.Unsetenv(key)
|
|
||||||
}
|
|
24
vendor/golang.org/x/sys/unix/flock.go
generated
vendored
24
vendor/golang.org/x/sys/unix/flock.go
generated
vendored
@ -1,24 +0,0 @@
|
|||||||
// +build linux darwin freebsd openbsd netbsd dragonfly
|
|
||||||
|
|
||||||
// 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 darwin dragonfly freebsd linux netbsd openbsd
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import "unsafe"
|
|
||||||
|
|
||||||
// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux
|
|
||||||
// systems by flock_linux_32bit.go to be SYS_FCNTL64.
|
|
||||||
var fcntl64Syscall uintptr = SYS_FCNTL
|
|
||||||
|
|
||||||
// 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
|
|
||||||
}
|
|
13
vendor/golang.org/x/sys/unix/flock_linux_32bit.go
generated
vendored
13
vendor/golang.org/x/sys/unix/flock_linux_32bit.go
generated
vendored
@ -1,13 +0,0 @@
|
|||||||
// +build linux,386 linux,arm
|
|
||||||
|
|
||||||
// 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
|
|
||||||
}
|
|
46
vendor/golang.org/x/sys/unix/gccgo.go
generated
vendored
46
vendor/golang.org/x/sys/unix/gccgo.go
generated
vendored
@ -1,46 +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
|
|
||||||
|
|
||||||
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 gccgoRealSyscall
|
|
||||||
func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr)
|
|
||||||
|
|
||||||
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 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)
|
|
||||||
}
|
|
41
vendor/golang.org/x/sys/unix/gccgo_c.c
generated
vendored
41
vendor/golang.org/x/sys/unix/gccgo_c.c
generated
vendored
@ -1,41 +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
|
|
||||||
|
|
||||||
#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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define the use function in C so that it is not inlined.
|
|
||||||
|
|
||||||
extern void use(void *) __asm__ (GOSYM_PREFIX GOPKGPATH ".use") __attribute__((noinline));
|
|
||||||
|
|
||||||
void
|
|
||||||
use(void *p __attribute__ ((unused)))
|
|
||||||
{
|
|
||||||
}
|
|
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
|
|
||||||
}
|
|
285
vendor/golang.org/x/sys/unix/mkall.sh
generated
vendored
285
vendor/golang.org/x/sys/unix/mkall.sh
generated
vendored
@ -1,285 +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.
|
|
||||||
|
|
||||||
# The unix package provides access to the raw system call
|
|
||||||
# interface of the underlying operating system. Porting Go to
|
|
||||||
# a new architecture/operating system combination requires
|
|
||||||
# some manual effort, though there are tools that automate
|
|
||||||
# much of the process. The auto-generated files have names
|
|
||||||
# beginning with z.
|
|
||||||
#
|
|
||||||
# This script runs or (given -n) prints suggested commands to generate z files
|
|
||||||
# for the current system. Running those commands is not automatic.
|
|
||||||
# This script is documentation more than anything else.
|
|
||||||
#
|
|
||||||
# * asm_${GOOS}_${GOARCH}.s
|
|
||||||
#
|
|
||||||
# This hand-written assembly file 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.
|
|
||||||
#
|
|
||||||
# * syscall_${GOOS}.go
|
|
||||||
#
|
|
||||||
# This hand-written Go file implements system calls that need
|
|
||||||
# special handling and lists "//sys" comments giving prototypes
|
|
||||||
# for ones that can be auto-generated. Mksyscall reads those
|
|
||||||
# comments to generate the stubs.
|
|
||||||
#
|
|
||||||
# * syscall_${GOOS}_${GOARCH}.go
|
|
||||||
#
|
|
||||||
# Same as syscall_${GOOS}.go except that it contains code specific
|
|
||||||
# to ${GOOS} on one particular architecture.
|
|
||||||
#
|
|
||||||
# * types_${GOOS}.c
|
|
||||||
#
|
|
||||||
# This hand-written C file includes standard C headers and then
|
|
||||||
# creates typedef or enum names beginning with a dollar sign
|
|
||||||
# (use of $ in variable names is a gcc extension). The hardest
|
|
||||||
# part about preparing this file is figuring out which headers to
|
|
||||||
# include and which symbols need to be #defined to get the
|
|
||||||
# actual data structures that pass through to the kernel system calls.
|
|
||||||
# Some C libraries present 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.c and types_linux.c for examples.
|
|
||||||
#
|
|
||||||
# * zerror_${GOOS}_${GOARCH}.go
|
|
||||||
#
|
|
||||||
# This machine-generated file defines the system's error numbers,
|
|
||||||
# error strings, and signal numbers. The generator is "mkerrors.sh".
|
|
||||||
# Usually no arguments are needed, but mkerrors.sh will pass its
|
|
||||||
# arguments on to godefs.
|
|
||||||
#
|
|
||||||
# * zsyscall_${GOOS}_${GOARCH}.go
|
|
||||||
#
|
|
||||||
# Generated by mksyscall.pl; see syscall_${GOOS}.go above.
|
|
||||||
#
|
|
||||||
# * zsysnum_${GOOS}_${GOARCH}.go
|
|
||||||
#
|
|
||||||
# Generated by mksysnum_${GOOS}.
|
|
||||||
#
|
|
||||||
# * ztypes_${GOOS}_${GOARCH}.go
|
|
||||||
#
|
|
||||||
# Generated by godefs; see types_${GOOS}.c above.
|
|
||||||
|
|
||||||
GOOSARCH="${GOOS}_${GOARCH}"
|
|
||||||
|
|
||||||
# defaults
|
|
||||||
mksyscall="./mksyscall.pl"
|
|
||||||
mkerrors="./mkerrors.sh"
|
|
||||||
zerrors="zerrors_$GOOSARCH.go"
|
|
||||||
mksysctl=""
|
|
||||||
zsysctl="zsysctl_$GOOSARCH.go"
|
|
||||||
mksysnum=
|
|
||||||
mktypes=
|
|
||||||
run="sh"
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
-syscalls)
|
|
||||||
for i in zsyscall*go
|
|
||||||
do
|
|
||||||
sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i
|
|
||||||
rm _$i
|
|
||||||
done
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
-n)
|
|
||||||
run="cat"
|
|
||||||
shift
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "$#" in
|
|
||||||
0)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo 'usage: mkall.sh [-n]' 1>&2
|
|
||||||
exit 2
|
|
||||||
esac
|
|
||||||
|
|
||||||
GOOSARCH_in=syscall_$GOOSARCH.go
|
|
||||||
case "$GOOSARCH" in
|
|
||||||
_* | *_ | _)
|
|
||||||
echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
darwin_386)
|
|
||||||
mkerrors="$mkerrors -m32"
|
|
||||||
mksyscall="./mksyscall.pl -l32"
|
|
||||||
mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
darwin_amd64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
darwin_arm)
|
|
||||||
mkerrors="$mkerrors"
|
|
||||||
mksysnum="./mksysnum_darwin.pl /usr/include/sys/syscall.h"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
darwin_arm64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
dragonfly_386)
|
|
||||||
mkerrors="$mkerrors -m32"
|
|
||||||
mksyscall="./mksyscall.pl -l32 -dragonfly"
|
|
||||||
mksysnum="curl -s 'http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master' | ./mksysnum_dragonfly.pl"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
dragonfly_amd64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksyscall="./mksyscall.pl -dragonfly"
|
|
||||||
mksysnum="curl -s 'http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master' | ./mksysnum_dragonfly.pl"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
freebsd_386)
|
|
||||||
mkerrors="$mkerrors -m32"
|
|
||||||
mksyscall="./mksyscall.pl -l32"
|
|
||||||
mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
freebsd_amd64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
freebsd_arm)
|
|
||||||
mkerrors="$mkerrors"
|
|
||||||
mksyscall="./mksyscall.pl -l32 -arm"
|
|
||||||
mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
|
|
||||||
# Let the type of C char be signed for making the bare syscall
|
|
||||||
# API consistent across over platforms.
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
|
||||||
;;
|
|
||||||
linux_386)
|
|
||||||
mkerrors="$mkerrors -m32"
|
|
||||||
mksyscall="./mksyscall.pl -l32"
|
|
||||||
mksysnum="./mksysnum_linux.pl /usr/include/asm/unistd_32.h"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
linux_amd64)
|
|
||||||
unistd_h=$(ls -1 /usr/include/asm/unistd_64.h /usr/include/x86_64-linux-gnu/asm/unistd_64.h 2>/dev/null | head -1)
|
|
||||||
if [ "$unistd_h" = "" ]; then
|
|
||||||
echo >&2 cannot find unistd_64.h
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum="./mksysnum_linux.pl $unistd_h"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
linux_arm)
|
|
||||||
mkerrors="$mkerrors"
|
|
||||||
mksyscall="./mksyscall.pl -l32 -arm"
|
|
||||||
mksysnum="curl -s 'http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/arch/arm/include/uapi/asm/unistd.h' | ./mksysnum_linux.pl -"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
linux_arm64)
|
|
||||||
unistd_h=$(ls -1 /usr/include/asm/unistd.h /usr/include/asm-generic/unistd.h 2>/dev/null | head -1)
|
|
||||||
if [ "$unistd_h" = "" ]; then
|
|
||||||
echo >&2 cannot find unistd_64.h
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
mksysnum="./mksysnum_linux.pl $unistd_h"
|
|
||||||
# Let the type of C char be signed for making the bare syscall
|
|
||||||
# API consistent across over platforms.
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
|
||||||
;;
|
|
||||||
linux_ppc64)
|
|
||||||
GOOSARCH_in=syscall_linux_ppc64x.go
|
|
||||||
unistd_h=/usr/include/asm/unistd.h
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum="./mksysnum_linux.pl $unistd_h"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
linux_ppc64le)
|
|
||||||
GOOSARCH_in=syscall_linux_ppc64x.go
|
|
||||||
unistd_h=/usr/include/powerpc64le-linux-gnu/asm/unistd.h
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum="./mksysnum_linux.pl $unistd_h"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
linux_s390x)
|
|
||||||
GOOSARCH_in=syscall_linux_s390x.go
|
|
||||||
unistd_h=/usr/include/asm/unistd.h
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum="./mksysnum_linux.pl $unistd_h"
|
|
||||||
# Let the type of C char be signed to make the bare sys
|
|
||||||
# API more consistent between platforms.
|
|
||||||
# This is a deliberate departure from the way the syscall
|
|
||||||
# package generates its version of the types file.
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
|
||||||
;;
|
|
||||||
netbsd_386)
|
|
||||||
mkerrors="$mkerrors -m32"
|
|
||||||
mksyscall="./mksyscall.pl -l32 -netbsd"
|
|
||||||
mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
netbsd_amd64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksyscall="./mksyscall.pl -netbsd"
|
|
||||||
mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
openbsd_386)
|
|
||||||
mkerrors="$mkerrors -m32"
|
|
||||||
mksyscall="./mksyscall.pl -l32 -openbsd"
|
|
||||||
mksysctl="./mksysctl_openbsd.pl"
|
|
||||||
zsysctl="zsysctl_openbsd.go"
|
|
||||||
mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
openbsd_amd64)
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksyscall="./mksyscall.pl -openbsd"
|
|
||||||
mksysctl="./mksysctl_openbsd.pl"
|
|
||||||
zsysctl="zsysctl_openbsd.go"
|
|
||||||
mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl"
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
solaris_amd64)
|
|
||||||
mksyscall="./mksyscall_solaris.pl"
|
|
||||||
mkerrors="$mkerrors -m64"
|
|
||||||
mksysnum=
|
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
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 echo "$mksyscall $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go"; 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 "echo // +build $GOARCH,$GOOS > ztypes_$GOOSARCH.go";
|
|
||||||
echo "$mktypes types_$GOOS.go | go run mkpost.go >>ztypes_$GOOSARCH.go";
|
|
||||||
fi
|
|
||||||
) | $run
|
|
476
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
476
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
@ -1,476 +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
|
|
||||||
|
|
||||||
CC=${CC:-cc}
|
|
||||||
|
|
||||||
if [[ "$GOOS" -eq "solaris" ]]; then
|
|
||||||
# Assumes GNU versions of utilities in PATH.
|
|
||||||
export PATH=/usr/gnu/bin:$PATH
|
|
||||||
fi
|
|
||||||
|
|
||||||
uname=$(uname)
|
|
||||||
|
|
||||||
includes_Darwin='
|
|
||||||
#define _DARWIN_C_SOURCE
|
|
||||||
#define KERNEL
|
|
||||||
#define _DARWIN_USE_64_BIT_INODE
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/event.h>
|
|
||||||
#include <sys/ptrace.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/sockio.h>
|
|
||||||
#include <sys/sysctl.h>
|
|
||||||
#include <sys/mman.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/ip.h>
|
|
||||||
#include <termios.h>
|
|
||||||
'
|
|
||||||
|
|
||||||
includes_DragonFly='
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/event.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/sockio.h>
|
|
||||||
#include <sys/sysctl.h>
|
|
||||||
#include <sys/mman.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/param.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/event.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/sockio.h>
|
|
||||||
#include <sys/sysctl.h>
|
|
||||||
#include <sys/mman.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
|
|
||||||
|
|
||||||
#include <bits/sockaddr.h>
|
|
||||||
#include <sys/epoll.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/socket.h>
|
|
||||||
#include <linux/if.h>
|
|
||||||
#include <linux/if_arp.h>
|
|
||||||
#include <linux/if_ether.h>
|
|
||||||
#include <linux/if_tun.h>
|
|
||||||
#include <linux/if_packet.h>
|
|
||||||
#include <linux/if_addr.h>
|
|
||||||
#include <linux/filter.h>
|
|
||||||
#include <linux/netlink.h>
|
|
||||||
#include <linux/reboot.h>
|
|
||||||
#include <linux/rtnetlink.h>
|
|
||||||
#include <linux/ptrace.h>
|
|
||||||
#include <linux/sched.h>
|
|
||||||
#include <linux/wait.h>
|
|
||||||
#include <linux/icmpv6.h>
|
|
||||||
#include <net/route.h>
|
|
||||||
#include <asm/termbits.h>
|
|
||||||
|
|
||||||
#ifndef MSG_FASTOPEN
|
|
||||||
#define MSG_FASTOPEN 0x20000000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef PTRACE_GETREGS
|
|
||||||
#define PTRACE_GETREGS 0xc
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef PTRACE_SETREGS
|
|
||||||
#define PTRACE_SETREGS 0xd
|
|
||||||
#endif
|
|
||||||
'
|
|
||||||
|
|
||||||
includes_NetBSD='
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/event.h>
|
|
||||||
#include <sys/mman.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/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/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/socket.h>
|
|
||||||
#include <sys/sockio.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <sys/ioctl.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 !~ /^ETH_/ &&
|
|
||||||
$2 !~ /^EPROC_/ &&
|
|
||||||
$2 !~ /^EQUIV_/ &&
|
|
||||||
$2 !~ /^EXPR_/ &&
|
|
||||||
$2 ~ /^E[A-Z0-9_]+$/ ||
|
|
||||||
$2 ~ /^B[0-9_]+$/ ||
|
|
||||||
$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 ~ /(^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 ~ /^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 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ ||
|
|
||||||
$2 == "ICMPV6_FILTER" ||
|
|
||||||
$2 == "SOMAXCONN" ||
|
|
||||||
$2 == "NAME_MAX" ||
|
|
||||||
$2 == "IFNAMSIZ" ||
|
|
||||||
$2 ~ /^CTL_(MAXNAME|NET|QUERY)$/ ||
|
|
||||||
$2 ~ /^SYSCTL_VERS/ ||
|
|
||||||
$2 ~ /^(MS|MNT)_/ ||
|
|
||||||
$2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||
|
|
||||||
$2 ~ /^(O|F|FD|NAME|S|PTRACE|PT)_/ ||
|
|
||||||
$2 ~ /^LINUX_REBOOT_CMD_/ ||
|
|
||||||
$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ ||
|
|
||||||
$2 !~ "NLA_TYPE_MASK" &&
|
|
||||||
$2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P)_/ ||
|
|
||||||
$2 ~ /^SIOC/ ||
|
|
||||||
$2 ~ /^TIOC/ ||
|
|
||||||
$2 ~ /^TCGET/ ||
|
|
||||||
$2 ~ /^TCSET/ ||
|
|
||||||
$2 ~ /^TC(FLSH|SBRKP?|XONC)$/ ||
|
|
||||||
$2 !~ "RTF_BITS" &&
|
|
||||||
$2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ ||
|
|
||||||
$2 ~ /^BIOC/ ||
|
|
||||||
$2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ ||
|
|
||||||
$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|NOFILE|STACK)|RLIM_INFINITY/ ||
|
|
||||||
$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||
|
|
||||||
$2 ~ /^CLONE_[A-Z_]+/ ||
|
|
||||||
$2 !~ /^(BPF_TIMEVAL)$/ &&
|
|
||||||
$2 ~ /^(BPF|DLT)_/ ||
|
|
||||||
$2 ~ /^CLOCK_/ ||
|
|
||||||
$2 !~ "WMESGLEN" &&
|
|
||||||
$2 ~ /^W[A-Z0-9]+$/ {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)' |
|
|
||||||
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)' |
|
|
||||||
sort >_signal.grep
|
|
||||||
|
|
||||||
echo '// mkerrors.sh' "$@"
|
|
||||||
echo '// MACHINE GENERATED BY THE COMMAND ABOVE; 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
|
|
||||||
|
|
||||||
int errors[] = {
|
|
||||||
"
|
|
||||||
for i in $errors
|
|
||||||
do
|
|
||||||
echo -E ' '$i,
|
|
||||||
done
|
|
||||||
|
|
||||||
echo -E "
|
|
||||||
};
|
|
||||||
|
|
||||||
int signals[] = {
|
|
||||||
"
|
|
||||||
for i in $signals
|
|
||||||
do
|
|
||||||
echo -E ' '$i,
|
|
||||||
done
|
|
||||||
|
|
||||||
# Use -E because on some systems bash builtin interprets \n itself.
|
|
||||||
echo -E '
|
|
||||||
};
|
|
||||||
|
|
||||||
static int
|
|
||||||
intcmp(const void *a, const void *b)
|
|
||||||
{
|
|
||||||
return *(int*)a - *(int*)b;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(void)
|
|
||||||
{
|
|
||||||
int i, j, e;
|
|
||||||
char buf[1024], *p;
|
|
||||||
|
|
||||||
printf("\n\n// Error table\n");
|
|
||||||
printf("var errors = [...]string {\n");
|
|
||||||
qsort(errors, nelem(errors), sizeof errors[0], intcmp);
|
|
||||||
for(i=0; i<nelem(errors); i++) {
|
|
||||||
e = errors[i];
|
|
||||||
if(i > 0 && errors[i-1] == 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\",\n", e, buf);
|
|
||||||
}
|
|
||||||
printf("}\n\n");
|
|
||||||
|
|
||||||
printf("\n\n// Signal table\n");
|
|
||||||
printf("var signals = [...]string {\n");
|
|
||||||
qsort(signals, nelem(signals), sizeof signals[0], intcmp);
|
|
||||||
for(i=0; i<nelem(signals); i++) {
|
|
||||||
e = signals[i];
|
|
||||||
if(i > 0 && signals[i-1] == 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\",\n", e, 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
|
|
323
vendor/golang.org/x/sys/unix/mksyscall.pl
generated
vendored
323
vendor/golang.org/x/sys/unix/mksyscall.pl
generated
vendored
@ -1,323 +0,0 @@
|
|||||||
#!/usr/bin/env perl
|
|
||||||
# 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 program reads a file containing function prototypes
|
|
||||||
# (like syscall_darwin.go) and generates system call bodies.
|
|
||||||
# The prototypes are marked by lines beginning with "//sys"
|
|
||||||
# and read like func declarations if //sys is replaced by func, but:
|
|
||||||
# * The parameter lists must give a name for each argument.
|
|
||||||
# This includes return parameters.
|
|
||||||
# * The parameter lists must give a type for each argument:
|
|
||||||
# the (x, y, z int) shorthand is not allowed.
|
|
||||||
# * If the return parameter is an error number, it must be named errno.
|
|
||||||
|
|
||||||
# A line beginning with //sysnb is like //sys, except that the
|
|
||||||
# goroutine will not be suspended during the execution of the system
|
|
||||||
# call. This must only be used for system calls which can never
|
|
||||||
# block, as otherwise the system call could cause all goroutines to
|
|
||||||
# hang.
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
my $cmdline = "mksyscall.pl " . join(' ', @ARGV);
|
|
||||||
my $errors = 0;
|
|
||||||
my $_32bit = "";
|
|
||||||
my $plan9 = 0;
|
|
||||||
my $openbsd = 0;
|
|
||||||
my $netbsd = 0;
|
|
||||||
my $dragonfly = 0;
|
|
||||||
my $arm = 0; # 64-bit value should use (even, odd)-pair
|
|
||||||
|
|
||||||
if($ARGV[0] eq "-b32") {
|
|
||||||
$_32bit = "big-endian";
|
|
||||||
shift;
|
|
||||||
} elsif($ARGV[0] eq "-l32") {
|
|
||||||
$_32bit = "little-endian";
|
|
||||||
shift;
|
|
||||||
}
|
|
||||||
if($ARGV[0] eq "-plan9") {
|
|
||||||
$plan9 = 1;
|
|
||||||
shift;
|
|
||||||
}
|
|
||||||
if($ARGV[0] eq "-openbsd") {
|
|
||||||
$openbsd = 1;
|
|
||||||
shift;
|
|
||||||
}
|
|
||||||
if($ARGV[0] eq "-netbsd") {
|
|
||||||
$netbsd = 1;
|
|
||||||
shift;
|
|
||||||
}
|
|
||||||
if($ARGV[0] eq "-dragonfly") {
|
|
||||||
$dragonfly = 1;
|
|
||||||
shift;
|
|
||||||
}
|
|
||||||
if($ARGV[0] eq "-arm") {
|
|
||||||
$arm = 1;
|
|
||||||
shift;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($ARGV[0] =~ /^-/) {
|
|
||||||
print STDERR "usage: mksyscall.pl [-b32 | -l32] [file ...]\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
|
|
||||||
print STDERR "GOARCH or GOOS not defined in environment\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub parseparamlist($) {
|
|
||||||
my ($list) = @_;
|
|
||||||
$list =~ s/^\s*//;
|
|
||||||
$list =~ s/\s*$//;
|
|
||||||
if($list eq "") {
|
|
||||||
return ();
|
|
||||||
}
|
|
||||||
return split(/\s*,\s*/, $list);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub parseparam($) {
|
|
||||||
my ($p) = @_;
|
|
||||||
if($p !~ /^(\S*) (\S*)$/) {
|
|
||||||
print STDERR "$ARGV:$.: malformed parameter: $p\n";
|
|
||||||
$errors = 1;
|
|
||||||
return ("xx", "int");
|
|
||||||
}
|
|
||||||
return ($1, $2);
|
|
||||||
}
|
|
||||||
|
|
||||||
my $text = "";
|
|
||||||
while(<>) {
|
|
||||||
chomp;
|
|
||||||
s/\s+/ /g;
|
|
||||||
s/^\s+//;
|
|
||||||
s/\s+$//;
|
|
||||||
my $nonblock = /^\/\/sysnb /;
|
|
||||||
next if !/^\/\/sys / && !$nonblock;
|
|
||||||
|
|
||||||
# Line must be of the form
|
|
||||||
# func Open(path string, mode int, perm int) (fd int, errno error)
|
|
||||||
# Split into name, in params, out params.
|
|
||||||
if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*((?i)SYS_[A-Z0-9_]+))?$/) {
|
|
||||||
print STDERR "$ARGV:$.: malformed //sys declaration\n";
|
|
||||||
$errors = 1;
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
my ($func, $in, $out, $sysname) = ($2, $3, $4, $5);
|
|
||||||
|
|
||||||
# Split argument lists on comma.
|
|
||||||
my @in = parseparamlist($in);
|
|
||||||
my @out = parseparamlist($out);
|
|
||||||
|
|
||||||
# Try in vain to keep people from editing this file.
|
|
||||||
# The theory is that they jump into the middle of the file
|
|
||||||
# without reading the header.
|
|
||||||
$text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n";
|
|
||||||
|
|
||||||
# Go function header.
|
|
||||||
my $out_decl = @out ? sprintf(" (%s)", join(', ', @out)) : "";
|
|
||||||
$text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out_decl;
|
|
||||||
|
|
||||||
# Check if err return available
|
|
||||||
my $errvar = "";
|
|
||||||
foreach my $p (@out) {
|
|
||||||
my ($name, $type) = parseparam($p);
|
|
||||||
if($type eq "error") {
|
|
||||||
$errvar = $name;
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Prepare arguments to Syscall.
|
|
||||||
my @args = ();
|
|
||||||
my @uses = ();
|
|
||||||
my $n = 0;
|
|
||||||
foreach my $p (@in) {
|
|
||||||
my ($name, $type) = parseparam($p);
|
|
||||||
if($type =~ /^\*/) {
|
|
||||||
push @args, "uintptr(unsafe.Pointer($name))";
|
|
||||||
} elsif($type eq "string" && $errvar ne "") {
|
|
||||||
$text .= "\tvar _p$n *byte\n";
|
|
||||||
$text .= "\t_p$n, $errvar = BytePtrFromString($name)\n";
|
|
||||||
$text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n";
|
|
||||||
push @args, "uintptr(unsafe.Pointer(_p$n))";
|
|
||||||
push @uses, "use(unsafe.Pointer(_p$n))";
|
|
||||||
$n++;
|
|
||||||
} elsif($type eq "string") {
|
|
||||||
print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n";
|
|
||||||
$text .= "\tvar _p$n *byte\n";
|
|
||||||
$text .= "\t_p$n, _ = BytePtrFromString($name)\n";
|
|
||||||
push @args, "uintptr(unsafe.Pointer(_p$n))";
|
|
||||||
push @uses, "use(unsafe.Pointer(_p$n))";
|
|
||||||
$n++;
|
|
||||||
} elsif($type =~ /^\[\](.*)/) {
|
|
||||||
# Convert slice into pointer, length.
|
|
||||||
# Have to be careful not to take address of &a[0] if len == 0:
|
|
||||||
# pass dummy pointer in that case.
|
|
||||||
# Used to pass nil, but some OSes or simulators reject write(fd, nil, 0).
|
|
||||||
$text .= "\tvar _p$n unsafe.Pointer\n";
|
|
||||||
$text .= "\tif len($name) > 0 {\n\t\t_p$n = unsafe.Pointer(\&${name}[0])\n\t}";
|
|
||||||
$text .= " else {\n\t\t_p$n = unsafe.Pointer(&_zero)\n\t}";
|
|
||||||
$text .= "\n";
|
|
||||||
push @args, "uintptr(_p$n)", "uintptr(len($name))";
|
|
||||||
$n++;
|
|
||||||
} elsif($type eq "int64" && ($openbsd || $netbsd)) {
|
|
||||||
push @args, "0";
|
|
||||||
if($_32bit eq "big-endian") {
|
|
||||||
push @args, "uintptr($name>>32)", "uintptr($name)";
|
|
||||||
} elsif($_32bit eq "little-endian") {
|
|
||||||
push @args, "uintptr($name)", "uintptr($name>>32)";
|
|
||||||
} else {
|
|
||||||
push @args, "uintptr($name)";
|
|
||||||
}
|
|
||||||
} elsif($type eq "int64" && $dragonfly) {
|
|
||||||
if ($func !~ /^extp(read|write)/i) {
|
|
||||||
push @args, "0";
|
|
||||||
}
|
|
||||||
if($_32bit eq "big-endian") {
|
|
||||||
push @args, "uintptr($name>>32)", "uintptr($name)";
|
|
||||||
} elsif($_32bit eq "little-endian") {
|
|
||||||
push @args, "uintptr($name)", "uintptr($name>>32)";
|
|
||||||
} else {
|
|
||||||
push @args, "uintptr($name)";
|
|
||||||
}
|
|
||||||
} elsif($type eq "int64" && $_32bit ne "") {
|
|
||||||
if(@args % 2 && $arm) {
|
|
||||||
# arm abi specifies 64-bit argument uses
|
|
||||||
# (even, odd) pair
|
|
||||||
push @args, "0"
|
|
||||||
}
|
|
||||||
if($_32bit eq "big-endian") {
|
|
||||||
push @args, "uintptr($name>>32)", "uintptr($name)";
|
|
||||||
} else {
|
|
||||||
push @args, "uintptr($name)", "uintptr($name>>32)";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
push @args, "uintptr($name)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Determine which form to use; pad args with zeros.
|
|
||||||
my $asm = "Syscall";
|
|
||||||
if ($nonblock) {
|
|
||||||
$asm = "RawSyscall";
|
|
||||||
}
|
|
||||||
if(@args <= 3) {
|
|
||||||
while(@args < 3) {
|
|
||||||
push @args, "0";
|
|
||||||
}
|
|
||||||
} elsif(@args <= 6) {
|
|
||||||
$asm .= "6";
|
|
||||||
while(@args < 6) {
|
|
||||||
push @args, "0";
|
|
||||||
}
|
|
||||||
} elsif(@args <= 9) {
|
|
||||||
$asm .= "9";
|
|
||||||
while(@args < 9) {
|
|
||||||
push @args, "0";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
print STDERR "$ARGV:$.: too many arguments to system call\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
# System call number.
|
|
||||||
if($sysname eq "") {
|
|
||||||
$sysname = "SYS_$func";
|
|
||||||
$sysname =~ s/([a-z])([A-Z])/${1}_$2/g; # turn FooBar into Foo_Bar
|
|
||||||
$sysname =~ y/a-z/A-Z/;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Actual call.
|
|
||||||
my $args = join(', ', @args);
|
|
||||||
my $call = "$asm($sysname, $args)";
|
|
||||||
|
|
||||||
# Assign return values.
|
|
||||||
my $body = "";
|
|
||||||
my @ret = ("_", "_", "_");
|
|
||||||
my $do_errno = 0;
|
|
||||||
for(my $i=0; $i<@out; $i++) {
|
|
||||||
my $p = $out[$i];
|
|
||||||
my ($name, $type) = parseparam($p);
|
|
||||||
my $reg = "";
|
|
||||||
if($name eq "err" && !$plan9) {
|
|
||||||
$reg = "e1";
|
|
||||||
$ret[2] = $reg;
|
|
||||||
$do_errno = 1;
|
|
||||||
} elsif($name eq "err" && $plan9) {
|
|
||||||
$ret[0] = "r0";
|
|
||||||
$ret[2] = "e1";
|
|
||||||
next;
|
|
||||||
} else {
|
|
||||||
$reg = sprintf("r%d", $i);
|
|
||||||
$ret[$i] = $reg;
|
|
||||||
}
|
|
||||||
if($type eq "bool") {
|
|
||||||
$reg = "$reg != 0";
|
|
||||||
}
|
|
||||||
if($type eq "int64" && $_32bit ne "") {
|
|
||||||
# 64-bit number in r1:r0 or r0:r1.
|
|
||||||
if($i+2 > @out) {
|
|
||||||
print STDERR "$ARGV:$.: not enough registers for int64 return\n";
|
|
||||||
}
|
|
||||||
if($_32bit eq "big-endian") {
|
|
||||||
$reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1);
|
|
||||||
} else {
|
|
||||||
$reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i);
|
|
||||||
}
|
|
||||||
$ret[$i] = sprintf("r%d", $i);
|
|
||||||
$ret[$i+1] = sprintf("r%d", $i+1);
|
|
||||||
}
|
|
||||||
if($reg ne "e1" || $plan9) {
|
|
||||||
$body .= "\t$name = $type($reg)\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") {
|
|
||||||
$text .= "\t$call\n";
|
|
||||||
} else {
|
|
||||||
$text .= "\t$ret[0], $ret[1], $ret[2] := $call\n";
|
|
||||||
}
|
|
||||||
foreach my $use (@uses) {
|
|
||||||
$text .= "\t$use\n";
|
|
||||||
}
|
|
||||||
$text .= $body;
|
|
||||||
|
|
||||||
if ($plan9 && $ret[2] eq "e1") {
|
|
||||||
$text .= "\tif int32(r0) == -1 {\n";
|
|
||||||
$text .= "\t\terr = e1\n";
|
|
||||||
$text .= "\t}\n";
|
|
||||||
} elsif ($do_errno) {
|
|
||||||
$text .= "\tif e1 != 0 {\n";
|
|
||||||
$text .= "\t\terr = errnoErr(e1)\n";
|
|
||||||
$text .= "\t}\n";
|
|
||||||
}
|
|
||||||
$text .= "\treturn\n";
|
|
||||||
$text .= "}\n\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
chomp $text;
|
|
||||||
chomp $text;
|
|
||||||
|
|
||||||
if($errors) {
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
// $cmdline
|
|
||||||
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
|
|
||||||
|
|
||||||
// +build $ENV{'GOARCH'},$ENV{'GOOS'}
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ syscall.Errno
|
|
||||||
|
|
||||||
$text
|
|
||||||
EOF
|
|
||||||
exit 0;
|
|
294
vendor/golang.org/x/sys/unix/mksyscall_solaris.pl
generated
vendored
294
vendor/golang.org/x/sys/unix/mksyscall_solaris.pl
generated
vendored
@ -1,294 +0,0 @@
|
|||||||
#!/usr/bin/env perl
|
|
||||||
# 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 program reads a file containing function prototypes
|
|
||||||
# (like syscall_solaris.go) and generates system call bodies.
|
|
||||||
# The prototypes are marked by lines beginning with "//sys"
|
|
||||||
# and read like func declarations if //sys is replaced by func, but:
|
|
||||||
# * The parameter lists must give a name for each argument.
|
|
||||||
# This includes return parameters.
|
|
||||||
# * The parameter lists must give a type for each argument:
|
|
||||||
# the (x, y, z int) shorthand is not allowed.
|
|
||||||
# * If the return parameter is an error number, it must be named err.
|
|
||||||
# * If go func name needs to be different than its libc name,
|
|
||||||
# * or the function is not in libc, name could be specified
|
|
||||||
# * at the end, after "=" sign, like
|
|
||||||
# //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
my $cmdline = "mksyscall_solaris.pl " . join(' ', @ARGV);
|
|
||||||
my $errors = 0;
|
|
||||||
my $_32bit = "";
|
|
||||||
|
|
||||||
binmode STDOUT;
|
|
||||||
|
|
||||||
if($ARGV[0] eq "-b32") {
|
|
||||||
$_32bit = "big-endian";
|
|
||||||
shift;
|
|
||||||
} elsif($ARGV[0] eq "-l32") {
|
|
||||||
$_32bit = "little-endian";
|
|
||||||
shift;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($ARGV[0] =~ /^-/) {
|
|
||||||
print STDERR "usage: mksyscall_solaris.pl [-b32 | -l32] [file ...]\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
|
|
||||||
print STDERR "GOARCH or GOOS not defined in environment\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub parseparamlist($) {
|
|
||||||
my ($list) = @_;
|
|
||||||
$list =~ s/^\s*//;
|
|
||||||
$list =~ s/\s*$//;
|
|
||||||
if($list eq "") {
|
|
||||||
return ();
|
|
||||||
}
|
|
||||||
return split(/\s*,\s*/, $list);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub parseparam($) {
|
|
||||||
my ($p) = @_;
|
|
||||||
if($p !~ /^(\S*) (\S*)$/) {
|
|
||||||
print STDERR "$ARGV:$.: malformed parameter: $p\n";
|
|
||||||
$errors = 1;
|
|
||||||
return ("xx", "int");
|
|
||||||
}
|
|
||||||
return ($1, $2);
|
|
||||||
}
|
|
||||||
|
|
||||||
my $package = "";
|
|
||||||
my $text = "";
|
|
||||||
my $dynimports = "";
|
|
||||||
my $linknames = "";
|
|
||||||
my @vars = ();
|
|
||||||
while(<>) {
|
|
||||||
chomp;
|
|
||||||
s/\s+/ /g;
|
|
||||||
s/^\s+//;
|
|
||||||
s/\s+$//;
|
|
||||||
$package = $1 if !$package && /^package (\S+)$/;
|
|
||||||
my $nonblock = /^\/\/sysnb /;
|
|
||||||
next if !/^\/\/sys / && !$nonblock;
|
|
||||||
|
|
||||||
# Line must be of the form
|
|
||||||
# func Open(path string, mode int, perm int) (fd int, err error)
|
|
||||||
# Split into name, in params, out params.
|
|
||||||
if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$/) {
|
|
||||||
print STDERR "$ARGV:$.: malformed //sys declaration\n";
|
|
||||||
$errors = 1;
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
my ($nb, $func, $in, $out, $modname, $sysname) = ($1, $2, $3, $4, $5, $6);
|
|
||||||
|
|
||||||
# Split argument lists on comma.
|
|
||||||
my @in = parseparamlist($in);
|
|
||||||
my @out = parseparamlist($out);
|
|
||||||
|
|
||||||
# So file name.
|
|
||||||
if($modname eq "") {
|
|
||||||
$modname = "libc";
|
|
||||||
}
|
|
||||||
|
|
||||||
# System call name.
|
|
||||||
if($sysname eq "") {
|
|
||||||
$sysname = "$func";
|
|
||||||
}
|
|
||||||
|
|
||||||
# System call pointer variable name.
|
|
||||||
my $sysvarname = "proc$sysname";
|
|
||||||
|
|
||||||
my $strconvfunc = "BytePtrFromString";
|
|
||||||
my $strconvtype = "*byte";
|
|
||||||
|
|
||||||
$sysname =~ y/A-Z/a-z/; # All libc functions are lowercase.
|
|
||||||
|
|
||||||
# Runtime import of function to allow cross-platform builds.
|
|
||||||
$dynimports .= "//go:cgo_import_dynamic libc_${sysname} ${sysname} \"$modname.so\"\n";
|
|
||||||
# Link symbol to proc address variable.
|
|
||||||
$linknames .= "//go:linkname ${sysvarname} libc_${sysname}\n";
|
|
||||||
# Library proc address variable.
|
|
||||||
push @vars, $sysvarname;
|
|
||||||
|
|
||||||
# Go function header.
|
|
||||||
$out = join(', ', @out);
|
|
||||||
if($out ne "") {
|
|
||||||
$out = " ($out)";
|
|
||||||
}
|
|
||||||
if($text ne "") {
|
|
||||||
$text .= "\n"
|
|
||||||
}
|
|
||||||
$text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out;
|
|
||||||
|
|
||||||
# Check if err return available
|
|
||||||
my $errvar = "";
|
|
||||||
foreach my $p (@out) {
|
|
||||||
my ($name, $type) = parseparam($p);
|
|
||||||
if($type eq "error") {
|
|
||||||
$errvar = $name;
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Prepare arguments to Syscall.
|
|
||||||
my @args = ();
|
|
||||||
my @uses = ();
|
|
||||||
my $n = 0;
|
|
||||||
foreach my $p (@in) {
|
|
||||||
my ($name, $type) = parseparam($p);
|
|
||||||
if($type =~ /^\*/) {
|
|
||||||
push @args, "uintptr(unsafe.Pointer($name))";
|
|
||||||
} elsif($type eq "string" && $errvar ne "") {
|
|
||||||
$text .= "\tvar _p$n $strconvtype\n";
|
|
||||||
$text .= "\t_p$n, $errvar = $strconvfunc($name)\n";
|
|
||||||
$text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n";
|
|
||||||
push @args, "uintptr(unsafe.Pointer(_p$n))";
|
|
||||||
push @uses, "use(unsafe.Pointer(_p$n))";
|
|
||||||
$n++;
|
|
||||||
} elsif($type eq "string") {
|
|
||||||
print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n";
|
|
||||||
$text .= "\tvar _p$n $strconvtype\n";
|
|
||||||
$text .= "\t_p$n, _ = $strconvfunc($name)\n";
|
|
||||||
push @args, "uintptr(unsafe.Pointer(_p$n))";
|
|
||||||
push @uses, "use(unsafe.Pointer(_p$n))";
|
|
||||||
$n++;
|
|
||||||
} elsif($type =~ /^\[\](.*)/) {
|
|
||||||
# Convert slice into pointer, length.
|
|
||||||
# Have to be careful not to take address of &a[0] if len == 0:
|
|
||||||
# pass nil in that case.
|
|
||||||
$text .= "\tvar _p$n *$1\n";
|
|
||||||
$text .= "\tif len($name) > 0 {\n\t\t_p$n = \&$name\[0]\n\t}\n";
|
|
||||||
push @args, "uintptr(unsafe.Pointer(_p$n))", "uintptr(len($name))";
|
|
||||||
$n++;
|
|
||||||
} elsif($type eq "int64" && $_32bit ne "") {
|
|
||||||
if($_32bit eq "big-endian") {
|
|
||||||
push @args, "uintptr($name >> 32)", "uintptr($name)";
|
|
||||||
} else {
|
|
||||||
push @args, "uintptr($name)", "uintptr($name >> 32)";
|
|
||||||
}
|
|
||||||
} elsif($type eq "bool") {
|
|
||||||
$text .= "\tvar _p$n uint32\n";
|
|
||||||
$text .= "\tif $name {\n\t\t_p$n = 1\n\t} else {\n\t\t_p$n = 0\n\t}\n";
|
|
||||||
push @args, "uintptr(_p$n)";
|
|
||||||
$n++;
|
|
||||||
} else {
|
|
||||||
push @args, "uintptr($name)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
my $nargs = @args;
|
|
||||||
|
|
||||||
# Determine which form to use; pad args with zeros.
|
|
||||||
my $asm = "sysvicall6";
|
|
||||||
if ($nonblock) {
|
|
||||||
$asm = "rawSysvicall6";
|
|
||||||
}
|
|
||||||
if(@args <= 6) {
|
|
||||||
while(@args < 6) {
|
|
||||||
push @args, "0";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
print STDERR "$ARGV:$.: too many arguments to system call\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
# Actual call.
|
|
||||||
my $args = join(', ', @args);
|
|
||||||
my $call = "$asm(uintptr(unsafe.Pointer(&$sysvarname)), $nargs, $args)";
|
|
||||||
|
|
||||||
# Assign return values.
|
|
||||||
my $body = "";
|
|
||||||
my $failexpr = "";
|
|
||||||
my @ret = ("_", "_", "_");
|
|
||||||
my @pout= ();
|
|
||||||
my $do_errno = 0;
|
|
||||||
for(my $i=0; $i<@out; $i++) {
|
|
||||||
my $p = $out[$i];
|
|
||||||
my ($name, $type) = parseparam($p);
|
|
||||||
my $reg = "";
|
|
||||||
if($name eq "err") {
|
|
||||||
$reg = "e1";
|
|
||||||
$ret[2] = $reg;
|
|
||||||
$do_errno = 1;
|
|
||||||
} else {
|
|
||||||
$reg = sprintf("r%d", $i);
|
|
||||||
$ret[$i] = $reg;
|
|
||||||
}
|
|
||||||
if($type eq "bool") {
|
|
||||||
$reg = "$reg != 0";
|
|
||||||
}
|
|
||||||
if($type eq "int64" && $_32bit ne "") {
|
|
||||||
# 64-bit number in r1:r0 or r0:r1.
|
|
||||||
if($i+2 > @out) {
|
|
||||||
print STDERR "$ARGV:$.: not enough registers for int64 return\n";
|
|
||||||
}
|
|
||||||
if($_32bit eq "big-endian") {
|
|
||||||
$reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1);
|
|
||||||
} else {
|
|
||||||
$reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i);
|
|
||||||
}
|
|
||||||
$ret[$i] = sprintf("r%d", $i);
|
|
||||||
$ret[$i+1] = sprintf("r%d", $i+1);
|
|
||||||
}
|
|
||||||
if($reg ne "e1") {
|
|
||||||
$body .= "\t$name = $type($reg)\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") {
|
|
||||||
$text .= "\t$call\n";
|
|
||||||
} else {
|
|
||||||
$text .= "\t$ret[0], $ret[1], $ret[2] := $call\n";
|
|
||||||
}
|
|
||||||
foreach my $use (@uses) {
|
|
||||||
$text .= "\t$use\n";
|
|
||||||
}
|
|
||||||
$text .= $body;
|
|
||||||
|
|
||||||
if ($do_errno) {
|
|
||||||
$text .= "\tif e1 != 0 {\n";
|
|
||||||
$text .= "\t\terr = e1\n";
|
|
||||||
$text .= "\t}\n";
|
|
||||||
}
|
|
||||||
$text .= "\treturn\n";
|
|
||||||
$text .= "}\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if($errors) {
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
// $cmdline
|
|
||||||
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
|
|
||||||
|
|
||||||
// +build $ENV{'GOARCH'},$ENV{'GOOS'}
|
|
||||||
|
|
||||||
package $package
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
print "import \"golang.org/x/sys/unix\"\n" if $package ne "unix";
|
|
||||||
|
|
||||||
my $vardecls = "\t" . join(",\n\t", @vars);
|
|
||||||
$vardecls .= " syscallFunc";
|
|
||||||
|
|
||||||
chomp($_=<<EOF);
|
|
||||||
|
|
||||||
$dynimports
|
|
||||||
$linknames
|
|
||||||
var (
|
|
||||||
$vardecls
|
|
||||||
)
|
|
||||||
|
|
||||||
$text
|
|
||||||
EOF
|
|
||||||
print $_;
|
|
||||||
exit 0;
|
|
264
vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl
generated
vendored
264
vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl
generated
vendored
@ -1,264 +0,0 @@
|
|||||||
#!/usr/bin/env perl
|
|
||||||
|
|
||||||
# Copyright 2011 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.
|
|
||||||
|
|
||||||
#
|
|
||||||
# Parse the header files for OpenBSD and generate a Go usable sysctl MIB.
|
|
||||||
#
|
|
||||||
# Build a MIB with each entry being an array containing the level, type and
|
|
||||||
# a hash that will contain additional entries if the current entry is a node.
|
|
||||||
# We then walk this MIB and create a flattened sysctl name to OID hash.
|
|
||||||
#
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
|
|
||||||
print STDERR "GOARCH or GOOS not defined in environment\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $debug = 0;
|
|
||||||
my %ctls = ();
|
|
||||||
|
|
||||||
my @headers = qw (
|
|
||||||
sys/sysctl.h
|
|
||||||
sys/socket.h
|
|
||||||
sys/tty.h
|
|
||||||
sys/malloc.h
|
|
||||||
sys/mount.h
|
|
||||||
sys/namei.h
|
|
||||||
sys/sem.h
|
|
||||||
sys/shm.h
|
|
||||||
sys/vmmeter.h
|
|
||||||
uvm/uvm_param.h
|
|
||||||
uvm/uvm_swap_encrypt.h
|
|
||||||
ddb/db_var.h
|
|
||||||
net/if.h
|
|
||||||
net/if_pfsync.h
|
|
||||||
net/pipex.h
|
|
||||||
netinet/in.h
|
|
||||||
netinet/icmp_var.h
|
|
||||||
netinet/igmp_var.h
|
|
||||||
netinet/ip_ah.h
|
|
||||||
netinet/ip_carp.h
|
|
||||||
netinet/ip_divert.h
|
|
||||||
netinet/ip_esp.h
|
|
||||||
netinet/ip_ether.h
|
|
||||||
netinet/ip_gre.h
|
|
||||||
netinet/ip_ipcomp.h
|
|
||||||
netinet/ip_ipip.h
|
|
||||||
netinet/pim_var.h
|
|
||||||
netinet/tcp_var.h
|
|
||||||
netinet/udp_var.h
|
|
||||||
netinet6/in6.h
|
|
||||||
netinet6/ip6_divert.h
|
|
||||||
netinet6/pim6_var.h
|
|
||||||
netinet/icmp6.h
|
|
||||||
netmpls/mpls.h
|
|
||||||
);
|
|
||||||
|
|
||||||
my @ctls = qw (
|
|
||||||
kern
|
|
||||||
vm
|
|
||||||
fs
|
|
||||||
net
|
|
||||||
#debug # Special handling required
|
|
||||||
hw
|
|
||||||
#machdep # Arch specific
|
|
||||||
user
|
|
||||||
ddb
|
|
||||||
#vfs # Special handling required
|
|
||||||
fs.posix
|
|
||||||
kern.forkstat
|
|
||||||
kern.intrcnt
|
|
||||||
kern.malloc
|
|
||||||
kern.nchstats
|
|
||||||
kern.seminfo
|
|
||||||
kern.shminfo
|
|
||||||
kern.timecounter
|
|
||||||
kern.tty
|
|
||||||
kern.watchdog
|
|
||||||
net.bpf
|
|
||||||
net.ifq
|
|
||||||
net.inet
|
|
||||||
net.inet.ah
|
|
||||||
net.inet.carp
|
|
||||||
net.inet.divert
|
|
||||||
net.inet.esp
|
|
||||||
net.inet.etherip
|
|
||||||
net.inet.gre
|
|
||||||
net.inet.icmp
|
|
||||||
net.inet.igmp
|
|
||||||
net.inet.ip
|
|
||||||
net.inet.ip.ifq
|
|
||||||
net.inet.ipcomp
|
|
||||||
net.inet.ipip
|
|
||||||
net.inet.mobileip
|
|
||||||
net.inet.pfsync
|
|
||||||
net.inet.pim
|
|
||||||
net.inet.tcp
|
|
||||||
net.inet.udp
|
|
||||||
net.inet6
|
|
||||||
net.inet6.divert
|
|
||||||
net.inet6.ip6
|
|
||||||
net.inet6.icmp6
|
|
||||||
net.inet6.pim6
|
|
||||||
net.inet6.tcp6
|
|
||||||
net.inet6.udp6
|
|
||||||
net.mpls
|
|
||||||
net.mpls.ifq
|
|
||||||
net.key
|
|
||||||
net.pflow
|
|
||||||
net.pfsync
|
|
||||||
net.pipex
|
|
||||||
net.rt
|
|
||||||
vm.swapencrypt
|
|
||||||
#vfsgenctl # Special handling required
|
|
||||||
);
|
|
||||||
|
|
||||||
# Node name "fixups"
|
|
||||||
my %ctl_map = (
|
|
||||||
"ipproto" => "net.inet",
|
|
||||||
"net.inet.ipproto" => "net.inet",
|
|
||||||
"net.inet6.ipv6proto" => "net.inet6",
|
|
||||||
"net.inet6.ipv6" => "net.inet6.ip6",
|
|
||||||
"net.inet.icmpv6" => "net.inet6.icmp6",
|
|
||||||
"net.inet6.divert6" => "net.inet6.divert",
|
|
||||||
"net.inet6.tcp6" => "net.inet.tcp",
|
|
||||||
"net.inet6.udp6" => "net.inet.udp",
|
|
||||||
"mpls" => "net.mpls",
|
|
||||||
"swpenc" => "vm.swapencrypt"
|
|
||||||
);
|
|
||||||
|
|
||||||
# Node mappings
|
|
||||||
my %node_map = (
|
|
||||||
"net.inet.ip.ifq" => "net.ifq",
|
|
||||||
"net.inet.pfsync" => "net.pfsync",
|
|
||||||
"net.mpls.ifq" => "net.ifq"
|
|
||||||
);
|
|
||||||
|
|
||||||
my $ctlname;
|
|
||||||
my %mib = ();
|
|
||||||
my %sysctl = ();
|
|
||||||
my $node;
|
|
||||||
|
|
||||||
sub debug() {
|
|
||||||
print STDERR "$_[0]\n" if $debug;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Walk the MIB and build a sysctl name to OID mapping.
|
|
||||||
sub build_sysctl() {
|
|
||||||
my ($node, $name, $oid) = @_;
|
|
||||||
my %node = %{$node};
|
|
||||||
my @oid = @{$oid};
|
|
||||||
|
|
||||||
foreach my $key (sort keys %node) {
|
|
||||||
my @node = @{$node{$key}};
|
|
||||||
my $nodename = $name.($name ne '' ? '.' : '').$key;
|
|
||||||
my @nodeoid = (@oid, $node[0]);
|
|
||||||
if ($node[1] eq 'CTLTYPE_NODE') {
|
|
||||||
if (exists $node_map{$nodename}) {
|
|
||||||
$node = \%mib;
|
|
||||||
$ctlname = $node_map{$nodename};
|
|
||||||
foreach my $part (split /\./, $ctlname) {
|
|
||||||
$node = \%{@{$$node{$part}}[2]};
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$node = $node[2];
|
|
||||||
}
|
|
||||||
&build_sysctl($node, $nodename, \@nodeoid);
|
|
||||||
} elsif ($node[1] ne '') {
|
|
||||||
$sysctl{$nodename} = \@nodeoid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach my $ctl (@ctls) {
|
|
||||||
$ctls{$ctl} = $ctl;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Build MIB
|
|
||||||
foreach my $header (@headers) {
|
|
||||||
&debug("Processing $header...");
|
|
||||||
open HEADER, "/usr/include/$header" ||
|
|
||||||
print STDERR "Failed to open $header\n";
|
|
||||||
while (<HEADER>) {
|
|
||||||
if ($_ =~ /^#define\s+(CTL_NAMES)\s+{/ ||
|
|
||||||
$_ =~ /^#define\s+(CTL_(.*)_NAMES)\s+{/ ||
|
|
||||||
$_ =~ /^#define\s+((.*)CTL_NAMES)\s+{/) {
|
|
||||||
if ($1 eq 'CTL_NAMES') {
|
|
||||||
# Top level.
|
|
||||||
$node = \%mib;
|
|
||||||
} else {
|
|
||||||
# Node.
|
|
||||||
my $nodename = lc($2);
|
|
||||||
if ($header =~ /^netinet\//) {
|
|
||||||
$ctlname = "net.inet.$nodename";
|
|
||||||
} elsif ($header =~ /^netinet6\//) {
|
|
||||||
$ctlname = "net.inet6.$nodename";
|
|
||||||
} elsif ($header =~ /^net\//) {
|
|
||||||
$ctlname = "net.$nodename";
|
|
||||||
} else {
|
|
||||||
$ctlname = "$nodename";
|
|
||||||
$ctlname =~ s/^(fs|net|kern)_/$1\./;
|
|
||||||
}
|
|
||||||
if (exists $ctl_map{$ctlname}) {
|
|
||||||
$ctlname = $ctl_map{$ctlname};
|
|
||||||
}
|
|
||||||
if (not exists $ctls{$ctlname}) {
|
|
||||||
&debug("Ignoring $ctlname...");
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Walk down from the top of the MIB.
|
|
||||||
$node = \%mib;
|
|
||||||
foreach my $part (split /\./, $ctlname) {
|
|
||||||
if (not exists $$node{$part}) {
|
|
||||||
&debug("Missing node $part");
|
|
||||||
$$node{$part} = [ 0, '', {} ];
|
|
||||||
}
|
|
||||||
$node = \%{@{$$node{$part}}[2]};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Populate current node with entries.
|
|
||||||
my $i = -1;
|
|
||||||
while (defined($_) && $_ !~ /^}/) {
|
|
||||||
$_ = <HEADER>;
|
|
||||||
$i++ if $_ =~ /{.*}/;
|
|
||||||
next if $_ !~ /{\s+"(\w+)",\s+(CTLTYPE_[A-Z]+)\s+}/;
|
|
||||||
$$node{$1} = [ $i, $2, {} ];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close HEADER;
|
|
||||||
}
|
|
||||||
|
|
||||||
&build_sysctl(\%mib, "", []);
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
// mksysctl_openbsd.pl
|
|
||||||
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
|
|
||||||
|
|
||||||
// +build $ENV{'GOARCH'},$ENV{'GOOS'}
|
|
||||||
|
|
||||||
package unix;
|
|
||||||
|
|
||||||
type mibentry struct {
|
|
||||||
ctlname string
|
|
||||||
ctloid []_C_int
|
|
||||||
}
|
|
||||||
|
|
||||||
var sysctlMib = []mibentry {
|
|
||||||
EOF
|
|
||||||
|
|
||||||
foreach my $name (sort keys %sysctl) {
|
|
||||||
my @oid = @{$sysctl{$name}};
|
|
||||||
print "\t{ \"$name\", []_C_int{ ", join(', ', @oid), " } }, \n";
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
}
|
|
||||||
EOF
|
|
39
vendor/golang.org/x/sys/unix/mksysnum_darwin.pl
generated
vendored
39
vendor/golang.org/x/sys/unix/mksysnum_darwin.pl
generated
vendored
@ -1,39 +0,0 @@
|
|||||||
#!/usr/bin/env perl
|
|
||||||
# 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 system call table for Darwin from sys/syscall.h
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
|
|
||||||
print STDERR "GOARCH or GOOS not defined in environment\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $command = "mksysnum_darwin.pl " . join(' ', @ARGV);
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
// $command
|
|
||||||
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
|
|
||||||
|
|
||||||
// +build $ENV{'GOARCH'},$ENV{'GOOS'}
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
EOF
|
|
||||||
|
|
||||||
while(<>){
|
|
||||||
if(/^#define\s+SYS_(\w+)\s+([0-9]+)/){
|
|
||||||
my $name = $1;
|
|
||||||
my $num = $2;
|
|
||||||
$name =~ y/a-z/A-Z/;
|
|
||||||
print " SYS_$name = $num;"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
)
|
|
||||||
EOF
|
|
50
vendor/golang.org/x/sys/unix/mksysnum_dragonfly.pl
generated
vendored
50
vendor/golang.org/x/sys/unix/mksysnum_dragonfly.pl
generated
vendored
@ -1,50 +0,0 @@
|
|||||||
#!/usr/bin/env perl
|
|
||||||
# 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 system call table for DragonFly from master list
|
|
||||||
# (for example, /usr/src/sys/kern/syscalls.master).
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
|
|
||||||
print STDERR "GOARCH or GOOS not defined in environment\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $command = "mksysnum_dragonfly.pl " . join(' ', @ARGV);
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
// $command
|
|
||||||
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
|
|
||||||
|
|
||||||
// +build $ENV{'GOARCH'},$ENV{'GOOS'}
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
EOF
|
|
||||||
|
|
||||||
while(<>){
|
|
||||||
if(/^([0-9]+)\s+STD\s+({ \S+\s+(\w+).*)$/){
|
|
||||||
my $num = $1;
|
|
||||||
my $proto = $2;
|
|
||||||
my $name = "SYS_$3";
|
|
||||||
$name =~ y/a-z/A-Z/;
|
|
||||||
|
|
||||||
# There are multiple entries for enosys and nosys, so comment them out.
|
|
||||||
if($name =~ /^SYS_E?NOSYS$/){
|
|
||||||
$name = "// $name";
|
|
||||||
}
|
|
||||||
if($name eq 'SYS_SYS_EXIT'){
|
|
||||||
$name = 'SYS_EXIT';
|
|
||||||
}
|
|
||||||
|
|
||||||
print " $name = $num; // $proto\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
)
|
|
||||||
EOF
|
|
63
vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl
generated
vendored
63
vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl
generated
vendored
@ -1,63 +0,0 @@
|
|||||||
#!/usr/bin/env perl
|
|
||||||
# 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 system call table for FreeBSD from master list
|
|
||||||
# (for example, /usr/src/sys/kern/syscalls.master).
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
|
|
||||||
print STDERR "GOARCH or GOOS not defined in environment\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $command = "mksysnum_freebsd.pl " . join(' ', @ARGV);
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
// $command
|
|
||||||
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
|
|
||||||
|
|
||||||
// +build $ENV{'GOARCH'},$ENV{'GOOS'}
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
EOF
|
|
||||||
|
|
||||||
while(<>){
|
|
||||||
if(/^([0-9]+)\s+\S+\s+STD\s+({ \S+\s+(\w+).*)$/){
|
|
||||||
my $num = $1;
|
|
||||||
my $proto = $2;
|
|
||||||
my $name = "SYS_$3";
|
|
||||||
$name =~ y/a-z/A-Z/;
|
|
||||||
|
|
||||||
# There are multiple entries for enosys and nosys, so comment them out.
|
|
||||||
if($name =~ /^SYS_E?NOSYS$/){
|
|
||||||
$name = "// $name";
|
|
||||||
}
|
|
||||||
if($name eq 'SYS_SYS_EXIT'){
|
|
||||||
$name = 'SYS_EXIT';
|
|
||||||
}
|
|
||||||
if($name =~ /^SYS_CAP_+/ || $name =~ /^SYS___CAP_+/){
|
|
||||||
next
|
|
||||||
}
|
|
||||||
|
|
||||||
print " $name = $num; // $proto\n";
|
|
||||||
|
|
||||||
# We keep Capsicum syscall numbers for FreeBSD
|
|
||||||
# 9-STABLE here because we are not sure whether they
|
|
||||||
# are mature and stable.
|
|
||||||
if($num == 513){
|
|
||||||
print " SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); }\n";
|
|
||||||
print " SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \\\n";
|
|
||||||
print " SYS_CAP_ENTER = 516 // { int cap_enter(void); }\n";
|
|
||||||
print " SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
)
|
|
||||||
EOF
|
|
58
vendor/golang.org/x/sys/unix/mksysnum_linux.pl
generated
vendored
58
vendor/golang.org/x/sys/unix/mksysnum_linux.pl
generated
vendored
@ -1,58 +0,0 @@
|
|||||||
#!/usr/bin/env perl
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
|
|
||||||
print STDERR "GOARCH or GOOS not defined in environment\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $command = "mksysnum_linux.pl ". join(' ', @ARGV);
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
// $command
|
|
||||||
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
|
|
||||||
|
|
||||||
// +build $ENV{'GOARCH'},$ENV{'GOOS'}
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const(
|
|
||||||
EOF
|
|
||||||
|
|
||||||
sub fmt {
|
|
||||||
my ($name, $num) = @_;
|
|
||||||
if($num > 999){
|
|
||||||
# ignore deprecated syscalls that are no longer implemented
|
|
||||||
# https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/asm-generic/unistd.h?id=refs/heads/master#n716
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$name =~ y/a-z/A-Z/;
|
|
||||||
print " SYS_$name = $num;\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
my $prev;
|
|
||||||
open(GCC, "gcc -E -dD $ARGV[0] |") || die "can't run gcc";
|
|
||||||
while(<GCC>){
|
|
||||||
if(/^#define __NR_syscalls\s+/) {
|
|
||||||
# ignore redefinitions of __NR_syscalls
|
|
||||||
}
|
|
||||||
elsif(/^#define __NR_(\w+)\s+([0-9]+)/){
|
|
||||||
$prev = $2;
|
|
||||||
fmt($1, $2);
|
|
||||||
}
|
|
||||||
elsif(/^#define __NR3264_(\w+)\s+([0-9]+)/){
|
|
||||||
$prev = $2;
|
|
||||||
fmt($1, $2);
|
|
||||||
}
|
|
||||||
elsif(/^#define __NR_(\w+)\s+\(\w+\+\s*([0-9]+)\)/){
|
|
||||||
fmt($1, $prev+$2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
)
|
|
||||||
EOF
|
|
58
vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl
generated
vendored
58
vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl
generated
vendored
@ -1,58 +0,0 @@
|
|||||||
#!/usr/bin/env perl
|
|
||||||
# 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 system call table for OpenBSD from master list
|
|
||||||
# (for example, /usr/src/sys/kern/syscalls.master).
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
|
|
||||||
print STDERR "GOARCH or GOOS not defined in environment\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $command = "mksysnum_netbsd.pl " . join(' ', @ARGV);
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
// $command
|
|
||||||
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
|
|
||||||
|
|
||||||
// +build $ENV{'GOARCH'},$ENV{'GOOS'}
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
EOF
|
|
||||||
|
|
||||||
my $line = '';
|
|
||||||
while(<>){
|
|
||||||
if($line =~ /^(.*)\\$/) {
|
|
||||||
# Handle continuation
|
|
||||||
$line = $1;
|
|
||||||
$_ =~ s/^\s+//;
|
|
||||||
$line .= $_;
|
|
||||||
} else {
|
|
||||||
# New line
|
|
||||||
$line = $_;
|
|
||||||
}
|
|
||||||
next if $line =~ /\\$/;
|
|
||||||
if($line =~ /^([0-9]+)\s+((STD)|(NOERR))\s+(RUMP\s+)?({\s+\S+\s*\*?\s*\|(\S+)\|(\S*)\|(\w+).*\s+})(\s+(\S+))?$/) {
|
|
||||||
my $num = $1;
|
|
||||||
my $proto = $6;
|
|
||||||
my $compat = $8;
|
|
||||||
my $name = "$7_$9";
|
|
||||||
|
|
||||||
$name = "$7_$11" if $11 ne '';
|
|
||||||
$name =~ y/a-z/A-Z/;
|
|
||||||
|
|
||||||
if($compat eq '' || $compat eq '30' || $compat eq '50') {
|
|
||||||
print " $name = $num; // $proto\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
)
|
|
||||||
EOF
|
|
50
vendor/golang.org/x/sys/unix/mksysnum_openbsd.pl
generated
vendored
50
vendor/golang.org/x/sys/unix/mksysnum_openbsd.pl
generated
vendored
@ -1,50 +0,0 @@
|
|||||||
#!/usr/bin/env perl
|
|
||||||
# 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 system call table for OpenBSD from master list
|
|
||||||
# (for example, /usr/src/sys/kern/syscalls.master).
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
|
|
||||||
print STDERR "GOARCH or GOOS not defined in environment\n";
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $command = "mksysnum_openbsd.pl " . join(' ', @ARGV);
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
// $command
|
|
||||||
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
|
|
||||||
|
|
||||||
// +build $ENV{'GOARCH'},$ENV{'GOOS'}
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
EOF
|
|
||||||
|
|
||||||
while(<>){
|
|
||||||
if(/^([0-9]+)\s+STD\s+(NOLOCK\s+)?({ \S+\s+\*?(\w+).*)$/){
|
|
||||||
my $num = $1;
|
|
||||||
my $proto = $3;
|
|
||||||
my $name = $4;
|
|
||||||
$name =~ y/a-z/A-Z/;
|
|
||||||
|
|
||||||
# There are multiple entries for enosys and nosys, so comment them out.
|
|
||||||
if($name =~ /^SYS_E?NOSYS$/){
|
|
||||||
$name = "// $name";
|
|
||||||
}
|
|
||||||
if($name eq 'SYS_SYS_EXIT'){
|
|
||||||
$name = 'SYS_EXIT';
|
|
||||||
}
|
|
||||||
|
|
||||||
print " $name = $num; // $proto\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print <<EOF;
|
|
||||||
)
|
|
||||||
EOF
|
|
30
vendor/golang.org/x/sys/unix/race.go
generated
vendored
30
vendor/golang.org/x/sys/unix/race.go
generated
vendored
@ -1,30 +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 darwin,race linux,race freebsd,race
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"runtime"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
const raceenabled = true
|
|
||||||
|
|
||||||
func raceAcquire(addr unsafe.Pointer) {
|
|
||||||
runtime.RaceAcquire(addr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func raceReleaseMerge(addr unsafe.Pointer) {
|
|
||||||
runtime.RaceReleaseMerge(addr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func raceReadRange(addr unsafe.Pointer, len int) {
|
|
||||||
runtime.RaceReadRange(addr, len)
|
|
||||||
}
|
|
||||||
|
|
||||||
func raceWriteRange(addr unsafe.Pointer, len int) {
|
|
||||||
runtime.RaceWriteRange(addr, len)
|
|
||||||
}
|
|
25
vendor/golang.org/x/sys/unix/race0.go
generated
vendored
25
vendor/golang.org/x/sys/unix/race0.go
generated
vendored
@ -1,25 +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 darwin,!race linux,!race freebsd,!race netbsd openbsd solaris dragonfly
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
const raceenabled = false
|
|
||||||
|
|
||||||
func raceAcquire(addr unsafe.Pointer) {
|
|
||||||
}
|
|
||||||
|
|
||||||
func raceReleaseMerge(addr unsafe.Pointer) {
|
|
||||||
}
|
|
||||||
|
|
||||||
func raceReadRange(addr unsafe.Pointer, len int) {
|
|
||||||
}
|
|
||||||
|
|
||||||
func raceWriteRange(addr unsafe.Pointer, len int) {
|
|
||||||
}
|
|
36
vendor/golang.org/x/sys/unix/sockcmsg_linux.go
generated
vendored
36
vendor/golang.org/x/sys/unix/sockcmsg_linux.go
generated
vendored
@ -1,36 +0,0 @@
|
|||||||
// Copyright 2011 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.
|
|
||||||
|
|
||||||
// Socket control messages
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import "unsafe"
|
|
||||||
|
|
||||||
// UnixCredentials encodes credentials into a socket control message
|
|
||||||
// for sending to another process. This can be used for
|
|
||||||
// authentication.
|
|
||||||
func UnixCredentials(ucred *Ucred) []byte {
|
|
||||||
b := make([]byte, CmsgSpace(SizeofUcred))
|
|
||||||
h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
|
|
||||||
h.Level = SOL_SOCKET
|
|
||||||
h.Type = SCM_CREDENTIALS
|
|
||||||
h.SetLen(CmsgLen(SizeofUcred))
|
|
||||||
*((*Ucred)(cmsgData(h))) = *ucred
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParseUnixCredentials decodes a socket control message that contains
|
|
||||||
// credentials in a Ucred structure. To receive such a message, the
|
|
||||||
// SO_PASSCRED option must be enabled on the socket.
|
|
||||||
func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) {
|
|
||||||
if m.Header.Level != SOL_SOCKET {
|
|
||||||
return nil, EINVAL
|
|
||||||
}
|
|
||||||
if m.Header.Type != SCM_CREDENTIALS {
|
|
||||||
return nil, EINVAL
|
|
||||||
}
|
|
||||||
ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))
|
|
||||||
return &ucred, nil
|
|
||||||
}
|
|
103
vendor/golang.org/x/sys/unix/sockcmsg_unix.go
generated
vendored
103
vendor/golang.org/x/sys/unix/sockcmsg_unix.go
generated
vendored
@ -1,103 +0,0 @@
|
|||||||
// Copyright 2011 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 darwin dragonfly freebsd linux netbsd openbsd solaris
|
|
||||||
|
|
||||||
// Socket control messages
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import "unsafe"
|
|
||||||
|
|
||||||
// Round the length of a raw sockaddr up to align it properly.
|
|
||||||
func cmsgAlignOf(salen int) int {
|
|
||||||
salign := sizeofPtr
|
|
||||||
// NOTE: It seems like 64-bit Darwin and DragonFly BSD kernels
|
|
||||||
// still require 32-bit aligned access to network subsystem.
|
|
||||||
if darwin64Bit || dragonfly64Bit {
|
|
||||||
salign = 4
|
|
||||||
}
|
|
||||||
return (salen + salign - 1) & ^(salign - 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
// CmsgLen returns the value to store in the Len field of the Cmsghdr
|
|
||||||
// structure, taking into account any necessary alignment.
|
|
||||||
func CmsgLen(datalen int) int {
|
|
||||||
return cmsgAlignOf(SizeofCmsghdr) + datalen
|
|
||||||
}
|
|
||||||
|
|
||||||
// CmsgSpace returns the number of bytes an ancillary element with
|
|
||||||
// payload of the passed data length occupies.
|
|
||||||
func CmsgSpace(datalen int) int {
|
|
||||||
return cmsgAlignOf(SizeofCmsghdr) + cmsgAlignOf(datalen)
|
|
||||||
}
|
|
||||||
|
|
||||||
func cmsgData(h *Cmsghdr) unsafe.Pointer {
|
|
||||||
return unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(SizeofCmsghdr)))
|
|
||||||
}
|
|
||||||
|
|
||||||
// SocketControlMessage represents a socket control message.
|
|
||||||
type SocketControlMessage struct {
|
|
||||||
Header Cmsghdr
|
|
||||||
Data []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParseSocketControlMessage parses b as an array of socket control
|
|
||||||
// messages.
|
|
||||||
func ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) {
|
|
||||||
var msgs []SocketControlMessage
|
|
||||||
i := 0
|
|
||||||
for i+CmsgLen(0) <= len(b) {
|
|
||||||
h, dbuf, err := socketControlMessageHeaderAndData(b[i:])
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
m := SocketControlMessage{Header: *h, Data: dbuf}
|
|
||||||
msgs = append(msgs, m)
|
|
||||||
i += cmsgAlignOf(int(h.Len))
|
|
||||||
}
|
|
||||||
return msgs, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) {
|
|
||||||
h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
|
|
||||||
if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {
|
|
||||||
return nil, nil, EINVAL
|
|
||||||
}
|
|
||||||
return h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnixRights encodes a set of open file descriptors into a socket
|
|
||||||
// control message for sending to another process.
|
|
||||||
func UnixRights(fds ...int) []byte {
|
|
||||||
datalen := len(fds) * 4
|
|
||||||
b := make([]byte, CmsgSpace(datalen))
|
|
||||||
h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
|
|
||||||
h.Level = SOL_SOCKET
|
|
||||||
h.Type = SCM_RIGHTS
|
|
||||||
h.SetLen(CmsgLen(datalen))
|
|
||||||
data := cmsgData(h)
|
|
||||||
for _, fd := range fds {
|
|
||||||
*(*int32)(data) = int32(fd)
|
|
||||||
data = unsafe.Pointer(uintptr(data) + 4)
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParseUnixRights decodes a socket control message that contains an
|
|
||||||
// integer array of open file descriptors from another process.
|
|
||||||
func ParseUnixRights(m *SocketControlMessage) ([]int, error) {
|
|
||||||
if m.Header.Level != SOL_SOCKET {
|
|
||||||
return nil, EINVAL
|
|
||||||
}
|
|
||||||
if m.Header.Type != SCM_RIGHTS {
|
|
||||||
return nil, EINVAL
|
|
||||||
}
|
|
||||||
fds := make([]int, len(m.Data)>>2)
|
|
||||||
for i, j := 0, 0; i < len(m.Data); i += 4 {
|
|
||||||
fds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i])))
|
|
||||||
j++
|
|
||||||
}
|
|
||||||
return fds, nil
|
|
||||||
}
|
|
26
vendor/golang.org/x/sys/unix/str.go
generated
vendored
26
vendor/golang.org/x/sys/unix/str.go
generated
vendored
@ -1,26 +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 darwin dragonfly freebsd linux netbsd openbsd solaris
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
func itoa(val int) string { // do it here rather than with fmt to avoid dependency
|
|
||||||
if val < 0 {
|
|
||||||
return "-" + uitoa(uint(-val))
|
|
||||||
}
|
|
||||||
return uitoa(uint(val))
|
|
||||||
}
|
|
||||||
|
|
||||||
func uitoa(val uint) string {
|
|
||||||
var buf [32]byte // big enough for int64
|
|
||||||
i := len(buf) - 1
|
|
||||||
for val >= 10 {
|
|
||||||
buf[i] = byte(val%10 + '0')
|
|
||||||
i--
|
|
||||||
val /= 10
|
|
||||||
}
|
|
||||||
buf[i] = byte(val + '0')
|
|
||||||
return string(buf[i:])
|
|
||||||
}
|
|
76
vendor/golang.org/x/sys/unix/syscall.go
generated
vendored
76
vendor/golang.org/x/sys/unix/syscall.go
generated
vendored
@ -1,76 +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 darwin dragonfly freebsd linux netbsd openbsd solaris
|
|
||||||
|
|
||||||
// Package unix contains an interface to the low-level operating system
|
|
||||||
// primitives. OS details vary depending on the underlying system, and
|
|
||||||
// by default, godoc will display OS-specific documentation for the current
|
|
||||||
// system. If you want godoc to display OS documentation for another
|
|
||||||
// system, set $GOOS and $GOARCH to the desired system. For example, if
|
|
||||||
// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS
|
|
||||||
// to freebsd and $GOARCH to arm.
|
|
||||||
// The primary use of this package is inside other packages that provide a more
|
|
||||||
// portable interface to the system, such as "os", "time" and "net". Use
|
|
||||||
// those packages rather than this one if you can.
|
|
||||||
// For details of the functions and data types in this package consult
|
|
||||||
// the manuals for the appropriate operating system.
|
|
||||||
// These calls return err == nil to indicate success; otherwise
|
|
||||||
// err represents an operating system error describing the failure and
|
|
||||||
// holds a value of type syscall.Errno.
|
|
||||||
package unix // import "golang.org/x/sys/unix"
|
|
||||||
|
|
||||||
import "unsafe"
|
|
||||||
|
|
||||||
// ByteSliceFromString returns a NUL-terminated slice of bytes
|
|
||||||
// containing the text of s. If s contains a NUL byte at any
|
|
||||||
// location, it returns (nil, EINVAL).
|
|
||||||
func ByteSliceFromString(s string) ([]byte, error) {
|
|
||||||
for i := 0; i < len(s); i++ {
|
|
||||||
if s[i] == 0 {
|
|
||||||
return nil, EINVAL
|
|
||||||
}
|
|
||||||
}
|
|
||||||
a := make([]byte, len(s)+1)
|
|
||||||
copy(a, s)
|
|
||||||
return a, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// BytePtrFromString returns a pointer to a NUL-terminated array of
|
|
||||||
// bytes containing the text of s. If s contains a NUL byte at any
|
|
||||||
// location, it returns (nil, EINVAL).
|
|
||||||
func BytePtrFromString(s string) (*byte, error) {
|
|
||||||
a, err := ByteSliceFromString(s)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return &a[0], nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Single-word zero for use when we need a valid pointer to 0 bytes.
|
|
||||||
// See mkunix.pl.
|
|
||||||
var _zero uintptr
|
|
||||||
|
|
||||||
func (ts *Timespec) Unix() (sec int64, nsec int64) {
|
|
||||||
return int64(ts.Sec), int64(ts.Nsec)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tv *Timeval) Unix() (sec int64, nsec int64) {
|
|
||||||
return int64(tv.Sec), int64(tv.Usec) * 1000
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ts *Timespec) Nano() int64 {
|
|
||||||
return int64(ts.Sec)*1e9 + int64(ts.Nsec)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tv *Timeval) Nano() int64 {
|
|
||||||
return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000
|
|
||||||
}
|
|
||||||
|
|
||||||
func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 }
|
|
||||||
|
|
||||||
// use is a no-op, but the compiler cannot see that it is.
|
|
||||||
// Calling use(p) ensures that p is kept live until that point.
|
|
||||||
//go:noescape
|
|
||||||
func use(p unsafe.Pointer)
|
|
628
vendor/golang.org/x/sys/unix/syscall_bsd.go
generated
vendored
628
vendor/golang.org/x/sys/unix/syscall_bsd.go
generated
vendored
@ -1,628 +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 darwin dragonfly freebsd netbsd openbsd
|
|
||||||
|
|
||||||
// BSD system call wrappers shared by *BSD based systems
|
|
||||||
// including OS X (Darwin) and FreeBSD. Like the other
|
|
||||||
// syscall_*.go files it is compiled as Go code but also
|
|
||||||
// used as input to mksyscall which parses the //sys
|
|
||||||
// lines and generates system call stubs.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"runtime"
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Wrapped
|
|
||||||
*/
|
|
||||||
|
|
||||||
//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error)
|
|
||||||
//sysnb setgroups(ngid int, gid *_Gid_t) (err error)
|
|
||||||
|
|
||||||
func Getgroups() (gids []int, err error) {
|
|
||||||
n, err := getgroups(0, nil)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if n == 0 {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sanity check group count. Max is 16 on BSD.
|
|
||||||
if n < 0 || n > 1000 {
|
|
||||||
return nil, EINVAL
|
|
||||||
}
|
|
||||||
|
|
||||||
a := make([]_Gid_t, n)
|
|
||||||
n, err = getgroups(n, &a[0])
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
gids = make([]int, n)
|
|
||||||
for i, v := range a[0:n] {
|
|
||||||
gids[i] = int(v)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func Setgroups(gids []int) (err error) {
|
|
||||||
if len(gids) == 0 {
|
|
||||||
return setgroups(0, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
a := make([]_Gid_t, len(gids))
|
|
||||||
for i, v := range gids {
|
|
||||||
a[i] = _Gid_t(v)
|
|
||||||
}
|
|
||||||
return setgroups(len(a), &a[0])
|
|
||||||
}
|
|
||||||
|
|
||||||
func ReadDirent(fd int, buf []byte) (n int, err error) {
|
|
||||||
// Final argument is (basep *uintptr) and the syscall doesn't take nil.
|
|
||||||
// 64 bits should be enough. (32 bits isn't even on 386). Since the
|
|
||||||
// actual system call is getdirentries64, 64 is a good guess.
|
|
||||||
// TODO(rsc): Can we use a single global basep for all calls?
|
|
||||||
var base = (*uintptr)(unsafe.Pointer(new(uint64)))
|
|
||||||
return Getdirentries(fd, buf, base)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait status is 7 bits at bottom, either 0 (exited),
|
|
||||||
// 0x7F (stopped), or a signal number that caused an exit.
|
|
||||||
// The 0x80 bit is whether there was a core dump.
|
|
||||||
// An extra number (exit code, signal causing a stop)
|
|
||||||
// is in the high bits.
|
|
||||||
|
|
||||||
type WaitStatus uint32
|
|
||||||
|
|
||||||
const (
|
|
||||||
mask = 0x7F
|
|
||||||
core = 0x80
|
|
||||||
shift = 8
|
|
||||||
|
|
||||||
exited = 0
|
|
||||||
stopped = 0x7F
|
|
||||||
)
|
|
||||||
|
|
||||||
func (w WaitStatus) Exited() bool { return w&mask == exited }
|
|
||||||
|
|
||||||
func (w WaitStatus) ExitStatus() int {
|
|
||||||
if w&mask != exited {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
return int(w >> shift)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 }
|
|
||||||
|
|
||||||
func (w WaitStatus) Signal() syscall.Signal {
|
|
||||||
sig := syscall.Signal(w & mask)
|
|
||||||
if sig == stopped || sig == 0 {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
return sig
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }
|
|
||||||
|
|
||||||
func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP }
|
|
||||||
|
|
||||||
func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP }
|
|
||||||
|
|
||||||
func (w WaitStatus) StopSignal() syscall.Signal {
|
|
||||||
if !w.Stopped() {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
return syscall.Signal(w>>shift) & 0xFF
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w WaitStatus) TrapCause() int { return -1 }
|
|
||||||
|
|
||||||
//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error)
|
|
||||||
|
|
||||||
func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
|
|
||||||
var status _C_int
|
|
||||||
wpid, err = wait4(pid, &status, options, rusage)
|
|
||||||
if wstatus != nil {
|
|
||||||
*wstatus = WaitStatus(status)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
|
|
||||||
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
|
||||||
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
|
||||||
//sysnb socket(domain int, typ int, proto int) (fd int, err error)
|
|
||||||
//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
|
|
||||||
//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
|
|
||||||
//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
|
|
||||||
//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
|
|
||||||
//sys Shutdown(s int, how int) (err error)
|
|
||||||
|
|
||||||
func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
|
||||||
if sa.Port < 0 || sa.Port > 0xFFFF {
|
|
||||||
return nil, 0, EINVAL
|
|
||||||
}
|
|
||||||
sa.raw.Len = SizeofSockaddrInet4
|
|
||||||
sa.raw.Family = AF_INET
|
|
||||||
p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
|
|
||||||
p[0] = byte(sa.Port >> 8)
|
|
||||||
p[1] = byte(sa.Port)
|
|
||||||
for i := 0; i < len(sa.Addr); i++ {
|
|
||||||
sa.raw.Addr[i] = sa.Addr[i]
|
|
||||||
}
|
|
||||||
return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
|
||||||
if sa.Port < 0 || sa.Port > 0xFFFF {
|
|
||||||
return nil, 0, EINVAL
|
|
||||||
}
|
|
||||||
sa.raw.Len = SizeofSockaddrInet6
|
|
||||||
sa.raw.Family = AF_INET6
|
|
||||||
p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
|
|
||||||
p[0] = byte(sa.Port >> 8)
|
|
||||||
p[1] = byte(sa.Port)
|
|
||||||
sa.raw.Scope_id = sa.ZoneId
|
|
||||||
for i := 0; i < len(sa.Addr); i++ {
|
|
||||||
sa.raw.Addr[i] = sa.Addr[i]
|
|
||||||
}
|
|
||||||
return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
|
||||||
name := sa.Name
|
|
||||||
n := len(name)
|
|
||||||
if n >= len(sa.raw.Path) || n == 0 {
|
|
||||||
return nil, 0, EINVAL
|
|
||||||
}
|
|
||||||
sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL
|
|
||||||
sa.raw.Family = AF_UNIX
|
|
||||||
for i := 0; i < n; i++ {
|
|
||||||
sa.raw.Path[i] = int8(name[i])
|
|
||||||
}
|
|
||||||
return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
|
||||||
if sa.Index == 0 {
|
|
||||||
return nil, 0, EINVAL
|
|
||||||
}
|
|
||||||
sa.raw.Len = sa.Len
|
|
||||||
sa.raw.Family = AF_LINK
|
|
||||||
sa.raw.Index = sa.Index
|
|
||||||
sa.raw.Type = sa.Type
|
|
||||||
sa.raw.Nlen = sa.Nlen
|
|
||||||
sa.raw.Alen = sa.Alen
|
|
||||||
sa.raw.Slen = sa.Slen
|
|
||||||
for i := 0; i < len(sa.raw.Data); i++ {
|
|
||||||
sa.raw.Data[i] = sa.Data[i]
|
|
||||||
}
|
|
||||||
return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
|
|
||||||
switch rsa.Addr.Family {
|
|
||||||
case AF_LINK:
|
|
||||||
pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa))
|
|
||||||
sa := new(SockaddrDatalink)
|
|
||||||
sa.Len = pp.Len
|
|
||||||
sa.Family = pp.Family
|
|
||||||
sa.Index = pp.Index
|
|
||||||
sa.Type = pp.Type
|
|
||||||
sa.Nlen = pp.Nlen
|
|
||||||
sa.Alen = pp.Alen
|
|
||||||
sa.Slen = pp.Slen
|
|
||||||
for i := 0; i < len(sa.Data); i++ {
|
|
||||||
sa.Data[i] = pp.Data[i]
|
|
||||||
}
|
|
||||||
return sa, nil
|
|
||||||
|
|
||||||
case AF_UNIX:
|
|
||||||
pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
|
|
||||||
if pp.Len < 2 || pp.Len > SizeofSockaddrUnix {
|
|
||||||
return nil, EINVAL
|
|
||||||
}
|
|
||||||
sa := new(SockaddrUnix)
|
|
||||||
|
|
||||||
// Some BSDs include the trailing NUL in the length, whereas
|
|
||||||
// others do not. Work around this by subtracting the leading
|
|
||||||
// family and len. The path is then scanned to see if a NUL
|
|
||||||
// terminator still exists within the length.
|
|
||||||
n := int(pp.Len) - 2 // subtract leading Family, Len
|
|
||||||
for i := 0; i < n; i++ {
|
|
||||||
if pp.Path[i] == 0 {
|
|
||||||
// found early NUL; assume Len included the NUL
|
|
||||||
// or was overestimating.
|
|
||||||
n = i
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
|
|
||||||
sa.Name = string(bytes)
|
|
||||||
return sa, nil
|
|
||||||
|
|
||||||
case AF_INET:
|
|
||||||
pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
|
|
||||||
sa := new(SockaddrInet4)
|
|
||||||
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
|
|
||||||
sa.Port = int(p[0])<<8 + int(p[1])
|
|
||||||
for i := 0; i < len(sa.Addr); i++ {
|
|
||||||
sa.Addr[i] = pp.Addr[i]
|
|
||||||
}
|
|
||||||
return sa, nil
|
|
||||||
|
|
||||||
case AF_INET6:
|
|
||||||
pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
|
|
||||||
sa := new(SockaddrInet6)
|
|
||||||
p := (*[2]byte)(unsafe.Pointer(&pp.Port))
|
|
||||||
sa.Port = int(p[0])<<8 + int(p[1])
|
|
||||||
sa.ZoneId = pp.Scope_id
|
|
||||||
for i := 0; i < len(sa.Addr); i++ {
|
|
||||||
sa.Addr[i] = pp.Addr[i]
|
|
||||||
}
|
|
||||||
return sa, nil
|
|
||||||
}
|
|
||||||
return nil, EAFNOSUPPORT
|
|
||||||
}
|
|
||||||
|
|
||||||
func Accept(fd int) (nfd int, sa Sockaddr, err error) {
|
|
||||||
var rsa RawSockaddrAny
|
|
||||||
var len _Socklen = SizeofSockaddrAny
|
|
||||||
nfd, err = accept(fd, &rsa, &len)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if runtime.GOOS == "darwin" && len == 0 {
|
|
||||||
// Accepted socket has no address.
|
|
||||||
// This is likely due to a bug in xnu kernels,
|
|
||||||
// where instead of ECONNABORTED error socket
|
|
||||||
// is accepted, but has no address.
|
|
||||||
Close(nfd)
|
|
||||||
return 0, nil, ECONNABORTED
|
|
||||||
}
|
|
||||||
sa, err = anyToSockaddr(&rsa)
|
|
||||||
if err != nil {
|
|
||||||
Close(nfd)
|
|
||||||
nfd = 0
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func Getsockname(fd int) (sa Sockaddr, err error) {
|
|
||||||
var rsa RawSockaddrAny
|
|
||||||
var len _Socklen = SizeofSockaddrAny
|
|
||||||
if err = getsockname(fd, &rsa, &len); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// TODO(jsing): DragonFly has a "bug" (see issue 3349), which should be
|
|
||||||
// reported upstream.
|
|
||||||
if runtime.GOOS == "dragonfly" && rsa.Addr.Family == AF_UNSPEC && rsa.Addr.Len == 0 {
|
|
||||||
rsa.Addr.Family = AF_UNIX
|
|
||||||
rsa.Addr.Len = SizeofSockaddrUnix
|
|
||||||
}
|
|
||||||
return anyToSockaddr(&rsa)
|
|
||||||
}
|
|
||||||
|
|
||||||
//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
|
|
||||||
|
|
||||||
func GetsockoptByte(fd, level, opt int) (value byte, err error) {
|
|
||||||
var n byte
|
|
||||||
vallen := _Socklen(1)
|
|
||||||
err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) {
|
|
||||||
vallen := _Socklen(4)
|
|
||||||
err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)
|
|
||||||
return value, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) {
|
|
||||||
var value IPMreq
|
|
||||||
vallen := _Socklen(SizeofIPMreq)
|
|
||||||
err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
|
|
||||||
return &value, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {
|
|
||||||
var value IPv6Mreq
|
|
||||||
vallen := _Socklen(SizeofIPv6Mreq)
|
|
||||||
err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
|
|
||||||
return &value, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
|
|
||||||
var value IPv6MTUInfo
|
|
||||||
vallen := _Socklen(SizeofIPv6MTUInfo)
|
|
||||||
err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
|
|
||||||
return &value, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {
|
|
||||||
var value ICMPv6Filter
|
|
||||||
vallen := _Socklen(SizeofICMPv6Filter)
|
|
||||||
err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
|
|
||||||
return &value, err
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
|
|
||||||
//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
|
|
||||||
//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
|
|
||||||
|
|
||||||
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
|
||||||
var msg Msghdr
|
|
||||||
var rsa RawSockaddrAny
|
|
||||||
msg.Name = (*byte)(unsafe.Pointer(&rsa))
|
|
||||||
msg.Namelen = uint32(SizeofSockaddrAny)
|
|
||||||
var iov Iovec
|
|
||||||
if len(p) > 0 {
|
|
||||||
iov.Base = (*byte)(unsafe.Pointer(&p[0]))
|
|
||||||
iov.SetLen(len(p))
|
|
||||||
}
|
|
||||||
var dummy byte
|
|
||||||
if len(oob) > 0 {
|
|
||||||
// receive at least one normal byte
|
|
||||||
if len(p) == 0 {
|
|
||||||
iov.Base = &dummy
|
|
||||||
iov.SetLen(1)
|
|
||||||
}
|
|
||||||
msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
|
|
||||||
msg.SetControllen(len(oob))
|
|
||||||
}
|
|
||||||
msg.Iov = &iov
|
|
||||||
msg.Iovlen = 1
|
|
||||||
if n, err = recvmsg(fd, &msg, flags); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
oobn = int(msg.Controllen)
|
|
||||||
recvflags = int(msg.Flags)
|
|
||||||
// source address is only specified if the socket is unconnected
|
|
||||||
if rsa.Addr.Family != AF_UNSPEC {
|
|
||||||
from, err = anyToSockaddr(&rsa)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
|
|
||||||
|
|
||||||
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
|
|
||||||
_, err = SendmsgN(fd, p, oob, to, flags)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
|
|
||||||
var ptr unsafe.Pointer
|
|
||||||
var salen _Socklen
|
|
||||||
if to != nil {
|
|
||||||
ptr, salen, err = to.sockaddr()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var msg Msghdr
|
|
||||||
msg.Name = (*byte)(unsafe.Pointer(ptr))
|
|
||||||
msg.Namelen = uint32(salen)
|
|
||||||
var iov Iovec
|
|
||||||
if len(p) > 0 {
|
|
||||||
iov.Base = (*byte)(unsafe.Pointer(&p[0]))
|
|
||||||
iov.SetLen(len(p))
|
|
||||||
}
|
|
||||||
var dummy byte
|
|
||||||
if len(oob) > 0 {
|
|
||||||
// send at least one normal byte
|
|
||||||
if len(p) == 0 {
|
|
||||||
iov.Base = &dummy
|
|
||||||
iov.SetLen(1)
|
|
||||||
}
|
|
||||||
msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
|
|
||||||
msg.SetControllen(len(oob))
|
|
||||||
}
|
|
||||||
msg.Iov = &iov
|
|
||||||
msg.Iovlen = 1
|
|
||||||
if n, err = sendmsg(fd, &msg, flags); err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
if len(oob) > 0 && len(p) == 0 {
|
|
||||||
n = 0
|
|
||||||
}
|
|
||||||
return n, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error)
|
|
||||||
|
|
||||||
func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) {
|
|
||||||
var change, event unsafe.Pointer
|
|
||||||
if len(changes) > 0 {
|
|
||||||
change = unsafe.Pointer(&changes[0])
|
|
||||||
}
|
|
||||||
if len(events) > 0 {
|
|
||||||
event = unsafe.Pointer(&events[0])
|
|
||||||
}
|
|
||||||
return kevent(kq, change, len(changes), event, len(events), timeout)
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
|
||||||
|
|
||||||
// sysctlmib translates name to mib number and appends any additional args.
|
|
||||||
func sysctlmib(name string, args ...int) ([]_C_int, error) {
|
|
||||||
// Translate name to mib number.
|
|
||||||
mib, err := nametomib(name)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, a := range args {
|
|
||||||
mib = append(mib, _C_int(a))
|
|
||||||
}
|
|
||||||
|
|
||||||
return mib, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Sysctl(name string) (string, error) {
|
|
||||||
return SysctlArgs(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func SysctlArgs(name string, args ...int) (string, error) {
|
|
||||||
mib, err := sysctlmib(name, args...)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find size.
|
|
||||||
n := uintptr(0)
|
|
||||||
if err := sysctl(mib, nil, &n, nil, 0); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
if n == 0 {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read into buffer of that size.
|
|
||||||
buf := make([]byte, n)
|
|
||||||
if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Throw away terminating NUL.
|
|
||||||
if n > 0 && buf[n-1] == '\x00' {
|
|
||||||
n--
|
|
||||||
}
|
|
||||||
return string(buf[0:n]), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func SysctlUint32(name string) (uint32, error) {
|
|
||||||
return SysctlUint32Args(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func SysctlUint32Args(name string, args ...int) (uint32, error) {
|
|
||||||
mib, err := sysctlmib(name, args...)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
n := uintptr(4)
|
|
||||||
buf := make([]byte, 4)
|
|
||||||
if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
if n != 4 {
|
|
||||||
return 0, EIO
|
|
||||||
}
|
|
||||||
return *(*uint32)(unsafe.Pointer(&buf[0])), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func SysctlUint64(name string, args ...int) (uint64, error) {
|
|
||||||
mib, err := sysctlmib(name, args...)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
n := uintptr(8)
|
|
||||||
buf := make([]byte, 8)
|
|
||||||
if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
if n != 8 {
|
|
||||||
return 0, EIO
|
|
||||||
}
|
|
||||||
return *(*uint64)(unsafe.Pointer(&buf[0])), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func SysctlRaw(name string, args ...int) ([]byte, error) {
|
|
||||||
mib, err := sysctlmib(name, args...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find size.
|
|
||||||
n := uintptr(0)
|
|
||||||
if err := sysctl(mib, nil, &n, nil, 0); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if n == 0 {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read into buffer of that size.
|
|
||||||
buf := make([]byte, n)
|
|
||||||
if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// The actual call may return less than the original reported required
|
|
||||||
// size so ensure we deal with that.
|
|
||||||
return buf[:n], nil
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys utimes(path string, timeval *[2]Timeval) (err error)
|
|
||||||
|
|
||||||
func Utimes(path string, tv []Timeval) error {
|
|
||||||
if tv == nil {
|
|
||||||
return utimes(path, nil)
|
|
||||||
}
|
|
||||||
if len(tv) != 2 {
|
|
||||||
return EINVAL
|
|
||||||
}
|
|
||||||
return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
|
|
||||||
}
|
|
||||||
|
|
||||||
func UtimesNano(path string, ts []Timespec) error {
|
|
||||||
if ts == nil {
|
|
||||||
return utimes(path, nil)
|
|
||||||
}
|
|
||||||
// TODO: The BSDs can do utimensat with SYS_UTIMENSAT but it
|
|
||||||
// isn't supported by darwin so this uses utimes instead
|
|
||||||
if len(ts) != 2 {
|
|
||||||
return EINVAL
|
|
||||||
}
|
|
||||||
// Not as efficient as it could be because Timespec and
|
|
||||||
// Timeval have different types in the different OSes
|
|
||||||
tv := [2]Timeval{
|
|
||||||
NsecToTimeval(TimespecToNsec(ts[0])),
|
|
||||||
NsecToTimeval(TimespecToNsec(ts[1])),
|
|
||||||
}
|
|
||||||
return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys futimes(fd int, timeval *[2]Timeval) (err error)
|
|
||||||
|
|
||||||
func Futimes(fd int, tv []Timeval) error {
|
|
||||||
if tv == nil {
|
|
||||||
return futimes(fd, nil)
|
|
||||||
}
|
|
||||||
if len(tv) != 2 {
|
|
||||||
return EINVAL
|
|
||||||
}
|
|
||||||
return futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys fcntl(fd int, cmd int, arg int) (val int, err error)
|
|
||||||
|
|
||||||
// TODO: wrap
|
|
||||||
// Acct(name nil-string) (err error)
|
|
||||||
// Gethostuuid(uuid *byte, timeout *Timespec) (err error)
|
|
||||||
// Madvise(addr *byte, len int, behav int) (err error)
|
|
||||||
// Mprotect(addr *byte, len int, prot int) (err error)
|
|
||||||
// Msync(addr *byte, len int, flags int) (err error)
|
|
||||||
// Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error)
|
|
||||||
|
|
||||||
var mapper = &mmapper{
|
|
||||||
active: make(map[*byte][]byte),
|
|
||||||
mmap: mmap,
|
|
||||||
munmap: munmap,
|
|
||||||
}
|
|
||||||
|
|
||||||
func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
|
|
||||||
return mapper.Mmap(fd, offset, length, prot, flags)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Munmap(b []byte) (err error) {
|
|
||||||
return mapper.Munmap(b)
|
|
||||||
}
|
|
511
vendor/golang.org/x/sys/unix/syscall_darwin.go
generated
vendored
511
vendor/golang.org/x/sys/unix/syscall_darwin.go
generated
vendored
@ -1,511 +0,0 @@
|
|||||||
// Copyright 2009,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.
|
|
||||||
|
|
||||||
// Darwin system calls.
|
|
||||||
// This file is compiled as ordinary Go code,
|
|
||||||
// but it is also input to mksyscall,
|
|
||||||
// which parses the //sys lines and generates system call stubs.
|
|
||||||
// Note that sometimes we use a lowercase //sys name and wrap
|
|
||||||
// it in our own nicer implementation, either here or in
|
|
||||||
// syscall_bsd.go or syscall_unix.go.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
errorspkg "errors"
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
const ImplementsGetwd = true
|
|
||||||
|
|
||||||
func Getwd() (string, error) {
|
|
||||||
buf := make([]byte, 2048)
|
|
||||||
attrs, err := getAttrList(".", attrList{CommonAttr: attrCmnFullpath}, buf, 0)
|
|
||||||
if err == nil && len(attrs) == 1 && len(attrs[0]) >= 2 {
|
|
||||||
wd := string(attrs[0])
|
|
||||||
// Sanity check that it's an absolute path and ends
|
|
||||||
// in a null byte, which we then strip.
|
|
||||||
if wd[0] == '/' && wd[len(wd)-1] == 0 {
|
|
||||||
return wd[:len(wd)-1], nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// If pkg/os/getwd.go gets ENOTSUP, it will fall back to the
|
|
||||||
// slow algorithm.
|
|
||||||
return "", ENOTSUP
|
|
||||||
}
|
|
||||||
|
|
||||||
type SockaddrDatalink struct {
|
|
||||||
Len uint8
|
|
||||||
Family uint8
|
|
||||||
Index uint16
|
|
||||||
Type uint8
|
|
||||||
Nlen uint8
|
|
||||||
Alen uint8
|
|
||||||
Slen uint8
|
|
||||||
Data [12]int8
|
|
||||||
raw RawSockaddrDatalink
|
|
||||||
}
|
|
||||||
|
|
||||||
// Translate "kern.hostname" to []_C_int{0,1,2,3}.
|
|
||||||
func nametomib(name string) (mib []_C_int, err error) {
|
|
||||||
const siz = unsafe.Sizeof(mib[0])
|
|
||||||
|
|
||||||
// NOTE(rsc): It seems strange to set the buffer to have
|
|
||||||
// size CTL_MAXNAME+2 but use only CTL_MAXNAME
|
|
||||||
// as the size. I don't know why the +2 is here, but the
|
|
||||||
// kernel uses +2 for its own implementation of this function.
|
|
||||||
// I am scared that if we don't include the +2 here, the kernel
|
|
||||||
// will silently write 2 words farther than we specify
|
|
||||||
// and we'll get memory corruption.
|
|
||||||
var buf [CTL_MAXNAME + 2]_C_int
|
|
||||||
n := uintptr(CTL_MAXNAME) * siz
|
|
||||||
|
|
||||||
p := (*byte)(unsafe.Pointer(&buf[0]))
|
|
||||||
bytes, err := ByteSliceFromString(name)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Magic sysctl: "setting" 0.3 to a string name
|
|
||||||
// lets you read back the array of integers form.
|
|
||||||
if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return buf[0 : n/siz], nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParseDirent parses up to max directory entries in buf,
|
|
||||||
// appending the names to names. It returns the number
|
|
||||||
// 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)
|
|
||||||
for max != 0 && len(buf) > 0 {
|
|
||||||
dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
|
|
||||||
if dirent.Reclen == 0 {
|
|
||||||
buf = nil
|
|
||||||
break
|
|
||||||
}
|
|
||||||
buf = buf[dirent.Reclen:]
|
|
||||||
if dirent.Ino == 0 { // File absent in directory.
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0]))
|
|
||||||
var name = string(bytes[0:dirent.Namlen])
|
|
||||||
if name == "." || name == ".." { // Useless names
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
max--
|
|
||||||
count++
|
|
||||||
names = append(names, name)
|
|
||||||
}
|
|
||||||
return origlen - len(buf), count, names
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
|
|
||||||
func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }
|
|
||||||
func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }
|
|
||||||
|
|
||||||
const (
|
|
||||||
attrBitMapCount = 5
|
|
||||||
attrCmnFullpath = 0x08000000
|
|
||||||
)
|
|
||||||
|
|
||||||
type attrList struct {
|
|
||||||
bitmapCount uint16
|
|
||||||
_ uint16
|
|
||||||
CommonAttr uint32
|
|
||||||
VolAttr uint32
|
|
||||||
DirAttr uint32
|
|
||||||
FileAttr uint32
|
|
||||||
Forkattr uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (attrs [][]byte, err error) {
|
|
||||||
if len(attrBuf) < 4 {
|
|
||||||
return nil, errorspkg.New("attrBuf too small")
|
|
||||||
}
|
|
||||||
attrList.bitmapCount = attrBitMapCount
|
|
||||||
|
|
||||||
var _p0 *byte
|
|
||||||
_p0, err = BytePtrFromString(path)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, _, e1 := Syscall6(
|
|
||||||
SYS_GETATTRLIST,
|
|
||||||
uintptr(unsafe.Pointer(_p0)),
|
|
||||||
uintptr(unsafe.Pointer(&attrList)),
|
|
||||||
uintptr(unsafe.Pointer(&attrBuf[0])),
|
|
||||||
uintptr(len(attrBuf)),
|
|
||||||
uintptr(options),
|
|
||||||
0,
|
|
||||||
)
|
|
||||||
use(unsafe.Pointer(_p0))
|
|
||||||
if e1 != 0 {
|
|
||||||
return nil, e1
|
|
||||||
}
|
|
||||||
size := *(*uint32)(unsafe.Pointer(&attrBuf[0]))
|
|
||||||
|
|
||||||
// dat is the section of attrBuf that contains valid data,
|
|
||||||
// without the 4 byte length header. All attribute offsets
|
|
||||||
// are relative to dat.
|
|
||||||
dat := attrBuf
|
|
||||||
if int(size) < len(attrBuf) {
|
|
||||||
dat = dat[:size]
|
|
||||||
}
|
|
||||||
dat = dat[4:] // remove length prefix
|
|
||||||
|
|
||||||
for i := uint32(0); int(i) < len(dat); {
|
|
||||||
header := dat[i:]
|
|
||||||
if len(header) < 8 {
|
|
||||||
return attrs, errorspkg.New("truncated attribute header")
|
|
||||||
}
|
|
||||||
datOff := *(*int32)(unsafe.Pointer(&header[0]))
|
|
||||||
attrLen := *(*uint32)(unsafe.Pointer(&header[4]))
|
|
||||||
if datOff < 0 || uint32(datOff)+attrLen > uint32(len(dat)) {
|
|
||||||
return attrs, errorspkg.New("truncated results; attrBuf too small")
|
|
||||||
}
|
|
||||||
end := uint32(datOff) + attrLen
|
|
||||||
attrs = append(attrs, dat[datOff:end])
|
|
||||||
i = end
|
|
||||||
if r := i % 4; r != 0 {
|
|
||||||
i += (4 - r)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//sysnb pipe() (r int, w int, err error)
|
|
||||||
|
|
||||||
func Pipe(p []int) (err error) {
|
|
||||||
if len(p) != 2 {
|
|
||||||
return EINVAL
|
|
||||||
}
|
|
||||||
p[0], p[1], err = pipe()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
|
|
||||||
var _p0 unsafe.Pointer
|
|
||||||
var bufsize uintptr
|
|
||||||
if len(buf) > 0 {
|
|
||||||
_p0 = unsafe.Pointer(&buf[0])
|
|
||||||
bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
|
|
||||||
}
|
|
||||||
r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(_p0), bufsize, uintptr(flags))
|
|
||||||
use(unsafe.Pointer(_p0))
|
|
||||||
n = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Wrapped
|
|
||||||
*/
|
|
||||||
|
|
||||||
//sys kill(pid int, signum int, posix int) (err error)
|
|
||||||
|
|
||||||
func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) }
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Exposed directly
|
|
||||||
*/
|
|
||||||
//sys Access(path string, mode uint32) (err error)
|
|
||||||
//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error)
|
|
||||||
//sys Chdir(path string) (err error)
|
|
||||||
//sys Chflags(path string, flags int) (err error)
|
|
||||||
//sys Chmod(path string, mode uint32) (err error)
|
|
||||||
//sys Chown(path string, uid int, gid int) (err error)
|
|
||||||
//sys Chroot(path string) (err error)
|
|
||||||
//sys Close(fd int) (err error)
|
|
||||||
//sys Dup(fd int) (nfd int, err error)
|
|
||||||
//sys Dup2(from int, to int) (err error)
|
|
||||||
//sys Exchangedata(path1 string, path2 string, options int) (err error)
|
|
||||||
//sys Exit(code int)
|
|
||||||
//sys Fchdir(fd int) (err error)
|
|
||||||
//sys Fchflags(fd int, flags int) (err error)
|
|
||||||
//sys Fchmod(fd int, mode uint32) (err error)
|
|
||||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
|
||||||
//sys Flock(fd int, how int) (err error)
|
|
||||||
//sys Fpathconf(fd int, name int) (val int, err error)
|
|
||||||
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
|
|
||||||
//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
|
|
||||||
//sys Fsync(fd int) (err error)
|
|
||||||
//sys Ftruncate(fd int, length int64) (err error)
|
|
||||||
//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64
|
|
||||||
//sys Getdtablesize() (size int)
|
|
||||||
//sysnb Getegid() (egid int)
|
|
||||||
//sysnb Geteuid() (uid int)
|
|
||||||
//sysnb Getgid() (gid int)
|
|
||||||
//sysnb Getpgid(pid int) (pgid int, err error)
|
|
||||||
//sysnb Getpgrp() (pgrp int)
|
|
||||||
//sysnb Getpid() (pid int)
|
|
||||||
//sysnb Getppid() (ppid int)
|
|
||||||
//sys Getpriority(which int, who int) (prio int, err error)
|
|
||||||
//sysnb Getrlimit(which int, lim *Rlimit) (err error)
|
|
||||||
//sysnb Getrusage(who int, rusage *Rusage) (err error)
|
|
||||||
//sysnb Getsid(pid int) (sid int, err error)
|
|
||||||
//sysnb Getuid() (uid int)
|
|
||||||
//sysnb Issetugid() (tainted bool)
|
|
||||||
//sys Kqueue() (fd int, err error)
|
|
||||||
//sys Lchown(path string, uid int, gid int) (err error)
|
|
||||||
//sys Link(path string, link string) (err error)
|
|
||||||
//sys Listen(s int, backlog int) (err error)
|
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
|
|
||||||
//sys Mkdir(path string, mode uint32) (err error)
|
|
||||||
//sys Mkfifo(path string, mode uint32) (err error)
|
|
||||||
//sys Mknod(path string, mode uint32, dev int) (err error)
|
|
||||||
//sys Mlock(b []byte) (err error)
|
|
||||||
//sys Mlockall(flags int) (err error)
|
|
||||||
//sys Mprotect(b []byte, prot int) (err error)
|
|
||||||
//sys Munlock(b []byte) (err error)
|
|
||||||
//sys Munlockall() (err error)
|
|
||||||
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
|
||||||
//sys Pathconf(path string, name int) (val int, err error)
|
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error)
|
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
|
|
||||||
//sys read(fd int, p []byte) (n int, err error)
|
|
||||||
//sys Readlink(path string, buf []byte) (n int, err error)
|
|
||||||
//sys Rename(from string, to string) (err error)
|
|
||||||
//sys Revoke(path string) (err error)
|
|
||||||
//sys Rmdir(path string) (err error)
|
|
||||||
//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
|
|
||||||
//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
|
|
||||||
//sys Setegid(egid int) (err error)
|
|
||||||
//sysnb Seteuid(euid int) (err error)
|
|
||||||
//sysnb Setgid(gid int) (err error)
|
|
||||||
//sys Setlogin(name string) (err error)
|
|
||||||
//sysnb Setpgid(pid int, pgid int) (err error)
|
|
||||||
//sys Setpriority(which int, who int, prio int) (err error)
|
|
||||||
//sys Setprivexec(flag int) (err error)
|
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error)
|
|
||||||
//sysnb Setrlimit(which int, lim *Rlimit) (err error)
|
|
||||||
//sysnb Setsid() (pid int, err error)
|
|
||||||
//sysnb Settimeofday(tp *Timeval) (err error)
|
|
||||||
//sysnb Setuid(uid int) (err error)
|
|
||||||
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
|
||||||
//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
|
|
||||||
//sys Symlink(path string, link string) (err error)
|
|
||||||
//sys Sync() (err error)
|
|
||||||
//sys Truncate(path string, length int64) (err error)
|
|
||||||
//sys Umask(newmask int) (oldmask int)
|
|
||||||
//sys Undelete(path string) (err error)
|
|
||||||
//sys Unlink(path string) (err error)
|
|
||||||
//sys Unmount(path string, flags int) (err error)
|
|
||||||
//sys write(fd int, p []byte) (n int, err error)
|
|
||||||
//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
|
|
||||||
//sys munmap(addr uintptr, length uintptr) (err error)
|
|
||||||
//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
|
|
||||||
//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Unimplemented
|
|
||||||
*/
|
|
||||||
// Profil
|
|
||||||
// Sigaction
|
|
||||||
// Sigprocmask
|
|
||||||
// Getlogin
|
|
||||||
// Sigpending
|
|
||||||
// Sigaltstack
|
|
||||||
// Ioctl
|
|
||||||
// Reboot
|
|
||||||
// Execve
|
|
||||||
// Vfork
|
|
||||||
// Sbrk
|
|
||||||
// Sstk
|
|
||||||
// Ovadvise
|
|
||||||
// Mincore
|
|
||||||
// Setitimer
|
|
||||||
// Swapon
|
|
||||||
// Select
|
|
||||||
// Sigsuspend
|
|
||||||
// Readv
|
|
||||||
// Writev
|
|
||||||
// Nfssvc
|
|
||||||
// Getfh
|
|
||||||
// Quotactl
|
|
||||||
// Mount
|
|
||||||
// Csops
|
|
||||||
// Waitid
|
|
||||||
// Add_profil
|
|
||||||
// Kdebug_trace
|
|
||||||
// Sigreturn
|
|
||||||
// Mmap
|
|
||||||
// Mlock
|
|
||||||
// Munlock
|
|
||||||
// Atsocket
|
|
||||||
// Kqueue_from_portset_np
|
|
||||||
// Kqueue_portset
|
|
||||||
// Getattrlist
|
|
||||||
// Setattrlist
|
|
||||||
// Getdirentriesattr
|
|
||||||
// Searchfs
|
|
||||||
// Delete
|
|
||||||
// Copyfile
|
|
||||||
// Poll
|
|
||||||
// Watchevent
|
|
||||||
// Waitevent
|
|
||||||
// Modwatch
|
|
||||||
// Getxattr
|
|
||||||
// Fgetxattr
|
|
||||||
// Setxattr
|
|
||||||
// Fsetxattr
|
|
||||||
// Removexattr
|
|
||||||
// Fremovexattr
|
|
||||||
// Listxattr
|
|
||||||
// Flistxattr
|
|
||||||
// Fsctl
|
|
||||||
// Initgroups
|
|
||||||
// Posix_spawn
|
|
||||||
// Nfsclnt
|
|
||||||
// Fhopen
|
|
||||||
// Minherit
|
|
||||||
// Semsys
|
|
||||||
// Msgsys
|
|
||||||
// Shmsys
|
|
||||||
// Semctl
|
|
||||||
// Semget
|
|
||||||
// Semop
|
|
||||||
// Msgctl
|
|
||||||
// Msgget
|
|
||||||
// Msgsnd
|
|
||||||
// Msgrcv
|
|
||||||
// Shmat
|
|
||||||
// Shmctl
|
|
||||||
// Shmdt
|
|
||||||
// Shmget
|
|
||||||
// Shm_open
|
|
||||||
// Shm_unlink
|
|
||||||
// Sem_open
|
|
||||||
// Sem_close
|
|
||||||
// Sem_unlink
|
|
||||||
// Sem_wait
|
|
||||||
// Sem_trywait
|
|
||||||
// Sem_post
|
|
||||||
// Sem_getvalue
|
|
||||||
// Sem_init
|
|
||||||
// Sem_destroy
|
|
||||||
// Open_extended
|
|
||||||
// Umask_extended
|
|
||||||
// Stat_extended
|
|
||||||
// Lstat_extended
|
|
||||||
// Fstat_extended
|
|
||||||
// Chmod_extended
|
|
||||||
// Fchmod_extended
|
|
||||||
// Access_extended
|
|
||||||
// Settid
|
|
||||||
// Gettid
|
|
||||||
// Setsgroups
|
|
||||||
// Getsgroups
|
|
||||||
// Setwgroups
|
|
||||||
// Getwgroups
|
|
||||||
// Mkfifo_extended
|
|
||||||
// Mkdir_extended
|
|
||||||
// Identitysvc
|
|
||||||
// Shared_region_check_np
|
|
||||||
// Shared_region_map_np
|
|
||||||
// __pthread_mutex_destroy
|
|
||||||
// __pthread_mutex_init
|
|
||||||
// __pthread_mutex_lock
|
|
||||||
// __pthread_mutex_trylock
|
|
||||||
// __pthread_mutex_unlock
|
|
||||||
// __pthread_cond_init
|
|
||||||
// __pthread_cond_destroy
|
|
||||||
// __pthread_cond_broadcast
|
|
||||||
// __pthread_cond_signal
|
|
||||||
// Setsid_with_pid
|
|
||||||
// __pthread_cond_timedwait
|
|
||||||
// Aio_fsync
|
|
||||||
// Aio_return
|
|
||||||
// Aio_suspend
|
|
||||||
// Aio_cancel
|
|
||||||
// Aio_error
|
|
||||||
// Aio_read
|
|
||||||
// Aio_write
|
|
||||||
// Lio_listio
|
|
||||||
// __pthread_cond_wait
|
|
||||||
// Iopolicysys
|
|
||||||
// Mlockall
|
|
||||||
// Munlockall
|
|
||||||
// __pthread_kill
|
|
||||||
// __pthread_sigmask
|
|
||||||
// __sigwait
|
|
||||||
// __disable_threadsignal
|
|
||||||
// __pthread_markcancel
|
|
||||||
// __pthread_canceled
|
|
||||||
// __semwait_signal
|
|
||||||
// Proc_info
|
|
||||||
// sendfile
|
|
||||||
// Stat64_extended
|
|
||||||
// Lstat64_extended
|
|
||||||
// Fstat64_extended
|
|
||||||
// __pthread_chdir
|
|
||||||
// __pthread_fchdir
|
|
||||||
// Audit
|
|
||||||
// Auditon
|
|
||||||
// Getauid
|
|
||||||
// Setauid
|
|
||||||
// Getaudit
|
|
||||||
// Setaudit
|
|
||||||
// Getaudit_addr
|
|
||||||
// Setaudit_addr
|
|
||||||
// Auditctl
|
|
||||||
// Bsdthread_create
|
|
||||||
// Bsdthread_terminate
|
|
||||||
// Stack_snapshot
|
|
||||||
// Bsdthread_register
|
|
||||||
// Workq_open
|
|
||||||
// Workq_ops
|
|
||||||
// __mac_execve
|
|
||||||
// __mac_syscall
|
|
||||||
// __mac_get_file
|
|
||||||
// __mac_set_file
|
|
||||||
// __mac_get_link
|
|
||||||
// __mac_set_link
|
|
||||||
// __mac_get_proc
|
|
||||||
// __mac_set_proc
|
|
||||||
// __mac_get_fd
|
|
||||||
// __mac_set_fd
|
|
||||||
// __mac_get_pid
|
|
||||||
// __mac_get_lcid
|
|
||||||
// __mac_get_lctx
|
|
||||||
// __mac_set_lctx
|
|
||||||
// Setlcid
|
|
||||||
// Read_nocancel
|
|
||||||
// Write_nocancel
|
|
||||||
// Open_nocancel
|
|
||||||
// Close_nocancel
|
|
||||||
// Wait4_nocancel
|
|
||||||
// Recvmsg_nocancel
|
|
||||||
// Sendmsg_nocancel
|
|
||||||
// Recvfrom_nocancel
|
|
||||||
// Accept_nocancel
|
|
||||||
// Msync_nocancel
|
|
||||||
// Fcntl_nocancel
|
|
||||||
// Select_nocancel
|
|
||||||
// Fsync_nocancel
|
|
||||||
// Connect_nocancel
|
|
||||||
// Sigsuspend_nocancel
|
|
||||||
// Readv_nocancel
|
|
||||||
// Writev_nocancel
|
|
||||||
// Sendto_nocancel
|
|
||||||
// Pread_nocancel
|
|
||||||
// Pwrite_nocancel
|
|
||||||
// Waitid_nocancel
|
|
||||||
// Poll_nocancel
|
|
||||||
// Msgsnd_nocancel
|
|
||||||
// Msgrcv_nocancel
|
|
||||||
// Sem_wait_nocancel
|
|
||||||
// Aio_suspend_nocancel
|
|
||||||
// __sigwait_nocancel
|
|
||||||
// __semwait_signal_nocancel
|
|
||||||
// __mac_mount
|
|
||||||
// __mac_get_mount
|
|
||||||
// __mac_getfsstat
|
|
77
vendor/golang.org/x/sys/unix/syscall_darwin_386.go
generated
vendored
77
vendor/golang.org/x/sys/unix/syscall_darwin_386.go
generated
vendored
@ -1,77 +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 386,darwin
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Getpagesize() int { return 4096 }
|
|
||||||
|
|
||||||
func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
|
|
||||||
|
|
||||||
func NsecToTimespec(nsec int64) (ts Timespec) {
|
|
||||||
ts.Sec = int32(nsec / 1e9)
|
|
||||||
ts.Nsec = int32(nsec % 1e9)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func NsecToTimeval(nsec int64) (tv Timeval) {
|
|
||||||
nsec += 999 // round up to microsecond
|
|
||||||
tv.Usec = int32(nsec % 1e9 / 1e3)
|
|
||||||
tv.Sec = int32(nsec / 1e9)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error)
|
|
||||||
func Gettimeofday(tv *Timeval) (err error) {
|
|
||||||
// The tv passed to gettimeofday must be non-nil
|
|
||||||
// but is otherwise unused. The answers come back
|
|
||||||
// in the two registers.
|
|
||||||
sec, usec, err := gettimeofday(tv)
|
|
||||||
tv.Sec = int32(sec)
|
|
||||||
tv.Usec = int32(usec)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
|
|
||||||
k.Ident = uint32(fd)
|
|
||||||
k.Filter = int16(mode)
|
|
||||||
k.Flags = uint16(flags)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (iov *Iovec) SetLen(length int) {
|
|
||||||
iov.Len = uint32(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (msghdr *Msghdr) SetControllen(length int) {
|
|
||||||
msghdr.Controllen = uint32(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cmsg *Cmsghdr) SetLen(length int) {
|
|
||||||
cmsg.Len = uint32(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
|
||||||
var length = uint64(count)
|
|
||||||
|
|
||||||
_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0)
|
|
||||||
|
|
||||||
written = int(length)
|
|
||||||
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
|
||||||
|
|
||||||
// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
|
|
||||||
// of darwin/386 the syscall is called sysctl instead of __sysctl.
|
|
||||||
const SYS___SYSCTL = SYS_SYSCTL
|
|
79
vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
generated
vendored
79
vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
generated
vendored
@ -1,79 +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 amd64,darwin
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
|
|
||||||
|
|
||||||
func Getpagesize() int { return 4096 }
|
|
||||||
|
|
||||||
func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
|
|
||||||
|
|
||||||
func NsecToTimespec(nsec int64) (ts Timespec) {
|
|
||||||
ts.Sec = nsec / 1e9
|
|
||||||
ts.Nsec = nsec % 1e9
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func NsecToTimeval(nsec int64) (tv Timeval) {
|
|
||||||
nsec += 999 // round up to microsecond
|
|
||||||
tv.Usec = int32(nsec % 1e9 / 1e3)
|
|
||||||
tv.Sec = int64(nsec / 1e9)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error)
|
|
||||||
func Gettimeofday(tv *Timeval) (err error) {
|
|
||||||
// The tv passed to gettimeofday must be non-nil
|
|
||||||
// but is otherwise unused. The answers come back
|
|
||||||
// in the two registers.
|
|
||||||
sec, usec, err := gettimeofday(tv)
|
|
||||||
tv.Sec = sec
|
|
||||||
tv.Usec = usec
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
|
|
||||||
k.Ident = uint64(fd)
|
|
||||||
k.Filter = int16(mode)
|
|
||||||
k.Flags = uint16(flags)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (iov *Iovec) SetLen(length int) {
|
|
||||||
iov.Len = uint64(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (msghdr *Msghdr) SetControllen(length int) {
|
|
||||||
msghdr.Controllen = uint32(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cmsg *Cmsghdr) SetLen(length int) {
|
|
||||||
cmsg.Len = uint32(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
|
||||||
var length = uint64(count)
|
|
||||||
|
|
||||||
_, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0)
|
|
||||||
|
|
||||||
written = int(length)
|
|
||||||
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
|
||||||
|
|
||||||
// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
|
|
||||||
// of darwin/amd64 the syscall is called sysctl instead of __sysctl.
|
|
||||||
const SYS___SYSCTL = SYS_SYSCTL
|
|
71
vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
generated
vendored
71
vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
generated
vendored
@ -1,71 +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.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Getpagesize() int { return 4096 }
|
|
||||||
|
|
||||||
func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
|
|
||||||
|
|
||||||
func NsecToTimespec(nsec int64) (ts Timespec) {
|
|
||||||
ts.Sec = int32(nsec / 1e9)
|
|
||||||
ts.Nsec = int32(nsec % 1e9)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func NsecToTimeval(nsec int64) (tv Timeval) {
|
|
||||||
nsec += 999 // round up to microsecond
|
|
||||||
tv.Usec = int32(nsec % 1e9 / 1e3)
|
|
||||||
tv.Sec = int32(nsec / 1e9)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error)
|
|
||||||
func Gettimeofday(tv *Timeval) (err error) {
|
|
||||||
// The tv passed to gettimeofday must be non-nil
|
|
||||||
// but is otherwise unused. The answers come back
|
|
||||||
// in the two registers.
|
|
||||||
sec, usec, err := gettimeofday(tv)
|
|
||||||
tv.Sec = int32(sec)
|
|
||||||
tv.Usec = int32(usec)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
|
|
||||||
k.Ident = uint32(fd)
|
|
||||||
k.Filter = int16(mode)
|
|
||||||
k.Flags = uint16(flags)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (iov *Iovec) SetLen(length int) {
|
|
||||||
iov.Len = uint32(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (msghdr *Msghdr) SetControllen(length int) {
|
|
||||||
msghdr.Controllen = uint32(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cmsg *Cmsghdr) SetLen(length int) {
|
|
||||||
cmsg.Len = uint32(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
|
||||||
var length = uint64(count)
|
|
||||||
|
|
||||||
_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0)
|
|
||||||
|
|
||||||
written = int(length)
|
|
||||||
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic
|
|
77
vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
generated
vendored
77
vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
generated
vendored
@ -1,77 +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 arm64,darwin
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Getpagesize() int { return 16384 }
|
|
||||||
|
|
||||||
func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
|
|
||||||
|
|
||||||
func NsecToTimespec(nsec int64) (ts Timespec) {
|
|
||||||
ts.Sec = nsec / 1e9
|
|
||||||
ts.Nsec = nsec % 1e9
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func NsecToTimeval(nsec int64) (tv Timeval) {
|
|
||||||
nsec += 999 // round up to microsecond
|
|
||||||
tv.Usec = int32(nsec % 1e9 / 1e3)
|
|
||||||
tv.Sec = int64(nsec / 1e9)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error)
|
|
||||||
func Gettimeofday(tv *Timeval) (err error) {
|
|
||||||
// The tv passed to gettimeofday must be non-nil
|
|
||||||
// but is otherwise unused. The answers come back
|
|
||||||
// in the two registers.
|
|
||||||
sec, usec, err := gettimeofday(tv)
|
|
||||||
tv.Sec = sec
|
|
||||||
tv.Usec = usec
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
|
|
||||||
k.Ident = uint64(fd)
|
|
||||||
k.Filter = int16(mode)
|
|
||||||
k.Flags = uint16(flags)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (iov *Iovec) SetLen(length int) {
|
|
||||||
iov.Len = uint64(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (msghdr *Msghdr) SetControllen(length int) {
|
|
||||||
msghdr.Controllen = uint32(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cmsg *Cmsghdr) SetLen(length int) {
|
|
||||||
cmsg.Len = uint32(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
|
||||||
var length = uint64(count)
|
|
||||||
|
|
||||||
_, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0)
|
|
||||||
|
|
||||||
written = int(length)
|
|
||||||
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic
|
|
||||||
|
|
||||||
// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
|
|
||||||
// of darwin/arm64 the syscall is called sysctl instead of __sysctl.
|
|
||||||
const SYS___SYSCTL = SYS_SYSCTL
|
|
412
vendor/golang.org/x/sys/unix/syscall_dragonfly.go
generated
vendored
412
vendor/golang.org/x/sys/unix/syscall_dragonfly.go
generated
vendored
@ -1,412 +0,0 @@
|
|||||||
// Copyright 2009,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.
|
|
||||||
|
|
||||||
// FreeBSD system calls.
|
|
||||||
// This file is compiled as ordinary Go code,
|
|
||||||
// but it is also input to mksyscall,
|
|
||||||
// which parses the //sys lines and generates system call stubs.
|
|
||||||
// Note that sometimes we use a lowercase //sys name and wrap
|
|
||||||
// it in our own nicer implementation, either here or in
|
|
||||||
// syscall_bsd.go or syscall_unix.go.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import "unsafe"
|
|
||||||
|
|
||||||
type SockaddrDatalink struct {
|
|
||||||
Len uint8
|
|
||||||
Family uint8
|
|
||||||
Index uint16
|
|
||||||
Type uint8
|
|
||||||
Nlen uint8
|
|
||||||
Alen uint8
|
|
||||||
Slen uint8
|
|
||||||
Data [12]int8
|
|
||||||
Rcf uint16
|
|
||||||
Route [16]uint16
|
|
||||||
raw RawSockaddrDatalink
|
|
||||||
}
|
|
||||||
|
|
||||||
// Translate "kern.hostname" to []_C_int{0,1,2,3}.
|
|
||||||
func nametomib(name string) (mib []_C_int, err error) {
|
|
||||||
const siz = unsafe.Sizeof(mib[0])
|
|
||||||
|
|
||||||
// NOTE(rsc): It seems strange to set the buffer to have
|
|
||||||
// size CTL_MAXNAME+2 but use only CTL_MAXNAME
|
|
||||||
// as the size. I don't know why the +2 is here, but the
|
|
||||||
// kernel uses +2 for its own implementation of this function.
|
|
||||||
// I am scared that if we don't include the +2 here, the kernel
|
|
||||||
// will silently write 2 words farther than we specify
|
|
||||||
// and we'll get memory corruption.
|
|
||||||
var buf [CTL_MAXNAME + 2]_C_int
|
|
||||||
n := uintptr(CTL_MAXNAME) * siz
|
|
||||||
|
|
||||||
p := (*byte)(unsafe.Pointer(&buf[0]))
|
|
||||||
bytes, err := ByteSliceFromString(name)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Magic sysctl: "setting" 0.3 to a string name
|
|
||||||
// lets you read back the array of integers form.
|
|
||||||
if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return buf[0 : n/siz], nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParseDirent parses up to max directory entries in buf,
|
|
||||||
// appending the names to names. It returns the number
|
|
||||||
// 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)
|
|
||||||
for max != 0 && len(buf) > 0 {
|
|
||||||
dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
|
|
||||||
reclen := int(16+dirent.Namlen+1+7) & ^7
|
|
||||||
buf = buf[reclen:]
|
|
||||||
if dirent.Fileno == 0 { // File absent in directory.
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0]))
|
|
||||||
var name = string(bytes[0:dirent.Namlen])
|
|
||||||
if name == "." || name == ".." { // Useless names
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
max--
|
|
||||||
count++
|
|
||||||
names = append(names, name)
|
|
||||||
}
|
|
||||||
return origlen - len(buf), count, names
|
|
||||||
}
|
|
||||||
|
|
||||||
//sysnb pipe() (r int, w int, err error)
|
|
||||||
|
|
||||||
func Pipe(p []int) (err error) {
|
|
||||||
if len(p) != 2 {
|
|
||||||
return EINVAL
|
|
||||||
}
|
|
||||||
p[0], p[1], err = pipe()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error)
|
|
||||||
func Pread(fd int, p []byte, offset int64) (n int, err error) {
|
|
||||||
return extpread(fd, p, 0, offset)
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error)
|
|
||||||
func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
|
||||||
return extpwrite(fd, p, 0, offset)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
|
|
||||||
var _p0 unsafe.Pointer
|
|
||||||
var bufsize uintptr
|
|
||||||
if len(buf) > 0 {
|
|
||||||
_p0 = unsafe.Pointer(&buf[0])
|
|
||||||
bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
|
|
||||||
}
|
|
||||||
r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
|
|
||||||
use(unsafe.Pointer(_p0))
|
|
||||||
n = int(r0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Exposed directly
|
|
||||||
*/
|
|
||||||
//sys Access(path string, mode uint32) (err error)
|
|
||||||
//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error)
|
|
||||||
//sys Chdir(path string) (err error)
|
|
||||||
//sys Chflags(path string, flags int) (err error)
|
|
||||||
//sys Chmod(path string, mode uint32) (err error)
|
|
||||||
//sys Chown(path string, uid int, gid int) (err error)
|
|
||||||
//sys Chroot(path string) (err error)
|
|
||||||
//sys Close(fd int) (err error)
|
|
||||||
//sys Dup(fd int) (nfd int, err error)
|
|
||||||
//sys Dup2(from int, to int) (err error)
|
|
||||||
//sys Exit(code int)
|
|
||||||
//sys Fchdir(fd int) (err error)
|
|
||||||
//sys Fchflags(fd int, flags int) (err error)
|
|
||||||
//sys Fchmod(fd int, mode uint32) (err error)
|
|
||||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
|
||||||
//sys Flock(fd int, how int) (err error)
|
|
||||||
//sys Fpathconf(fd int, name int) (val int, err error)
|
|
||||||
//sys Fstat(fd int, stat *Stat_t) (err error)
|
|
||||||
//sys Fstatfs(fd int, stat *Statfs_t) (err error)
|
|
||||||
//sys Fsync(fd int) (err error)
|
|
||||||
//sys Ftruncate(fd int, length int64) (err error)
|
|
||||||
//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
|
|
||||||
//sys Getdtablesize() (size int)
|
|
||||||
//sysnb Getegid() (egid int)
|
|
||||||
//sysnb Geteuid() (uid int)
|
|
||||||
//sysnb Getgid() (gid int)
|
|
||||||
//sysnb Getpgid(pid int) (pgid int, err error)
|
|
||||||
//sysnb Getpgrp() (pgrp int)
|
|
||||||
//sysnb Getpid() (pid int)
|
|
||||||
//sysnb Getppid() (ppid int)
|
|
||||||
//sys Getpriority(which int, who int) (prio int, err error)
|
|
||||||
//sysnb Getrlimit(which int, lim *Rlimit) (err error)
|
|
||||||
//sysnb Getrusage(who int, rusage *Rusage) (err error)
|
|
||||||
//sysnb Getsid(pid int) (sid int, err error)
|
|
||||||
//sysnb Gettimeofday(tv *Timeval) (err error)
|
|
||||||
//sysnb Getuid() (uid int)
|
|
||||||
//sys Issetugid() (tainted bool)
|
|
||||||
//sys Kill(pid int, signum syscall.Signal) (err error)
|
|
||||||
//sys Kqueue() (fd int, err error)
|
|
||||||
//sys Lchown(path string, uid int, gid int) (err error)
|
|
||||||
//sys Link(path string, link string) (err error)
|
|
||||||
//sys Listen(s int, backlog int) (err error)
|
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error)
|
|
||||||
//sys Mkdir(path string, mode uint32) (err error)
|
|
||||||
//sys Mkfifo(path string, mode uint32) (err error)
|
|
||||||
//sys Mknod(path string, mode uint32, dev int) (err error)
|
|
||||||
//sys Mlock(b []byte) (err error)
|
|
||||||
//sys Mlockall(flags int) (err error)
|
|
||||||
//sys Mprotect(b []byte, prot int) (err error)
|
|
||||||
//sys Munlock(b []byte) (err error)
|
|
||||||
//sys Munlockall() (err error)
|
|
||||||
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
|
|
||||||
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
|
||||||
//sys Pathconf(path string, name int) (val int, err error)
|
|
||||||
//sys read(fd int, p []byte) (n int, err error)
|
|
||||||
//sys Readlink(path string, buf []byte) (n int, err error)
|
|
||||||
//sys Rename(from string, to string) (err error)
|
|
||||||
//sys Revoke(path string) (err error)
|
|
||||||
//sys Rmdir(path string) (err error)
|
|
||||||
//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
|
|
||||||
//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
|
|
||||||
//sysnb Setegid(egid int) (err error)
|
|
||||||
//sysnb Seteuid(euid int) (err error)
|
|
||||||
//sysnb Setgid(gid int) (err error)
|
|
||||||
//sys Setlogin(name string) (err error)
|
|
||||||
//sysnb Setpgid(pid int, pgid int) (err error)
|
|
||||||
//sys Setpriority(which int, who int, prio int) (err error)
|
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
|
||||||
//sysnb Setreuid(ruid int, euid int) (err error)
|
|
||||||
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
|
||||||
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
|
||||||
//sysnb Setrlimit(which int, lim *Rlimit) (err error)
|
|
||||||
//sysnb Setsid() (pid int, err error)
|
|
||||||
//sysnb Settimeofday(tp *Timeval) (err error)
|
|
||||||
//sysnb Setuid(uid int) (err error)
|
|
||||||
//sys Stat(path string, stat *Stat_t) (err error)
|
|
||||||
//sys Statfs(path string, stat *Statfs_t) (err error)
|
|
||||||
//sys Symlink(path string, link string) (err error)
|
|
||||||
//sys Sync() (err error)
|
|
||||||
//sys Truncate(path string, length int64) (err error)
|
|
||||||
//sys Umask(newmask int) (oldmask int)
|
|
||||||
//sys Undelete(path string) (err error)
|
|
||||||
//sys Unlink(path string) (err error)
|
|
||||||
//sys Unmount(path string, flags int) (err error)
|
|
||||||
//sys write(fd int, p []byte) (n int, err error)
|
|
||||||
//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
|
|
||||||
//sys munmap(addr uintptr, length uintptr) (err error)
|
|
||||||
//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
|
|
||||||
//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Unimplemented
|
|
||||||
* TODO(jsing): Update this list for DragonFly.
|
|
||||||
*/
|
|
||||||
// Profil
|
|
||||||
// Sigaction
|
|
||||||
// Sigprocmask
|
|
||||||
// Getlogin
|
|
||||||
// Sigpending
|
|
||||||
// Sigaltstack
|
|
||||||
// Ioctl
|
|
||||||
// Reboot
|
|
||||||
// Execve
|
|
||||||
// Vfork
|
|
||||||
// Sbrk
|
|
||||||
// Sstk
|
|
||||||
// Ovadvise
|
|
||||||
// Mincore
|
|
||||||
// Setitimer
|
|
||||||
// Swapon
|
|
||||||
// Select
|
|
||||||
// Sigsuspend
|
|
||||||
// Readv
|
|
||||||
// Writev
|
|
||||||
// Nfssvc
|
|
||||||
// Getfh
|
|
||||||
// Quotactl
|
|
||||||
// Mount
|
|
||||||
// Csops
|
|
||||||
// Waitid
|
|
||||||
// Add_profil
|
|
||||||
// Kdebug_trace
|
|
||||||
// Sigreturn
|
|
||||||
// Mmap
|
|
||||||
// Atsocket
|
|
||||||
// Kqueue_from_portset_np
|
|
||||||
// Kqueue_portset
|
|
||||||
// Getattrlist
|
|
||||||
// Setattrlist
|
|
||||||
// Getdirentriesattr
|
|
||||||
// Searchfs
|
|
||||||
// Delete
|
|
||||||
// Copyfile
|
|
||||||
// Poll
|
|
||||||
// Watchevent
|
|
||||||
// Waitevent
|
|
||||||
// Modwatch
|
|
||||||
// Getxattr
|
|
||||||
// Fgetxattr
|
|
||||||
// Setxattr
|
|
||||||
// Fsetxattr
|
|
||||||
// Removexattr
|
|
||||||
// Fremovexattr
|
|
||||||
// Listxattr
|
|
||||||
// Flistxattr
|
|
||||||
// Fsctl
|
|
||||||
// Initgroups
|
|
||||||
// Posix_spawn
|
|
||||||
// Nfsclnt
|
|
||||||
// Fhopen
|
|
||||||
// Minherit
|
|
||||||
// Semsys
|
|
||||||
// Msgsys
|
|
||||||
// Shmsys
|
|
||||||
// Semctl
|
|
||||||
// Semget
|
|
||||||
// Semop
|
|
||||||
// Msgctl
|
|
||||||
// Msgget
|
|
||||||
// Msgsnd
|
|
||||||
// Msgrcv
|
|
||||||
// Shmat
|
|
||||||
// Shmctl
|
|
||||||
// Shmdt
|
|
||||||
// Shmget
|
|
||||||
// Shm_open
|
|
||||||
// Shm_unlink
|
|
||||||
// Sem_open
|
|
||||||
// Sem_close
|
|
||||||
// Sem_unlink
|
|
||||||
// Sem_wait
|
|
||||||
// Sem_trywait
|
|
||||||
// Sem_post
|
|
||||||
// Sem_getvalue
|
|
||||||
// Sem_init
|
|
||||||
// Sem_destroy
|
|
||||||
// Open_extended
|
|
||||||
// Umask_extended
|
|
||||||
// Stat_extended
|
|
||||||
// Lstat_extended
|
|
||||||
// Fstat_extended
|
|
||||||
// Chmod_extended
|
|
||||||
// Fchmod_extended
|
|
||||||
// Access_extended
|
|
||||||
// Settid
|
|
||||||
// Gettid
|
|
||||||
// Setsgroups
|
|
||||||
// Getsgroups
|
|
||||||
// Setwgroups
|
|
||||||
// Getwgroups
|
|
||||||
// Mkfifo_extended
|
|
||||||
// Mkdir_extended
|
|
||||||
// Identitysvc
|
|
||||||
// Shared_region_check_np
|
|
||||||
// Shared_region_map_np
|
|
||||||
// __pthread_mutex_destroy
|
|
||||||
// __pthread_mutex_init
|
|
||||||
// __pthread_mutex_lock
|
|
||||||
// __pthread_mutex_trylock
|
|
||||||
// __pthread_mutex_unlock
|
|
||||||
// __pthread_cond_init
|
|
||||||
// __pthread_cond_destroy
|
|
||||||
// __pthread_cond_broadcast
|
|
||||||
// __pthread_cond_signal
|
|
||||||
// Setsid_with_pid
|
|
||||||
// __pthread_cond_timedwait
|
|
||||||
// Aio_fsync
|
|
||||||
// Aio_return
|
|
||||||
// Aio_suspend
|
|
||||||
// Aio_cancel
|
|
||||||
// Aio_error
|
|
||||||
// Aio_read
|
|
||||||
// Aio_write
|
|
||||||
// Lio_listio
|
|
||||||
// __pthread_cond_wait
|
|
||||||
// Iopolicysys
|
|
||||||
// __pthread_kill
|
|
||||||
// __pthread_sigmask
|
|
||||||
// __sigwait
|
|
||||||
// __disable_threadsignal
|
|
||||||
// __pthread_markcancel
|
|
||||||
// __pthread_canceled
|
|
||||||
// __semwait_signal
|
|
||||||
// Proc_info
|
|
||||||
// Stat64_extended
|
|
||||||
// Lstat64_extended
|
|
||||||
// Fstat64_extended
|
|
||||||
// __pthread_chdir
|
|
||||||
// __pthread_fchdir
|
|
||||||
// Audit
|
|
||||||
// Auditon
|
|
||||||
// Getauid
|
|
||||||
// Setauid
|
|
||||||
// Getaudit
|
|
||||||
// Setaudit
|
|
||||||
// Getaudit_addr
|
|
||||||
// Setaudit_addr
|
|
||||||
// Auditctl
|
|
||||||
// Bsdthread_create
|
|
||||||
// Bsdthread_terminate
|
|
||||||
// Stack_snapshot
|
|
||||||
// Bsdthread_register
|
|
||||||
// Workq_open
|
|
||||||
// Workq_ops
|
|
||||||
// __mac_execve
|
|
||||||
// __mac_syscall
|
|
||||||
// __mac_get_file
|
|
||||||
// __mac_set_file
|
|
||||||
// __mac_get_link
|
|
||||||
// __mac_set_link
|
|
||||||
// __mac_get_proc
|
|
||||||
// __mac_set_proc
|
|
||||||
// __mac_get_fd
|
|
||||||
// __mac_set_fd
|
|
||||||
// __mac_get_pid
|
|
||||||
// __mac_get_lcid
|
|
||||||
// __mac_get_lctx
|
|
||||||
// __mac_set_lctx
|
|
||||||
// Setlcid
|
|
||||||
// Read_nocancel
|
|
||||||
// Write_nocancel
|
|
||||||
// Open_nocancel
|
|
||||||
// Close_nocancel
|
|
||||||
// Wait4_nocancel
|
|
||||||
// Recvmsg_nocancel
|
|
||||||
// Sendmsg_nocancel
|
|
||||||
// Recvfrom_nocancel
|
|
||||||
// Accept_nocancel
|
|
||||||
// Msync_nocancel
|
|
||||||
// Fcntl_nocancel
|
|
||||||
// Select_nocancel
|
|
||||||
// Fsync_nocancel
|
|
||||||
// Connect_nocancel
|
|
||||||
// Sigsuspend_nocancel
|
|
||||||
// Readv_nocancel
|
|
||||||
// Writev_nocancel
|
|
||||||
// Sendto_nocancel
|
|
||||||
// Pread_nocancel
|
|
||||||
// Pwrite_nocancel
|
|
||||||
// Waitid_nocancel
|
|
||||||
// Poll_nocancel
|
|
||||||
// Msgsnd_nocancel
|
|
||||||
// Msgrcv_nocancel
|
|
||||||
// Sem_wait_nocancel
|
|
||||||
// Aio_suspend_nocancel
|
|
||||||
// __sigwait_nocancel
|
|
||||||
// __semwait_signal_nocancel
|
|
||||||
// __mac_mount
|
|
||||||
// __mac_get_mount
|
|
||||||
// __mac_getfsstat
|
|
61
vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
generated
vendored
61
vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
generated
vendored
@ -1,61 +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 amd64,dragonfly
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
import (
|
|
||||||
"syscall"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Getpagesize() int { return 4096 }
|
|
||||||
|
|
||||||
func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
|
|
||||||
|
|
||||||
func NsecToTimespec(nsec int64) (ts Timespec) {
|
|
||||||
ts.Sec = nsec / 1e9
|
|
||||||
ts.Nsec = nsec % 1e9
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func NsecToTimeval(nsec int64) (tv Timeval) {
|
|
||||||
nsec += 999 // round up to microsecond
|
|
||||||
tv.Usec = nsec % 1e9 / 1e3
|
|
||||||
tv.Sec = int64(nsec / 1e9)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
|
|
||||||
k.Ident = uint64(fd)
|
|
||||||
k.Filter = int16(mode)
|
|
||||||
k.Flags = uint16(flags)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (iov *Iovec) SetLen(length int) {
|
|
||||||
iov.Len = uint64(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (msghdr *Msghdr) SetControllen(length int) {
|
|
||||||
msghdr.Controllen = uint32(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cmsg *Cmsghdr) SetLen(length int) {
|
|
||||||
cmsg.Len = uint32(length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
|
||||||
var writtenOut uint64 = 0
|
|
||||||
_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)
|
|
||||||
|
|
||||||
written = int(writtenOut)
|
|
||||||
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user