This commit is contained in:
parent
0cae2e5138
commit
fab4c25bea
30
go.mod
30
go.mod
@ -1,17 +1,17 @@
|
|||||||
module git.paulbsd.com/paulbsd/qrz
|
module git.paulbsd.com/paulbsd/qrz
|
||||||
|
|
||||||
go 1.17
|
go 1.18
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/antchfx/htmlquery v1.2.4
|
github.com/antchfx/htmlquery v1.2.5
|
||||||
github.com/antchfx/xpath v1.2.0 // indirect
|
github.com/antchfx/xpath v1.2.1 // indirect
|
||||||
github.com/gobuffalo/here v0.6.5 // indirect
|
github.com/gobuffalo/here v0.6.6 // indirect
|
||||||
github.com/gobuffalo/packr/v2 v2.8.3
|
github.com/gobuffalo/packr/v2 v2.8.3
|
||||||
github.com/golang/snappy v0.0.4 // indirect
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20210825203111-a709d8e111b3 // indirect
|
github.com/gopherjs/gopherjs v0.0.0-20210825203111-a709d8e111b3 // indirect
|
||||||
github.com/karrick/godirwalk v1.16.1 // indirect
|
github.com/karrick/godirwalk v1.17.0 // indirect
|
||||||
github.com/labstack/echo/v4 v4.7.2
|
github.com/labstack/echo/v4 v4.7.2
|
||||||
github.com/lib/pq v1.10.4
|
github.com/lib/pq v1.10.6
|
||||||
github.com/markbates/pkger v0.17.1
|
github.com/markbates/pkger v0.17.1
|
||||||
github.com/mattn/go-colorable v0.1.12 // indirect
|
github.com/mattn/go-colorable v0.1.12 // indirect
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
|
||||||
@ -21,21 +21,21 @@ require (
|
|||||||
github.com/rogpeppe/go-internal v1.8.0 // indirect
|
github.com/rogpeppe/go-internal v1.8.0 // indirect
|
||||||
github.com/sirupsen/logrus v1.8.1 // indirect
|
github.com/sirupsen/logrus v1.8.1 // indirect
|
||||||
github.com/smartystreets/assertions v1.2.0 // indirect
|
github.com/smartystreets/assertions v1.2.0 // indirect
|
||||||
github.com/spf13/cobra v1.4.0
|
github.com/spf13/cobra v1.5.0
|
||||||
golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 // indirect
|
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect
|
||||||
golang.org/x/net v0.0.0-20220325170049-de3da57026de
|
golang.org/x/net v0.0.0-20220708220712-1185a9018129
|
||||||
golang.org/x/sys v0.0.0-20220325203850-36772127a21f // indirect
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect
|
||||||
golang.org/x/text v0.3.7 // indirect
|
golang.org/x/text v0.3.7 // indirect
|
||||||
gopkg.in/ini.v1 v1.66.4
|
gopkg.in/ini.v1 v1.66.6
|
||||||
xorm.io/builder v0.3.9 // indirect
|
xorm.io/builder v0.3.12 // indirect
|
||||||
xorm.io/xorm v1.2.5
|
xorm.io/xorm v1.3.1
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gobuffalo/logger v1.0.6 // indirect
|
github.com/gobuffalo/logger v1.0.6 // indirect
|
||||||
github.com/gobuffalo/packd v1.0.1 // indirect
|
github.com/gobuffalo/packd v1.0.1 // indirect
|
||||||
github.com/goccy/go-json v0.9.6 // indirect
|
github.com/goccy/go-json v0.9.10 // indirect
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
|
126
go.sum
126
go.sum
@ -39,6 +39,7 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9
|
|||||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||||
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s=
|
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s=
|
||||||
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU=
|
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU=
|
||||||
|
gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||||
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
|
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
|
||||||
@ -56,9 +57,13 @@ github.com/antchfx/htmlquery v1.2.3 h1:sP3NFDneHx2stfNXCKbhHFo8XgNjCACnU/4AO5gWz
|
|||||||
github.com/antchfx/htmlquery v1.2.3/go.mod h1:B0ABL+F5irhhMWg54ymEZinzMSi0Kt3I2if0BLYa3V0=
|
github.com/antchfx/htmlquery v1.2.3/go.mod h1:B0ABL+F5irhhMWg54ymEZinzMSi0Kt3I2if0BLYa3V0=
|
||||||
github.com/antchfx/htmlquery v1.2.4 h1:qLteofCMe/KGovBI6SQgmou2QNyedFUW+pE+BpeZ494=
|
github.com/antchfx/htmlquery v1.2.4 h1:qLteofCMe/KGovBI6SQgmou2QNyedFUW+pE+BpeZ494=
|
||||||
github.com/antchfx/htmlquery v1.2.4/go.mod h1:2xO6iu3EVWs7R2JYqBbp8YzG50gj/ofqs5/0VZoDZLc=
|
github.com/antchfx/htmlquery v1.2.4/go.mod h1:2xO6iu3EVWs7R2JYqBbp8YzG50gj/ofqs5/0VZoDZLc=
|
||||||
|
github.com/antchfx/htmlquery v1.2.5 h1:1lXnx46/1wtv1E/kzmH8vrfMuUKYgkdDBA9pIdMJnk4=
|
||||||
|
github.com/antchfx/htmlquery v1.2.5/go.mod h1:2MCVBzYVafPBmKbrmwB9F5xdd+IEgRY61ci2oOsOQVw=
|
||||||
github.com/antchfx/xpath v1.1.6/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk=
|
github.com/antchfx/xpath v1.1.6/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk=
|
||||||
github.com/antchfx/xpath v1.2.0 h1:mbwv7co+x0RwgeGAOHdrKy89GvHaGvxxBtPK0uF9Zr8=
|
github.com/antchfx/xpath v1.2.0 h1:mbwv7co+x0RwgeGAOHdrKy89GvHaGvxxBtPK0uF9Zr8=
|
||||||
github.com/antchfx/xpath v1.2.0/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs=
|
github.com/antchfx/xpath v1.2.0/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs=
|
||||||
|
github.com/antchfx/xpath v1.2.1 h1:qhp4EW6aCOVr5XIkT+l6LJ9ck/JsUH/yyauNgTQkBF8=
|
||||||
|
github.com/antchfx/xpath v1.2.1/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs=
|
||||||
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
||||||
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
||||||
@ -106,6 +111,7 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfc
|
|||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
@ -154,6 +160,8 @@ github.com/gobuffalo/here v0.6.2 h1:ZtCqC7F9ou3moLbYfHM1Tj+gwHGgWhjyRjVjsir9BE0=
|
|||||||
github.com/gobuffalo/here v0.6.2/go.mod h1:D75Sq0p2BVHdgQu3vCRsXbg85rx943V19urJpqAVWjI=
|
github.com/gobuffalo/here v0.6.2/go.mod h1:D75Sq0p2BVHdgQu3vCRsXbg85rx943V19urJpqAVWjI=
|
||||||
github.com/gobuffalo/here v0.6.5 h1:OjrFcVbQBXff4EN+/m2xa+i1Wy6lW+3fn9Jf+b5WDXY=
|
github.com/gobuffalo/here v0.6.5 h1:OjrFcVbQBXff4EN+/m2xa+i1Wy6lW+3fn9Jf+b5WDXY=
|
||||||
github.com/gobuffalo/here v0.6.5/go.mod h1:y6q8eG7YstM/DfOKKAyHV1plrNsuYS5dcIerm8Habas=
|
github.com/gobuffalo/here v0.6.5/go.mod h1:y6q8eG7YstM/DfOKKAyHV1plrNsuYS5dcIerm8Habas=
|
||||||
|
github.com/gobuffalo/here v0.6.6 h1:/o+jfSwe36pKQ577grsXGoMYql/zheiGwg1XFo3CBJU=
|
||||||
|
github.com/gobuffalo/here v0.6.6/go.mod h1:C4JZL5PsXWKzP/CAchaIzuUWlaae6CaAiMYQ0ieY62M=
|
||||||
github.com/gobuffalo/logger v1.0.3/go.mod h1:SoeejUwldiS7ZsyCBphOGURmWdwUFXs0J7TCjEhjKxM=
|
github.com/gobuffalo/logger v1.0.3/go.mod h1:SoeejUwldiS7ZsyCBphOGURmWdwUFXs0J7TCjEhjKxM=
|
||||||
github.com/gobuffalo/logger v1.0.4 h1:HFJRqL7AmL4QNvQb9Grss9sDz+3u02VBgAoR03A7q4o=
|
github.com/gobuffalo/logger v1.0.4 h1:HFJRqL7AmL4QNvQb9Grss9sDz+3u02VBgAoR03A7q4o=
|
||||||
github.com/gobuffalo/logger v1.0.4/go.mod h1:/GRUdWb+gM3shxj0P5jiV6ecVS3X0aboJvl+hBu0HeE=
|
github.com/gobuffalo/logger v1.0.4/go.mod h1:/GRUdWb+gM3shxj0P5jiV6ecVS3X0aboJvl+hBu0HeE=
|
||||||
@ -170,8 +178,11 @@ github.com/gobuffalo/packr/v2 v2.8.3/go.mod h1:0SahksCVcx4IMnigTjiFuyldmTrdTctXs
|
|||||||
github.com/goccy/go-json v0.7.4/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.7.4/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
github.com/goccy/go-json v0.7.7 h1:MflzqwHECILPg/0qDYB+jx+sJeNojJHEbRYsa8q7j/o=
|
github.com/goccy/go-json v0.7.7 h1:MflzqwHECILPg/0qDYB+jx+sJeNojJHEbRYsa8q7j/o=
|
||||||
github.com/goccy/go-json v0.7.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.7.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
|
github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
github.com/goccy/go-json v0.9.6 h1:5/4CtRQdtsX0sal8fdVhTaiMN01Ri8BExZZ8iRmHQ6E=
|
github.com/goccy/go-json v0.9.6 h1:5/4CtRQdtsX0sal8fdVhTaiMN01Ri8BExZZ8iRmHQ6E=
|
||||||
github.com/goccy/go-json v0.9.6/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.9.6/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
|
github.com/goccy/go-json v0.9.10 h1:hCeNmprSNLB8B8vQKWl6DpuH0t60oEs+TAk9a7CScKc=
|
||||||
|
github.com/goccy/go-json v0.9.10/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||||
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
||||||
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
||||||
@ -216,6 +227,7 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS
|
|||||||
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
|
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
|
||||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
|
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
|
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
|
||||||
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
@ -249,6 +261,7 @@ github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLe
|
|||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
@ -360,6 +373,8 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
|
|||||||
github.com/karrick/godirwalk v1.15.8/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
|
github.com/karrick/godirwalk v1.15.8/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
|
||||||
github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw=
|
github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw=
|
||||||
github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
|
github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
|
||||||
|
github.com/karrick/godirwalk v1.17.0 h1:b4kY7nqDdioR/6qnbHQyDvmA17u5G1cZ6J+CZXwSWoI=
|
||||||
|
github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
|
||||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
|
||||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
|
||||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||||
@ -392,6 +407,8 @@ github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8=
|
|||||||
github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
|
github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
|
||||||
github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
|
github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs=
|
||||||
|
github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
|
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
|
||||||
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
|
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
|
||||||
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
|
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
|
||||||
@ -429,6 +446,7 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k
|
|||||||
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||||
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||||
github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||||
|
github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
@ -575,6 +593,8 @@ github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw=
|
|||||||
github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
|
github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
|
||||||
github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q=
|
github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q=
|
||||||
github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
|
github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
|
||||||
|
github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU=
|
||||||
|
github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM=
|
||||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||||
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
|
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
|
||||||
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
@ -597,6 +617,7 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5
|
|||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||||
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
|
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
|
||||||
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
|
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
|
||||||
@ -670,6 +691,8 @@ golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s3
|
|||||||
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 h1:S25/rfnfsMVgORT4/J61MJ7rdyseOZOyvLIrZEZ7s6s=
|
golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 h1:S25/rfnfsMVgORT4/J61MJ7rdyseOZOyvLIrZEZ7s6s=
|
||||||
golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
|
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY=
|
||||||
|
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||||
@ -757,6 +780,8 @@ golang.org/x/net v0.0.0-20210825183410-e898025ed96a h1:bRuuGXV8wwSdGTB+CtJf+FjgO
|
|||||||
golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220325170049-de3da57026de h1:pZB1TWnKi+o4bENlbzAgLrEbY4RMYmUIRobMcSmfeYc=
|
golang.org/x/net v0.0.0-20220325170049-de3da57026de h1:pZB1TWnKi+o4bENlbzAgLrEbY4RMYmUIRobMcSmfeYc=
|
||||||
golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
|
golang.org/x/net v0.0.0-20220708220712-1185a9018129 h1:vucSRfWwTsoXro7P+3Cjlr6flUMtzCwzlvkxEQtHHB0=
|
||||||
|
golang.org/x/net v0.0.0-20220708220712-1185a9018129/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
@ -846,10 +871,16 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf h1:2ucpDCmfkl8Bd/FsLtiD653Wf96cW37s+iGx93zsu4k=
|
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf h1:2ucpDCmfkl8Bd/FsLtiD653Wf96cW37s+iGx93zsu4k=
|
||||||
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220325203850-36772127a21f h1:TrmogKRsSOxRMJbLYGrB4SBbW+LJcEllYBLME5Zk5pU=
|
golang.org/x/sys v0.0.0-20220325203850-36772127a21f h1:TrmogKRsSOxRMJbLYGrB4SBbW+LJcEllYBLME5Zk5pU=
|
||||||
golang.org/x/sys v0.0.0-20220325203850-36772127a21f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220325203850-36772127a21f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220712014510-0a85c31ab51e h1:NHvCuwuS43lGnYhten69ZWqi2QOj/CiDNcKbVqwVoew=
|
||||||
|
golang.org/x/sys v0.0.0-20220712014510-0a85c31ab51e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
|
||||||
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
@ -857,6 +888,8 @@ golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlA
|
|||||||
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM=
|
||||||
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
@ -1066,6 +1099,8 @@ gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU=
|
|||||||
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
|
gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
|
||||||
gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
|
gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI=
|
||||||
|
gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||||
@ -1095,29 +1130,115 @@ lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU=
|
|||||||
lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
|
lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
|
||||||
modernc.org/cc/v3 v3.33.6 h1:r63dgSzVzRxUpAJFPQWHy1QeZeY1ydNENUDaBx1GqYc=
|
modernc.org/cc/v3 v3.33.6 h1:r63dgSzVzRxUpAJFPQWHy1QeZeY1ydNENUDaBx1GqYc=
|
||||||
modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.35.10/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.35.15/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
|
modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||||
modernc.org/ccgo/v3 v3.9.5 h1:dEuUSf8WN51rDkprFuAqjfchKEzN0WttP/Py3enBwjk=
|
modernc.org/ccgo/v3 v3.9.5 h1:dEuUSf8WN51rDkprFuAqjfchKEzN0WttP/Py3enBwjk=
|
||||||
modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60=
|
modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60=
|
||||||
|
modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw=
|
||||||
|
modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI=
|
||||||
|
modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag=
|
||||||
|
modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw=
|
||||||
|
modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ=
|
||||||
|
modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c=
|
||||||
|
modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo=
|
||||||
|
modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg=
|
||||||
|
modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I=
|
||||||
|
modernc.org/ccgo/v3 v3.12.18/go.mod h1:jvg/xVdWWmZACSgOiAhpWpwHWylbJaSzayCqNOJKIhs=
|
||||||
|
modernc.org/ccgo/v3 v3.12.20/go.mod h1:aKEdssiu7gVgSy/jjMastnv/q6wWGRbszbheXgWRHc8=
|
||||||
|
modernc.org/ccgo/v3 v3.12.21/go.mod h1:ydgg2tEprnyMn159ZO/N4pLBqpL7NOkJ88GT5zNU2dE=
|
||||||
|
modernc.org/ccgo/v3 v3.12.22/go.mod h1:nyDVFMmMWhMsgQw+5JH6B6o4MnZ+UQNw1pp52XYFPRk=
|
||||||
|
modernc.org/ccgo/v3 v3.12.25/go.mod h1:UaLyWI26TwyIT4+ZFNjkyTbsPsY3plAEB6E7L/vZV3w=
|
||||||
|
modernc.org/ccgo/v3 v3.12.29/go.mod h1:FXVjG7YLf9FetsS2OOYcwNhcdOLGt8S9bQ48+OP75cE=
|
||||||
|
modernc.org/ccgo/v3 v3.12.36/go.mod h1:uP3/Fiezp/Ga8onfvMLpREq+KUjUmYMxXPO8tETHtA8=
|
||||||
|
modernc.org/ccgo/v3 v3.12.38/go.mod h1:93O0G7baRST1vNj4wnZ49b1kLxt0xCW5Hsa2qRaZPqc=
|
||||||
|
modernc.org/ccgo/v3 v3.12.43/go.mod h1:k+DqGXd3o7W+inNujK15S5ZYuPoWYLpF5PYougCmthU=
|
||||||
|
modernc.org/ccgo/v3 v3.12.46/go.mod h1:UZe6EvMSqOxaJ4sznY7b23/k13R8XNlyWsO5bAmSgOE=
|
||||||
|
modernc.org/ccgo/v3 v3.12.47/go.mod h1:m8d6p0zNps187fhBwzY/ii6gxfjob1VxWb919Nk1HUk=
|
||||||
|
modernc.org/ccgo/v3 v3.12.50/go.mod h1:bu9YIwtg+HXQxBhsRDE+cJjQRuINuT9PUK4orOco/JI=
|
||||||
|
modernc.org/ccgo/v3 v3.12.51/go.mod h1:gaIIlx4YpmGO2bLye04/yeblmvWEmE4BBBls4aJXFiE=
|
||||||
|
modernc.org/ccgo/v3 v3.12.53/go.mod h1:8xWGGTFkdFEWBEsUmi+DBjwu/WLy3SSOrqEmKUjMeEg=
|
||||||
|
modernc.org/ccgo/v3 v3.12.54/go.mod h1:yANKFTm9llTFVX1FqNKHE0aMcQb1fuPJx6p8AcUx+74=
|
||||||
|
modernc.org/ccgo/v3 v3.12.55/go.mod h1:rsXiIyJi9psOwiBkplOaHye5L4MOOaCjHg1Fxkj7IeU=
|
||||||
|
modernc.org/ccgo/v3 v3.12.56/go.mod h1:ljeFks3faDseCkr60JMpeDb2GSO3TKAmrzm7q9YOcMU=
|
||||||
|
modernc.org/ccgo/v3 v3.12.57/go.mod h1:hNSF4DNVgBl8wYHpMvPqQWDQx8luqxDnNGCMM4NFNMc=
|
||||||
|
modernc.org/ccgo/v3 v3.12.60/go.mod h1:k/Nn0zdO1xHVWjPYVshDeWKqbRWIfif5dtsIOCUVMqM=
|
||||||
|
modernc.org/ccgo/v3 v3.12.65/go.mod h1:D6hQtKxPNZiY6wDBtehSGKFKmyXn53F8nGTpH+POmS4=
|
||||||
|
modernc.org/ccgo/v3 v3.12.66/go.mod h1:jUuxlCFZTUZLMV08s7B1ekHX5+LIAurKTTaugUr/EhQ=
|
||||||
|
modernc.org/ccgo/v3 v3.12.67/go.mod h1:Bll3KwKvGROizP2Xj17GEGOTrlvB1XcVaBrC90ORO84=
|
||||||
|
modernc.org/ccgo/v3 v3.12.73/go.mod h1:hngkB+nUUqzOf3iqsM48Gf1FZhY599qzVg1iX+BT3cQ=
|
||||||
|
modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY=
|
||||||
|
modernc.org/ccgo/v3 v3.12.82/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w=
|
||||||
|
modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
|
||||||
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
|
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
|
||||||
modernc.org/libc v1.7.13-0.20210308123627-12f642a52bb8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
|
modernc.org/libc v1.7.13-0.20210308123627-12f642a52bb8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
|
||||||
modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
|
modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
|
||||||
modernc.org/libc v1.9.11 h1:QUxZMs48Ahg2F7SN41aERvMfGLY2HU/ADnB9DC4Yts8=
|
modernc.org/libc v1.9.11 h1:QUxZMs48Ahg2F7SN41aERvMfGLY2HU/ADnB9DC4Yts8=
|
||||||
modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q=
|
modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q=
|
||||||
|
modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg=
|
||||||
|
modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M=
|
||||||
|
modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU=
|
||||||
|
modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE=
|
||||||
|
modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso=
|
||||||
|
modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8=
|
||||||
|
modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8=
|
||||||
|
modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I=
|
||||||
|
modernc.org/libc v1.11.24/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk=
|
||||||
|
modernc.org/libc v1.11.26/go.mod h1:SFjnYi9OSd2W7f4ct622o/PAYqk7KHv6GS8NZULIjKY=
|
||||||
|
modernc.org/libc v1.11.27/go.mod h1:zmWm6kcFXt/jpzeCgfvUNswM0qke8qVwxqZrnddlDiE=
|
||||||
|
modernc.org/libc v1.11.28/go.mod h1:Ii4V0fTFcbq3qrv3CNn+OGHAvzqMBvC7dBNyC4vHZlg=
|
||||||
|
modernc.org/libc v1.11.31/go.mod h1:FpBncUkEAtopRNJj8aRo29qUiyx5AvAlAxzlx9GNaVM=
|
||||||
|
modernc.org/libc v1.11.34/go.mod h1:+Tzc4hnb1iaX/SKAutJmfzES6awxfU1BPvrrJO0pYLg=
|
||||||
|
modernc.org/libc v1.11.37/go.mod h1:dCQebOwoO1046yTrfUE5nX1f3YpGZQKNcITUYWlrAWo=
|
||||||
|
modernc.org/libc v1.11.39/go.mod h1:mV8lJMo2S5A31uD0k1cMu7vrJbSA3J3waQJxpV4iqx8=
|
||||||
|
modernc.org/libc v1.11.42/go.mod h1:yzrLDU+sSjLE+D4bIhS7q1L5UwXDOw99PLSX0BlZvSQ=
|
||||||
|
modernc.org/libc v1.11.44/go.mod h1:KFq33jsma7F5WXiYelU8quMJasCCTnHK0mkri4yPHgA=
|
||||||
|
modernc.org/libc v1.11.45/go.mod h1:Y192orvfVQQYFzCNsn+Xt0Hxt4DiO4USpLNXBlXg/tM=
|
||||||
|
modernc.org/libc v1.11.47/go.mod h1:tPkE4PzCTW27E6AIKIR5IwHAQKCAtudEIeAV1/SiyBg=
|
||||||
|
modernc.org/libc v1.11.49/go.mod h1:9JrJuK5WTtoTWIFQ7QjX2Mb/bagYdZdscI3xrvHbXjE=
|
||||||
|
modernc.org/libc v1.11.51/go.mod h1:R9I8u9TS+meaWLdbfQhq2kFknTW0O3aw3kEMqDDxMaM=
|
||||||
|
modernc.org/libc v1.11.53/go.mod h1:5ip5vWYPAoMulkQ5XlSJTy12Sz5U6blOQiYasilVPsU=
|
||||||
|
modernc.org/libc v1.11.54/go.mod h1:S/FVnskbzVUrjfBqlGFIPA5m7UwB3n9fojHhCNfSsnw=
|
||||||
|
modernc.org/libc v1.11.55/go.mod h1:j2A5YBRm6HjNkoSs/fzZrSxCuwWqcMYTDPLNx0URn3M=
|
||||||
|
modernc.org/libc v1.11.56/go.mod h1:pakHkg5JdMLt2OgRadpPOTnyRXm/uzu+Yyg/LSLdi18=
|
||||||
|
modernc.org/libc v1.11.58/go.mod h1:ns94Rxv0OWyoQrDqMFfWwka2BcaF6/61CqJRK9LP7S8=
|
||||||
|
modernc.org/libc v1.11.70/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw=
|
||||||
|
modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw=
|
||||||
|
modernc.org/libc v1.11.75/go.mod h1:dGRVugT6edz361wmD9gk6ax1AbDSe0x5vji0dGJiPT0=
|
||||||
|
modernc.org/libc v1.11.82/go.mod h1:NF+Ek1BOl2jeC7lw3a7Jj5PWyHPwWD4aq3wVKxqV1fI=
|
||||||
|
modernc.org/libc v1.11.86/go.mod h1:ePuYgoQLmvxdNT06RpGnaDKJmDNEkV7ZPKI2jnsvZoE=
|
||||||
|
modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY=
|
||||||
modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
modernc.org/mathutil v1.4.0 h1:GCjoRaBew8ECCKINQA2nYjzvufFW9YiEuuB+rQ9bn2E=
|
modernc.org/mathutil v1.4.0 h1:GCjoRaBew8ECCKINQA2nYjzvufFW9YiEuuB+rQ9bn2E=
|
||||||
modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
|
modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
modernc.org/memory v1.0.4 h1:utMBrFcpnQDdNsmM6asmyH/FM9TqLPS7XF7otpJmrwM=
|
modernc.org/memory v1.0.4 h1:utMBrFcpnQDdNsmM6asmyH/FM9TqLPS7XF7otpJmrwM=
|
||||||
modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc=
|
modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc=
|
||||||
|
modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM=
|
||||||
modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A=
|
modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A=
|
||||||
modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
||||||
modernc.org/sqlite v1.11.2 h1:ShWQpeD3ag/bmx6TqidBlIWonWmQaSQKls3aenCbt+w=
|
modernc.org/sqlite v1.11.2 h1:ShWQpeD3ag/bmx6TqidBlIWonWmQaSQKls3aenCbt+w=
|
||||||
modernc.org/sqlite v1.11.2/go.mod h1:+mhs/P1ONd+6G7hcAs6irwDi/bjTQ7nLW6LHRBsEa3A=
|
modernc.org/sqlite v1.11.2/go.mod h1:+mhs/P1ONd+6G7hcAs6irwDi/bjTQ7nLW6LHRBsEa3A=
|
||||||
|
modernc.org/sqlite v1.14.2/go.mod h1:yqfn85u8wVOE6ub5UT8VI9JjhrwBUUCNyTACN0h6Sx8=
|
||||||
modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs=
|
modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs=
|
||||||
modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
|
modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
|
||||||
modernc.org/tcl v1.5.5/go.mod h1:ADkaTUuwukkrlhqwERyq0SM8OvyXo7+TjFz7yAF56EI=
|
modernc.org/tcl v1.5.5/go.mod h1:ADkaTUuwukkrlhqwERyq0SM8OvyXo7+TjFz7yAF56EI=
|
||||||
|
modernc.org/tcl v1.8.13/go.mod h1:V+q/Ef0IJaNUSECieLU4o+8IScapxnMyFV6i/7uQlAY=
|
||||||
modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk=
|
modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk=
|
||||||
modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
||||||
modernc.org/z v1.0.1/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA=
|
modernc.org/z v1.0.1/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA=
|
||||||
|
modernc.org/z v1.2.19/go.mod h1:+ZpP0pc4zz97eukOzW3xagV/lS82IpPN9NGG5pNF9vY=
|
||||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||||
@ -1125,7 +1246,12 @@ sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
|||||||
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
|
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
|
||||||
xorm.io/builder v0.3.9 h1:Sd65/LdWyO7LR8+Cbd+e7mm3sK/7U9k0jS3999IDHMc=
|
xorm.io/builder v0.3.9 h1:Sd65/LdWyO7LR8+Cbd+e7mm3sK/7U9k0jS3999IDHMc=
|
||||||
xorm.io/builder v0.3.9/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
|
xorm.io/builder v0.3.9/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
|
||||||
|
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
|
||||||
|
xorm.io/builder v0.3.12 h1:ASZYX7fQmy+o8UJdhlLHSW57JDOkM8DNhcAF5d0LiJM=
|
||||||
|
xorm.io/builder v0.3.12/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
|
||||||
xorm.io/xorm v1.2.3 h1:ZsVtQEsfkA31bbe8lhrP5cZKUjrxXQQO5tsr7Tf/0eo=
|
xorm.io/xorm v1.2.3 h1:ZsVtQEsfkA31bbe8lhrP5cZKUjrxXQQO5tsr7Tf/0eo=
|
||||||
xorm.io/xorm v1.2.3/go.mod h1:fTG8tSjk6O1BYxwuohZUK+S1glnRycsCF05L1qQyEU0=
|
xorm.io/xorm v1.2.3/go.mod h1:fTG8tSjk6O1BYxwuohZUK+S1glnRycsCF05L1qQyEU0=
|
||||||
xorm.io/xorm v1.2.5 h1:tqN7OhN8P9xi52qBb76I8m5maAJMz/SSbgK2RGPCPbo=
|
xorm.io/xorm v1.2.5 h1:tqN7OhN8P9xi52qBb76I8m5maAJMz/SSbgK2RGPCPbo=
|
||||||
xorm.io/xorm v1.2.5/go.mod h1:fTG8tSjk6O1BYxwuohZUK+S1glnRycsCF05L1qQyEU0=
|
xorm.io/xorm v1.2.5/go.mod h1:fTG8tSjk6O1BYxwuohZUK+S1glnRycsCF05L1qQyEU0=
|
||||||
|
xorm.io/xorm v1.3.1 h1:z5egKrDoOLqZFhMjcGF4FBHiTmE5/feQoHclfhNidfM=
|
||||||
|
xorm.io/xorm v1.3.1/go.mod h1:9NbjqdnjX6eyjRRhh01GHm64r6N9shTb/8Ak3YRt8Nw=
|
||||||
|
80
vendor/github.com/antchfx/htmlquery/README.md
generated
vendored
80
vendor/github.com/antchfx/htmlquery/README.md
generated
vendored
@ -12,6 +12,16 @@ Overview
|
|||||||
|
|
||||||
`htmlquery` built-in the query object caching feature based on [LRU](https://godoc.org/github.com/golang/groupcache/lru), this feature will caching the recently used XPATH query string. Enable query caching can avoid re-compile XPath expression each query.
|
`htmlquery` built-in the query object caching feature based on [LRU](https://godoc.org/github.com/golang/groupcache/lru), this feature will caching the recently used XPATH query string. Enable query caching can avoid re-compile XPath expression each query.
|
||||||
|
|
||||||
|
You can visit this page to learn about the supported XPath(1.0/2.0) syntax. https://github.com/antchfx/xpath
|
||||||
|
|
||||||
|
XPath query packages for Go
|
||||||
|
===
|
||||||
|
| Name | Description |
|
||||||
|
| ------------------------------------------------- | ----------------------------------------- |
|
||||||
|
| [htmlquery](https://github.com/antchfx/htmlquery) | XPath query package for the HTML document |
|
||||||
|
| [xmlquery](https://github.com/antchfx/xmlquery) | XPath query package for the XML document |
|
||||||
|
| [jsonquery](https://github.com/antchfx/jsonquery) | XPath query package for the JSON document |
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
====
|
====
|
||||||
|
|
||||||
@ -94,6 +104,30 @@ fmt.Printf("total count is %f", v)
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Quick Starts
|
||||||
|
===
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
doc, err := htmlquery.LoadURL("https://www.bing.com/search?q=golang")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
// Find all news item.
|
||||||
|
list, err := htmlquery.QueryAll(doc, "//ol/li")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
for i, n := range list {
|
||||||
|
a := htmlquery.FindOne(n, "//a")
|
||||||
|
if a != nil {
|
||||||
|
fmt.Printf("%d %s(%s)\n", i, htmlquery.InnerText(a), htmlquery.SelectAttr(a, "href"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
FAQ
|
FAQ
|
||||||
====
|
====
|
||||||
|
|
||||||
@ -124,52 +158,6 @@ BenchmarkDisableSelectorCache-4 500000 3162 ns/op
|
|||||||
htmlquery.DisableSelectorCache = true
|
htmlquery.DisableSelectorCache = true
|
||||||
```
|
```
|
||||||
|
|
||||||
Changelogs
|
|
||||||
===
|
|
||||||
|
|
||||||
2019-11-19
|
|
||||||
- Add built-in query object cache feature, avoid re-compilation for the same query string. [#16](https://github.com/antchfx/htmlquery/issues/16)
|
|
||||||
- Added LoadDoc [18](https://github.com/antchfx/htmlquery/pull/18)
|
|
||||||
|
|
||||||
2019-10-05
|
|
||||||
- Add new methods that compatible with invalid XPath expression error: `QueryAll` and `Query`.
|
|
||||||
- Add `QuerySelector` and `QuerySelectorAll` methods, supported reused your query object.
|
|
||||||
|
|
||||||
2019-02-04
|
|
||||||
- [#7](https://github.com/antchfx/htmlquery/issues/7) Removed deprecated `FindEach()` and `FindEachWithBreak()` methods.
|
|
||||||
|
|
||||||
2018-12-28
|
|
||||||
- Avoid adding duplicate elements to list for `Find()` method. [#6](https://github.com/antchfx/htmlquery/issues/6)
|
|
||||||
|
|
||||||
Tutorial
|
|
||||||
===
|
|
||||||
|
|
||||||
```go
|
|
||||||
func main() {
|
|
||||||
doc, err := htmlquery.LoadURL("https://www.bing.com/search?q=golang")
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
// Find all news item.
|
|
||||||
list, err := htmlquery.QueryAll(doc, "//ol/li")
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
for i, n := range list {
|
|
||||||
a := htmlquery.FindOne(n, "//a")
|
|
||||||
fmt.Printf("%d %s(%s)\n", i, htmlquery.InnerText(a), htmlquery.SelectAttr(a, "href"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
List of supported XPath query packages
|
|
||||||
===
|
|
||||||
| Name | Description |
|
|
||||||
| ------------------------------------------------- | ----------------------------------------- |
|
|
||||||
| [htmlquery](https://github.com/antchfx/htmlquery) | XPath query package for the HTML document |
|
|
||||||
| [xmlquery](https://github.com/antchfx/xmlquery) | XPath query package for the XML document |
|
|
||||||
| [jsonquery](https://github.com/antchfx/jsonquery) | XPath query package for the JSON document |
|
|
||||||
|
|
||||||
Questions
|
Questions
|
||||||
===
|
===
|
||||||
Please let me know if you have any questions.
|
Please let me know if you have any questions.
|
||||||
|
5
vendor/github.com/antchfx/htmlquery/query.go
generated
vendored
5
vendor/github.com/antchfx/htmlquery/query.go
generated
vendored
@ -83,11 +83,6 @@ func QuerySelectorAll(top *html.Node, selector *xpath.Expr) []*html.Node {
|
|||||||
for t.MoveNext() {
|
for t.MoveNext() {
|
||||||
nav := t.Current().(*NodeNavigator)
|
nav := t.Current().(*NodeNavigator)
|
||||||
n := getCurrentNode(nav)
|
n := getCurrentNode(nav)
|
||||||
// avoid adding duplicate nodes.
|
|
||||||
if len(elems) > 0 && (elems[0] == n || (nav.NodeType() == xpath.AttributeNode &&
|
|
||||||
nav.LocalName() == elems[0].Data && nav.Value() == InnerText(elems[0]))) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
elems = append(elems, n)
|
elems = append(elems, n)
|
||||||
}
|
}
|
||||||
return elems
|
return elems
|
||||||
|
15
vendor/github.com/antchfx/xpath/README.md
generated
vendored
15
vendor/github.com/antchfx/xpath/README.md
generated
vendored
@ -57,6 +57,7 @@ Supported Features
|
|||||||
|
|
||||||
- `(a, b, c)` : Evaluates each of its operands and concatenates the resulting sequences, in order, into a single result sequence
|
- `(a, b, c)` : Evaluates each of its operands and concatenates the resulting sequences, in order, into a single result sequence
|
||||||
|
|
||||||
|
- `(a/b)` : Selects all matches nodes as grouping set.
|
||||||
|
|
||||||
#### Node Axes
|
#### Node Axes
|
||||||
|
|
||||||
@ -158,16 +159,4 @@ Supported Features
|
|||||||
`system-property()`| ✗ |
|
`system-property()`| ✗ |
|
||||||
`translate()`| ✓ |
|
`translate()`| ✓ |
|
||||||
`true()`| ✓ |
|
`true()`| ✓ |
|
||||||
`unparsed-entity-url()` | ✗ |
|
`unparsed-entity-url()` | ✗ |
|
||||||
|
|
||||||
Changelogs
|
|
||||||
===
|
|
||||||
|
|
||||||
2019-03-19
|
|
||||||
- optimize XPath `|` operation performance. [#33](https://github.com/antchfx/xpath/issues/33). Tips: suggest split into multiple subquery if you have a lot of `|` operations.
|
|
||||||
|
|
||||||
2019-01-29
|
|
||||||
- improvement `normalize-space` function. [#32](https://github.com/antchfx/xpath/issues/32)
|
|
||||||
|
|
||||||
2018-12-07
|
|
||||||
- supports XPath 2.0 Sequence expressions. [#30](https://github.com/antchfx/xpath/pull/30) by [@minherz](https://github.com/minherz).
|
|
2
vendor/github.com/antchfx/xpath/build.go
generated
vendored
2
vendor/github.com/antchfx/xpath/build.go
generated
vendored
@ -42,7 +42,7 @@ func axisPredicate(root *axisNode) func(NodeNavigator) bool {
|
|||||||
}
|
}
|
||||||
nametest := root.LocalName != "" || root.Prefix != ""
|
nametest := root.LocalName != "" || root.Prefix != ""
|
||||||
predicate := func(n NodeNavigator) bool {
|
predicate := func(n NodeNavigator) bool {
|
||||||
if typ == n.NodeType() || typ == allNode || typ == TextNode {
|
if typ == n.NodeType() || typ == allNode {
|
||||||
if nametest {
|
if nametest {
|
||||||
if root.LocalName == n.LocalName() && root.Prefix == n.Prefix() {
|
if root.LocalName == n.LocalName() && root.Prefix == n.Prefix() {
|
||||||
return true
|
return true
|
||||||
|
10
vendor/github.com/antchfx/xpath/func.go
generated
vendored
10
vendor/github.com/antchfx/xpath/func.go
generated
vendored
@ -122,17 +122,19 @@ func asNumber(t iterator, o interface{}) float64 {
|
|||||||
return typ
|
return typ
|
||||||
case string:
|
case string:
|
||||||
v, err := strconv.ParseFloat(typ, 64)
|
v, err := strconv.ParseFloat(typ, 64)
|
||||||
if err != nil {
|
if err == nil {
|
||||||
panic(errors.New("ceiling() function argument type must be a node-set or number"))
|
return v
|
||||||
}
|
}
|
||||||
return v
|
|
||||||
}
|
}
|
||||||
return 0
|
return math.NaN()
|
||||||
}
|
}
|
||||||
|
|
||||||
// ceilingFunc is a XPath Node Set functions ceiling(node-set).
|
// ceilingFunc is a XPath Node Set functions ceiling(node-set).
|
||||||
func ceilingFunc(q query, t iterator) interface{} {
|
func ceilingFunc(q query, t iterator) interface{} {
|
||||||
val := asNumber(t, functionArgs(q).Evaluate(t))
|
val := asNumber(t, functionArgs(q).Evaluate(t))
|
||||||
|
// if math.IsNaN(val) {
|
||||||
|
// panic(errors.New("ceiling() function argument type must be a valid number"))
|
||||||
|
// }
|
||||||
return math.Ceil(val)
|
return math.Ceil(val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
vendor/github.com/antchfx/xpath/func_go110.go
generated
vendored
2
vendor/github.com/antchfx/xpath/func_go110.go
generated
vendored
@ -11,6 +11,6 @@ func round(f float64) int {
|
|||||||
return int(math.Round(f))
|
return int(math.Round(f))
|
||||||
}
|
}
|
||||||
|
|
||||||
func newStringBuilder() stringBuilder{
|
func newStringBuilder() stringBuilder {
|
||||||
return &strings.Builder{}
|
return &strings.Builder{}
|
||||||
}
|
}
|
||||||
|
29
vendor/github.com/antchfx/xpath/operator.go
generated
vendored
29
vendor/github.com/antchfx/xpath/operator.go
generated
vendored
@ -165,15 +165,28 @@ func cmpNodeSetString(t iterator, op string, m, n interface{}) bool {
|
|||||||
func cmpNodeSetNodeSet(t iterator, op string, m, n interface{}) bool {
|
func cmpNodeSetNodeSet(t iterator, op string, m, n interface{}) bool {
|
||||||
a := m.(query)
|
a := m.(query)
|
||||||
b := n.(query)
|
b := n.(query)
|
||||||
x := a.Select(t)
|
for {
|
||||||
if x == nil {
|
x := a.Select(t)
|
||||||
return false
|
if x == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
y := b.Select(t)
|
||||||
|
if y == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for {
|
||||||
|
if cmpStringStringF(op, x.Value(), y.Value()) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if y = b.Select(t); y == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// reset
|
||||||
|
b.Evaluate(t)
|
||||||
}
|
}
|
||||||
y := b.Select(t)
|
|
||||||
if y == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return cmpStringStringF(op, x.Value(), y.Value())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func cmpStringNumeric(t iterator, op string, m, n interface{}) bool {
|
func cmpStringNumeric(t iterator, op string, m, n interface{}) bool {
|
||||||
|
4
vendor/github.com/antchfx/xpath/query.go
generated
vendored
4
vendor/github.com/antchfx/xpath/query.go
generated
vendored
@ -820,6 +820,8 @@ func (b *booleanQuery) Select(t iterator) NodeNavigator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *booleanQuery) Evaluate(t iterator) interface{} {
|
func (b *booleanQuery) Evaluate(t iterator) interface{} {
|
||||||
|
n := t.Current().Copy()
|
||||||
|
|
||||||
m := b.Left.Evaluate(t)
|
m := b.Left.Evaluate(t)
|
||||||
left := asBool(t, m)
|
left := asBool(t, m)
|
||||||
if b.IsOr && left {
|
if b.IsOr && left {
|
||||||
@ -827,6 +829,8 @@ func (b *booleanQuery) Evaluate(t iterator) interface{} {
|
|||||||
} else if !b.IsOr && !left {
|
} else if !b.IsOr && !left {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t.Current().MoveTo(n)
|
||||||
m = b.Right.Evaluate(t)
|
m = b.Right.Evaluate(t)
|
||||||
return asBool(t, m)
|
return asBool(t, m)
|
||||||
}
|
}
|
||||||
|
4
vendor/github.com/gobuffalo/here/dir.go
generated
vendored
4
vendor/github.com/gobuffalo/here/dir.go
generated
vendored
@ -80,5 +80,9 @@ func fromNonGoDir(dir string) (Info, error) {
|
|||||||
return i, fmt.Errorf("here.nonGoDir: %s: %w", dir, err)
|
return i, fmt.Errorf("here.nonGoDir: %s: %w", dir, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if i.ImportPath == "" && i.Module.Path != "command-line-arguments" {
|
||||||
|
i.ImportPath = i.Module.Path
|
||||||
|
}
|
||||||
|
|
||||||
return i, nil
|
return i, nil
|
||||||
}
|
}
|
||||||
|
8
vendor/github.com/goccy/go-json/.golangci.yml
generated
vendored
8
vendor/github.com/goccy/go-json/.golangci.yml
generated
vendored
@ -48,6 +48,14 @@ linters:
|
|||||||
- nlreturn
|
- nlreturn
|
||||||
- testpackage
|
- testpackage
|
||||||
- wsl
|
- wsl
|
||||||
|
- varnamelen
|
||||||
|
- nilnil
|
||||||
|
- ireturn
|
||||||
|
- govet
|
||||||
|
- forcetypeassert
|
||||||
|
- cyclop
|
||||||
|
- containedctx
|
||||||
|
- revive
|
||||||
|
|
||||||
issues:
|
issues:
|
||||||
exclude-rules:
|
exclude-rules:
|
||||||
|
47
vendor/github.com/goccy/go-json/CHANGELOG.md
generated
vendored
47
vendor/github.com/goccy/go-json/CHANGELOG.md
generated
vendored
@ -1,3 +1,50 @@
|
|||||||
|
# v0.9.10 - 2022/07/15
|
||||||
|
|
||||||
|
### Fix bugs
|
||||||
|
|
||||||
|
* Fix boundary exception of type caching ( #382 )
|
||||||
|
|
||||||
|
# v0.9.9 - 2022/07/15
|
||||||
|
|
||||||
|
### Fix bugs
|
||||||
|
|
||||||
|
* Fix encoding of directed interface with typed nil ( #377 )
|
||||||
|
* Fix embedded primitive type encoding using alias ( #378 )
|
||||||
|
* Fix slice/array type encoding with types implementing MarshalJSON ( #379 )
|
||||||
|
* Fix unicode decoding when the expected buffer state is not met after reading ( #380 )
|
||||||
|
|
||||||
|
# v0.9.8 - 2022/06/30
|
||||||
|
|
||||||
|
### Fix bugs
|
||||||
|
|
||||||
|
* Fix decoding of surrogate-pair ( #365 )
|
||||||
|
* Fix handling of embedded primitive type ( #366 )
|
||||||
|
* Add validation of escape sequence for decoder ( #367 )
|
||||||
|
* Fix stream tokenizing respecting UseNumber ( #369 )
|
||||||
|
* Fix encoding when struct pointer type that implements Marshal JSON is embedded ( #375 )
|
||||||
|
|
||||||
|
### Improve performance
|
||||||
|
|
||||||
|
* Improve performance of linkRecursiveCode ( #368 )
|
||||||
|
|
||||||
|
# v0.9.7 - 2022/04/22
|
||||||
|
|
||||||
|
### Fix bugs
|
||||||
|
|
||||||
|
#### Encoder
|
||||||
|
|
||||||
|
* Add filtering process for encoding on slow path ( #355 )
|
||||||
|
* Fix encoding of interface{} with pointer type ( #363 )
|
||||||
|
|
||||||
|
#### Decoder
|
||||||
|
|
||||||
|
* Fix map key decoder that implements UnmarshalJSON ( #353 )
|
||||||
|
* Fix decoding of []uint8 type ( #361 )
|
||||||
|
|
||||||
|
### New features
|
||||||
|
|
||||||
|
* Add DebugWith option for encoder ( #356 )
|
||||||
|
|
||||||
# v0.9.6 - 2022/03/22
|
# v0.9.6 - 2022/03/22
|
||||||
|
|
||||||
### Fix bugs
|
### Fix bugs
|
||||||
|
2
vendor/github.com/goccy/go-json/encode.go
generated
vendored
2
vendor/github.com/goccy/go-json/encode.go
generated
vendored
@ -3,6 +3,7 @@ package json
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"io"
|
"io"
|
||||||
|
"os"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/goccy/go-json/internal/encoder"
|
"github.com/goccy/go-json/internal/encoder"
|
||||||
@ -62,6 +63,7 @@ func (e *Encoder) encodeWithOption(ctx *encoder.RuntimeContext, v interface{}, o
|
|||||||
ctx.Option.Flag |= encoder.HTMLEscapeOption
|
ctx.Option.Flag |= encoder.HTMLEscapeOption
|
||||||
}
|
}
|
||||||
ctx.Option.Flag |= encoder.NormalizeUTF8Option
|
ctx.Option.Flag |= encoder.NormalizeUTF8Option
|
||||||
|
ctx.Option.DebugOut = os.Stdout
|
||||||
for _, optFunc := range optFuncs {
|
for _, optFunc := range optFuncs {
|
||||||
optFunc(ctx.Option)
|
optFunc(ctx.Option)
|
||||||
}
|
}
|
||||||
|
5
vendor/github.com/goccy/go-json/internal/decoder/bytes.go
generated
vendored
5
vendor/github.com/goccy/go-json/internal/decoder/bytes.go
generated
vendored
@ -23,9 +23,8 @@ func byteUnmarshalerSliceDecoder(typ *runtime.Type, structName string, fieldName
|
|||||||
unmarshalDecoder = newUnmarshalJSONDecoder(runtime.PtrTo(typ), structName, fieldName)
|
unmarshalDecoder = newUnmarshalJSONDecoder(runtime.PtrTo(typ), structName, fieldName)
|
||||||
case runtime.PtrTo(typ).Implements(unmarshalTextType):
|
case runtime.PtrTo(typ).Implements(unmarshalTextType):
|
||||||
unmarshalDecoder = newUnmarshalTextDecoder(runtime.PtrTo(typ), structName, fieldName)
|
unmarshalDecoder = newUnmarshalTextDecoder(runtime.PtrTo(typ), structName, fieldName)
|
||||||
}
|
default:
|
||||||
if unmarshalDecoder == nil {
|
unmarshalDecoder, _ = compileUint8(typ, structName, fieldName)
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
return newSliceDecoder(unmarshalDecoder, typ, 1, structName, fieldName)
|
return newSliceDecoder(unmarshalDecoder, typ, 1, structName, fieldName)
|
||||||
}
|
}
|
||||||
|
23
vendor/github.com/goccy/go-json/internal/decoder/compile.go
generated
vendored
23
vendor/github.com/goccy/go-json/internal/decoder/compile.go
generated
vendored
@ -24,7 +24,7 @@ func init() {
|
|||||||
if typeAddr == nil {
|
if typeAddr == nil {
|
||||||
typeAddr = &runtime.TypeAddr{}
|
typeAddr = &runtime.TypeAddr{}
|
||||||
}
|
}
|
||||||
cachedDecoder = make([]Decoder, typeAddr.AddrRange>>typeAddr.AddrShift)
|
cachedDecoder = make([]Decoder, typeAddr.AddrRange>>typeAddr.AddrShift+1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadDecoderMap() map[uintptr]Decoder {
|
func loadDecoderMap() map[uintptr]Decoder {
|
||||||
@ -154,6 +154,9 @@ func compileMapKey(typ *runtime.Type, structName, fieldName string, structTypeTo
|
|||||||
if runtime.PtrTo(typ).Implements(unmarshalTextType) {
|
if runtime.PtrTo(typ).Implements(unmarshalTextType) {
|
||||||
return newUnmarshalTextDecoder(runtime.PtrTo(typ), structName, fieldName), nil
|
return newUnmarshalTextDecoder(runtime.PtrTo(typ), structName, fieldName), nil
|
||||||
}
|
}
|
||||||
|
if typ.Kind() == reflect.String {
|
||||||
|
return newStringDecoder(structName, fieldName), nil
|
||||||
|
}
|
||||||
dec, err := compile(typ, structName, fieldName, structTypeToDecoder)
|
dec, err := compile(typ, structName, fieldName, structTypeToDecoder)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -390,7 +393,25 @@ func compileStruct(typ *runtime.Type, structName, fieldName string, structTypeTo
|
|||||||
}
|
}
|
||||||
allFields = append(allFields, fieldSet)
|
allFields = append(allFields, fieldSet)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
fieldSet := &structFieldSet{
|
||||||
|
dec: pdec,
|
||||||
|
offset: field.Offset,
|
||||||
|
isTaggedKey: tag.IsTaggedKey,
|
||||||
|
key: field.Name,
|
||||||
|
keyLen: int64(len(field.Name)),
|
||||||
|
}
|
||||||
|
allFields = append(allFields, fieldSet)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
fieldSet := &structFieldSet{
|
||||||
|
dec: dec,
|
||||||
|
offset: field.Offset,
|
||||||
|
isTaggedKey: tag.IsTaggedKey,
|
||||||
|
key: field.Name,
|
||||||
|
keyLen: int64(len(field.Name)),
|
||||||
|
}
|
||||||
|
allFields = append(allFields, fieldSet)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if tag.IsString && isStringTagSupportedType(runtime.Type2RType(field.Type)) {
|
if tag.IsString && isStringTagSupportedType(runtime.Type2RType(field.Type)) {
|
||||||
|
1
vendor/github.com/goccy/go-json/internal/decoder/compile_norace.go
generated
vendored
1
vendor/github.com/goccy/go-json/internal/decoder/compile_norace.go
generated
vendored
@ -1,3 +1,4 @@
|
|||||||
|
//go:build !race
|
||||||
// +build !race
|
// +build !race
|
||||||
|
|
||||||
package decoder
|
package decoder
|
||||||
|
1
vendor/github.com/goccy/go-json/internal/decoder/compile_race.go
generated
vendored
1
vendor/github.com/goccy/go-json/internal/decoder/compile_race.go
generated
vendored
@ -1,3 +1,4 @@
|
|||||||
|
//go:build race
|
||||||
// +build race
|
// +build race
|
||||||
|
|
||||||
package decoder
|
package decoder
|
||||||
|
7
vendor/github.com/goccy/go-json/internal/decoder/stream.go
generated
vendored
7
vendor/github.com/goccy/go-json/internal/decoder/stream.go
generated
vendored
@ -138,8 +138,11 @@ func (s *Stream) Token() (interface{}, error) {
|
|||||||
s.cursor++
|
s.cursor++
|
||||||
case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
|
case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
|
||||||
bytes := floatBytes(s)
|
bytes := floatBytes(s)
|
||||||
s := *(*string)(unsafe.Pointer(&bytes))
|
str := *(*string)(unsafe.Pointer(&bytes))
|
||||||
f64, err := strconv.ParseFloat(s, 64)
|
if s.UseNumber {
|
||||||
|
return json.Number(str), nil
|
||||||
|
}
|
||||||
|
f64, err := strconv.ParseFloat(str, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
44
vendor/github.com/goccy/go-json/internal/decoder/string.go
generated
vendored
44
vendor/github.com/goccy/go-json/internal/decoder/string.go
generated
vendored
@ -2,6 +2,7 @@ package decoder
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"unicode"
|
"unicode"
|
||||||
"unicode/utf16"
|
"unicode/utf16"
|
||||||
@ -94,24 +95,30 @@ func unicodeToRune(code []byte) rune {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func readAtLeast(s *Stream, n int64, p *unsafe.Pointer) bool {
|
||||||
|
for s.cursor+n >= s.length {
|
||||||
|
if !s.read() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
*p = s.bufptr()
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func decodeUnicodeRune(s *Stream, p unsafe.Pointer) (rune, int64, unsafe.Pointer, error) {
|
func decodeUnicodeRune(s *Stream, p unsafe.Pointer) (rune, int64, unsafe.Pointer, error) {
|
||||||
const defaultOffset = 5
|
const defaultOffset = 5
|
||||||
const surrogateOffset = 11
|
const surrogateOffset = 11
|
||||||
|
|
||||||
if s.cursor+defaultOffset >= s.length {
|
if !readAtLeast(s, defaultOffset, &p) {
|
||||||
if !s.read() {
|
return rune(0), 0, nil, errors.ErrInvalidCharacter(s.char(), "escaped string", s.totalOffset())
|
||||||
return rune(0), 0, nil, errors.ErrInvalidCharacter(s.char(), "escaped string", s.totalOffset())
|
|
||||||
}
|
|
||||||
p = s.bufptr()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
r := unicodeToRune(s.buf[s.cursor+1 : s.cursor+defaultOffset])
|
r := unicodeToRune(s.buf[s.cursor+1 : s.cursor+defaultOffset])
|
||||||
if utf16.IsSurrogate(r) {
|
if utf16.IsSurrogate(r) {
|
||||||
if s.cursor+surrogateOffset >= s.length {
|
if !readAtLeast(s, surrogateOffset, &p) {
|
||||||
s.read()
|
return unicode.ReplacementChar, defaultOffset, p, nil
|
||||||
p = s.bufptr()
|
|
||||||
}
|
}
|
||||||
if s.cursor+surrogateOffset >= s.length || s.buf[s.cursor+defaultOffset] != '\\' || s.buf[s.cursor+defaultOffset+1] != 'u' {
|
if s.buf[s.cursor+defaultOffset] != '\\' || s.buf[s.cursor+defaultOffset+1] != 'u' {
|
||||||
return unicode.ReplacementChar, defaultOffset, p, nil
|
return unicode.ReplacementChar, defaultOffset, p, nil
|
||||||
}
|
}
|
||||||
r2 := unicodeToRune(s.buf[s.cursor+defaultOffset+2 : s.cursor+surrogateOffset])
|
r2 := unicodeToRune(s.buf[s.cursor+defaultOffset+2 : s.cursor+surrogateOffset])
|
||||||
@ -323,6 +330,12 @@ func (d *stringDecoder) decodeByte(buf []byte, cursor int64) ([]byte, int64, err
|
|||||||
if cursor+5 >= buflen {
|
if cursor+5 >= buflen {
|
||||||
return nil, 0, errors.ErrUnexpectedEndOfJSON("escaped string", cursor)
|
return nil, 0, errors.ErrUnexpectedEndOfJSON("escaped string", cursor)
|
||||||
}
|
}
|
||||||
|
for i := int64(1); i <= 4; i++ {
|
||||||
|
c := char(b, cursor+i)
|
||||||
|
if !(('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F')) {
|
||||||
|
return nil, 0, errors.ErrSyntax(fmt.Sprintf("json: invalid character %c in \\u hexadecimal character escape", c), cursor+i)
|
||||||
|
}
|
||||||
|
}
|
||||||
cursor += 5
|
cursor += 5
|
||||||
default:
|
default:
|
||||||
return nil, 0, errors.ErrUnexpectedEndOfJSON("escaped string", cursor)
|
return nil, 0, errors.ErrUnexpectedEndOfJSON("escaped string", cursor)
|
||||||
@ -386,6 +399,19 @@ func unescapeString(buf []byte) int {
|
|||||||
v3 := hexToInt[char(src, 4)]
|
v3 := hexToInt[char(src, 4)]
|
||||||
v4 := hexToInt[char(src, 5)]
|
v4 := hexToInt[char(src, 5)]
|
||||||
code := rune((v1 << 12) | (v2 << 8) | (v3 << 4) | v4)
|
code := rune((v1 << 12) | (v2 << 8) | (v3 << 4) | v4)
|
||||||
|
if code >= 0xd800 && code < 0xdc00 && uintptr(unsafeAdd(src, 11)) < uintptr(end) {
|
||||||
|
if char(src, 6) == '\\' && char(src, 7) == 'u' {
|
||||||
|
v1 := hexToInt[char(src, 8)]
|
||||||
|
v2 := hexToInt[char(src, 9)]
|
||||||
|
v3 := hexToInt[char(src, 10)]
|
||||||
|
v4 := hexToInt[char(src, 11)]
|
||||||
|
lo := rune((v1 << 12) | (v2 << 8) | (v3 << 4) | v4)
|
||||||
|
if lo >= 0xdc00 && lo < 0xe000 {
|
||||||
|
code = (code-0xd800)<<10 | (lo - 0xdc00) + 0x10000
|
||||||
|
src = unsafeAdd(src, 6)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
var b [utf8.UTFMax]byte
|
var b [utf8.UTFMax]byte
|
||||||
n := utf8.EncodeRune(b[:], code)
|
n := utf8.EncodeRune(b[:], code)
|
||||||
switch n {
|
switch n {
|
||||||
|
16
vendor/github.com/goccy/go-json/internal/encoder/code.go
generated
vendored
16
vendor/github.com/goccy/go-json/internal/encoder/code.go
generated
vendored
@ -2,6 +2,7 @@ package encoder
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/goccy/go-json/internal/runtime"
|
"github.com/goccy/go-json/internal/runtime"
|
||||||
@ -383,7 +384,7 @@ func (c *StructCode) Kind() CodeKind {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *StructCode) lastFieldCode(field *StructFieldCode, firstField *Opcode) *Opcode {
|
func (c *StructCode) lastFieldCode(field *StructFieldCode, firstField *Opcode) *Opcode {
|
||||||
if field.isAnonymous {
|
if isEmbeddedStruct(field) {
|
||||||
return c.lastAnonymousFieldCode(firstField)
|
return c.lastAnonymousFieldCode(firstField)
|
||||||
}
|
}
|
||||||
lastField := firstField
|
lastField := firstField
|
||||||
@ -436,7 +437,7 @@ func (c *StructCode) ToOpcode(ctx *compileContext) Opcodes {
|
|||||||
}
|
}
|
||||||
if isEndField {
|
if isEndField {
|
||||||
endField := fieldCodes.Last()
|
endField := fieldCodes.Last()
|
||||||
if field.isAnonymous {
|
if isEmbeddedStruct(field) {
|
||||||
firstField.End = endField
|
firstField.End = endField
|
||||||
lastField := c.lastAnonymousFieldCode(firstField)
|
lastField := c.lastAnonymousFieldCode(firstField)
|
||||||
lastField.NextField = endField
|
lastField.NextField = endField
|
||||||
@ -1003,3 +1004,14 @@ func convertPtrOp(code *Opcode) OpType {
|
|||||||
}
|
}
|
||||||
return code.Op
|
return code.Op
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isEmbeddedStruct(field *StructFieldCode) bool {
|
||||||
|
if !field.isAnonymous {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
t := field.typ
|
||||||
|
if t.Kind() == reflect.Ptr {
|
||||||
|
t = t.Elem()
|
||||||
|
}
|
||||||
|
return t.Kind() == reflect.Struct
|
||||||
|
}
|
||||||
|
37
vendor/github.com/goccy/go-json/internal/encoder/compiler.go
generated
vendored
37
vendor/github.com/goccy/go-json/internal/encoder/compiler.go
generated
vendored
@ -31,7 +31,7 @@ func init() {
|
|||||||
if typeAddr == nil {
|
if typeAddr == nil {
|
||||||
typeAddr = &runtime.TypeAddr{}
|
typeAddr = &runtime.TypeAddr{}
|
||||||
}
|
}
|
||||||
cachedOpcodeSets = make([]*OpcodeSet, typeAddr.AddrRange>>typeAddr.AddrShift)
|
cachedOpcodeSets = make([]*OpcodeSet, typeAddr.AddrRange>>typeAddr.AddrShift+1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadOpcodeMap() map[uintptr]*OpcodeSet {
|
func loadOpcodeMap() map[uintptr]*OpcodeSet {
|
||||||
@ -487,7 +487,10 @@ func (c *Compiler) listElemCode(typ *runtime.Type) (Code, error) {
|
|||||||
case typ.Kind() == reflect.Map:
|
case typ.Kind() == reflect.Map:
|
||||||
return c.ptrCode(runtime.PtrTo(typ))
|
return c.ptrCode(runtime.PtrTo(typ))
|
||||||
default:
|
default:
|
||||||
code, err := c.typeToCodeWithPtr(typ, false)
|
// isPtr was originally used to indicate whether the type of top level is pointer.
|
||||||
|
// However, since the slice/array element is a specification that can get the pointer address, explicitly set isPtr to true.
|
||||||
|
// See here for related issues: https://github.com/goccy/go-json/issues/370
|
||||||
|
code, err := c.typeToCodeWithPtr(typ, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -853,6 +856,9 @@ func (c *Compiler) implementsMarshalText(typ *runtime.Type) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Compiler) isNilableType(typ *runtime.Type) bool {
|
func (c *Compiler) isNilableType(typ *runtime.Type) bool {
|
||||||
|
if !runtime.IfaceIndir(typ) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
switch typ.Kind() {
|
switch typ.Kind() {
|
||||||
case reflect.Ptr:
|
case reflect.Ptr:
|
||||||
return true
|
return true
|
||||||
@ -885,29 +891,40 @@ func (c *Compiler) codeToOpcode(ctx *compileContext, typ *runtime.Type, code Cod
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Compiler) linkRecursiveCode(ctx *compileContext) {
|
func (c *Compiler) linkRecursiveCode(ctx *compileContext) {
|
||||||
|
recursiveCodes := map[uintptr]*CompiledCode{}
|
||||||
for _, recursive := range *ctx.recursiveCodes {
|
for _, recursive := range *ctx.recursiveCodes {
|
||||||
typeptr := uintptr(unsafe.Pointer(recursive.Type))
|
typeptr := uintptr(unsafe.Pointer(recursive.Type))
|
||||||
codes := ctx.structTypeToCodes[typeptr]
|
codes := ctx.structTypeToCodes[typeptr]
|
||||||
compiled := recursive.Jmp
|
if recursiveCode, ok := recursiveCodes[typeptr]; ok {
|
||||||
compiled.Code = copyOpcode(codes.First())
|
*recursive.Jmp = *recursiveCode
|
||||||
code := compiled.Code
|
continue
|
||||||
code.End.Next = newEndOp(&compileContext{}, recursive.Type)
|
}
|
||||||
code.Op = code.Op.PtrHeadToHead()
|
|
||||||
|
|
||||||
beforeLastCode := code.End
|
code := copyOpcode(codes.First())
|
||||||
lastCode := beforeLastCode.Next
|
code.Op = code.Op.PtrHeadToHead()
|
||||||
|
lastCode := newEndOp(&compileContext{}, recursive.Type)
|
||||||
|
lastCode.Op = OpRecursiveEnd
|
||||||
|
|
||||||
|
// OpRecursiveEnd must set before call TotalLength
|
||||||
|
code.End.Next = lastCode
|
||||||
|
|
||||||
totalLength := code.TotalLength()
|
totalLength := code.TotalLength()
|
||||||
|
|
||||||
|
// Idx, ElemIdx, Length must set after call TotalLength
|
||||||
lastCode.Idx = uint32((totalLength + 1) * uintptrSize)
|
lastCode.Idx = uint32((totalLength + 1) * uintptrSize)
|
||||||
lastCode.ElemIdx = lastCode.Idx + uintptrSize
|
lastCode.ElemIdx = lastCode.Idx + uintptrSize
|
||||||
lastCode.Length = lastCode.Idx + 2*uintptrSize
|
lastCode.Length = lastCode.Idx + 2*uintptrSize
|
||||||
code.End.Next.Op = OpRecursiveEnd
|
|
||||||
|
|
||||||
// extend length to alloc slot for elemIdx + length
|
// extend length to alloc slot for elemIdx + length
|
||||||
curTotalLength := uintptr(recursive.TotalLength()) + 3
|
curTotalLength := uintptr(recursive.TotalLength()) + 3
|
||||||
nextTotalLength := uintptr(totalLength) + 3
|
nextTotalLength := uintptr(totalLength) + 3
|
||||||
|
|
||||||
|
compiled := recursive.Jmp
|
||||||
|
compiled.Code = code
|
||||||
compiled.CurLen = curTotalLength
|
compiled.CurLen = curTotalLength
|
||||||
compiled.NextLen = nextTotalLength
|
compiled.NextLen = nextTotalLength
|
||||||
compiled.Linked = true
|
compiled.Linked = true
|
||||||
|
|
||||||
|
recursiveCodes[typeptr] = compiled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
6
vendor/github.com/goccy/go-json/internal/encoder/compiler_norace.go
generated
vendored
6
vendor/github.com/goccy/go-json/internal/encoder/compiler_norace.go
generated
vendored
@ -5,7 +5,11 @@ package encoder
|
|||||||
|
|
||||||
func CompileToGetCodeSet(ctx *RuntimeContext, typeptr uintptr) (*OpcodeSet, error) {
|
func CompileToGetCodeSet(ctx *RuntimeContext, typeptr uintptr) (*OpcodeSet, error) {
|
||||||
if typeptr > typeAddr.MaxTypeAddr || typeptr < typeAddr.BaseTypeAddr {
|
if typeptr > typeAddr.MaxTypeAddr || typeptr < typeAddr.BaseTypeAddr {
|
||||||
return compileToGetCodeSetSlowPath(typeptr)
|
codeSet, err := compileToGetCodeSetSlowPath(typeptr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return getFilteredCodeSetIfNeeded(ctx, codeSet)
|
||||||
}
|
}
|
||||||
index := (typeptr - typeAddr.BaseTypeAddr) >> typeAddr.AddrShift
|
index := (typeptr - typeAddr.BaseTypeAddr) >> typeAddr.AddrShift
|
||||||
if codeSet := cachedOpcodeSets[index]; codeSet != nil {
|
if codeSet := cachedOpcodeSets[index]; codeSet != nil {
|
||||||
|
6
vendor/github.com/goccy/go-json/internal/encoder/compiler_race.go
generated
vendored
6
vendor/github.com/goccy/go-json/internal/encoder/compiler_race.go
generated
vendored
@ -11,7 +11,11 @@ var setsMu sync.RWMutex
|
|||||||
|
|
||||||
func CompileToGetCodeSet(ctx *RuntimeContext, typeptr uintptr) (*OpcodeSet, error) {
|
func CompileToGetCodeSet(ctx *RuntimeContext, typeptr uintptr) (*OpcodeSet, error) {
|
||||||
if typeptr > typeAddr.MaxTypeAddr || typeptr < typeAddr.BaseTypeAddr {
|
if typeptr > typeAddr.MaxTypeAddr || typeptr < typeAddr.BaseTypeAddr {
|
||||||
return compileToGetCodeSetSlowPath(typeptr)
|
codeSet, err := compileToGetCodeSetSlowPath(typeptr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return getFilteredCodeSetIfNeeded(ctx, codeSet)
|
||||||
}
|
}
|
||||||
index := (typeptr - typeAddr.BaseTypeAddr) >> typeAddr.AddrShift
|
index := (typeptr - typeAddr.BaseTypeAddr) >> typeAddr.AddrShift
|
||||||
setsMu.RLock()
|
setsMu.RLock()
|
||||||
|
2
vendor/github.com/goccy/go-json/internal/encoder/opcode.go
generated
vendored
2
vendor/github.com/goccy/go-json/internal/encoder/opcode.go
generated
vendored
@ -363,7 +363,7 @@ func copyOpcode(code *Opcode) *Opcode {
|
|||||||
|
|
||||||
func setTotalLengthToInterfaceOp(code *Opcode) {
|
func setTotalLengthToInterfaceOp(code *Opcode) {
|
||||||
for c := code; !c.IsEnd(); {
|
for c := code; !c.IsEnd(); {
|
||||||
if c.Op == OpInterface {
|
if c.Op == OpInterface || c.Op == OpInterfacePtr {
|
||||||
c.Length = uint32(code.TotalLength())
|
c.Length = uint32(code.TotalLength())
|
||||||
}
|
}
|
||||||
c = c.IterNext()
|
c = c.IterNext()
|
||||||
|
6
vendor/github.com/goccy/go-json/internal/encoder/option.go
generated
vendored
6
vendor/github.com/goccy/go-json/internal/encoder/option.go
generated
vendored
@ -1,6 +1,9 @@
|
|||||||
package encoder
|
package encoder
|
||||||
|
|
||||||
import "context"
|
import (
|
||||||
|
"context"
|
||||||
|
"io"
|
||||||
|
)
|
||||||
|
|
||||||
type OptionFlag uint8
|
type OptionFlag uint8
|
||||||
|
|
||||||
@ -19,6 +22,7 @@ type Option struct {
|
|||||||
Flag OptionFlag
|
Flag OptionFlag
|
||||||
ColorScheme *ColorScheme
|
ColorScheme *ColorScheme
|
||||||
Context context.Context
|
Context context.Context
|
||||||
|
DebugOut io.Writer
|
||||||
}
|
}
|
||||||
|
|
||||||
type EncodeFormat struct {
|
type EncodeFormat struct {
|
||||||
|
21
vendor/github.com/goccy/go-json/internal/encoder/vm/debug_vm.go
generated
vendored
21
vendor/github.com/goccy/go-json/internal/encoder/vm/debug_vm.go
generated
vendored
@ -16,16 +16,17 @@ func DebugRun(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
fmt.Println("=============[DEBUG]===============")
|
w := ctx.Option.DebugOut
|
||||||
fmt.Println("* [TYPE]")
|
fmt.Fprintln(w, "=============[DEBUG]===============")
|
||||||
fmt.Println(codeSet.Type)
|
fmt.Fprintln(w, "* [TYPE]")
|
||||||
fmt.Printf("\n")
|
fmt.Fprintln(w, codeSet.Type)
|
||||||
fmt.Println("* [ALL OPCODE]")
|
fmt.Fprintf(w, "\n")
|
||||||
fmt.Println(code.Dump())
|
fmt.Fprintln(w, "* [ALL OPCODE]")
|
||||||
fmt.Printf("\n")
|
fmt.Fprintln(w, code.Dump())
|
||||||
fmt.Println("* [CONTEXT]")
|
fmt.Fprintf(w, "\n")
|
||||||
fmt.Printf("%+v\n", ctx)
|
fmt.Fprintln(w, "* [CONTEXT]")
|
||||||
fmt.Println("===================================")
|
fmt.Fprintf(w, "%+v\n", ctx)
|
||||||
|
fmt.Fprintln(w, "===================================")
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
10
vendor/github.com/goccy/go-json/internal/encoder/vm/vm.go
generated
vendored
10
vendor/github.com/goccy/go-json/internal/encoder/vm/vm.go
generated
vendored
@ -3,6 +3,7 @@ package vm
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
@ -194,9 +195,12 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
|||||||
typ = iface.typ
|
typ = iface.typ
|
||||||
}
|
}
|
||||||
if ifacePtr == nil {
|
if ifacePtr == nil {
|
||||||
b = appendNullComma(ctx, b)
|
isDirectedNil := typ != nil && typ.Kind() == reflect.Struct && !runtime.IfaceIndir(typ)
|
||||||
code = code.Next
|
if !isDirectedNil {
|
||||||
break
|
b = appendNullComma(ctx, b)
|
||||||
|
code = code.Next
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ctx.KeepRefs = append(ctx.KeepRefs, up)
|
ctx.KeepRefs = append(ctx.KeepRefs, up)
|
||||||
ifaceCodeSet, err := encoder.CompileToGetCodeSet(ctx, uintptr(unsafe.Pointer(typ)))
|
ifaceCodeSet, err := encoder.CompileToGetCodeSet(ctx, uintptr(unsafe.Pointer(typ)))
|
||||||
|
21
vendor/github.com/goccy/go-json/internal/encoder/vm_color/debug_vm.go
generated
vendored
21
vendor/github.com/goccy/go-json/internal/encoder/vm_color/debug_vm.go
generated
vendored
@ -16,16 +16,17 @@ func DebugRun(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet)
|
|||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
fmt.Println("=============[DEBUG]===============")
|
w := ctx.Option.DebugOut
|
||||||
fmt.Println("* [TYPE]")
|
fmt.Fprintln(w, "=============[DEBUG]===============")
|
||||||
fmt.Println(codeSet.Type)
|
fmt.Fprintln(w, "* [TYPE]")
|
||||||
fmt.Printf("\n")
|
fmt.Fprintln(w, codeSet.Type)
|
||||||
fmt.Println("* [ALL OPCODE]")
|
fmt.Fprintf(w, "\n")
|
||||||
fmt.Println(code.Dump())
|
fmt.Fprintln(w, "* [ALL OPCODE]")
|
||||||
fmt.Printf("\n")
|
fmt.Fprintln(w, code.Dump())
|
||||||
fmt.Println("* [CONTEXT]")
|
fmt.Fprintf(w, "\n")
|
||||||
fmt.Printf("%+v\n", ctx)
|
fmt.Fprintln(w, "* [CONTEXT]")
|
||||||
fmt.Println("===================================")
|
fmt.Fprintf(w, "%+v\n", ctx)
|
||||||
|
fmt.Fprintln(w, "===================================")
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
10
vendor/github.com/goccy/go-json/internal/encoder/vm_color/vm.go
generated
vendored
10
vendor/github.com/goccy/go-json/internal/encoder/vm_color/vm.go
generated
vendored
@ -3,6 +3,7 @@ package vm_color
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
@ -194,9 +195,12 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
|||||||
typ = iface.typ
|
typ = iface.typ
|
||||||
}
|
}
|
||||||
if ifacePtr == nil {
|
if ifacePtr == nil {
|
||||||
b = appendNullComma(ctx, b)
|
isDirectedNil := typ != nil && typ.Kind() == reflect.Struct && !runtime.IfaceIndir(typ)
|
||||||
code = code.Next
|
if !isDirectedNil {
|
||||||
break
|
b = appendNullComma(ctx, b)
|
||||||
|
code = code.Next
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ctx.KeepRefs = append(ctx.KeepRefs, up)
|
ctx.KeepRefs = append(ctx.KeepRefs, up)
|
||||||
ifaceCodeSet, err := encoder.CompileToGetCodeSet(ctx, uintptr(unsafe.Pointer(typ)))
|
ifaceCodeSet, err := encoder.CompileToGetCodeSet(ctx, uintptr(unsafe.Pointer(typ)))
|
||||||
|
21
vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/debug_vm.go
generated
vendored
21
vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/debug_vm.go
generated
vendored
@ -16,16 +16,17 @@ func DebugRun(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet)
|
|||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
fmt.Println("=============[DEBUG]===============")
|
w := ctx.Option.DebugOut
|
||||||
fmt.Println("* [TYPE]")
|
fmt.Fprintln(w, "=============[DEBUG]===============")
|
||||||
fmt.Println(codeSet.Type)
|
fmt.Fprintln(w, "* [TYPE]")
|
||||||
fmt.Printf("\n")
|
fmt.Fprintln(w, codeSet.Type)
|
||||||
fmt.Println("* [ALL OPCODE]")
|
fmt.Fprintf(w, "\n")
|
||||||
fmt.Println(code.Dump())
|
fmt.Fprintln(w, "* [ALL OPCODE]")
|
||||||
fmt.Printf("\n")
|
fmt.Fprintln(w, code.Dump())
|
||||||
fmt.Println("* [CONTEXT]")
|
fmt.Fprintf(w, "\n")
|
||||||
fmt.Printf("%+v\n", ctx)
|
fmt.Fprintln(w, "* [CONTEXT]")
|
||||||
fmt.Println("===================================")
|
fmt.Fprintf(w, "%+v\n", ctx)
|
||||||
|
fmt.Fprintln(w, "===================================")
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
10
vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/vm.go
generated
vendored
10
vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/vm.go
generated
vendored
@ -3,6 +3,7 @@ package vm_color_indent
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
@ -194,9 +195,12 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
|||||||
typ = iface.typ
|
typ = iface.typ
|
||||||
}
|
}
|
||||||
if ifacePtr == nil {
|
if ifacePtr == nil {
|
||||||
b = appendNullComma(ctx, b)
|
isDirectedNil := typ != nil && typ.Kind() == reflect.Struct && !runtime.IfaceIndir(typ)
|
||||||
code = code.Next
|
if !isDirectedNil {
|
||||||
break
|
b = appendNullComma(ctx, b)
|
||||||
|
code = code.Next
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ctx.KeepRefs = append(ctx.KeepRefs, up)
|
ctx.KeepRefs = append(ctx.KeepRefs, up)
|
||||||
ifaceCodeSet, err := encoder.CompileToGetCodeSet(ctx, uintptr(unsafe.Pointer(typ)))
|
ifaceCodeSet, err := encoder.CompileToGetCodeSet(ctx, uintptr(unsafe.Pointer(typ)))
|
||||||
|
21
vendor/github.com/goccy/go-json/internal/encoder/vm_indent/debug_vm.go
generated
vendored
21
vendor/github.com/goccy/go-json/internal/encoder/vm_indent/debug_vm.go
generated
vendored
@ -16,16 +16,17 @@ func DebugRun(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet)
|
|||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
fmt.Println("=============[DEBUG]===============")
|
w := ctx.Option.DebugOut
|
||||||
fmt.Println("* [TYPE]")
|
fmt.Fprintln(w, "=============[DEBUG]===============")
|
||||||
fmt.Println(codeSet.Type)
|
fmt.Fprintln(w, "* [TYPE]")
|
||||||
fmt.Printf("\n")
|
fmt.Fprintln(w, codeSet.Type)
|
||||||
fmt.Println("* [ALL OPCODE]")
|
fmt.Fprintf(w, "\n")
|
||||||
fmt.Println(code.Dump())
|
fmt.Fprintln(w, "* [ALL OPCODE]")
|
||||||
fmt.Printf("\n")
|
fmt.Fprintln(w, code.Dump())
|
||||||
fmt.Println("* [CONTEXT]")
|
fmt.Fprintf(w, "\n")
|
||||||
fmt.Printf("%+v\n", ctx)
|
fmt.Fprintln(w, "* [CONTEXT]")
|
||||||
fmt.Println("===================================")
|
fmt.Fprintf(w, "%+v\n", ctx)
|
||||||
|
fmt.Fprintln(w, "===================================")
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
10
vendor/github.com/goccy/go-json/internal/encoder/vm_indent/vm.go
generated
vendored
10
vendor/github.com/goccy/go-json/internal/encoder/vm_indent/vm.go
generated
vendored
@ -3,6 +3,7 @@ package vm_indent
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
@ -194,9 +195,12 @@ func Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]b
|
|||||||
typ = iface.typ
|
typ = iface.typ
|
||||||
}
|
}
|
||||||
if ifacePtr == nil {
|
if ifacePtr == nil {
|
||||||
b = appendNullComma(ctx, b)
|
isDirectedNil := typ != nil && typ.Kind() == reflect.Struct && !runtime.IfaceIndir(typ)
|
||||||
code = code.Next
|
if !isDirectedNil {
|
||||||
break
|
b = appendNullComma(ctx, b)
|
||||||
|
code = code.Next
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ctx.KeepRefs = append(ctx.KeepRefs, up)
|
ctx.KeepRefs = append(ctx.KeepRefs, up)
|
||||||
ifaceCodeSet, err := encoder.CompileToGetCodeSet(ctx, uintptr(unsafe.Pointer(typ)))
|
ifaceCodeSet, err := encoder.CompileToGetCodeSet(ctx, uintptr(unsafe.Pointer(typ)))
|
||||||
|
6
vendor/github.com/goccy/go-json/internal/runtime/struct_field.go
generated
vendored
6
vendor/github.com/goccy/go-json/internal/runtime/struct_field.go
generated
vendored
@ -13,7 +13,11 @@ func getTag(field reflect.StructField) string {
|
|||||||
func IsIgnoredStructField(field reflect.StructField) bool {
|
func IsIgnoredStructField(field reflect.StructField) bool {
|
||||||
if field.PkgPath != "" {
|
if field.PkgPath != "" {
|
||||||
if field.Anonymous {
|
if field.Anonymous {
|
||||||
if !(field.Type.Kind() == reflect.Ptr && field.Type.Elem().Kind() == reflect.Struct) && field.Type.Kind() != reflect.Struct {
|
t := field.Type
|
||||||
|
if t.Kind() == reflect.Ptr {
|
||||||
|
t = t.Elem()
|
||||||
|
}
|
||||||
|
if t.Kind() != reflect.Struct {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
9
vendor/github.com/goccy/go-json/option.go
generated
vendored
9
vendor/github.com/goccy/go-json/option.go
generated
vendored
@ -1,6 +1,8 @@
|
|||||||
package json
|
package json
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
|
|
||||||
"github.com/goccy/go-json/internal/decoder"
|
"github.com/goccy/go-json/internal/decoder"
|
||||||
"github.com/goccy/go-json/internal/encoder"
|
"github.com/goccy/go-json/internal/encoder"
|
||||||
)
|
)
|
||||||
@ -39,6 +41,13 @@ func Debug() EncodeOptionFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DebugWith sets the destination to write debug messages.
|
||||||
|
func DebugWith(w io.Writer) EncodeOptionFunc {
|
||||||
|
return func(opt *EncodeOption) {
|
||||||
|
opt.DebugOut = w
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Colorize add an identifier for coloring to the string of the encoded result.
|
// Colorize add an identifier for coloring to the string of the encoded result.
|
||||||
func Colorize(scheme *ColorScheme) EncodeOptionFunc {
|
func Colorize(scheme *ColorScheme) EncodeOptionFunc {
|
||||||
return func(opt *EncodeOption) {
|
return func(opt *EncodeOption) {
|
||||||
|
6
vendor/github.com/karrick/godirwalk/README.md
generated
vendored
6
vendor/github.com/karrick/godirwalk/README.md
generated
vendored
@ -5,13 +5,17 @@ system.
|
|||||||
|
|
||||||
[![GoDoc](https://godoc.org/github.com/karrick/godirwalk?status.svg)](https://godoc.org/github.com/karrick/godirwalk) [![Build Status](https://dev.azure.com/microsoft0235/microsoft/_apis/build/status/karrick.godirwalk?branchName=master)](https://dev.azure.com/microsoft0235/microsoft/_build/latest?definitionId=1&branchName=master)
|
[![GoDoc](https://godoc.org/github.com/karrick/godirwalk?status.svg)](https://godoc.org/github.com/karrick/godirwalk) [![Build Status](https://dev.azure.com/microsoft0235/microsoft/_apis/build/status/karrick.godirwalk?branchName=master)](https://dev.azure.com/microsoft0235/microsoft/_build/latest?definitionId=1&branchName=master)
|
||||||
|
|
||||||
In short, why do I use this library?
|
In short, why did I create this library?
|
||||||
|
|
||||||
1. It's faster than `filepath.Walk`.
|
1. It's faster than `filepath.Walk`.
|
||||||
1. It's more correct on Windows than `filepath.Walk`.
|
1. It's more correct on Windows than `filepath.Walk`.
|
||||||
1. It's more easy to use than `filepath.Walk`.
|
1. It's more easy to use than `filepath.Walk`.
|
||||||
1. It's more flexible than `filepath.Walk`.
|
1. It's more flexible than `filepath.Walk`.
|
||||||
|
|
||||||
|
Depending on your specific circumstances, [you might no longer need a
|
||||||
|
library for file walking in
|
||||||
|
Go](https://engineering.kablamo.com.au/posts/2021/quick-comparison-between-go-file-walk-implementations).
|
||||||
|
|
||||||
## Usage Example
|
## Usage Example
|
||||||
|
|
||||||
Additional examples are provided in the `examples/` subdirectory.
|
Additional examples are provided in the `examples/` subdirectory.
|
||||||
|
39
vendor/github.com/karrick/godirwalk/scandir_unix.go
generated
vendored
39
vendor/github.com/karrick/godirwalk/scandir_unix.go
generated
vendored
@ -1,3 +1,4 @@
|
|||||||
|
//go:build !windows
|
||||||
// +build !windows
|
// +build !windows
|
||||||
|
|
||||||
package godirwalk
|
package godirwalk
|
||||||
@ -22,8 +23,10 @@ type Scanner struct {
|
|||||||
fd int // file descriptor used to read entries from directory
|
fd int // file descriptor used to read entries from directory
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewScanner returns a new directory Scanner that lazily enumerates the
|
// NewScanner returns a new directory Scanner that lazily enumerates
|
||||||
// contents of a single directory.
|
// the contents of a single directory. To prevent resource leaks,
|
||||||
|
// caller must invoke either the Scanner's Close or Err method after
|
||||||
|
// it has completed scanning a directory.
|
||||||
//
|
//
|
||||||
// scanner, err := godirwalk.NewScanner(dirname)
|
// scanner, err := godirwalk.NewScanner(dirname)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
@ -52,10 +55,12 @@ func NewScanner(osDirname string) (*Scanner, error) {
|
|||||||
return NewScannerWithScratchBuffer(osDirname, nil)
|
return NewScannerWithScratchBuffer(osDirname, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewScannerWithScratchBuffer returns a new directory Scanner that lazily
|
// NewScannerWithScratchBuffer returns a new directory Scanner that
|
||||||
// enumerates the contents of a single directory. On platforms other than
|
// lazily enumerates the contents of a single directory. On platforms
|
||||||
// Windows it uses the provided scratch buffer to read from the file system. On
|
// other than Windows it uses the provided scratch buffer to read from
|
||||||
// Windows the scratch buffer is ignored.
|
// the file system. On Windows the scratch buffer is ignored. To
|
||||||
|
// prevent resource leaks, caller must invoke either the Scanner's
|
||||||
|
// Close or Err method after it has completed scanning a directory.
|
||||||
func NewScannerWithScratchBuffer(osDirname string, scratchBuffer []byte) (*Scanner, error) {
|
func NewScannerWithScratchBuffer(osDirname string, scratchBuffer []byte) (*Scanner, error) {
|
||||||
dh, err := os.Open(osDirname)
|
dh, err := os.Open(osDirname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -73,6 +78,13 @@ func NewScannerWithScratchBuffer(osDirname string, scratchBuffer []byte) (*Scann
|
|||||||
return scanner, nil
|
return scanner, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close releases resources associated with scanning a directory. Call
|
||||||
|
// either this or the Err method when the directory no longer needs to
|
||||||
|
// be scanned.
|
||||||
|
func (s *Scanner) Close() error {
|
||||||
|
return s.Err()
|
||||||
|
}
|
||||||
|
|
||||||
// Dirent returns the current directory entry while scanning a directory.
|
// Dirent returns the current directory entry while scanning a directory.
|
||||||
func (s *Scanner) Dirent() (*Dirent, error) {
|
func (s *Scanner) Dirent() (*Dirent, error) {
|
||||||
if s.de == nil {
|
if s.de == nil {
|
||||||
@ -90,8 +102,10 @@ func (s *Scanner) done(err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if cerr := s.dh.Close(); err == nil {
|
s.err = err
|
||||||
s.err = cerr
|
|
||||||
|
if err = s.dh.Close(); s.err == nil {
|
||||||
|
s.err = err
|
||||||
}
|
}
|
||||||
|
|
||||||
s.osDirname, s.childName = "", ""
|
s.osDirname, s.childName = "", ""
|
||||||
@ -101,9 +115,10 @@ func (s *Scanner) done(err error) {
|
|||||||
s.fd = 0
|
s.fd = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// Err returns any error associated with scanning a directory. It is normal to
|
// Err returns any error associated with scanning a directory. It is
|
||||||
// call Err after Scan returns false, even though they both ensure Scanner
|
// normal to call Err after Scan returns false, even though they both
|
||||||
// resources are released. Do not call until done scanning a directory.
|
// ensure Scanner resources are released. Call either this or the
|
||||||
|
// Close method when the directory no longer needs to be scanned.
|
||||||
func (s *Scanner) Err() error {
|
func (s *Scanner) Err() error {
|
||||||
s.done(nil)
|
s.done(nil)
|
||||||
return s.err
|
return s.err
|
||||||
@ -135,7 +150,7 @@ func (s *Scanner) Scan() bool {
|
|||||||
if err == syscall.EINTR /* || err == unix.EINTR */ {
|
if err == syscall.EINTR /* || err == unix.EINTR */ {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
s.done(err)
|
s.done(err) // any other error forces a stop
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if n <= 0 { // end of directory: normal exit
|
if n <= 0 { // end of directory: normal exit
|
||||||
|
38
vendor/github.com/karrick/godirwalk/scandir_windows.go
generated
vendored
38
vendor/github.com/karrick/godirwalk/scandir_windows.go
generated
vendored
@ -1,3 +1,4 @@
|
|||||||
|
//go:build windows
|
||||||
// +build windows
|
// +build windows
|
||||||
|
|
||||||
package godirwalk
|
package godirwalk
|
||||||
@ -17,8 +18,10 @@ type Scanner struct {
|
|||||||
childMode os.FileMode
|
childMode os.FileMode
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewScanner returns a new directory Scanner that lazily enumerates the
|
// NewScanner returns a new directory Scanner that lazily enumerates
|
||||||
// contents of a single directory.
|
// the contents of a single directory. To prevent resource leaks,
|
||||||
|
// caller must invoke either the Scanner's Close or Err method after
|
||||||
|
// it has completed scanning a directory.
|
||||||
//
|
//
|
||||||
// scanner, err := godirwalk.NewScanner(dirname)
|
// scanner, err := godirwalk.NewScanner(dirname)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
@ -55,14 +58,24 @@ func NewScanner(osDirname string) (*Scanner, error) {
|
|||||||
return scanner, nil
|
return scanner, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewScannerWithScratchBuffer returns a new directory Scanner that lazily
|
// NewScannerWithScratchBuffer returns a new directory Scanner that
|
||||||
// enumerates the contents of a single directory. On platforms other than
|
// lazily enumerates the contents of a single directory. On platforms
|
||||||
// Windows it uses the provided scratch buffer to read from the file system. On
|
// other than Windows it uses the provided scratch buffer to read from
|
||||||
// Windows the scratch buffer parameter is ignored.
|
// the file system. On Windows the scratch buffer parameter is
|
||||||
|
// ignored. To prevent resource leaks, caller must invoke either the
|
||||||
|
// Scanner's Close or Err method after it has completed scanning a
|
||||||
|
// directory.
|
||||||
func NewScannerWithScratchBuffer(osDirname string, scratchBuffer []byte) (*Scanner, error) {
|
func NewScannerWithScratchBuffer(osDirname string, scratchBuffer []byte) (*Scanner, error) {
|
||||||
return NewScanner(osDirname)
|
return NewScanner(osDirname)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close releases resources associated with scanning a directory. Call
|
||||||
|
// either this or the Err method when the directory no longer needs to
|
||||||
|
// be scanned.
|
||||||
|
func (s *Scanner) Close() error {
|
||||||
|
return s.Err()
|
||||||
|
}
|
||||||
|
|
||||||
// Dirent returns the current directory entry while scanning a directory.
|
// Dirent returns the current directory entry while scanning a directory.
|
||||||
func (s *Scanner) Dirent() (*Dirent, error) {
|
func (s *Scanner) Dirent() (*Dirent, error) {
|
||||||
if s.de == nil {
|
if s.de == nil {
|
||||||
@ -83,17 +96,20 @@ func (s *Scanner) done(err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if cerr := s.dh.Close(); err == nil {
|
s.err = err
|
||||||
s.err = cerr
|
|
||||||
|
if err = s.dh.Close(); s.err == nil {
|
||||||
|
s.err = err
|
||||||
}
|
}
|
||||||
|
|
||||||
s.childName, s.osDirname = "", ""
|
s.childName, s.osDirname = "", ""
|
||||||
s.de, s.dh = nil, nil
|
s.de, s.dh = nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Err returns any error associated with scanning a directory. It is normal to
|
// Err returns any error associated with scanning a directory. It is
|
||||||
// call Err after Scan returns false, even though they both ensure Scanner
|
// normal to call Err after Scan returns false, even though they both
|
||||||
// resources are released. Do not call until done scanning a directory.
|
// ensure Scanner resources are released. Call either this or the
|
||||||
|
// Close method when the directory no longer needs to be scanned.
|
||||||
func (s *Scanner) Err() error {
|
func (s *Scanner) Err() error {
|
||||||
s.done(nil)
|
s.done(nil)
|
||||||
return s.err
|
return s.err
|
||||||
|
8
vendor/github.com/lib/pq/conn.go
generated
vendored
8
vendor/github.com/lib/pq/conn.go
generated
vendored
@ -31,8 +31,10 @@ var (
|
|||||||
ErrNotSupported = errors.New("pq: Unsupported command")
|
ErrNotSupported = errors.New("pq: Unsupported command")
|
||||||
ErrInFailedTransaction = errors.New("pq: Could not complete operation in a failed transaction")
|
ErrInFailedTransaction = errors.New("pq: Could not complete operation in a failed transaction")
|
||||||
ErrSSLNotSupported = errors.New("pq: SSL is not enabled on the server")
|
ErrSSLNotSupported = errors.New("pq: SSL is not enabled on the server")
|
||||||
ErrSSLKeyHasWorldPermissions = errors.New("pq: Private key file has group or world access. Permissions should be u=rw (0600) or less")
|
ErrSSLKeyUnknownOwnership = errors.New("pq: Could not get owner information for private key, may not be properly protected")
|
||||||
ErrCouldNotDetectUsername = errors.New("pq: Could not detect default username. Please provide one explicitly")
|
ErrSSLKeyHasWorldPermissions = errors.New("pq: Private key has world access. Permissions should be u=rw,g=r (0640) if owned by root, or u=rw (0600), or less")
|
||||||
|
|
||||||
|
ErrCouldNotDetectUsername = errors.New("pq: Could not detect default username. Please provide one explicitly")
|
||||||
|
|
||||||
errUnexpectedReady = errors.New("unexpected ReadyForQuery")
|
errUnexpectedReady = errors.New("unexpected ReadyForQuery")
|
||||||
errNoRowsAffected = errors.New("no RowsAffected available after the empty statement")
|
errNoRowsAffected = errors.New("no RowsAffected available after the empty statement")
|
||||||
@ -322,7 +324,7 @@ func DialOpen(d Dialer, dsn string) (_ driver.Conn, err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
c.dialer = d
|
c.Dialer(d)
|
||||||
return c.open(context.Background())
|
return c.open(context.Background())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
5
vendor/github.com/lib/pq/connector.go
generated
vendored
5
vendor/github.com/lib/pq/connector.go
generated
vendored
@ -27,6 +27,11 @@ func (c *Connector) Connect(ctx context.Context) (driver.Conn, error) {
|
|||||||
return c.open(ctx)
|
return c.open(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Dialer allows change the dialer used to open connections.
|
||||||
|
func (c *Connector) Dialer(dialer Dialer) {
|
||||||
|
c.dialer = dialer
|
||||||
|
}
|
||||||
|
|
||||||
// Driver returns the underlying driver of this Connector.
|
// Driver returns the underlying driver of this Connector.
|
||||||
func (c *Connector) Driver() driver.Driver {
|
func (c *Connector) Driver() driver.Driver {
|
||||||
return &Driver{}
|
return &Driver{}
|
||||||
|
38
vendor/github.com/lib/pq/copy.go
generated
vendored
38
vendor/github.com/lib/pq/copy.go
generated
vendored
@ -1,6 +1,7 @@
|
|||||||
package pq
|
package pq
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"database/sql/driver"
|
"database/sql/driver"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
@ -273,6 +274,43 @@ func (ci *copyin) Exec(v []driver.Value) (r driver.Result, err error) {
|
|||||||
return driver.RowsAffected(0), nil
|
return driver.RowsAffected(0), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CopyData inserts a raw string into the COPY stream. The insert is
|
||||||
|
// asynchronous and CopyData can return errors from previous CopyData calls to
|
||||||
|
// the same COPY stmt.
|
||||||
|
//
|
||||||
|
// You need to call Exec(nil) to sync the COPY stream and to get any
|
||||||
|
// errors from pending data, since Stmt.Close() doesn't return errors
|
||||||
|
// to the user.
|
||||||
|
func (ci *copyin) CopyData(ctx context.Context, line string) (r driver.Result, err error) {
|
||||||
|
if ci.closed {
|
||||||
|
return nil, errCopyInClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
if finish := ci.cn.watchCancel(ctx); finish != nil {
|
||||||
|
defer finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := ci.getBad(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer ci.cn.errRecover(&err)
|
||||||
|
|
||||||
|
if err := ci.err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
ci.buffer = append(ci.buffer, []byte(line)...)
|
||||||
|
ci.buffer = append(ci.buffer, '\n')
|
||||||
|
|
||||||
|
if len(ci.buffer) > ciBufferFlushSize {
|
||||||
|
ci.flush(ci.buffer)
|
||||||
|
// reset buffer, keep bytes for message identifier and length
|
||||||
|
ci.buffer = ci.buffer[:5]
|
||||||
|
}
|
||||||
|
|
||||||
|
return driver.RowsAffected(0), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (ci *copyin) Close() (err error) {
|
func (ci *copyin) Close() (err error) {
|
||||||
if ci.closed { // Don't do anything, we're already closed
|
if ci.closed { // Don't do anything, we're already closed
|
||||||
return nil
|
return nil
|
||||||
|
8
vendor/github.com/lib/pq/encode.go
generated
vendored
8
vendor/github.com/lib/pq/encode.go
generated
vendored
@ -422,7 +422,7 @@ func ParseTimestamp(currentLocation *time.Location, str string) (time.Time, erro
|
|||||||
|
|
||||||
if remainderIdx < len(str) && str[remainderIdx] == '.' {
|
if remainderIdx < len(str) && str[remainderIdx] == '.' {
|
||||||
fracStart := remainderIdx + 1
|
fracStart := remainderIdx + 1
|
||||||
fracOff := strings.IndexAny(str[fracStart:], "-+ ")
|
fracOff := strings.IndexAny(str[fracStart:], "-+Z ")
|
||||||
if fracOff < 0 {
|
if fracOff < 0 {
|
||||||
fracOff = len(str) - fracStart
|
fracOff = len(str) - fracStart
|
||||||
}
|
}
|
||||||
@ -432,7 +432,7 @@ func ParseTimestamp(currentLocation *time.Location, str string) (time.Time, erro
|
|||||||
remainderIdx += fracOff + 1
|
remainderIdx += fracOff + 1
|
||||||
}
|
}
|
||||||
if tzStart := remainderIdx; tzStart < len(str) && (str[tzStart] == '-' || str[tzStart] == '+') {
|
if tzStart := remainderIdx; tzStart < len(str) && (str[tzStart] == '-' || str[tzStart] == '+') {
|
||||||
// time zone separator is always '-' or '+' (UTC is +00)
|
// time zone separator is always '-' or '+' or 'Z' (UTC is +00)
|
||||||
var tzSign int
|
var tzSign int
|
||||||
switch c := str[tzStart]; c {
|
switch c := str[tzStart]; c {
|
||||||
case '-':
|
case '-':
|
||||||
@ -454,7 +454,11 @@ func ParseTimestamp(currentLocation *time.Location, str string) (time.Time, erro
|
|||||||
remainderIdx += 3
|
remainderIdx += 3
|
||||||
}
|
}
|
||||||
tzOff = tzSign * ((tzHours * 60 * 60) + (tzMin * 60) + tzSec)
|
tzOff = tzSign * ((tzHours * 60 * 60) + (tzMin * 60) + tzSec)
|
||||||
|
} else if tzStart < len(str) && str[tzStart] == 'Z' {
|
||||||
|
// time zone Z separator indicates UTC is +00
|
||||||
|
remainderIdx += 1
|
||||||
}
|
}
|
||||||
|
|
||||||
var isoYear int
|
var isoYear int
|
||||||
|
|
||||||
if isBC {
|
if isBC {
|
||||||
|
5
vendor/github.com/lib/pq/error.go
generated
vendored
5
vendor/github.com/lib/pq/error.go
generated
vendored
@ -402,6 +402,11 @@ func (err *Error) Fatal() bool {
|
|||||||
return err.Severity == Efatal
|
return err.Severity == Efatal
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SQLState returns the SQLState of the error.
|
||||||
|
func (err *Error) SQLState() string {
|
||||||
|
return string(err.Code)
|
||||||
|
}
|
||||||
|
|
||||||
// Get implements the legacy PGError interface. New code should use the fields
|
// Get implements the legacy PGError interface. New code should use the fields
|
||||||
// of the Error struct directly.
|
// of the Error struct directly.
|
||||||
func (err *Error) Get(k byte) (v string) {
|
func (err *Error) Get(k byte) (v string) {
|
||||||
|
80
vendor/github.com/lib/pq/ssl_permissions.go
generated
vendored
80
vendor/github.com/lib/pq/ssl_permissions.go
generated
vendored
@ -3,7 +3,28 @@
|
|||||||
|
|
||||||
package pq
|
package pq
|
||||||
|
|
||||||
import "os"
|
import (
|
||||||
|
"errors"
|
||||||
|
"os"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
rootUserID = uint32(0)
|
||||||
|
|
||||||
|
// The maximum permissions that a private key file owned by a regular user
|
||||||
|
// is allowed to have. This translates to u=rw.
|
||||||
|
maxUserOwnedKeyPermissions os.FileMode = 0600
|
||||||
|
|
||||||
|
// The maximum permissions that a private key file owned by root is allowed
|
||||||
|
// to have. This translates to u=rw,g=r.
|
||||||
|
maxRootOwnedKeyPermissions os.FileMode = 0640
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
errSSLKeyHasUnacceptableUserPermissions = errors.New("permissions for files not owned by root should be u=rw (0600) or less")
|
||||||
|
errSSLKeyHasUnacceptableRootPermissions = errors.New("permissions for root owned files should be u=rw,g=r (0640) or less")
|
||||||
|
)
|
||||||
|
|
||||||
// sslKeyPermissions checks the permissions on user-supplied ssl key files.
|
// sslKeyPermissions checks the permissions on user-supplied ssl key files.
|
||||||
// The key file should have very little access.
|
// The key file should have very little access.
|
||||||
@ -14,8 +35,59 @@ func sslKeyPermissions(sslkey string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if info.Mode().Perm()&0077 != 0 {
|
|
||||||
return ErrSSLKeyHasWorldPermissions
|
err = hasCorrectPermissions(info)
|
||||||
|
|
||||||
|
// return ErrSSLKeyHasWorldPermissions for backwards compatability with
|
||||||
|
// existing code.
|
||||||
|
if err == errSSLKeyHasUnacceptableUserPermissions || err == errSSLKeyHasUnacceptableRootPermissions {
|
||||||
|
err = ErrSSLKeyHasWorldPermissions
|
||||||
}
|
}
|
||||||
return nil
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// hasCorrectPermissions checks the file info (and the unix-specific stat_t
|
||||||
|
// output) to verify that the permissions on the file are correct.
|
||||||
|
//
|
||||||
|
// If the file is owned by the same user the process is running as,
|
||||||
|
// the file should only have 0600 (u=rw). If the file is owned by root,
|
||||||
|
// and the group matches the group that the process is running in, the
|
||||||
|
// permissions cannot be more than 0640 (u=rw,g=r). The file should
|
||||||
|
// never have world permissions.
|
||||||
|
//
|
||||||
|
// Returns an error when the permission check fails.
|
||||||
|
func hasCorrectPermissions(info os.FileInfo) error {
|
||||||
|
// if file's permission matches 0600, allow access.
|
||||||
|
userPermissionMask := (os.FileMode(0777) ^ maxUserOwnedKeyPermissions)
|
||||||
|
|
||||||
|
// regardless of if we're running as root or not, 0600 is acceptable,
|
||||||
|
// so we return if we match the regular user permission mask.
|
||||||
|
if info.Mode().Perm()&userPermissionMask == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// We need to pull the Unix file information to get the file's owner.
|
||||||
|
// If we can't access it, there's some sort of operating system level error
|
||||||
|
// and we should fail rather than attempting to use faulty information.
|
||||||
|
sysInfo := info.Sys()
|
||||||
|
if sysInfo == nil {
|
||||||
|
return ErrSSLKeyUnknownOwnership
|
||||||
|
}
|
||||||
|
|
||||||
|
unixStat, ok := sysInfo.(*syscall.Stat_t)
|
||||||
|
if !ok {
|
||||||
|
return ErrSSLKeyUnknownOwnership
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the file is owned by root, we allow 0640 (u=rw,g=r) to match what
|
||||||
|
// Postgres does.
|
||||||
|
if unixStat.Uid == rootUserID {
|
||||||
|
rootPermissionMask := (os.FileMode(0777) ^ maxRootOwnedKeyPermissions)
|
||||||
|
if info.Mode().Perm()&rootPermissionMask != 0 {
|
||||||
|
return errSSLKeyHasUnacceptableRootPermissions
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return errSSLKeyHasUnacceptableUserPermissions
|
||||||
}
|
}
|
||||||
|
51
vendor/github.com/spf13/cobra/CHANGELOG.md
generated
vendored
51
vendor/github.com/spf13/cobra/CHANGELOG.md
generated
vendored
@ -1,51 +0,0 @@
|
|||||||
# Cobra Changelog
|
|
||||||
|
|
||||||
## v1.1.3
|
|
||||||
|
|
||||||
* **Fix:** release-branch.cobra1.1 only: Revert "Deprecate Go < 1.14" to maintain backward compatibility
|
|
||||||
|
|
||||||
## v1.1.2
|
|
||||||
|
|
||||||
### Notable Changes
|
|
||||||
|
|
||||||
* Bump license year to 2021 in golden files (#1309) @Bowbaq
|
|
||||||
* Enhance PowerShell completion with custom comp (#1208) @Luap99
|
|
||||||
* Update gopkg.in/yaml.v2 to v2.4.0: The previous breaking change in yaml.v2 v2.3.0 has been reverted, see go-yaml/yaml#670
|
|
||||||
* Documentation readability improvements (#1228 etc.) @zaataylor etc.
|
|
||||||
* Use golangci-lint: Repair warnings and errors resulting from linting (#1044) @umarcor
|
|
||||||
|
|
||||||
## v1.1.1
|
|
||||||
|
|
||||||
* **Fix:** yaml.v2 2.3.0 contained a unintended breaking change. This release reverts to yaml.v2 v2.2.8 which has recent critical CVE fixes, but does not have the breaking changes. See https://github.com/spf13/cobra/pull/1259 for context.
|
|
||||||
* **Fix:** correct internal formatting for go-md2man v2 (which caused man page generation to be broken). See https://github.com/spf13/cobra/issues/1049 for context.
|
|
||||||
|
|
||||||
## v1.1.0
|
|
||||||
|
|
||||||
### Notable Changes
|
|
||||||
|
|
||||||
* Extend Go completions and revamp zsh comp (#1070)
|
|
||||||
* Fix man page doc generation - no auto generated tag when `cmd.DisableAutoGenTag = true` (#1104) @jpmcb
|
|
||||||
* Add completion for help command (#1136)
|
|
||||||
* Complete subcommands when TraverseChildren is set (#1171)
|
|
||||||
* Fix stderr printing functions (#894)
|
|
||||||
* fix: fish output redirection (#1247)
|
|
||||||
|
|
||||||
## v1.0.0
|
|
||||||
|
|
||||||
Announcing v1.0.0 of Cobra. 🎉
|
|
||||||
|
|
||||||
### Notable Changes
|
|
||||||
* Fish completion (including support for Go custom completion) @marckhouzam
|
|
||||||
* API (urgent): Rename BashCompDirectives to ShellCompDirectives @marckhouzam
|
|
||||||
* Remove/replace SetOutput on Command - deprecated @jpmcb
|
|
||||||
* add support for autolabel stale PR @xchapter7x
|
|
||||||
* Add Labeler Actions @xchapter7x
|
|
||||||
* Custom completions coded in Go (instead of Bash) @marckhouzam
|
|
||||||
* Partial Revert of #922 @jharshman
|
|
||||||
* Add Makefile to project @jharshman
|
|
||||||
* Correct documentation for InOrStdin @desponda
|
|
||||||
* Apply formatting to templates @jharshman
|
|
||||||
* Revert change so help is printed on stdout again @marckhouzam
|
|
||||||
* Update md2man to v2.0.0 @pdf
|
|
||||||
* update viper to v1.4.0 @umarcor
|
|
||||||
* Update cmd/root.go example in README.md @jharshman
|
|
6
vendor/github.com/spf13/cobra/README.md
generated
vendored
6
vendor/github.com/spf13/cobra/README.md
generated
vendored
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Cobra is a library for creating powerful modern CLI applications.
|
Cobra is a library for creating powerful modern CLI applications.
|
||||||
|
|
||||||
Cobra is used in many Go projects such as [Kubernetes](http://kubernetes.io/),
|
Cobra is used in many Go projects such as [Kubernetes](https://kubernetes.io/),
|
||||||
[Hugo](https://gohugo.io), and [Github CLI](https://github.com/cli/cli) to
|
[Hugo](https://gohugo.io), and [Github CLI](https://github.com/cli/cli) to
|
||||||
name a few. [This list](./projects_using_cobra.md) contains a more extensive list of projects using Cobra.
|
name a few. [This list](./projects_using_cobra.md) contains a more extensive list of projects using Cobra.
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ Cobra provides:
|
|||||||
* Automatically generated man pages for your application
|
* Automatically generated man pages for your application
|
||||||
* Command aliases so you can change things without breaking them
|
* Command aliases so you can change things without breaking them
|
||||||
* The flexibility to define your own help, usage, etc.
|
* The flexibility to define your own help, usage, etc.
|
||||||
* Optional seamless integration with [viper](http://github.com/spf13/viper) for 12-factor apps
|
* Optional seamless integration with [viper](https://github.com/spf13/viper) for 12-factor apps
|
||||||
|
|
||||||
# Concepts
|
# Concepts
|
||||||
|
|
||||||
@ -102,7 +102,7 @@ It can be installed by running:
|
|||||||
go install github.com/spf13/cobra-cli@latest
|
go install github.com/spf13/cobra-cli@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
For complete details on using the Cobra-CLI generator, please read [The Cobra Generator README](https://github.com/spf13/cobra-cli/blob/master/README.md)
|
For complete details on using the Cobra-CLI generator, please read [The Cobra Generator README](https://github.com/spf13/cobra-cli/blob/main/README.md)
|
||||||
|
|
||||||
For complete details on using the Cobra library, please read the [The Cobra User Guide](user_guide.md).
|
For complete details on using the Cobra library, please read the [The Cobra User Guide](user_guide.md).
|
||||||
|
|
||||||
|
49
vendor/github.com/spf13/cobra/active_help.go
generated
vendored
Normal file
49
vendor/github.com/spf13/cobra/active_help.go
generated
vendored
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package cobra
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
activeHelpMarker = "_activeHelp_ "
|
||||||
|
// The below values should not be changed: programs will be using them explicitly
|
||||||
|
// in their user documentation, and users will be using them explicitly.
|
||||||
|
activeHelpEnvVarSuffix = "_ACTIVE_HELP"
|
||||||
|
activeHelpGlobalEnvVar = "COBRA_ACTIVE_HELP"
|
||||||
|
activeHelpGlobalDisable = "0"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AppendActiveHelp adds the specified string to the specified array to be used as ActiveHelp.
|
||||||
|
// Such strings will be processed by the completion script and will be shown as ActiveHelp
|
||||||
|
// to the user.
|
||||||
|
// The array parameter should be the array that will contain the completions.
|
||||||
|
// This function can be called multiple times before and/or after completions are added to
|
||||||
|
// the array. Each time this function is called with the same array, the new
|
||||||
|
// ActiveHelp line will be shown below the previous ones when completion is triggered.
|
||||||
|
func AppendActiveHelp(compArray []string, activeHelpStr string) []string {
|
||||||
|
return append(compArray, fmt.Sprintf("%s%s", activeHelpMarker, activeHelpStr))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetActiveHelpConfig returns the value of the ActiveHelp environment variable
|
||||||
|
// <PROGRAM>_ACTIVE_HELP where <PROGRAM> is the name of the root command in upper
|
||||||
|
// case, with all - replaced by _.
|
||||||
|
// It will always return "0" if the global environment variable COBRA_ACTIVE_HELP
|
||||||
|
// is set to "0".
|
||||||
|
func GetActiveHelpConfig(cmd *Command) string {
|
||||||
|
activeHelpCfg := os.Getenv(activeHelpGlobalEnvVar)
|
||||||
|
if activeHelpCfg != activeHelpGlobalDisable {
|
||||||
|
activeHelpCfg = os.Getenv(activeHelpEnvVar(cmd.Root().Name()))
|
||||||
|
}
|
||||||
|
return activeHelpCfg
|
||||||
|
}
|
||||||
|
|
||||||
|
// activeHelpEnvVar returns the name of the program-specific ActiveHelp environment
|
||||||
|
// variable. It has the format <PROGRAM>_ACTIVE_HELP where <PROGRAM> is the name of the
|
||||||
|
// root command in upper case, with all - replaced by _.
|
||||||
|
func activeHelpEnvVar(name string) string {
|
||||||
|
// This format should not be changed: users will be using it explicitly.
|
||||||
|
activeHelpEnvVar := strings.ToUpper(fmt.Sprintf("%s%s", name, activeHelpEnvVarSuffix))
|
||||||
|
return strings.ReplaceAll(activeHelpEnvVar, "-", "_")
|
||||||
|
}
|
157
vendor/github.com/spf13/cobra/active_help.md
generated
vendored
Normal file
157
vendor/github.com/spf13/cobra/active_help.md
generated
vendored
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
# Active Help
|
||||||
|
|
||||||
|
Active Help is a framework provided by Cobra which allows a program to define messages (hints, warnings, etc) that will be printed during program usage. It aims to make it easier for your users to learn how to use your program. If configured by the program, Active Help is printed when the user triggers shell completion.
|
||||||
|
|
||||||
|
For example,
|
||||||
|
```
|
||||||
|
bash-5.1$ helm repo add [tab]
|
||||||
|
You must choose a name for the repo you are adding.
|
||||||
|
|
||||||
|
bash-5.1$ bin/helm package [tab]
|
||||||
|
Please specify the path to the chart to package
|
||||||
|
|
||||||
|
bash-5.1$ bin/helm package [tab][tab]
|
||||||
|
bin/ internal/ scripts/ pkg/ testdata/
|
||||||
|
```
|
||||||
|
|
||||||
|
**Hint**: A good place to use Active Help messages is when the normal completion system does not provide any suggestions. In such cases, Active Help nicely supplements the normal shell completions to guide the user in knowing what is expected by the program.
|
||||||
|
## Supported shells
|
||||||
|
|
||||||
|
Active Help is currently only supported for the following shells:
|
||||||
|
- Bash (using [bash completion V2](shell_completions.md#bash-completion-v2) only). Note that bash 4.4 or higher is required for the prompt to appear when an Active Help message is printed.
|
||||||
|
- Zsh
|
||||||
|
|
||||||
|
## Adding Active Help messages
|
||||||
|
|
||||||
|
As Active Help uses the shell completion system, the implementation of Active Help messages is done by enhancing custom dynamic completions. If you are not familiar with dynamic completions, please refer to [Shell Completions](shell_completions.md).
|
||||||
|
|
||||||
|
Adding Active Help is done through the use of the `cobra.AppendActiveHelp(...)` function, where the program repeatedly adds Active Help messages to the list of completions. Keep reading for details.
|
||||||
|
|
||||||
|
### Active Help for nouns
|
||||||
|
|
||||||
|
Adding Active Help when completing a noun is done within the `ValidArgsFunction(...)` of a command. Please notice the use of `cobra.AppendActiveHelp(...)` in the following example:
|
||||||
|
|
||||||
|
```go
|
||||||
|
cmd := &cobra.Command{
|
||||||
|
Use: "add [NAME] [URL]",
|
||||||
|
Short: "add a chart repository",
|
||||||
|
Args: require.ExactArgs(2),
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
return addRepo(args)
|
||||||
|
},
|
||||||
|
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||||
|
var comps []string
|
||||||
|
if len(args) == 0 {
|
||||||
|
comps = cobra.AppendActiveHelp(comps, "You must choose a name for the repo you are adding")
|
||||||
|
} else if len(args) == 1 {
|
||||||
|
comps = cobra.AppendActiveHelp(comps, "You must specify the URL for the repo you are adding")
|
||||||
|
} else {
|
||||||
|
comps = cobra.AppendActiveHelp(comps, "This command does not take any more arguments")
|
||||||
|
}
|
||||||
|
return comps, cobra.ShellCompDirectiveNoFileComp
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
The example above defines the completions (none, in this specific example) as well as the Active Help messages for the `helm repo add` command. It yields the following behavior:
|
||||||
|
```
|
||||||
|
bash-5.1$ helm repo add [tab]
|
||||||
|
You must choose a name for the repo you are adding
|
||||||
|
|
||||||
|
bash-5.1$ helm repo add grafana [tab]
|
||||||
|
You must specify the URL for the repo you are adding
|
||||||
|
|
||||||
|
bash-5.1$ helm repo add grafana https://grafana.github.io/helm-charts [tab]
|
||||||
|
This command does not take any more arguments
|
||||||
|
```
|
||||||
|
**Hint**: As can be seen in the above example, a good place to use Active Help messages is when the normal completion system does not provide any suggestions. In such cases, Active Help nicely supplements the normal shell completions.
|
||||||
|
|
||||||
|
### Active Help for flags
|
||||||
|
|
||||||
|
Providing Active Help for flags is done in the same fashion as for nouns, but using the completion function registered for the flag. For example:
|
||||||
|
```go
|
||||||
|
_ = cmd.RegisterFlagCompletionFunc("version", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||||
|
if len(args) != 2 {
|
||||||
|
return cobra.AppendActiveHelp(nil, "You must first specify the chart to install before the --version flag can be completed"), cobra.ShellCompDirectiveNoFileComp
|
||||||
|
}
|
||||||
|
return compVersionFlag(args[1], toComplete)
|
||||||
|
})
|
||||||
|
```
|
||||||
|
The example above prints an Active Help message when not enough information was given by the user to complete the `--version` flag.
|
||||||
|
```
|
||||||
|
bash-5.1$ bin/helm install myrelease --version 2.0.[tab]
|
||||||
|
You must first specify the chart to install before the --version flag can be completed
|
||||||
|
|
||||||
|
bash-5.1$ bin/helm install myrelease bitnami/solr --version 2.0.[tab][tab]
|
||||||
|
2.0.1 2.0.2 2.0.3
|
||||||
|
```
|
||||||
|
|
||||||
|
## User control of Active Help
|
||||||
|
|
||||||
|
You may want to allow your users to disable Active Help or choose between different levels of Active Help. It is entirely up to the program to define the type of configurability of Active Help that it wants to offer, if any.
|
||||||
|
Allowing to configure Active Help is entirely optional; you can use Active Help in your program without doing anything about Active Help configuration.
|
||||||
|
|
||||||
|
The way to configure Active Help is to use the program's Active Help environment
|
||||||
|
variable. That variable is named `<PROGRAM>_ACTIVE_HELP` where `<PROGRAM>` is the name of your
|
||||||
|
program in uppercase with any `-` replaced by an `_`. The variable should be set by the user to whatever
|
||||||
|
Active Help configuration values are supported by the program.
|
||||||
|
|
||||||
|
For example, say `helm` has chosen to support three levels for Active Help: `on`, `off`, `local`. Then a user
|
||||||
|
would set the desired behavior to `local` by doing `export HELM_ACTIVE_HELP=local` in their shell.
|
||||||
|
|
||||||
|
For simplicity, when in `cmd.ValidArgsFunction(...)` or a flag's completion function, the program should read the
|
||||||
|
Active Help configuration using the `cobra.GetActiveHelpConfig(cmd)` function and select what Active Help messages
|
||||||
|
should or should not be added (instead of reading the environment variable directly).
|
||||||
|
|
||||||
|
For example:
|
||||||
|
```go
|
||||||
|
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||||
|
activeHelpLevel := cobra.GetActiveHelpConfig(cmd)
|
||||||
|
|
||||||
|
var comps []string
|
||||||
|
if len(args) == 0 {
|
||||||
|
if activeHelpLevel != "off" {
|
||||||
|
comps = cobra.AppendActiveHelp(comps, "You must choose a name for the repo you are adding")
|
||||||
|
}
|
||||||
|
} else if len(args) == 1 {
|
||||||
|
if activeHelpLevel != "off" {
|
||||||
|
comps = cobra.AppendActiveHelp(comps, "You must specify the URL for the repo you are adding")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if activeHelpLevel == "local" {
|
||||||
|
comps = cobra.AppendActiveHelp(comps, "This command does not take any more arguments")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return comps, cobra.ShellCompDirectiveNoFileComp
|
||||||
|
},
|
||||||
|
```
|
||||||
|
**Note 1**: If the `<PROGRAM>_ACTIVE_HELP` environment variable is set to the string "0", Cobra will automatically disable all Active Help output (even if some output was specified by the program using the `cobra.AppendActiveHelp(...)` function). Using "0" can simplify your code in situations where you want to blindly disable Active Help without having to call `cobra.GetActiveHelpConfig(cmd)` explicitly.
|
||||||
|
|
||||||
|
**Note 2**: If a user wants to disable Active Help for every single program based on Cobra, she can set the environment variable `COBRA_ACTIVE_HELP` to "0". In this case `cobra.GetActiveHelpConfig(cmd)` will return "0" no matter what the variable `<PROGRAM>_ACTIVE_HELP` is set to.
|
||||||
|
|
||||||
|
**Note 3**: If the user does not set `<PROGRAM>_ACTIVE_HELP` or `COBRA_ACTIVE_HELP` (which will be a common case), the default value for the Active Help configuration returned by `cobra.GetActiveHelpConfig(cmd)` will be the empty string.
|
||||||
|
## Active Help with Cobra's default completion command
|
||||||
|
|
||||||
|
Cobra provides a default `completion` command for programs that wish to use it.
|
||||||
|
When using the default `completion` command, Active Help is configurable in the same
|
||||||
|
fashion as described above using environment variables. You may wish to document this in more
|
||||||
|
details for your users.
|
||||||
|
|
||||||
|
## Debugging Active Help
|
||||||
|
|
||||||
|
Debugging your Active Help code is done in the same way as debugging your dynamic completion code, which is with Cobra's hidden `__complete` command. Please refer to [debugging shell completion](shell_completions.md#debugging) for details.
|
||||||
|
|
||||||
|
When debugging with the `__complete` command, if you want to specify different Active Help configurations, you should use the active help environment variable. That variable is named `<PROGRAM>_ACTIVE_HELP` where any `-` is replaced by an `_`. For example, we can test deactivating some Active Help as shown below:
|
||||||
|
```
|
||||||
|
$ HELM_ACTIVE_HELP=1 bin/helm __complete install wordpress bitnami/h<ENTER>
|
||||||
|
bitnami/haproxy
|
||||||
|
bitnami/harbor
|
||||||
|
_activeHelp_ WARNING: cannot re-use a name that is still in use
|
||||||
|
:0
|
||||||
|
Completion ended with directive: ShellCompDirectiveDefault
|
||||||
|
|
||||||
|
$ HELM_ACTIVE_HELP=0 bin/helm __complete install wordpress bitnami/h<ENTER>
|
||||||
|
bitnami/haproxy
|
||||||
|
bitnami/harbor
|
||||||
|
:0
|
||||||
|
Completion ended with directive: ShellCompDirectiveDefault
|
||||||
|
```
|
19
vendor/github.com/spf13/cobra/bash_completions.go
generated
vendored
19
vendor/github.com/spf13/cobra/bash_completions.go
generated
vendored
@ -73,7 +73,8 @@ __%[1]s_handle_go_custom_completion()
|
|||||||
# Prepare the command to request completions for the program.
|
# Prepare the command to request completions for the program.
|
||||||
# Calling ${words[0]} instead of directly %[1]s allows to handle aliases
|
# Calling ${words[0]} instead of directly %[1]s allows to handle aliases
|
||||||
args=("${words[@]:1}")
|
args=("${words[@]:1}")
|
||||||
requestComp="${words[0]} %[2]s ${args[*]}"
|
# Disable ActiveHelp which is not supported for bash completion v1
|
||||||
|
requestComp="%[8]s=0 ${words[0]} %[2]s ${args[*]}"
|
||||||
|
|
||||||
lastParam=${words[$((${#words[@]}-1))]}
|
lastParam=${words[$((${#words[@]}-1))]}
|
||||||
lastChar=${lastParam:$((${#lastParam}-1)):1}
|
lastChar=${lastParam:$((${#lastParam}-1)):1}
|
||||||
@ -99,7 +100,7 @@ __%[1]s_handle_go_custom_completion()
|
|||||||
directive=0
|
directive=0
|
||||||
fi
|
fi
|
||||||
__%[1]s_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
|
__%[1]s_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
|
||||||
__%[1]s_debug "${FUNCNAME[0]}: the completions are: ${out[*]}"
|
__%[1]s_debug "${FUNCNAME[0]}: the completions are: ${out}"
|
||||||
|
|
||||||
if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
|
if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
|
||||||
# Error code. No completion.
|
# Error code. No completion.
|
||||||
@ -125,7 +126,7 @@ __%[1]s_handle_go_custom_completion()
|
|||||||
local fullFilter filter filteringCmd
|
local fullFilter filter filteringCmd
|
||||||
# Do not use quotes around the $out variable or else newline
|
# Do not use quotes around the $out variable or else newline
|
||||||
# characters will be kept.
|
# characters will be kept.
|
||||||
for filter in ${out[*]}; do
|
for filter in ${out}; do
|
||||||
fullFilter+="$filter|"
|
fullFilter+="$filter|"
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -136,7 +137,7 @@ __%[1]s_handle_go_custom_completion()
|
|||||||
# File completion for directories only
|
# File completion for directories only
|
||||||
local subdir
|
local subdir
|
||||||
# Use printf to strip any trailing newline
|
# Use printf to strip any trailing newline
|
||||||
subdir=$(printf "%%s" "${out[0]}")
|
subdir=$(printf "%%s" "${out}")
|
||||||
if [ -n "$subdir" ]; then
|
if [ -n "$subdir" ]; then
|
||||||
__%[1]s_debug "Listing directories in $subdir"
|
__%[1]s_debug "Listing directories in $subdir"
|
||||||
__%[1]s_handle_subdirs_in_dir_flag "$subdir"
|
__%[1]s_handle_subdirs_in_dir_flag "$subdir"
|
||||||
@ -147,7 +148,7 @@ __%[1]s_handle_go_custom_completion()
|
|||||||
else
|
else
|
||||||
while IFS='' read -r comp; do
|
while IFS='' read -r comp; do
|
||||||
COMPREPLY+=("$comp")
|
COMPREPLY+=("$comp")
|
||||||
done < <(compgen -W "${out[*]}" -- "$cur")
|
done < <(compgen -W "${out}" -- "$cur")
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,11 +384,11 @@ __%[1]s_handle_word()
|
|||||||
|
|
||||||
`, name, ShellCompNoDescRequestCmd,
|
`, name, ShellCompNoDescRequestCmd,
|
||||||
ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
|
ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
|
||||||
ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs))
|
ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, activeHelpEnvVar(name)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func writePostscript(buf io.StringWriter, name string) {
|
func writePostscript(buf io.StringWriter, name string) {
|
||||||
name = strings.Replace(name, ":", "__", -1)
|
name = strings.ReplaceAll(name, ":", "__")
|
||||||
WriteStringAndCheck(buf, fmt.Sprintf("__start_%s()\n", name))
|
WriteStringAndCheck(buf, fmt.Sprintf("__start_%s()\n", name))
|
||||||
WriteStringAndCheck(buf, fmt.Sprintf(`{
|
WriteStringAndCheck(buf, fmt.Sprintf(`{
|
||||||
local cur prev words cword split
|
local cur prev words cword split
|
||||||
@ -645,8 +646,8 @@ func gen(buf io.StringWriter, cmd *Command) {
|
|||||||
gen(buf, c)
|
gen(buf, c)
|
||||||
}
|
}
|
||||||
commandName := cmd.CommandPath()
|
commandName := cmd.CommandPath()
|
||||||
commandName = strings.Replace(commandName, " ", "_", -1)
|
commandName = strings.ReplaceAll(commandName, " ", "_")
|
||||||
commandName = strings.Replace(commandName, ":", "__", -1)
|
commandName = strings.ReplaceAll(commandName, ":", "__")
|
||||||
|
|
||||||
if cmd.Root() == cmd {
|
if cmd.Root() == cmd {
|
||||||
WriteStringAndCheck(buf, fmt.Sprintf("_%s_root_command()\n{\n", commandName))
|
WriteStringAndCheck(buf, fmt.Sprintf("_%s_root_command()\n{\n", commandName))
|
||||||
|
176
vendor/github.com/spf13/cobra/bash_completionsV2.go
generated
vendored
176
vendor/github.com/spf13/cobra/bash_completionsV2.go
generated
vendored
@ -78,7 +78,7 @@ __%[1]s_get_completion_results() {
|
|||||||
directive=0
|
directive=0
|
||||||
fi
|
fi
|
||||||
__%[1]s_debug "The completion directive is: ${directive}"
|
__%[1]s_debug "The completion directive is: ${directive}"
|
||||||
__%[1]s_debug "The completions are: ${out[*]}"
|
__%[1]s_debug "The completions are: ${out}"
|
||||||
}
|
}
|
||||||
|
|
||||||
__%[1]s_process_completion_results() {
|
__%[1]s_process_completion_results() {
|
||||||
@ -111,13 +111,18 @@ __%[1]s_process_completion_results() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Separate activeHelp from normal completions
|
||||||
|
local completions=()
|
||||||
|
local activeHelp=()
|
||||||
|
__%[1]s_extract_activeHelp
|
||||||
|
|
||||||
if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
|
if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
|
||||||
# File extension filtering
|
# File extension filtering
|
||||||
local fullFilter filter filteringCmd
|
local fullFilter filter filteringCmd
|
||||||
|
|
||||||
# Do not use quotes around the $out variable or else newline
|
# Do not use quotes around the $completions variable or else newline
|
||||||
# characters will be kept.
|
# characters will be kept.
|
||||||
for filter in ${out[*]}; do
|
for filter in ${completions[*]}; do
|
||||||
fullFilter+="$filter|"
|
fullFilter+="$filter|"
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -129,7 +134,7 @@ __%[1]s_process_completion_results() {
|
|||||||
|
|
||||||
# Use printf to strip any trailing newline
|
# Use printf to strip any trailing newline
|
||||||
local subdir
|
local subdir
|
||||||
subdir=$(printf "%%s" "${out[0]}")
|
subdir=$(printf "%%s" "${completions[0]}")
|
||||||
if [ -n "$subdir" ]; then
|
if [ -n "$subdir" ]; then
|
||||||
__%[1]s_debug "Listing directories in $subdir"
|
__%[1]s_debug "Listing directories in $subdir"
|
||||||
pushd "$subdir" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
|
pushd "$subdir" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
|
||||||
@ -143,6 +148,43 @@ __%[1]s_process_completion_results() {
|
|||||||
|
|
||||||
__%[1]s_handle_special_char "$cur" :
|
__%[1]s_handle_special_char "$cur" :
|
||||||
__%[1]s_handle_special_char "$cur" =
|
__%[1]s_handle_special_char "$cur" =
|
||||||
|
|
||||||
|
# Print the activeHelp statements before we finish
|
||||||
|
if [ ${#activeHelp} -ne 0 ]; then
|
||||||
|
printf "\n";
|
||||||
|
printf "%%s\n" "${activeHelp[@]}"
|
||||||
|
printf "\n"
|
||||||
|
|
||||||
|
# The prompt format is only available from bash 4.4.
|
||||||
|
# We test if it is available before using it.
|
||||||
|
if (x=${PS1@P}) 2> /dev/null; then
|
||||||
|
printf "%%s" "${PS1@P}${COMP_LINE[@]}"
|
||||||
|
else
|
||||||
|
# Can't print the prompt. Just print the
|
||||||
|
# text the user had typed, it is workable enough.
|
||||||
|
printf "%%s" "${COMP_LINE[@]}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Separate activeHelp lines from real completions.
|
||||||
|
# Fills the $activeHelp and $completions arrays.
|
||||||
|
__%[1]s_extract_activeHelp() {
|
||||||
|
local activeHelpMarker="%[8]s"
|
||||||
|
local endIndex=${#activeHelpMarker}
|
||||||
|
|
||||||
|
while IFS='' read -r comp; do
|
||||||
|
if [ "${comp:0:endIndex}" = "$activeHelpMarker" ]; then
|
||||||
|
comp=${comp:endIndex}
|
||||||
|
__%[1]s_debug "ActiveHelp found: $comp"
|
||||||
|
if [ -n "$comp" ]; then
|
||||||
|
activeHelp+=("$comp")
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Not an activeHelp line but a normal completion
|
||||||
|
completions+=("$comp")
|
||||||
|
fi
|
||||||
|
done < <(printf "%%s\n" "${out}")
|
||||||
}
|
}
|
||||||
|
|
||||||
__%[1]s_handle_completion_types() {
|
__%[1]s_handle_completion_types() {
|
||||||
@ -154,17 +196,16 @@ __%[1]s_handle_completion_types() {
|
|||||||
# If the user requested inserting one completion at a time, or all
|
# If the user requested inserting one completion at a time, or all
|
||||||
# completions at once on the command-line we must remove the descriptions.
|
# completions at once on the command-line we must remove the descriptions.
|
||||||
# https://github.com/spf13/cobra/issues/1508
|
# https://github.com/spf13/cobra/issues/1508
|
||||||
local tab comp
|
local tab=$'\t' comp
|
||||||
tab=$(printf '\t')
|
|
||||||
while IFS='' read -r comp; do
|
while IFS='' read -r comp; do
|
||||||
|
[[ -z $comp ]] && continue
|
||||||
# Strip any description
|
# Strip any description
|
||||||
comp=${comp%%%%$tab*}
|
comp=${comp%%%%$tab*}
|
||||||
# Only consider the completions that match
|
# Only consider the completions that match
|
||||||
comp=$(compgen -W "$comp" -- "$cur")
|
if [[ $comp == "$cur"* ]]; then
|
||||||
if [ -n "$comp" ]; then
|
|
||||||
COMPREPLY+=("$comp")
|
COMPREPLY+=("$comp")
|
||||||
fi
|
fi
|
||||||
done < <(printf "%%s\n" "${out[@]}")
|
done < <(printf "%%s\n" "${completions[@]}")
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
@ -175,44 +216,37 @@ __%[1]s_handle_completion_types() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
__%[1]s_handle_standard_completion_case() {
|
__%[1]s_handle_standard_completion_case() {
|
||||||
local tab comp
|
local tab=$'\t' comp
|
||||||
tab=$(printf '\t')
|
|
||||||
|
# Short circuit to optimize if we don't have descriptions
|
||||||
|
if [[ "${completions[*]}" != *$tab* ]]; then
|
||||||
|
IFS=$'\n' read -ra COMPREPLY -d '' < <(compgen -W "${completions[*]}" -- "$cur")
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
local longest=0
|
local longest=0
|
||||||
|
local compline
|
||||||
# Look for the longest completion so that we can format things nicely
|
# Look for the longest completion so that we can format things nicely
|
||||||
while IFS='' read -r comp; do
|
while IFS='' read -r compline; do
|
||||||
|
[[ -z $compline ]] && continue
|
||||||
# Strip any description before checking the length
|
# Strip any description before checking the length
|
||||||
comp=${comp%%%%$tab*}
|
comp=${compline%%%%$tab*}
|
||||||
# Only consider the completions that match
|
# Only consider the completions that match
|
||||||
comp=$(compgen -W "$comp" -- "$cur")
|
[[ $comp == "$cur"* ]] || continue
|
||||||
|
COMPREPLY+=("$compline")
|
||||||
if ((${#comp}>longest)); then
|
if ((${#comp}>longest)); then
|
||||||
longest=${#comp}
|
longest=${#comp}
|
||||||
fi
|
fi
|
||||||
done < <(printf "%%s\n" "${out[@]}")
|
done < <(printf "%%s\n" "${completions[@]}")
|
||||||
|
|
||||||
local completions=()
|
|
||||||
while IFS='' read -r comp; do
|
|
||||||
if [ -z "$comp" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
__%[1]s_debug "Original comp: $comp"
|
|
||||||
comp="$(__%[1]s_format_comp_descriptions "$comp" "$longest")"
|
|
||||||
__%[1]s_debug "Final comp: $comp"
|
|
||||||
completions+=("$comp")
|
|
||||||
done < <(printf "%%s\n" "${out[@]}")
|
|
||||||
|
|
||||||
while IFS='' read -r comp; do
|
|
||||||
COMPREPLY+=("$comp")
|
|
||||||
done < <(compgen -W "${completions[*]}" -- "$cur")
|
|
||||||
|
|
||||||
# If there is a single completion left, remove the description text
|
# If there is a single completion left, remove the description text
|
||||||
if [ ${#COMPREPLY[*]} -eq 1 ]; then
|
if [ ${#COMPREPLY[*]} -eq 1 ]; then
|
||||||
__%[1]s_debug "COMPREPLY[0]: ${COMPREPLY[0]}"
|
__%[1]s_debug "COMPREPLY[0]: ${COMPREPLY[0]}"
|
||||||
comp="${COMPREPLY[0]%%%% *}"
|
comp="${COMPREPLY[0]%%%%$tab*}"
|
||||||
__%[1]s_debug "Removed description from single completion, which is now: ${comp}"
|
__%[1]s_debug "Removed description from single completion, which is now: ${comp}"
|
||||||
COMPREPLY=()
|
COMPREPLY[0]=$comp
|
||||||
COMPREPLY+=("$comp")
|
else # Format the descriptions
|
||||||
|
__%[1]s_format_comp_descriptions $longest
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,45 +265,48 @@ __%[1]s_handle_special_char()
|
|||||||
|
|
||||||
__%[1]s_format_comp_descriptions()
|
__%[1]s_format_comp_descriptions()
|
||||||
{
|
{
|
||||||
local tab
|
local tab=$'\t'
|
||||||
tab=$(printf '\t')
|
local comp desc maxdesclength
|
||||||
local comp="$1"
|
local longest=$1
|
||||||
local longest=$2
|
|
||||||
|
|
||||||
# Properly format the description string which follows a tab character if there is one
|
local i ci
|
||||||
if [[ "$comp" == *$tab* ]]; then
|
for ci in ${!COMPREPLY[*]}; do
|
||||||
desc=${comp#*$tab}
|
comp=${COMPREPLY[ci]}
|
||||||
comp=${comp%%%%$tab*}
|
# Properly format the description string which follows a tab character if there is one
|
||||||
|
if [[ "$comp" == *$tab* ]]; then
|
||||||
|
__%[1]s_debug "Original comp: $comp"
|
||||||
|
desc=${comp#*$tab}
|
||||||
|
comp=${comp%%%%$tab*}
|
||||||
|
|
||||||
# $COLUMNS stores the current shell width.
|
# $COLUMNS stores the current shell width.
|
||||||
# Remove an extra 4 because we add 2 spaces and 2 parentheses.
|
# Remove an extra 4 because we add 2 spaces and 2 parentheses.
|
||||||
maxdesclength=$(( COLUMNS - longest - 4 ))
|
maxdesclength=$(( COLUMNS - longest - 4 ))
|
||||||
|
|
||||||
# Make sure we can fit a description of at least 8 characters
|
# Make sure we can fit a description of at least 8 characters
|
||||||
# if we are to align the descriptions.
|
# if we are to align the descriptions.
|
||||||
if [[ $maxdesclength -gt 8 ]]; then
|
if [[ $maxdesclength -gt 8 ]]; then
|
||||||
# Add the proper number of spaces to align the descriptions
|
# Add the proper number of spaces to align the descriptions
|
||||||
for ((i = ${#comp} ; i < longest ; i++)); do
|
for ((i = ${#comp} ; i < longest ; i++)); do
|
||||||
comp+=" "
|
comp+=" "
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
# Don't pad the descriptions so we can fit more text after the completion
|
# Don't pad the descriptions so we can fit more text after the completion
|
||||||
maxdesclength=$(( COLUMNS - ${#comp} - 4 ))
|
maxdesclength=$(( COLUMNS - ${#comp} - 4 ))
|
||||||
fi
|
|
||||||
|
|
||||||
# If there is enough space for any description text,
|
|
||||||
# truncate the descriptions that are too long for the shell width
|
|
||||||
if [ $maxdesclength -gt 0 ]; then
|
|
||||||
if [ ${#desc} -gt $maxdesclength ]; then
|
|
||||||
desc=${desc:0:$(( maxdesclength - 1 ))}
|
|
||||||
desc+="…"
|
|
||||||
fi
|
fi
|
||||||
comp+=" ($desc)"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Must use printf to escape all special characters
|
# If there is enough space for any description text,
|
||||||
printf "%%q" "${comp}"
|
# truncate the descriptions that are too long for the shell width
|
||||||
|
if [ $maxdesclength -gt 0 ]; then
|
||||||
|
if [ ${#desc} -gt $maxdesclength ]; then
|
||||||
|
desc=${desc:0:$(( maxdesclength - 1 ))}
|
||||||
|
desc+="…"
|
||||||
|
fi
|
||||||
|
comp+=" ($desc)"
|
||||||
|
fi
|
||||||
|
COMPREPLY[ci]=$comp
|
||||||
|
__%[1]s_debug "Final comp: $comp"
|
||||||
|
fi
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
__start_%[1]s()
|
__start_%[1]s()
|
||||||
@ -310,7 +347,8 @@ fi
|
|||||||
# ex: ts=4 sw=4 et filetype=sh
|
# ex: ts=4 sw=4 et filetype=sh
|
||||||
`, name, compCmd,
|
`, name, compCmd,
|
||||||
ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
|
ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
|
||||||
ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs))
|
ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs,
|
||||||
|
activeHelpMarker))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GenBashCompletionFileV2 generates Bash completion version 2.
|
// GenBashCompletionFileV2 generates Bash completion version 2.
|
||||||
|
26
vendor/github.com/spf13/cobra/command.go
generated
vendored
26
vendor/github.com/spf13/cobra/command.go
generated
vendored
@ -18,6 +18,7 @@ package cobra
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
@ -166,7 +167,7 @@ type Command struct {
|
|||||||
// errWriter is a writer defined by the user that replaces stderr
|
// errWriter is a writer defined by the user that replaces stderr
|
||||||
errWriter io.Writer
|
errWriter io.Writer
|
||||||
|
|
||||||
//FParseErrWhitelist flag parse errors to be ignored
|
// FParseErrWhitelist flag parse errors to be ignored
|
||||||
FParseErrWhitelist FParseErrWhitelist
|
FParseErrWhitelist FParseErrWhitelist
|
||||||
|
|
||||||
// CompletionOptions is a set of options to control the handling of shell completion
|
// CompletionOptions is a set of options to control the handling of shell completion
|
||||||
@ -224,12 +225,23 @@ type Command struct {
|
|||||||
SuggestionsMinimumDistance int
|
SuggestionsMinimumDistance int
|
||||||
}
|
}
|
||||||
|
|
||||||
// Context returns underlying command context. If command wasn't
|
// Context returns underlying command context. If command was executed
|
||||||
// executed with ExecuteContext Context returns Background context.
|
// with ExecuteContext or the context was set with SetContext, the
|
||||||
|
// previously set context will be returned. Otherwise, nil is returned.
|
||||||
|
//
|
||||||
|
// Notice that a call to Execute and ExecuteC will replace a nil context of
|
||||||
|
// a command with a context.Background, so a background context will be
|
||||||
|
// returned by Context after one of these functions has been called.
|
||||||
func (c *Command) Context() context.Context {
|
func (c *Command) Context() context.Context {
|
||||||
return c.ctx
|
return c.ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetContext sets context for the command. It is set to context.Background by default and will be overwritten by
|
||||||
|
// Command.ExecuteContext or Command.ExecuteContextC
|
||||||
|
func (c *Command) SetContext(ctx context.Context) {
|
||||||
|
c.ctx = ctx
|
||||||
|
}
|
||||||
|
|
||||||
// SetArgs sets arguments for the command. It is set to os.Args[1:] by default, if desired, can be overridden
|
// SetArgs sets arguments for the command. It is set to os.Args[1:] by default, if desired, can be overridden
|
||||||
// particularly useful when testing.
|
// particularly useful when testing.
|
||||||
func (c *Command) SetArgs(a []string) {
|
func (c *Command) SetArgs(a []string) {
|
||||||
@ -852,6 +864,10 @@ func (c *Command) execute(a []string) (err error) {
|
|||||||
if err := c.validateRequiredFlags(); err != nil {
|
if err := c.validateRequiredFlags(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := c.validateFlagGroups(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if c.RunE != nil {
|
if c.RunE != nil {
|
||||||
if err := c.RunE(c, argWoFlags); err != nil {
|
if err := c.RunE(c, argWoFlags); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -975,7 +991,7 @@ func (c *Command) ExecuteC() (cmd *Command, err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
// Always show help if requested, even if SilenceErrors is in
|
// Always show help if requested, even if SilenceErrors is in
|
||||||
// effect
|
// effect
|
||||||
if err == flag.ErrHelp {
|
if errors.Is(err, flag.ErrHelp) {
|
||||||
cmd.HelpFunc()(cmd, args)
|
cmd.HelpFunc()(cmd, args)
|
||||||
return cmd, nil
|
return cmd, nil
|
||||||
}
|
}
|
||||||
@ -997,7 +1013,7 @@ func (c *Command) ExecuteC() (cmd *Command, err error) {
|
|||||||
|
|
||||||
func (c *Command) ValidateArgs(args []string) error {
|
func (c *Command) ValidateArgs(args []string) error {
|
||||||
if c.Args == nil {
|
if c.Args == nil {
|
||||||
return nil
|
return ArbitraryArgs(c, args)
|
||||||
}
|
}
|
||||||
return c.Args(c, args)
|
return c.Args(c, args)
|
||||||
}
|
}
|
||||||
|
27
vendor/github.com/spf13/cobra/completions.go
generated
vendored
27
vendor/github.com/spf13/cobra/completions.go
generated
vendored
@ -103,6 +103,14 @@ func NoFileCompletions(cmd *Command, args []string, toComplete string) ([]string
|
|||||||
return nil, ShellCompDirectiveNoFileComp
|
return nil, ShellCompDirectiveNoFileComp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FixedCompletions can be used to create a completion function which always
|
||||||
|
// returns the same results.
|
||||||
|
func FixedCompletions(choices []string, directive ShellCompDirective) func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) {
|
||||||
|
return func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) {
|
||||||
|
return choices, directive
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// RegisterFlagCompletionFunc should be called to register a function to provide completion for a flag.
|
// RegisterFlagCompletionFunc should be called to register a function to provide completion for a flag.
|
||||||
func (c *Command) RegisterFlagCompletionFunc(flagName string, f func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective)) error {
|
func (c *Command) RegisterFlagCompletionFunc(flagName string, f func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective)) error {
|
||||||
flag := c.Flag(flagName)
|
flag := c.Flag(flagName)
|
||||||
@ -170,6 +178,12 @@ func (c *Command) initCompleteCmd(args []string) {
|
|||||||
|
|
||||||
noDescriptions := (cmd.CalledAs() == ShellCompNoDescRequestCmd)
|
noDescriptions := (cmd.CalledAs() == ShellCompNoDescRequestCmd)
|
||||||
for _, comp := range completions {
|
for _, comp := range completions {
|
||||||
|
if GetActiveHelpConfig(finalCmd) == activeHelpGlobalDisable {
|
||||||
|
// Remove all activeHelp entries in this case
|
||||||
|
if strings.HasPrefix(comp, activeHelpMarker) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
if noDescriptions {
|
if noDescriptions {
|
||||||
// Remove any description that may be included following a tab character.
|
// Remove any description that may be included following a tab character.
|
||||||
comp = strings.Split(comp, "\t")[0]
|
comp = strings.Split(comp, "\t")[0]
|
||||||
@ -311,8 +325,11 @@ func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDi
|
|||||||
var completions []string
|
var completions []string
|
||||||
var directive ShellCompDirective
|
var directive ShellCompDirective
|
||||||
|
|
||||||
|
// Enforce flag groups before doing flag completions
|
||||||
|
finalCmd.enforceFlagGroupsForCompletion()
|
||||||
|
|
||||||
// Note that we want to perform flagname completion even if finalCmd.DisableFlagParsing==true;
|
// Note that we want to perform flagname completion even if finalCmd.DisableFlagParsing==true;
|
||||||
// doing this allows for completion of persistant flag names even for commands that disable flag parsing.
|
// doing this allows for completion of persistent flag names even for commands that disable flag parsing.
|
||||||
//
|
//
|
||||||
// When doing completion of a flag name, as soon as an argument starts with
|
// When doing completion of a flag name, as soon as an argument starts with
|
||||||
// a '-' we know it is a flag. We cannot use isFlagArg() here as it requires
|
// a '-' we know it is a flag. We cannot use isFlagArg() here as it requires
|
||||||
@ -644,7 +661,7 @@ To load completions for every new session, execute once:
|
|||||||
|
|
||||||
#### macOS:
|
#### macOS:
|
||||||
|
|
||||||
%[1]s completion bash > /usr/local/etc/bash_completion.d/%[1]s
|
%[1]s completion bash > $(brew --prefix)/etc/bash_completion.d/%[1]s
|
||||||
|
|
||||||
You will need to start a new shell for this setup to take effect.
|
You will need to start a new shell for this setup to take effect.
|
||||||
`, c.Root().Name()),
|
`, c.Root().Name()),
|
||||||
@ -669,6 +686,10 @@ to enable it. You can execute the following once:
|
|||||||
|
|
||||||
echo "autoload -U compinit; compinit" >> ~/.zshrc
|
echo "autoload -U compinit; compinit" >> ~/.zshrc
|
||||||
|
|
||||||
|
To load completions in your current shell session:
|
||||||
|
|
||||||
|
source <(%[1]s completion zsh); compdef _%[1]s %[1]s
|
||||||
|
|
||||||
To load completions for every new session, execute once:
|
To load completions for every new session, execute once:
|
||||||
|
|
||||||
#### Linux:
|
#### Linux:
|
||||||
@ -677,7 +698,7 @@ To load completions for every new session, execute once:
|
|||||||
|
|
||||||
#### macOS:
|
#### macOS:
|
||||||
|
|
||||||
%[1]s completion zsh > /usr/local/share/zsh/site-functions/_%[1]s
|
%[1]s completion zsh > $(brew --prefix)/share/zsh/site-functions/_%[1]s
|
||||||
|
|
||||||
You will need to start a new shell for this setup to take effect.
|
You will need to start a new shell for this setup to take effect.
|
||||||
`, c.Root().Name()),
|
`, c.Root().Name()),
|
||||||
|
9
vendor/github.com/spf13/cobra/fish_completions.go
generated
vendored
9
vendor/github.com/spf13/cobra/fish_completions.go
generated
vendored
@ -11,8 +11,8 @@ import (
|
|||||||
func genFishComp(buf io.StringWriter, name string, includeDesc bool) {
|
func genFishComp(buf io.StringWriter, name string, includeDesc bool) {
|
||||||
// Variables should not contain a '-' or ':' character
|
// Variables should not contain a '-' or ':' character
|
||||||
nameForVar := name
|
nameForVar := name
|
||||||
nameForVar = strings.Replace(nameForVar, "-", "_", -1)
|
nameForVar = strings.ReplaceAll(nameForVar, "-", "_")
|
||||||
nameForVar = strings.Replace(nameForVar, ":", "_", -1)
|
nameForVar = strings.ReplaceAll(nameForVar, ":", "_")
|
||||||
|
|
||||||
compCmd := ShellCompRequestCmd
|
compCmd := ShellCompRequestCmd
|
||||||
if !includeDesc {
|
if !includeDesc {
|
||||||
@ -38,7 +38,8 @@ function __%[1]s_perform_completion
|
|||||||
__%[1]s_debug "args: $args"
|
__%[1]s_debug "args: $args"
|
||||||
__%[1]s_debug "last arg: $lastArg"
|
__%[1]s_debug "last arg: $lastArg"
|
||||||
|
|
||||||
set -l requestComp "$args[1] %[3]s $args[2..-1] $lastArg"
|
# Disable ActiveHelp which is not supported for fish shell
|
||||||
|
set -l requestComp "%[9]s=0 $args[1] %[3]s $args[2..-1] $lastArg"
|
||||||
|
|
||||||
__%[1]s_debug "Calling $requestComp"
|
__%[1]s_debug "Calling $requestComp"
|
||||||
set -l results (eval $requestComp 2> /dev/null)
|
set -l results (eval $requestComp 2> /dev/null)
|
||||||
@ -196,7 +197,7 @@ complete -c %[2]s -n '__%[1]s_prepare_completions' -f -a '$__%[1]s_comp_results'
|
|||||||
|
|
||||||
`, nameForVar, name, compCmd,
|
`, nameForVar, name, compCmd,
|
||||||
ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
|
ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
|
||||||
ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs))
|
ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, activeHelpEnvVar(name)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GenFishCompletion generates fish completion file and writes to the passed writer.
|
// GenFishCompletion generates fish completion file and writes to the passed writer.
|
||||||
|
223
vendor/github.com/spf13/cobra/flag_groups.go
generated
vendored
Normal file
223
vendor/github.com/spf13/cobra/flag_groups.go
generated
vendored
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
// Copyright © 2022 Steve Francia <spf@spf13.com>.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package cobra
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
flag "github.com/spf13/pflag"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
requiredAsGroup = "cobra_annotation_required_if_others_set"
|
||||||
|
mutuallyExclusive = "cobra_annotation_mutually_exclusive"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MarkFlagsRequiredTogether marks the given flags with annotations so that Cobra errors
|
||||||
|
// if the command is invoked with a subset (but not all) of the given flags.
|
||||||
|
func (c *Command) MarkFlagsRequiredTogether(flagNames ...string) {
|
||||||
|
c.mergePersistentFlags()
|
||||||
|
for _, v := range flagNames {
|
||||||
|
f := c.Flags().Lookup(v)
|
||||||
|
if f == nil {
|
||||||
|
panic(fmt.Sprintf("Failed to find flag %q and mark it as being required in a flag group", v))
|
||||||
|
}
|
||||||
|
if err := c.Flags().SetAnnotation(v, requiredAsGroup, append(f.Annotations[requiredAsGroup], strings.Join(flagNames, " "))); err != nil {
|
||||||
|
// Only errs if the flag isn't found.
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkFlagsMutuallyExclusive marks the given flags with annotations so that Cobra errors
|
||||||
|
// if the command is invoked with more than one flag from the given set of flags.
|
||||||
|
func (c *Command) MarkFlagsMutuallyExclusive(flagNames ...string) {
|
||||||
|
c.mergePersistentFlags()
|
||||||
|
for _, v := range flagNames {
|
||||||
|
f := c.Flags().Lookup(v)
|
||||||
|
if f == nil {
|
||||||
|
panic(fmt.Sprintf("Failed to find flag %q and mark it as being in a mutually exclusive flag group", v))
|
||||||
|
}
|
||||||
|
// Each time this is called is a single new entry; this allows it to be a member of multiple groups if needed.
|
||||||
|
if err := c.Flags().SetAnnotation(v, mutuallyExclusive, append(f.Annotations[mutuallyExclusive], strings.Join(flagNames, " "))); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// validateFlagGroups validates the mutuallyExclusive/requiredAsGroup logic and returns the
|
||||||
|
// first error encountered.
|
||||||
|
func (c *Command) validateFlagGroups() error {
|
||||||
|
if c.DisableFlagParsing {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
flags := c.Flags()
|
||||||
|
|
||||||
|
// groupStatus format is the list of flags as a unique ID,
|
||||||
|
// then a map of each flag name and whether it is set or not.
|
||||||
|
groupStatus := map[string]map[string]bool{}
|
||||||
|
mutuallyExclusiveGroupStatus := map[string]map[string]bool{}
|
||||||
|
flags.VisitAll(func(pflag *flag.Flag) {
|
||||||
|
processFlagForGroupAnnotation(flags, pflag, requiredAsGroup, groupStatus)
|
||||||
|
processFlagForGroupAnnotation(flags, pflag, mutuallyExclusive, mutuallyExclusiveGroupStatus)
|
||||||
|
})
|
||||||
|
|
||||||
|
if err := validateRequiredFlagGroups(groupStatus); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := validateExclusiveFlagGroups(mutuallyExclusiveGroupStatus); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func hasAllFlags(fs *flag.FlagSet, flagnames ...string) bool {
|
||||||
|
for _, fname := range flagnames {
|
||||||
|
f := fs.Lookup(fname)
|
||||||
|
if f == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func processFlagForGroupAnnotation(flags *flag.FlagSet, pflag *flag.Flag, annotation string, groupStatus map[string]map[string]bool) {
|
||||||
|
groupInfo, found := pflag.Annotations[annotation]
|
||||||
|
if found {
|
||||||
|
for _, group := range groupInfo {
|
||||||
|
if groupStatus[group] == nil {
|
||||||
|
flagnames := strings.Split(group, " ")
|
||||||
|
|
||||||
|
// Only consider this flag group at all if all the flags are defined.
|
||||||
|
if !hasAllFlags(flags, flagnames...) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
groupStatus[group] = map[string]bool{}
|
||||||
|
for _, name := range flagnames {
|
||||||
|
groupStatus[group][name] = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
groupStatus[group][pflag.Name] = pflag.Changed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func validateRequiredFlagGroups(data map[string]map[string]bool) error {
|
||||||
|
keys := sortedKeys(data)
|
||||||
|
for _, flagList := range keys {
|
||||||
|
flagnameAndStatus := data[flagList]
|
||||||
|
|
||||||
|
unset := []string{}
|
||||||
|
for flagname, isSet := range flagnameAndStatus {
|
||||||
|
if !isSet {
|
||||||
|
unset = append(unset, flagname)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(unset) == len(flagnameAndStatus) || len(unset) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort values, so they can be tested/scripted against consistently.
|
||||||
|
sort.Strings(unset)
|
||||||
|
return fmt.Errorf("if any flags in the group [%v] are set they must all be set; missing %v", flagList, unset)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func validateExclusiveFlagGroups(data map[string]map[string]bool) error {
|
||||||
|
keys := sortedKeys(data)
|
||||||
|
for _, flagList := range keys {
|
||||||
|
flagnameAndStatus := data[flagList]
|
||||||
|
var set []string
|
||||||
|
for flagname, isSet := range flagnameAndStatus {
|
||||||
|
if isSet {
|
||||||
|
set = append(set, flagname)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(set) == 0 || len(set) == 1 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort values, so they can be tested/scripted against consistently.
|
||||||
|
sort.Strings(set)
|
||||||
|
return fmt.Errorf("if any flags in the group [%v] are set none of the others can be; %v were all set", flagList, set)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func sortedKeys(m map[string]map[string]bool) []string {
|
||||||
|
keys := make([]string, len(m))
|
||||||
|
i := 0
|
||||||
|
for k := range m {
|
||||||
|
keys[i] = k
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
sort.Strings(keys)
|
||||||
|
return keys
|
||||||
|
}
|
||||||
|
|
||||||
|
// enforceFlagGroupsForCompletion will do the following:
|
||||||
|
// - when a flag in a group is present, other flags in the group will be marked required
|
||||||
|
// - when a flag in a mutually exclusive group is present, other flags in the group will be marked as hidden
|
||||||
|
// This allows the standard completion logic to behave appropriately for flag groups
|
||||||
|
func (c *Command) enforceFlagGroupsForCompletion() {
|
||||||
|
if c.DisableFlagParsing {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
flags := c.Flags()
|
||||||
|
groupStatus := map[string]map[string]bool{}
|
||||||
|
mutuallyExclusiveGroupStatus := map[string]map[string]bool{}
|
||||||
|
c.Flags().VisitAll(func(pflag *flag.Flag) {
|
||||||
|
processFlagForGroupAnnotation(flags, pflag, requiredAsGroup, groupStatus)
|
||||||
|
processFlagForGroupAnnotation(flags, pflag, mutuallyExclusive, mutuallyExclusiveGroupStatus)
|
||||||
|
})
|
||||||
|
|
||||||
|
// If a flag that is part of a group is present, we make all the other flags
|
||||||
|
// of that group required so that the shell completion suggests them automatically
|
||||||
|
for flagList, flagnameAndStatus := range groupStatus {
|
||||||
|
for _, isSet := range flagnameAndStatus {
|
||||||
|
if isSet {
|
||||||
|
// One of the flags of the group is set, mark the other ones as required
|
||||||
|
for _, fName := range strings.Split(flagList, " ") {
|
||||||
|
_ = c.MarkFlagRequired(fName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If a flag that is mutually exclusive to others is present, we hide the other
|
||||||
|
// flags of that group so the shell completion does not suggest them
|
||||||
|
for flagList, flagnameAndStatus := range mutuallyExclusiveGroupStatus {
|
||||||
|
for flagName, isSet := range flagnameAndStatus {
|
||||||
|
if isSet {
|
||||||
|
// One of the flags of the mutually exclusive group is set, mark the other ones as hidden
|
||||||
|
// Don't mark the flag that is already set as hidden because it may be an
|
||||||
|
// array or slice flag and therefore must continue being suggested
|
||||||
|
for _, fName := range strings.Split(flagList, " ") {
|
||||||
|
if fName != flagName {
|
||||||
|
flag := c.Flags().Lookup(fName)
|
||||||
|
flag.Hidden = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
7
vendor/github.com/spf13/cobra/powershell_completions.go
generated
vendored
7
vendor/github.com/spf13/cobra/powershell_completions.go
generated
vendored
@ -61,6 +61,7 @@ Register-ArgumentCompleter -CommandName '%[1]s' -ScriptBlock {
|
|||||||
# Prepare the command to request completions for the program.
|
# Prepare the command to request completions for the program.
|
||||||
# Split the command at the first space to separate the program and arguments.
|
# Split the command at the first space to separate the program and arguments.
|
||||||
$Program,$Arguments = $Command.Split(" ",2)
|
$Program,$Arguments = $Command.Split(" ",2)
|
||||||
|
|
||||||
$RequestComp="$Program %[2]s $Arguments"
|
$RequestComp="$Program %[2]s $Arguments"
|
||||||
__%[1]s_debug "RequestComp: $RequestComp"
|
__%[1]s_debug "RequestComp: $RequestComp"
|
||||||
|
|
||||||
@ -90,11 +91,13 @@ Register-ArgumentCompleter -CommandName '%[1]s' -ScriptBlock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
__%[1]s_debug "Calling $RequestComp"
|
__%[1]s_debug "Calling $RequestComp"
|
||||||
|
# First disable ActiveHelp which is not supported for Powershell
|
||||||
|
$env:%[8]s=0
|
||||||
|
|
||||||
#call the command store the output in $out and redirect stderr and stdout to null
|
#call the command store the output in $out and redirect stderr and stdout to null
|
||||||
# $Out is an array contains each line per element
|
# $Out is an array contains each line per element
|
||||||
Invoke-Expression -OutVariable out "$RequestComp" 2>&1 | Out-Null
|
Invoke-Expression -OutVariable out "$RequestComp" 2>&1 | Out-Null
|
||||||
|
|
||||||
|
|
||||||
# get directive from last line
|
# get directive from last line
|
||||||
[int]$Directive = $Out[-1].TrimStart(':')
|
[int]$Directive = $Out[-1].TrimStart(':')
|
||||||
if ($Directive -eq "") {
|
if ($Directive -eq "") {
|
||||||
@ -242,7 +245,7 @@ Register-ArgumentCompleter -CommandName '%[1]s' -ScriptBlock {
|
|||||||
}
|
}
|
||||||
`, name, compCmd,
|
`, name, compCmd,
|
||||||
ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
|
ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
|
||||||
ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs))
|
ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, activeHelpEnvVar(name)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Command) genPowerShellCompletion(w io.Writer, includeDesc bool) error {
|
func (c *Command) genPowerShellCompletion(w io.Writer, includeDesc bool) error {
|
||||||
|
13
vendor/github.com/spf13/cobra/projects_using_cobra.md
generated
vendored
13
vendor/github.com/spf13/cobra/projects_using_cobra.md
generated
vendored
@ -1,8 +1,8 @@
|
|||||||
## Projects using Cobra
|
## Projects using Cobra
|
||||||
|
|
||||||
- [Arduino CLI](https://github.com/arduino/arduino-cli)
|
- [Arduino CLI](https://github.com/arduino/arduino-cli)
|
||||||
- [Bleve](http://www.blevesearch.com/)
|
- [Bleve](https://blevesearch.com/)
|
||||||
- [CockroachDB](http://www.cockroachlabs.com/)
|
- [CockroachDB](https://www.cockroachlabs.com/)
|
||||||
- [Cosmos SDK](https://github.com/cosmos/cosmos-sdk)
|
- [Cosmos SDK](https://github.com/cosmos/cosmos-sdk)
|
||||||
- [Datree](https://github.com/datreeio/datree)
|
- [Datree](https://github.com/datreeio/datree)
|
||||||
- [Delve](https://github.com/derekparker/delve)
|
- [Delve](https://github.com/derekparker/delve)
|
||||||
@ -14,14 +14,15 @@
|
|||||||
- [Github CLI](https://github.com/cli/cli)
|
- [Github CLI](https://github.com/cli/cli)
|
||||||
- [GitHub Labeler](https://github.com/erdaltsksn/gh-label)
|
- [GitHub Labeler](https://github.com/erdaltsksn/gh-label)
|
||||||
- [Golangci-lint](https://golangci-lint.run)
|
- [Golangci-lint](https://golangci-lint.run)
|
||||||
- [GopherJS](http://www.gopherjs.org/)
|
- [GopherJS](https://github.com/gopherjs/gopherjs)
|
||||||
- [GoReleaser](https://goreleaser.com)
|
- [GoReleaser](https://goreleaser.com)
|
||||||
- [Helm](https://helm.sh)
|
- [Helm](https://helm.sh)
|
||||||
- [Hugo](https://gohugo.io)
|
- [Hugo](https://gohugo.io)
|
||||||
- [Infracost](https://github.com/infracost/infracost)
|
- [Infracost](https://github.com/infracost/infracost)
|
||||||
- [Istio](https://istio.io)
|
- [Istio](https://istio.io)
|
||||||
- [Kool](https://github.com/kool-dev/kool)
|
- [Kool](https://github.com/kool-dev/kool)
|
||||||
- [Kubernetes](http://kubernetes.io/)
|
- [Kubernetes](https://kubernetes.io/)
|
||||||
|
- [Kubescape](https://github.com/armosec/kubescape)
|
||||||
- [Linkerd](https://linkerd.io/)
|
- [Linkerd](https://linkerd.io/)
|
||||||
- [Mattermost-server](https://github.com/mattermost/mattermost-server)
|
- [Mattermost-server](https://github.com/mattermost/mattermost-server)
|
||||||
- [Mercure](https://mercure.rocks/)
|
- [Mercure](https://mercure.rocks/)
|
||||||
@ -36,9 +37,11 @@
|
|||||||
- [Ory Hydra](https://github.com/ory/hydra)
|
- [Ory Hydra](https://github.com/ory/hydra)
|
||||||
- [Ory Kratos](https://github.com/ory/kratos)
|
- [Ory Kratos](https://github.com/ory/kratos)
|
||||||
- [Pixie](https://github.com/pixie-io/pixie)
|
- [Pixie](https://github.com/pixie-io/pixie)
|
||||||
|
- [Polygon Edge](https://github.com/0xPolygon/polygon-edge)
|
||||||
- [Pouch](https://github.com/alibaba/pouch)
|
- [Pouch](https://github.com/alibaba/pouch)
|
||||||
- [ProjectAtomic (enterprise)](http://www.projectatomic.io/)
|
- [ProjectAtomic (enterprise)](https://www.projectatomic.io/)
|
||||||
- [Prototool](https://github.com/uber/prototool)
|
- [Prototool](https://github.com/uber/prototool)
|
||||||
|
- [Pulumi](https://www.pulumi.com)
|
||||||
- [QRcp](https://github.com/claudiodangelis/qrcp)
|
- [QRcp](https://github.com/claudiodangelis/qrcp)
|
||||||
- [Random](https://github.com/erdaltsksn/random)
|
- [Random](https://github.com/erdaltsksn/random)
|
||||||
- [Rclone](https://rclone.org/)
|
- [Rclone](https://rclone.org/)
|
||||||
|
6
vendor/github.com/spf13/cobra/shell_completions.md
generated
vendored
6
vendor/github.com/spf13/cobra/shell_completions.md
generated
vendored
@ -40,7 +40,7 @@ Bash:
|
|||||||
# Linux:
|
# Linux:
|
||||||
$ %[1]s completion bash > /etc/bash_completion.d/%[1]s
|
$ %[1]s completion bash > /etc/bash_completion.d/%[1]s
|
||||||
# macOS:
|
# macOS:
|
||||||
$ %[1]s completion bash > /usr/local/etc/bash_completion.d/%[1]s
|
$ %[1]s completion bash > $(brew --prefix)/etc/bash_completion.d/%[1]s
|
||||||
|
|
||||||
Zsh:
|
Zsh:
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ For example, if you want `kubectl get [tab][tab]` to show a list of valid "nouns
|
|||||||
Some simplified code from `kubectl get` looks like:
|
Some simplified code from `kubectl get` looks like:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
validArgs []string = { "pod", "node", "service", "replicationcontroller" }
|
validArgs = []string{ "pod", "node", "service", "replicationcontroller" }
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "get [(-o|--output=)json|yaml|template|...] (RESOURCE [NAME] | RESOURCE/NAME ...)",
|
Use: "get [(-o|--output=)json|yaml|template|...] (RESOURCE [NAME] | RESOURCE/NAME ...)",
|
||||||
@ -148,7 +148,7 @@ node pod replicationcontroller service
|
|||||||
If your nouns have aliases, you can define them alongside `ValidArgs` using `ArgAliases`:
|
If your nouns have aliases, you can define them alongside `ValidArgs` using `ArgAliases`:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
argAliases []string = { "pods", "nodes", "services", "svc", "replicationcontrollers", "rc" }
|
argAliases = []string { "pods", "nodes", "services", "svc", "replicationcontrollers", "rc" }
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
...
|
...
|
||||||
|
40
vendor/github.com/spf13/cobra/user_guide.md
generated
vendored
40
vendor/github.com/spf13/cobra/user_guide.md
generated
vendored
@ -32,7 +32,7 @@ func main() {
|
|||||||
Cobra-CLI is its own program that will create your application and add any
|
Cobra-CLI is its own program that will create your application and add any
|
||||||
commands you want. It's the easiest way to incorporate Cobra into your application.
|
commands you want. It's the easiest way to incorporate Cobra into your application.
|
||||||
|
|
||||||
For complete details on using the Cobra generator, please refer to [The Cobra-CLI Generator README](https://github.com/spf13/cobra-cli/blob/master/README.md)
|
For complete details on using the Cobra generator, please refer to [The Cobra-CLI Generator README](https://github.com/spf13/cobra-cli/blob/main/README.md)
|
||||||
|
|
||||||
## Using the Cobra Library
|
## Using the Cobra Library
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ var rootCmd = &cobra.Command{
|
|||||||
Short: "Hugo is a very fast static site generator",
|
Short: "Hugo is a very fast static site generator",
|
||||||
Long: `A Fast and Flexible Static Site Generator built with
|
Long: `A Fast and Flexible Static Site Generator built with
|
||||||
love by spf13 and friends in Go.
|
love by spf13 and friends in Go.
|
||||||
Complete documentation is available at http://hugo.spf13.com`,
|
Complete documentation is available at https://gohugo.io/documentation/`,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
// Do Stuff Here
|
// Do Stuff Here
|
||||||
},
|
},
|
||||||
@ -300,10 +300,34 @@ rootCmd.PersistentFlags().StringVarP(&Region, "region", "r", "", "AWS region (re
|
|||||||
rootCmd.MarkPersistentFlagRequired("region")
|
rootCmd.MarkPersistentFlagRequired("region")
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Flag Groups
|
||||||
|
|
||||||
|
If you have different flags that must be provided together (e.g. if they provide the `--username` flag they MUST provide the `--password` flag as well) then
|
||||||
|
Cobra can enforce that requirement:
|
||||||
|
```go
|
||||||
|
rootCmd.Flags().StringVarP(&u, "username", "u", "", "Username (required if password is set)")
|
||||||
|
rootCmd.Flags().StringVarP(&pw, "password", "p", "", "Password (required if username is set)")
|
||||||
|
rootCmd.MarkFlagsRequiredTogether("username", "password")
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also prevent different flags from being provided together if they represent mutually
|
||||||
|
exclusive options such as specifying an output format as either `--json` or `--yaml` but never both:
|
||||||
|
```go
|
||||||
|
rootCmd.Flags().BoolVar(&u, "json", false, "Output in JSON")
|
||||||
|
rootCmd.Flags().BoolVar(&pw, "yaml", false, "Output in YAML")
|
||||||
|
rootCmd.MarkFlagsMutuallyExclusive("json", "yaml")
|
||||||
|
```
|
||||||
|
|
||||||
|
In both of these cases:
|
||||||
|
- both local and persistent flags can be used
|
||||||
|
- **NOTE:** the group is only enforced on commands where every flag is defined
|
||||||
|
- a flag may appear in multiple groups
|
||||||
|
- a group may contain any number of flags
|
||||||
|
|
||||||
## Positional and Custom Arguments
|
## Positional and Custom Arguments
|
||||||
|
|
||||||
Validation of positional arguments can be specified using the `Args` field
|
Validation of positional arguments can be specified using the `Args` field of `Command`.
|
||||||
of `Command`.
|
If `Args` is undefined or `nil`, it defaults to `ArbitraryArgs`.
|
||||||
|
|
||||||
The following validators are built in:
|
The following validators are built in:
|
||||||
|
|
||||||
@ -405,7 +429,7 @@ a count and a string.`,
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
For a more complete example of a larger application, please checkout [Hugo](http://gohugo.io/).
|
For a more complete example of a larger application, please checkout [Hugo](https://gohugo.io/).
|
||||||
|
|
||||||
## Help Command
|
## Help Command
|
||||||
|
|
||||||
@ -603,7 +627,7 @@ Did you mean this?
|
|||||||
Run 'hugo --help' for usage.
|
Run 'hugo --help' for usage.
|
||||||
```
|
```
|
||||||
|
|
||||||
Suggestions are automatic based on every subcommand registered and use an implementation of [Levenshtein distance](http://en.wikipedia.org/wiki/Levenshtein_distance). Every registered command that matches a minimum distance of 2 (ignoring case) will be displayed as a suggestion.
|
Suggestions are automatic based on every subcommand registered and use an implementation of [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance). Every registered command that matches a minimum distance of 2 (ignoring case) will be displayed as a suggestion.
|
||||||
|
|
||||||
If you need to disable suggestions or tweak the string distance in your command, use:
|
If you need to disable suggestions or tweak the string distance in your command, use:
|
||||||
|
|
||||||
@ -636,3 +660,7 @@ Cobra can generate documentation based on subcommands, flags, etc. Read more abo
|
|||||||
## Generating shell completions
|
## Generating shell completions
|
||||||
|
|
||||||
Cobra can generate a shell-completion file for the following shells: bash, zsh, fish, PowerShell. If you add more information to your commands, these completions can be amazingly powerful and flexible. Read more about it in [Shell Completions](shell_completions.md).
|
Cobra can generate a shell-completion file for the following shells: bash, zsh, fish, PowerShell. If you add more information to your commands, these completions can be amazingly powerful and flexible. Read more about it in [Shell Completions](shell_completions.md).
|
||||||
|
|
||||||
|
## Providing Active Help
|
||||||
|
|
||||||
|
Cobra makes use of the shell-completion system to define a framework allowing you to provide Active Help to your users. Active Help are messages (hints, warnings, etc) printed as the program is being used. Read more about it in [Active Help](active_help.md).
|
||||||
|
35
vendor/github.com/spf13/cobra/zsh_completions.go
generated
vendored
35
vendor/github.com/spf13/cobra/zsh_completions.go
generated
vendored
@ -75,7 +75,7 @@ func genZshComp(buf io.StringWriter, name string, includeDesc bool) {
|
|||||||
if !includeDesc {
|
if !includeDesc {
|
||||||
compCmd = ShellCompNoDescRequestCmd
|
compCmd = ShellCompNoDescRequestCmd
|
||||||
}
|
}
|
||||||
WriteStringAndCheck(buf, fmt.Sprintf(`#compdef _%[1]s %[1]s
|
WriteStringAndCheck(buf, fmt.Sprintf(`#compdef %[1]s
|
||||||
|
|
||||||
# zsh completion for %-36[1]s -*- shell-script -*-
|
# zsh completion for %-36[1]s -*- shell-script -*-
|
||||||
|
|
||||||
@ -163,7 +163,24 @@ _%[1]s()
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
local activeHelpMarker="%[8]s"
|
||||||
|
local endIndex=${#activeHelpMarker}
|
||||||
|
local startIndex=$((${#activeHelpMarker}+1))
|
||||||
|
local hasActiveHelp=0
|
||||||
while IFS='\n' read -r comp; do
|
while IFS='\n' read -r comp; do
|
||||||
|
# Check if this is an activeHelp statement (i.e., prefixed with $activeHelpMarker)
|
||||||
|
if [ "${comp[1,$endIndex]}" = "$activeHelpMarker" ];then
|
||||||
|
__%[1]s_debug "ActiveHelp found: $comp"
|
||||||
|
comp="${comp[$startIndex,-1]}"
|
||||||
|
if [ -n "$comp" ]; then
|
||||||
|
compadd -x "${comp}"
|
||||||
|
__%[1]s_debug "ActiveHelp will need delimiter"
|
||||||
|
hasActiveHelp=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -n "$comp" ]; then
|
if [ -n "$comp" ]; then
|
||||||
# If requested, completions are returned with a description.
|
# If requested, completions are returned with a description.
|
||||||
# The description is preceded by a TAB character.
|
# The description is preceded by a TAB character.
|
||||||
@ -171,7 +188,7 @@ _%[1]s()
|
|||||||
# We first need to escape any : as part of the completion itself.
|
# We first need to escape any : as part of the completion itself.
|
||||||
comp=${comp//:/\\:}
|
comp=${comp//:/\\:}
|
||||||
|
|
||||||
local tab=$(printf '\t')
|
local tab="$(printf '\t')"
|
||||||
comp=${comp//$tab/:}
|
comp=${comp//$tab/:}
|
||||||
|
|
||||||
__%[1]s_debug "Adding completion: ${comp}"
|
__%[1]s_debug "Adding completion: ${comp}"
|
||||||
@ -180,6 +197,17 @@ _%[1]s()
|
|||||||
fi
|
fi
|
||||||
done < <(printf "%%s\n" "${out[@]}")
|
done < <(printf "%%s\n" "${out[@]}")
|
||||||
|
|
||||||
|
# Add a delimiter after the activeHelp statements, but only if:
|
||||||
|
# - there are completions following the activeHelp statements, or
|
||||||
|
# - file completion will be performed (so there will be choices after the activeHelp)
|
||||||
|
if [ $hasActiveHelp -eq 1 ]; then
|
||||||
|
if [ ${#completions} -ne 0 ] || [ $((directive & shellCompDirectiveNoFileComp)) -eq 0 ]; then
|
||||||
|
__%[1]s_debug "Adding activeHelp delimiter"
|
||||||
|
compadd -x "--"
|
||||||
|
hasActiveHelp=0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
|
if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
|
||||||
__%[1]s_debug "Activating nospace."
|
__%[1]s_debug "Activating nospace."
|
||||||
noSpace="-S ''"
|
noSpace="-S ''"
|
||||||
@ -254,5 +282,6 @@ if [ "$funcstack[1]" = "_%[1]s" ]; then
|
|||||||
fi
|
fi
|
||||||
`, name, compCmd,
|
`, name, compCmd,
|
||||||
ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
|
ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,
|
||||||
ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs))
|
ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs,
|
||||||
|
activeHelpMarker))
|
||||||
}
|
}
|
||||||
|
25
vendor/golang.org/x/crypto/acme/acme.go
generated
vendored
25
vendor/golang.org/x/crypto/acme/acme.go
generated
vendored
@ -77,12 +77,11 @@ const (
|
|||||||
// The only required field is Key. An example of creating a client with a new key
|
// The only required field is Key. An example of creating a client with a new key
|
||||||
// is as follows:
|
// is as follows:
|
||||||
//
|
//
|
||||||
// key, err := rsa.GenerateKey(rand.Reader, 2048)
|
// key, err := rsa.GenerateKey(rand.Reader, 2048)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// log.Fatal(err)
|
// log.Fatal(err)
|
||||||
// }
|
// }
|
||||||
// client := &Client{Key: key}
|
// client := &Client{Key: key}
|
||||||
//
|
|
||||||
type Client struct {
|
type Client struct {
|
||||||
// Key is the account key used to register with a CA and sign requests.
|
// Key is the account key used to register with a CA and sign requests.
|
||||||
// Key.Public() must return a *rsa.PublicKey or *ecdsa.PublicKey.
|
// Key.Public() must return a *rsa.PublicKey or *ecdsa.PublicKey.
|
||||||
@ -307,6 +306,20 @@ func (c *Client) UpdateReg(ctx context.Context, acct *Account) (*Account, error)
|
|||||||
return c.updateRegRFC(ctx, acct)
|
return c.updateRegRFC(ctx, acct)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AccountKeyRollover attempts to transition a client's account key to a new key.
|
||||||
|
// On success client's Key is updated which is not concurrency safe.
|
||||||
|
// On failure an error will be returned.
|
||||||
|
// The new key is already registered with the ACME provider if the following is true:
|
||||||
|
// - error is of type acme.Error
|
||||||
|
// - StatusCode should be 409 (Conflict)
|
||||||
|
// - Location header will have the KID of the associated account
|
||||||
|
//
|
||||||
|
// More about account key rollover can be found at
|
||||||
|
// https://tools.ietf.org/html/rfc8555#section-7.3.5.
|
||||||
|
func (c *Client) AccountKeyRollover(ctx context.Context, newKey crypto.Signer) error {
|
||||||
|
return c.accountKeyRollover(ctx, newKey)
|
||||||
|
}
|
||||||
|
|
||||||
// Authorize performs the initial step in the pre-authorization flow,
|
// Authorize performs the initial step in the pre-authorization flow,
|
||||||
// as opposed to order-based flow.
|
// as opposed to order-based flow.
|
||||||
// The caller will then need to choose from and perform a set of returned
|
// The caller will then need to choose from and perform a set of returned
|
||||||
|
7
vendor/golang.org/x/crypto/acme/autocert/autocert.go
generated
vendored
7
vendor/golang.org/x/crypto/acme/autocert/autocert.go
generated
vendored
@ -170,6 +170,11 @@ type Manager struct {
|
|||||||
// in the template's ExtraExtensions field as is.
|
// in the template's ExtraExtensions field as is.
|
||||||
ExtraExtensions []pkix.Extension
|
ExtraExtensions []pkix.Extension
|
||||||
|
|
||||||
|
// ExternalAccountBinding optionally represents an arbitrary binding to an
|
||||||
|
// account of the CA to which the ACME server is tied.
|
||||||
|
// See RFC 8555, Section 7.3.4 for more details.
|
||||||
|
ExternalAccountBinding *acme.ExternalAccountBinding
|
||||||
|
|
||||||
clientMu sync.Mutex
|
clientMu sync.Mutex
|
||||||
client *acme.Client // initialized by acmeClient method
|
client *acme.Client // initialized by acmeClient method
|
||||||
|
|
||||||
@ -996,7 +1001,7 @@ func (m *Manager) acmeClient(ctx context.Context) (*acme.Client, error) {
|
|||||||
if m.Email != "" {
|
if m.Email != "" {
|
||||||
contact = []string{"mailto:" + m.Email}
|
contact = []string{"mailto:" + m.Email}
|
||||||
}
|
}
|
||||||
a := &acme.Account{Contact: contact}
|
a := &acme.Account{Contact: contact, ExternalAccountBinding: m.ExternalAccountBinding}
|
||||||
_, err := client.Register(ctx, a, m.Prompt)
|
_, err := client.Register(ctx, a, m.Prompt)
|
||||||
if err == nil || isAccountAlreadyExist(err) {
|
if err == nil || isAccountAlreadyExist(err) {
|
||||||
m.client = client
|
m.client = client
|
||||||
|
6
vendor/golang.org/x/crypto/acme/autocert/cache.go
generated
vendored
6
vendor/golang.org/x/crypto/acme/autocert/cache.go
generated
vendored
@ -41,7 +41,7 @@ type DirCache string
|
|||||||
|
|
||||||
// Get reads a certificate data from the specified file name.
|
// Get reads a certificate data from the specified file name.
|
||||||
func (d DirCache) Get(ctx context.Context, name string) ([]byte, error) {
|
func (d DirCache) Get(ctx context.Context, name string) ([]byte, error) {
|
||||||
name = filepath.Join(string(d), name)
|
name = filepath.Join(string(d), filepath.Clean("/"+name))
|
||||||
var (
|
var (
|
||||||
data []byte
|
data []byte
|
||||||
err error
|
err error
|
||||||
@ -82,7 +82,7 @@ func (d DirCache) Put(ctx context.Context, name string, data []byte) error {
|
|||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
// Don't overwrite the file if the context was canceled.
|
// Don't overwrite the file if the context was canceled.
|
||||||
default:
|
default:
|
||||||
newName := filepath.Join(string(d), name)
|
newName := filepath.Join(string(d), filepath.Clean("/"+name))
|
||||||
err = os.Rename(tmp, newName)
|
err = os.Rename(tmp, newName)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@ -96,7 +96,7 @@ func (d DirCache) Put(ctx context.Context, name string, data []byte) error {
|
|||||||
|
|
||||||
// Delete removes the specified file name.
|
// Delete removes the specified file name.
|
||||||
func (d DirCache) Delete(ctx context.Context, name string) error {
|
func (d DirCache) Delete(ctx context.Context, name string) error {
|
||||||
name = filepath.Join(string(d), name)
|
name = filepath.Join(string(d), filepath.Clean("/"+name))
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
done = make(chan struct{})
|
done = make(chan struct{})
|
||||||
|
2
vendor/golang.org/x/crypto/acme/autocert/listener.go
generated
vendored
2
vendor/golang.org/x/crypto/acme/autocert/listener.go
generated
vendored
@ -20,7 +20,7 @@ import (
|
|||||||
//
|
//
|
||||||
// It enables one-line HTTPS servers:
|
// It enables one-line HTTPS servers:
|
||||||
//
|
//
|
||||||
// log.Fatal(http.Serve(autocert.NewListener("example.com"), handler))
|
// log.Fatal(http.Serve(autocert.NewListener("example.com"), handler))
|
||||||
//
|
//
|
||||||
// NewListener is a convenience function for a common configuration.
|
// NewListener is a convenience function for a common configuration.
|
||||||
// More complex or custom configurations can use the autocert.Manager
|
// More complex or custom configurations can use the autocert.Manager
|
||||||
|
37
vendor/golang.org/x/crypto/acme/jws.go
generated
vendored
37
vendor/golang.org/x/crypto/acme/jws.go
generated
vendored
@ -33,6 +33,10 @@ const noKeyID = KeyID("")
|
|||||||
// See https://tools.ietf.org/html/rfc8555#section-6.3 for more details.
|
// See https://tools.ietf.org/html/rfc8555#section-6.3 for more details.
|
||||||
const noPayload = ""
|
const noPayload = ""
|
||||||
|
|
||||||
|
// noNonce indicates that the nonce should be omitted from the protected header.
|
||||||
|
// See jwsEncodeJSON for details.
|
||||||
|
const noNonce = ""
|
||||||
|
|
||||||
// jsonWebSignature can be easily serialized into a JWS following
|
// jsonWebSignature can be easily serialized into a JWS following
|
||||||
// https://tools.ietf.org/html/rfc7515#section-3.2.
|
// https://tools.ietf.org/html/rfc7515#section-3.2.
|
||||||
type jsonWebSignature struct {
|
type jsonWebSignature struct {
|
||||||
@ -45,10 +49,15 @@ type jsonWebSignature struct {
|
|||||||
// The result is serialized in JSON format containing either kid or jwk
|
// The result is serialized in JSON format containing either kid or jwk
|
||||||
// fields based on the provided KeyID value.
|
// fields based on the provided KeyID value.
|
||||||
//
|
//
|
||||||
// If kid is non-empty, its quoted value is inserted in the protected head
|
// The claimset is marshalled using json.Marshal unless it is a string.
|
||||||
|
// In which case it is inserted directly into the message.
|
||||||
|
//
|
||||||
|
// If kid is non-empty, its quoted value is inserted in the protected header
|
||||||
// as "kid" field value. Otherwise, JWK is computed using jwkEncode and inserted
|
// as "kid" field value. Otherwise, JWK is computed using jwkEncode and inserted
|
||||||
// as "jwk" field value. The "jwk" and "kid" fields are mutually exclusive.
|
// as "jwk" field value. The "jwk" and "kid" fields are mutually exclusive.
|
||||||
//
|
//
|
||||||
|
// If nonce is non-empty, its quoted value is inserted in the protected header.
|
||||||
|
//
|
||||||
// See https://tools.ietf.org/html/rfc7515#section-7.
|
// See https://tools.ietf.org/html/rfc7515#section-7.
|
||||||
func jwsEncodeJSON(claimset interface{}, key crypto.Signer, kid KeyID, nonce, url string) ([]byte, error) {
|
func jwsEncodeJSON(claimset interface{}, key crypto.Signer, kid KeyID, nonce, url string) ([]byte, error) {
|
||||||
if key == nil {
|
if key == nil {
|
||||||
@ -58,20 +67,36 @@ func jwsEncodeJSON(claimset interface{}, key crypto.Signer, kid KeyID, nonce, ur
|
|||||||
if alg == "" || !sha.Available() {
|
if alg == "" || !sha.Available() {
|
||||||
return nil, ErrUnsupportedKey
|
return nil, ErrUnsupportedKey
|
||||||
}
|
}
|
||||||
var phead string
|
headers := struct {
|
||||||
|
Alg string `json:"alg"`
|
||||||
|
KID string `json:"kid,omitempty"`
|
||||||
|
JWK json.RawMessage `json:"jwk,omitempty"`
|
||||||
|
Nonce string `json:"nonce,omitempty"`
|
||||||
|
URL string `json:"url"`
|
||||||
|
}{
|
||||||
|
Alg: alg,
|
||||||
|
Nonce: nonce,
|
||||||
|
URL: url,
|
||||||
|
}
|
||||||
switch kid {
|
switch kid {
|
||||||
case noKeyID:
|
case noKeyID:
|
||||||
jwk, err := jwkEncode(key.Public())
|
jwk, err := jwkEncode(key.Public())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
phead = fmt.Sprintf(`{"alg":%q,"jwk":%s,"nonce":%q,"url":%q}`, alg, jwk, nonce, url)
|
headers.JWK = json.RawMessage(jwk)
|
||||||
default:
|
default:
|
||||||
phead = fmt.Sprintf(`{"alg":%q,"kid":%q,"nonce":%q,"url":%q}`, alg, kid, nonce, url)
|
headers.KID = string(kid)
|
||||||
}
|
}
|
||||||
phead = base64.RawURLEncoding.EncodeToString([]byte(phead))
|
phJSON, err := json.Marshal(headers)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
phead := base64.RawURLEncoding.EncodeToString([]byte(phJSON))
|
||||||
var payload string
|
var payload string
|
||||||
if claimset != noPayload {
|
if val, ok := claimset.(string); ok {
|
||||||
|
payload = val
|
||||||
|
} else {
|
||||||
cs, err := json.Marshal(claimset)
|
cs, err := json.Marshal(claimset)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
39
vendor/golang.org/x/crypto/acme/rfc8555.go
generated
vendored
39
vendor/golang.org/x/crypto/acme/rfc8555.go
generated
vendored
@ -24,6 +24,9 @@ import (
|
|||||||
//
|
//
|
||||||
// It only works with CAs implementing RFC 8555.
|
// It only works with CAs implementing RFC 8555.
|
||||||
func (c *Client) DeactivateReg(ctx context.Context) error {
|
func (c *Client) DeactivateReg(ctx context.Context) error {
|
||||||
|
if _, err := c.Discover(ctx); err != nil { // required by c.accountKID
|
||||||
|
return err
|
||||||
|
}
|
||||||
url := string(c.accountKID(ctx))
|
url := string(c.accountKID(ctx))
|
||||||
if url == "" {
|
if url == "" {
|
||||||
return ErrNoAccount
|
return ErrNoAccount
|
||||||
@ -148,6 +151,42 @@ func responseAccount(res *http.Response) (*Account, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// accountKeyRollover attempts to perform account key rollover.
|
||||||
|
// On success it will change client.Key to the new key.
|
||||||
|
func (c *Client) accountKeyRollover(ctx context.Context, newKey crypto.Signer) error {
|
||||||
|
dir, err := c.Discover(ctx) // Also required by c.accountKID
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
kid := c.accountKID(ctx)
|
||||||
|
if kid == noKeyID {
|
||||||
|
return ErrNoAccount
|
||||||
|
}
|
||||||
|
oldKey, err := jwkEncode(c.Key.Public())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
payload := struct {
|
||||||
|
Account string `json:"account"`
|
||||||
|
OldKey json.RawMessage `json:"oldKey"`
|
||||||
|
}{
|
||||||
|
Account: string(kid),
|
||||||
|
OldKey: json.RawMessage(oldKey),
|
||||||
|
}
|
||||||
|
inner, err := jwsEncodeJSON(payload, newKey, noKeyID, noNonce, dir.KeyChangeURL)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := c.post(ctx, nil, dir.KeyChangeURL, base64.RawURLEncoding.EncodeToString(inner), wantStatus(http.StatusOK))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer res.Body.Close()
|
||||||
|
c.Key = newKey
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// AuthorizeOrder initiates the order-based application for certificate issuance,
|
// AuthorizeOrder initiates the order-based application for certificate issuance,
|
||||||
// as opposed to pre-authorization in Authorize.
|
// as opposed to pre-authorization in Authorize.
|
||||||
// It is only supported by CAs implementing RFC 8555.
|
// It is only supported by CAs implementing RFC 8555.
|
||||||
|
54
vendor/golang.org/x/net/http/httpguts/httplex.go
generated
vendored
54
vendor/golang.org/x/net/http/httpguts/httplex.go
generated
vendored
@ -173,13 +173,15 @@ func tokenEqual(t1, t2 string) bool {
|
|||||||
|
|
||||||
// isLWS reports whether b is linear white space, according
|
// isLWS reports whether b is linear white space, according
|
||||||
// to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
|
// to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
|
||||||
// LWS = [CRLF] 1*( SP | HT )
|
//
|
||||||
|
// LWS = [CRLF] 1*( SP | HT )
|
||||||
func isLWS(b byte) bool { return b == ' ' || b == '\t' }
|
func isLWS(b byte) bool { return b == ' ' || b == '\t' }
|
||||||
|
|
||||||
// isCTL reports whether b is a control byte, according
|
// isCTL reports whether b is a control byte, according
|
||||||
// to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
|
// to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
|
||||||
// CTL = <any US-ASCII control character
|
//
|
||||||
// (octets 0 - 31) and DEL (127)>
|
// CTL = <any US-ASCII control character
|
||||||
|
// (octets 0 - 31) and DEL (127)>
|
||||||
func isCTL(b byte) bool {
|
func isCTL(b byte) bool {
|
||||||
const del = 0x7f // a CTL
|
const del = 0x7f // a CTL
|
||||||
return b < ' ' || b == del
|
return b < ' ' || b == del
|
||||||
@ -189,12 +191,13 @@ func isCTL(b byte) bool {
|
|||||||
// HTTP/2 imposes the additional restriction that uppercase ASCII
|
// HTTP/2 imposes the additional restriction that uppercase ASCII
|
||||||
// letters are not allowed.
|
// letters are not allowed.
|
||||||
//
|
//
|
||||||
// RFC 7230 says:
|
// RFC 7230 says:
|
||||||
// header-field = field-name ":" OWS field-value OWS
|
//
|
||||||
// field-name = token
|
// header-field = field-name ":" OWS field-value OWS
|
||||||
// token = 1*tchar
|
// field-name = token
|
||||||
// tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." /
|
// token = 1*tchar
|
||||||
// "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA
|
// tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." /
|
||||||
|
// "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA
|
||||||
func ValidHeaderFieldName(v string) bool {
|
func ValidHeaderFieldName(v string) bool {
|
||||||
if len(v) == 0 {
|
if len(v) == 0 {
|
||||||
return false
|
return false
|
||||||
@ -267,27 +270,28 @@ var validHostByte = [256]bool{
|
|||||||
// ValidHeaderFieldValue reports whether v is a valid "field-value" according to
|
// ValidHeaderFieldValue reports whether v is a valid "field-value" according to
|
||||||
// http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 :
|
// http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 :
|
||||||
//
|
//
|
||||||
// message-header = field-name ":" [ field-value ]
|
// message-header = field-name ":" [ field-value ]
|
||||||
// field-value = *( field-content | LWS )
|
// field-value = *( field-content | LWS )
|
||||||
// field-content = <the OCTETs making up the field-value
|
// field-content = <the OCTETs making up the field-value
|
||||||
// and consisting of either *TEXT or combinations
|
// and consisting of either *TEXT or combinations
|
||||||
// of token, separators, and quoted-string>
|
// of token, separators, and quoted-string>
|
||||||
//
|
//
|
||||||
// http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 :
|
// http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 :
|
||||||
//
|
//
|
||||||
// TEXT = <any OCTET except CTLs,
|
// TEXT = <any OCTET except CTLs,
|
||||||
// but including LWS>
|
// but including LWS>
|
||||||
// LWS = [CRLF] 1*( SP | HT )
|
// LWS = [CRLF] 1*( SP | HT )
|
||||||
// CTL = <any US-ASCII control character
|
// CTL = <any US-ASCII control character
|
||||||
// (octets 0 - 31) and DEL (127)>
|
// (octets 0 - 31) and DEL (127)>
|
||||||
//
|
//
|
||||||
// RFC 7230 says:
|
// RFC 7230 says:
|
||||||
// field-value = *( field-content / obs-fold )
|
//
|
||||||
// obj-fold = N/A to http2, and deprecated
|
// field-value = *( field-content / obs-fold )
|
||||||
// field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
|
// obj-fold = N/A to http2, and deprecated
|
||||||
// field-vchar = VCHAR / obs-text
|
// field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
|
||||||
// obs-text = %x80-FF
|
// field-vchar = VCHAR / obs-text
|
||||||
// VCHAR = "any visible [USASCII] character"
|
// obs-text = %x80-FF
|
||||||
|
// VCHAR = "any visible [USASCII] character"
|
||||||
//
|
//
|
||||||
// http2 further says: "Similarly, HTTP/2 allows header field values
|
// http2 further says: "Similarly, HTTP/2 allows header field values
|
||||||
// that are not valid. While most of the values that can be encoded
|
// that are not valid. While most of the values that can be encoded
|
||||||
|
3
vendor/golang.org/x/net/http2/client_conn_pool.go
generated
vendored
3
vendor/golang.org/x/net/http2/client_conn_pool.go
generated
vendored
@ -139,7 +139,6 @@ func (p *clientConnPool) getStartDialLocked(ctx context.Context, addr string) *d
|
|||||||
func (c *dialCall) dial(ctx context.Context, addr string) {
|
func (c *dialCall) dial(ctx context.Context, addr string) {
|
||||||
const singleUse = false // shared conn
|
const singleUse = false // shared conn
|
||||||
c.res, c.err = c.p.t.dialClientConn(ctx, addr, singleUse)
|
c.res, c.err = c.p.t.dialClientConn(ctx, addr, singleUse)
|
||||||
close(c.done)
|
|
||||||
|
|
||||||
c.p.mu.Lock()
|
c.p.mu.Lock()
|
||||||
delete(c.p.dialing, addr)
|
delete(c.p.dialing, addr)
|
||||||
@ -147,6 +146,8 @@ func (c *dialCall) dial(ctx context.Context, addr string) {
|
|||||||
c.p.addConnLocked(addr, c.res)
|
c.p.addConnLocked(addr, c.res)
|
||||||
}
|
}
|
||||||
c.p.mu.Unlock()
|
c.p.mu.Unlock()
|
||||||
|
|
||||||
|
close(c.done)
|
||||||
}
|
}
|
||||||
|
|
||||||
// addConnIfNeeded makes a NewClientConn out of c if a connection for key doesn't
|
// addConnIfNeeded makes a NewClientConn out of c if a connection for key doesn't
|
||||||
|
2
vendor/golang.org/x/net/http2/errors.go
generated
vendored
2
vendor/golang.org/x/net/http2/errors.go
generated
vendored
@ -136,7 +136,7 @@ func (e headerFieldNameError) Error() string {
|
|||||||
type headerFieldValueError string
|
type headerFieldValueError string
|
||||||
|
|
||||||
func (e headerFieldValueError) Error() string {
|
func (e headerFieldValueError) Error() string {
|
||||||
return fmt.Sprintf("invalid header field value %q", string(e))
|
return fmt.Sprintf("invalid header field value for %q", string(e))
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
3
vendor/golang.org/x/net/http2/frame.go
generated
vendored
3
vendor/golang.org/x/net/http2/frame.go
generated
vendored
@ -1532,7 +1532,8 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) {
|
|||||||
fr.debugReadLoggerf("http2: decoded hpack field %+v", hf)
|
fr.debugReadLoggerf("http2: decoded hpack field %+v", hf)
|
||||||
}
|
}
|
||||||
if !httpguts.ValidHeaderFieldValue(hf.Value) {
|
if !httpguts.ValidHeaderFieldValue(hf.Value) {
|
||||||
invalid = headerFieldValueError(hf.Value)
|
// Don't include the value in the error, because it may be sensitive.
|
||||||
|
invalid = headerFieldValueError(hf.Name)
|
||||||
}
|
}
|
||||||
isPseudo := strings.HasPrefix(hf.Name, ":")
|
isPseudo := strings.HasPrefix(hf.Name, ":")
|
||||||
if isPseudo {
|
if isPseudo {
|
||||||
|
398
vendor/golang.org/x/net/http2/h2c/h2c.go
generated
vendored
398
vendor/golang.org/x/net/http2/h2c/h2c.go
generated
vendored
@ -12,7 +12,6 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/binary"
|
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
@ -25,7 +24,6 @@ import (
|
|||||||
|
|
||||||
"golang.org/x/net/http/httpguts"
|
"golang.org/x/net/http/httpguts"
|
||||||
"golang.org/x/net/http2"
|
"golang.org/x/net/http2"
|
||||||
"golang.org/x/net/http2/hpack"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -61,6 +59,10 @@ type h2cHandler struct {
|
|||||||
// Once a request is recognized as h2c, we hijack the connection and convert it
|
// Once a request is recognized as h2c, we hijack the connection and convert it
|
||||||
// to an HTTP/2 connection which is understandable to s.ServeConn. (s.ServeConn
|
// to an HTTP/2 connection which is understandable to s.ServeConn. (s.ServeConn
|
||||||
// understands HTTP/2 except for the h2c part of it.)
|
// understands HTTP/2 except for the h2c part of it.)
|
||||||
|
//
|
||||||
|
// The first request on an h2c connection is read entirely into memory before
|
||||||
|
// the Handler is called. To limit the memory consumed by this request, wrap
|
||||||
|
// the result of NewHandler in an http.MaxBytesHandler.
|
||||||
func NewHandler(h http.Handler, s *http2.Server) http.Handler {
|
func NewHandler(h http.Handler, s *http2.Server) http.Handler {
|
||||||
return &h2cHandler{
|
return &h2cHandler{
|
||||||
Handler: h,
|
Handler: h,
|
||||||
@ -83,24 +85,31 @@ func (s h2cHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
s.s.ServeConn(conn, &http2.ServeConnOpts{
|
s.s.ServeConn(conn, &http2.ServeConnOpts{
|
||||||
Context: r.Context(),
|
Context: r.Context(),
|
||||||
Handler: s.Handler,
|
Handler: s.Handler,
|
||||||
|
SawClientPreface: true,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Handle Upgrade to h2c (RFC 7540 Section 3.2)
|
// Handle Upgrade to h2c (RFC 7540 Section 3.2)
|
||||||
if conn, err := h2cUpgrade(w, r); err == nil {
|
if isH2CUpgrade(r.Header) {
|
||||||
|
conn, settings, err := h2cUpgrade(w, r)
|
||||||
|
if err != nil {
|
||||||
|
if http2VerboseLogs {
|
||||||
|
log.Printf("h2c: error h2c upgrade: %v", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
s.s.ServeConn(conn, &http2.ServeConnOpts{
|
s.s.ServeConn(conn, &http2.ServeConnOpts{
|
||||||
Context: r.Context(),
|
Context: r.Context(),
|
||||||
Handler: s.Handler,
|
Handler: s.Handler,
|
||||||
|
UpgradeRequest: r,
|
||||||
|
Settings: settings,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Handler.ServeHTTP(w, r)
|
s.Handler.ServeHTTP(w, r)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -113,11 +122,11 @@ func (s h2cHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
func initH2CWithPriorKnowledge(w http.ResponseWriter) (net.Conn, error) {
|
func initH2CWithPriorKnowledge(w http.ResponseWriter) (net.Conn, error) {
|
||||||
hijacker, ok := w.(http.Hijacker)
|
hijacker, ok := w.(http.Hijacker)
|
||||||
if !ok {
|
if !ok {
|
||||||
panic("Hijack not supported.")
|
return nil, errors.New("h2c: connection does not support Hijack")
|
||||||
}
|
}
|
||||||
conn, rw, err := hijacker.Hijack()
|
conn, rw, err := hijacker.Hijack()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Sprintf("Hijack failed: %v", err))
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
const expectedBody = "SM\r\n\r\n"
|
const expectedBody = "SM\r\n\r\n"
|
||||||
@ -125,249 +134,40 @@ func initH2CWithPriorKnowledge(w http.ResponseWriter) (net.Conn, error) {
|
|||||||
buf := make([]byte, len(expectedBody))
|
buf := make([]byte, len(expectedBody))
|
||||||
n, err := io.ReadFull(rw, buf)
|
n, err := io.ReadFull(rw, buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not read from the buffer: %s", err)
|
return nil, fmt.Errorf("h2c: error reading client preface: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if string(buf[:n]) == expectedBody {
|
if string(buf[:n]) == expectedBody {
|
||||||
c := &rwConn{
|
return newBufConn(conn, rw), nil
|
||||||
Conn: conn,
|
|
||||||
Reader: io.MultiReader(strings.NewReader(http2.ClientPreface), rw),
|
|
||||||
BufWriter: rw.Writer,
|
|
||||||
}
|
|
||||||
return c, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
conn.Close()
|
conn.Close()
|
||||||
if http2VerboseLogs {
|
return nil, errors.New("h2c: invalid client preface")
|
||||||
log.Printf(
|
|
||||||
"h2c: missing the request body portion of the client preface. Wanted: %v Got: %v",
|
|
||||||
[]byte(expectedBody),
|
|
||||||
buf[0:n],
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return nil, errors.New("invalid client preface")
|
|
||||||
}
|
|
||||||
|
|
||||||
// drainClientPreface reads a single instance of the HTTP/2 client preface from
|
|
||||||
// the supplied reader.
|
|
||||||
func drainClientPreface(r io.Reader) error {
|
|
||||||
var buf bytes.Buffer
|
|
||||||
prefaceLen := int64(len(http2.ClientPreface))
|
|
||||||
n, err := io.CopyN(&buf, r, prefaceLen)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if n != prefaceLen || buf.String() != http2.ClientPreface {
|
|
||||||
return fmt.Errorf("Client never sent: %s", http2.ClientPreface)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// h2cUpgrade establishes a h2c connection using the HTTP/1 upgrade (Section 3.2).
|
// h2cUpgrade establishes a h2c connection using the HTTP/1 upgrade (Section 3.2).
|
||||||
func h2cUpgrade(w http.ResponseWriter, r *http.Request) (net.Conn, error) {
|
func h2cUpgrade(w http.ResponseWriter, r *http.Request) (_ net.Conn, settings []byte, err error) {
|
||||||
if !isH2CUpgrade(r.Header) {
|
settings, err = getH2Settings(r.Header)
|
||||||
return nil, errors.New("non-conforming h2c headers")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initial bytes we put into conn to fool http2 server
|
|
||||||
initBytes, _, err := convertH1ReqToH2(r)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
hijacker, ok := w.(http.Hijacker)
|
hijacker, ok := w.(http.Hijacker)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.New("hijack not supported.")
|
return nil, nil, errors.New("h2c: connection does not support Hijack")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body, _ := io.ReadAll(r.Body)
|
||||||
|
r.Body = io.NopCloser(bytes.NewBuffer(body))
|
||||||
|
|
||||||
conn, rw, err := hijacker.Hijack()
|
conn, rw, err := hijacker.Hijack()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("hijack failed: %v", err)
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
rw.Write([]byte("HTTP/1.1 101 Switching Protocols\r\n" +
|
rw.Write([]byte("HTTP/1.1 101 Switching Protocols\r\n" +
|
||||||
"Connection: Upgrade\r\n" +
|
"Connection: Upgrade\r\n" +
|
||||||
"Upgrade: h2c\r\n\r\n"))
|
"Upgrade: h2c\r\n\r\n"))
|
||||||
rw.Flush()
|
return newBufConn(conn, rw), settings, nil
|
||||||
|
|
||||||
// A conforming client will now send an H2 client preface which need to drain
|
|
||||||
// since we already sent this.
|
|
||||||
if err := drainClientPreface(rw); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
c := &rwConn{
|
|
||||||
Conn: conn,
|
|
||||||
Reader: io.MultiReader(initBytes, rw),
|
|
||||||
BufWriter: newSettingsAckSwallowWriter(rw.Writer),
|
|
||||||
}
|
|
||||||
return c, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// convert the data contained in the HTTP/1 upgrade request into the HTTP/2
|
|
||||||
// version in byte form.
|
|
||||||
func convertH1ReqToH2(r *http.Request) (*bytes.Buffer, []http2.Setting, error) {
|
|
||||||
h2Bytes := bytes.NewBuffer([]byte((http2.ClientPreface)))
|
|
||||||
framer := http2.NewFramer(h2Bytes, nil)
|
|
||||||
settings, err := getH2Settings(r.Header)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := framer.WriteSettings(settings...); err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
headerBytes, err := getH2HeaderBytes(r, getMaxHeaderTableSize(settings))
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
maxFrameSize := int(getMaxFrameSize(settings))
|
|
||||||
needOneHeader := len(headerBytes) < maxFrameSize
|
|
||||||
err = framer.WriteHeaders(http2.HeadersFrameParam{
|
|
||||||
StreamID: 1,
|
|
||||||
BlockFragment: headerBytes,
|
|
||||||
EndHeaders: needOneHeader,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := maxFrameSize; i < len(headerBytes); i += maxFrameSize {
|
|
||||||
if len(headerBytes)-i > maxFrameSize {
|
|
||||||
if err := framer.WriteContinuation(1,
|
|
||||||
false, // endHeaders
|
|
||||||
headerBytes[i:maxFrameSize]); err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if err := framer.WriteContinuation(1,
|
|
||||||
true, // endHeaders
|
|
||||||
headerBytes[i:]); err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return h2Bytes, settings, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// getMaxFrameSize returns the SETTINGS_MAX_FRAME_SIZE. If not present default
|
|
||||||
// value is 16384 as specified by RFC 7540 Section 6.5.2.
|
|
||||||
func getMaxFrameSize(settings []http2.Setting) uint32 {
|
|
||||||
for _, setting := range settings {
|
|
||||||
if setting.ID == http2.SettingMaxFrameSize {
|
|
||||||
return setting.Val
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 16384
|
|
||||||
}
|
|
||||||
|
|
||||||
// getMaxHeaderTableSize returns the SETTINGS_HEADER_TABLE_SIZE. If not present
|
|
||||||
// default value is 4096 as specified by RFC 7540 Section 6.5.2.
|
|
||||||
func getMaxHeaderTableSize(settings []http2.Setting) uint32 {
|
|
||||||
for _, setting := range settings {
|
|
||||||
if setting.ID == http2.SettingHeaderTableSize {
|
|
||||||
return setting.Val
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 4096
|
|
||||||
}
|
|
||||||
|
|
||||||
// bufWriter is a Writer interface that also has a Flush method.
|
|
||||||
type bufWriter interface {
|
|
||||||
io.Writer
|
|
||||||
Flush() error
|
|
||||||
}
|
|
||||||
|
|
||||||
// rwConn implements net.Conn but overrides Read and Write so that reads and
|
|
||||||
// writes are forwarded to the provided io.Reader and bufWriter.
|
|
||||||
type rwConn struct {
|
|
||||||
net.Conn
|
|
||||||
io.Reader
|
|
||||||
BufWriter bufWriter
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read forwards reads to the underlying Reader.
|
|
||||||
func (c *rwConn) Read(p []byte) (int, error) {
|
|
||||||
return c.Reader.Read(p)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write forwards writes to the underlying bufWriter and immediately flushes.
|
|
||||||
func (c *rwConn) Write(p []byte) (int, error) {
|
|
||||||
n, err := c.BufWriter.Write(p)
|
|
||||||
if err := c.BufWriter.Flush(); err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// settingsAckSwallowWriter is a writer that normally forwards bytes to its
|
|
||||||
// underlying Writer, but swallows the first SettingsAck frame that it sees.
|
|
||||||
type settingsAckSwallowWriter struct {
|
|
||||||
Writer *bufio.Writer
|
|
||||||
buf []byte
|
|
||||||
didSwallow bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// newSettingsAckSwallowWriter returns a new settingsAckSwallowWriter.
|
|
||||||
func newSettingsAckSwallowWriter(w *bufio.Writer) *settingsAckSwallowWriter {
|
|
||||||
return &settingsAckSwallowWriter{
|
|
||||||
Writer: w,
|
|
||||||
buf: make([]byte, 0),
|
|
||||||
didSwallow: false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write implements io.Writer interface. Normally forwards bytes to w.Writer,
|
|
||||||
// except for the first Settings ACK frame that it sees.
|
|
||||||
func (w *settingsAckSwallowWriter) Write(p []byte) (int, error) {
|
|
||||||
if !w.didSwallow {
|
|
||||||
w.buf = append(w.buf, p...)
|
|
||||||
// Process all the frames we have collected into w.buf
|
|
||||||
for {
|
|
||||||
// Append until we get full frame header which is 9 bytes
|
|
||||||
if len(w.buf) < 9 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
// Check if we have collected a whole frame.
|
|
||||||
fh, err := http2.ReadFrameHeader(bytes.NewBuffer(w.buf))
|
|
||||||
if err != nil {
|
|
||||||
// Corrupted frame, fail current Write
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
fSize := fh.Length + 9
|
|
||||||
if uint32(len(w.buf)) < fSize {
|
|
||||||
// Have not collected whole frame. Stop processing buf, and withhold on
|
|
||||||
// forward bytes to w.Writer until we get the full frame.
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
// We have now collected a whole frame.
|
|
||||||
if fh.Type == http2.FrameSettings && fh.Flags.Has(http2.FlagSettingsAck) {
|
|
||||||
// If Settings ACK frame, do not forward to underlying writer, remove
|
|
||||||
// bytes from w.buf, and record that we have swallowed Settings Ack
|
|
||||||
// frame.
|
|
||||||
w.didSwallow = true
|
|
||||||
w.buf = w.buf[fSize:]
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// Not settings ack frame. Forward bytes to w.Writer.
|
|
||||||
if _, err := w.Writer.Write(w.buf[:fSize]); err != nil {
|
|
||||||
// Couldn't forward bytes. Fail current Write.
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
w.buf = w.buf[fSize:]
|
|
||||||
}
|
|
||||||
return len(p), nil
|
|
||||||
}
|
|
||||||
return w.Writer.Write(p)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Flush calls w.Writer.Flush.
|
|
||||||
func (w *settingsAckSwallowWriter) Flush() error {
|
|
||||||
return w.Writer.Flush()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// isH2CUpgrade returns true if the header properly request an upgrade to h2c
|
// isH2CUpgrade returns true if the header properly request an upgrade to h2c
|
||||||
@ -377,9 +177,8 @@ func isH2CUpgrade(h http.Header) bool {
|
|||||||
httpguts.HeaderValuesContainsToken(h[textproto.CanonicalMIMEHeaderKey("Connection")], "HTTP2-Settings")
|
httpguts.HeaderValuesContainsToken(h[textproto.CanonicalMIMEHeaderKey("Connection")], "HTTP2-Settings")
|
||||||
}
|
}
|
||||||
|
|
||||||
// getH2Settings returns the []http2.Setting that are encoded in the
|
// getH2Settings returns the settings in the HTTP2-Settings header.
|
||||||
// HTTP2-Settings header.
|
func getH2Settings(h http.Header) ([]byte, error) {
|
||||||
func getH2Settings(h http.Header) ([]http2.Setting, error) {
|
|
||||||
vals, ok := h[textproto.CanonicalMIMEHeaderKey("HTTP2-Settings")]
|
vals, ok := h[textproto.CanonicalMIMEHeaderKey("HTTP2-Settings")]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.New("missing HTTP2-Settings header")
|
return nil, errors.New("missing HTTP2-Settings header")
|
||||||
@ -387,115 +186,40 @@ func getH2Settings(h http.Header) ([]http2.Setting, error) {
|
|||||||
if len(vals) != 1 {
|
if len(vals) != 1 {
|
||||||
return nil, fmt.Errorf("expected 1 HTTP2-Settings. Got: %v", vals)
|
return nil, fmt.Errorf("expected 1 HTTP2-Settings. Got: %v", vals)
|
||||||
}
|
}
|
||||||
settings, err := decodeSettings(vals[0])
|
settings, err := base64.RawURLEncoding.DecodeString(vals[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Invalid HTTP2-Settings: %q", vals[0])
|
return nil, err
|
||||||
}
|
}
|
||||||
return settings, nil
|
return settings, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// decodeSettings decodes the base64url header value of the HTTP2-Settings
|
func newBufConn(conn net.Conn, rw *bufio.ReadWriter) net.Conn {
|
||||||
// header. RFC 7540 Section 3.2.1.
|
rw.Flush()
|
||||||
func decodeSettings(headerVal string) ([]http2.Setting, error) {
|
if rw.Reader.Buffered() == 0 {
|
||||||
b, err := base64.RawURLEncoding.DecodeString(headerVal)
|
// If there's no buffered data to be read,
|
||||||
if err != nil {
|
// we can just discard the bufio.ReadWriter.
|
||||||
return nil, err
|
return conn
|
||||||
}
|
}
|
||||||
if len(b)%6 != 0 {
|
return &bufConn{conn, rw.Reader}
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
settings := make([]http2.Setting, 0)
|
|
||||||
for i := 0; i < len(b)/6; i++ {
|
|
||||||
settings = append(settings, http2.Setting{
|
|
||||||
ID: http2.SettingID(binary.BigEndian.Uint16(b[i*6 : i*6+2])),
|
|
||||||
Val: binary.BigEndian.Uint32(b[i*6+2 : i*6+6]),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return settings, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// getH2HeaderBytes return the headers in r a []bytes encoded by HPACK.
|
// bufConn wraps a net.Conn, but reads drain the bufio.Reader first.
|
||||||
func getH2HeaderBytes(r *http.Request, maxHeaderTableSize uint32) ([]byte, error) {
|
type bufConn struct {
|
||||||
headerBytes := bytes.NewBuffer(nil)
|
net.Conn
|
||||||
hpackEnc := hpack.NewEncoder(headerBytes)
|
*bufio.Reader
|
||||||
hpackEnc.SetMaxDynamicTableSize(maxHeaderTableSize)
|
|
||||||
|
|
||||||
// Section 8.1.2.3
|
|
||||||
err := hpackEnc.WriteField(hpack.HeaderField{
|
|
||||||
Name: ":method",
|
|
||||||
Value: r.Method,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = hpackEnc.WriteField(hpack.HeaderField{
|
|
||||||
Name: ":scheme",
|
|
||||||
Value: "http",
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = hpackEnc.WriteField(hpack.HeaderField{
|
|
||||||
Name: ":authority",
|
|
||||||
Value: r.Host,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
path := r.URL.Path
|
|
||||||
if r.URL.RawQuery != "" {
|
|
||||||
path = strings.Join([]string{path, r.URL.RawQuery}, "?")
|
|
||||||
}
|
|
||||||
err = hpackEnc.WriteField(hpack.HeaderField{
|
|
||||||
Name: ":path",
|
|
||||||
Value: path,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO Implement Section 8.3
|
|
||||||
|
|
||||||
for header, values := range r.Header {
|
|
||||||
// Skip non h2 headers
|
|
||||||
if isNonH2Header(header) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for _, v := range values {
|
|
||||||
err := hpackEnc.WriteField(hpack.HeaderField{
|
|
||||||
Name: strings.ToLower(header),
|
|
||||||
Value: v,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return headerBytes.Bytes(), nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connection specific headers listed in RFC 7540 Section 8.1.2.2 that are not
|
func (c *bufConn) Read(p []byte) (int, error) {
|
||||||
// suppose to be transferred to HTTP/2. The Http2-Settings header is skipped
|
if c.Reader == nil {
|
||||||
// since already use to create the HTTP/2 SETTINGS frame.
|
return c.Conn.Read(p)
|
||||||
var nonH2Headers = []string{
|
|
||||||
"Connection",
|
|
||||||
"Keep-Alive",
|
|
||||||
"Proxy-Connection",
|
|
||||||
"Transfer-Encoding",
|
|
||||||
"Upgrade",
|
|
||||||
"Http2-Settings",
|
|
||||||
}
|
|
||||||
|
|
||||||
// isNonH2Header returns true if header should not be transferred to HTTP/2.
|
|
||||||
func isNonH2Header(header string) bool {
|
|
||||||
for _, nonH2h := range nonH2Headers {
|
|
||||||
if header == nonH2h {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false
|
n := c.Reader.Buffered()
|
||||||
|
if n == 0 {
|
||||||
|
c.Reader = nil
|
||||||
|
return c.Conn.Read(p)
|
||||||
|
}
|
||||||
|
if n < len(p) {
|
||||||
|
p = p[:n]
|
||||||
|
}
|
||||||
|
return c.Reader.Read(p)
|
||||||
}
|
}
|
||||||
|
87
vendor/golang.org/x/net/http2/hpack/huffman.go
generated
vendored
87
vendor/golang.org/x/net/http2/hpack/huffman.go
generated
vendored
@ -169,25 +169,50 @@ func buildRootHuffmanNode() {
|
|||||||
// AppendHuffmanString appends s, as encoded in Huffman codes, to dst
|
// AppendHuffmanString appends s, as encoded in Huffman codes, to dst
|
||||||
// and returns the extended buffer.
|
// and returns the extended buffer.
|
||||||
func AppendHuffmanString(dst []byte, s string) []byte {
|
func AppendHuffmanString(dst []byte, s string) []byte {
|
||||||
rembits := uint8(8)
|
// This relies on the maximum huffman code length being 30 (See tables.go huffmanCodeLen array)
|
||||||
|
// So if a uint64 buffer has less than 32 valid bits can always accommodate another huffmanCode.
|
||||||
|
var (
|
||||||
|
x uint64 // buffer
|
||||||
|
n uint // number valid of bits present in x
|
||||||
|
)
|
||||||
for i := 0; i < len(s); i++ {
|
for i := 0; i < len(s); i++ {
|
||||||
if rembits == 8 {
|
c := s[i]
|
||||||
dst = append(dst, 0)
|
n += uint(huffmanCodeLen[c])
|
||||||
|
x <<= huffmanCodeLen[c] % 64
|
||||||
|
x |= uint64(huffmanCodes[c])
|
||||||
|
if n >= 32 {
|
||||||
|
n %= 32 // Normally would be -= 32 but %= 32 informs compiler 0 <= n <= 31 for upcoming shift
|
||||||
|
y := uint32(x >> n) // Compiler doesn't combine memory writes if y isn't uint32
|
||||||
|
dst = append(dst, byte(y>>24), byte(y>>16), byte(y>>8), byte(y))
|
||||||
}
|
}
|
||||||
dst, rembits = appendByteToHuffmanCode(dst, rembits, s[i])
|
|
||||||
}
|
}
|
||||||
|
// Add padding bits if necessary
|
||||||
if rembits < 8 {
|
if over := n % 8; over > 0 {
|
||||||
// special EOS symbol
|
const (
|
||||||
code := uint32(0x3fffffff)
|
eosCode = 0x3fffffff
|
||||||
nbits := uint8(30)
|
eosNBits = 30
|
||||||
|
eosPadByte = eosCode >> (eosNBits - 8)
|
||||||
t := uint8(code >> (nbits - rembits))
|
)
|
||||||
dst[len(dst)-1] |= t
|
pad := 8 - over
|
||||||
|
x = (x << pad) | (eosPadByte >> over)
|
||||||
|
n += pad // 8 now divides into n exactly
|
||||||
}
|
}
|
||||||
|
// n in (0, 8, 16, 24, 32)
|
||||||
return dst
|
switch n / 8 {
|
||||||
|
case 0:
|
||||||
|
return dst
|
||||||
|
case 1:
|
||||||
|
return append(dst, byte(x))
|
||||||
|
case 2:
|
||||||
|
y := uint16(x)
|
||||||
|
return append(dst, byte(y>>8), byte(y))
|
||||||
|
case 3:
|
||||||
|
y := uint16(x >> 8)
|
||||||
|
return append(dst, byte(y>>8), byte(y), byte(x))
|
||||||
|
}
|
||||||
|
// case 4:
|
||||||
|
y := uint32(x)
|
||||||
|
return append(dst, byte(y>>24), byte(y>>16), byte(y>>8), byte(y))
|
||||||
}
|
}
|
||||||
|
|
||||||
// HuffmanEncodeLength returns the number of bytes required to encode
|
// HuffmanEncodeLength returns the number of bytes required to encode
|
||||||
@ -199,35 +224,3 @@ func HuffmanEncodeLength(s string) uint64 {
|
|||||||
}
|
}
|
||||||
return (n + 7) / 8
|
return (n + 7) / 8
|
||||||
}
|
}
|
||||||
|
|
||||||
// appendByteToHuffmanCode appends Huffman code for c to dst and
|
|
||||||
// returns the extended buffer and the remaining bits in the last
|
|
||||||
// element. The appending is not byte aligned and the remaining bits
|
|
||||||
// in the last element of dst is given in rembits.
|
|
||||||
func appendByteToHuffmanCode(dst []byte, rembits uint8, c byte) ([]byte, uint8) {
|
|
||||||
code := huffmanCodes[c]
|
|
||||||
nbits := huffmanCodeLen[c]
|
|
||||||
|
|
||||||
for {
|
|
||||||
if rembits > nbits {
|
|
||||||
t := uint8(code << (rembits - nbits))
|
|
||||||
dst[len(dst)-1] |= t
|
|
||||||
rembits -= nbits
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
t := uint8(code >> (nbits - rembits))
|
|
||||||
dst[len(dst)-1] |= t
|
|
||||||
|
|
||||||
nbits -= rembits
|
|
||||||
rembits = 8
|
|
||||||
|
|
||||||
if nbits == 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
dst = append(dst, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
return dst, rembits
|
|
||||||
}
|
|
||||||
|
14
vendor/golang.org/x/net/http2/http2.go
generated
vendored
14
vendor/golang.org/x/net/http2/http2.go
generated
vendored
@ -13,7 +13,6 @@
|
|||||||
// See https://http2.github.io/ for more information on HTTP/2.
|
// See https://http2.github.io/ for more information on HTTP/2.
|
||||||
//
|
//
|
||||||
// See https://http2.golang.org/ for a test server running this code.
|
// See https://http2.golang.org/ for a test server running this code.
|
||||||
//
|
|
||||||
package http2 // import "golang.org/x/net/http2"
|
package http2 // import "golang.org/x/net/http2"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -176,10 +175,11 @@ func (s SettingID) String() string {
|
|||||||
// name (key). See httpguts.ValidHeaderName for the base rules.
|
// name (key). See httpguts.ValidHeaderName for the base rules.
|
||||||
//
|
//
|
||||||
// Further, http2 says:
|
// Further, http2 says:
|
||||||
// "Just as in HTTP/1.x, header field names are strings of ASCII
|
//
|
||||||
// characters that are compared in a case-insensitive
|
// "Just as in HTTP/1.x, header field names are strings of ASCII
|
||||||
// fashion. However, header field names MUST be converted to
|
// characters that are compared in a case-insensitive
|
||||||
// lowercase prior to their encoding in HTTP/2. "
|
// fashion. However, header field names MUST be converted to
|
||||||
|
// lowercase prior to their encoding in HTTP/2. "
|
||||||
func validWireHeaderFieldName(v string) bool {
|
func validWireHeaderFieldName(v string) bool {
|
||||||
if len(v) == 0 {
|
if len(v) == 0 {
|
||||||
return false
|
return false
|
||||||
@ -365,8 +365,8 @@ func (s *sorter) SortStrings(ss []string) {
|
|||||||
// validPseudoPath reports whether v is a valid :path pseudo-header
|
// validPseudoPath reports whether v is a valid :path pseudo-header
|
||||||
// value. It must be either:
|
// value. It must be either:
|
||||||
//
|
//
|
||||||
// *) a non-empty string starting with '/'
|
// - a non-empty string starting with '/'
|
||||||
// *) the string '*', for OPTIONS requests.
|
// - the string '*', for OPTIONS requests.
|
||||||
//
|
//
|
||||||
// For now this is only used a quick check for deciding when to clean
|
// For now this is only used a quick check for deciding when to clean
|
||||||
// up Opaque URLs before sending requests from the Transport.
|
// up Opaque URLs before sending requests from the Transport.
|
||||||
|
135
vendor/golang.org/x/net/http2/server.go
generated
vendored
135
vendor/golang.org/x/net/http2/server.go
generated
vendored
@ -315,6 +315,20 @@ type ServeConnOpts struct {
|
|||||||
// requests. If nil, BaseConfig.Handler is used. If BaseConfig
|
// requests. If nil, BaseConfig.Handler is used. If BaseConfig
|
||||||
// or BaseConfig.Handler is nil, http.DefaultServeMux is used.
|
// or BaseConfig.Handler is nil, http.DefaultServeMux is used.
|
||||||
Handler http.Handler
|
Handler http.Handler
|
||||||
|
|
||||||
|
// UpgradeRequest is an initial request received on a connection
|
||||||
|
// undergoing an h2c upgrade. The request body must have been
|
||||||
|
// completely read from the connection before calling ServeConn,
|
||||||
|
// and the 101 Switching Protocols response written.
|
||||||
|
UpgradeRequest *http.Request
|
||||||
|
|
||||||
|
// Settings is the decoded contents of the HTTP2-Settings header
|
||||||
|
// in an h2c upgrade request.
|
||||||
|
Settings []byte
|
||||||
|
|
||||||
|
// SawClientPreface is set if the HTTP/2 connection preface
|
||||||
|
// has already been read from the connection.
|
||||||
|
SawClientPreface bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *ServeConnOpts) context() context.Context {
|
func (o *ServeConnOpts) context() context.Context {
|
||||||
@ -383,6 +397,7 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
|
|||||||
headerTableSize: initialHeaderTableSize,
|
headerTableSize: initialHeaderTableSize,
|
||||||
serveG: newGoroutineLock(),
|
serveG: newGoroutineLock(),
|
||||||
pushEnabled: true,
|
pushEnabled: true,
|
||||||
|
sawClientPreface: opts.SawClientPreface,
|
||||||
}
|
}
|
||||||
|
|
||||||
s.state.registerConn(sc)
|
s.state.registerConn(sc)
|
||||||
@ -400,7 +415,7 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
|
|||||||
if s.NewWriteScheduler != nil {
|
if s.NewWriteScheduler != nil {
|
||||||
sc.writeSched = s.NewWriteScheduler()
|
sc.writeSched = s.NewWriteScheduler()
|
||||||
} else {
|
} else {
|
||||||
sc.writeSched = NewRandomWriteScheduler()
|
sc.writeSched = NewPriorityWriteScheduler(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// These start at the RFC-specified defaults. If there is a higher
|
// These start at the RFC-specified defaults. If there is a higher
|
||||||
@ -465,9 +480,27 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if opts.Settings != nil {
|
||||||
|
fr := &SettingsFrame{
|
||||||
|
FrameHeader: FrameHeader{valid: true},
|
||||||
|
p: opts.Settings,
|
||||||
|
}
|
||||||
|
if err := fr.ForeachSetting(sc.processSetting); err != nil {
|
||||||
|
sc.rejectConn(ErrCodeProtocol, "invalid settings")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
opts.Settings = nil
|
||||||
|
}
|
||||||
|
|
||||||
if hook := testHookGetServerConn; hook != nil {
|
if hook := testHookGetServerConn; hook != nil {
|
||||||
hook(sc)
|
hook(sc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if opts.UpgradeRequest != nil {
|
||||||
|
sc.upgradeRequest(opts.UpgradeRequest)
|
||||||
|
opts.UpgradeRequest = nil
|
||||||
|
}
|
||||||
|
|
||||||
sc.serve()
|
sc.serve()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -512,6 +545,7 @@ type serverConn struct {
|
|||||||
// Everything following is owned by the serve loop; use serveG.check():
|
// Everything following is owned by the serve loop; use serveG.check():
|
||||||
serveG goroutineLock // used to verify funcs are on serve()
|
serveG goroutineLock // used to verify funcs are on serve()
|
||||||
pushEnabled bool
|
pushEnabled bool
|
||||||
|
sawClientPreface bool // preface has already been read, used in h2c upgrade
|
||||||
sawFirstSettings bool // got the initial SETTINGS frame after the preface
|
sawFirstSettings bool // got the initial SETTINGS frame after the preface
|
||||||
needToSendSettingsAck bool
|
needToSendSettingsAck bool
|
||||||
unackedSettings int // how many SETTINGS have we sent without ACKs?
|
unackedSettings int // how many SETTINGS have we sent without ACKs?
|
||||||
@ -974,6 +1008,9 @@ var errPrefaceTimeout = errors.New("timeout waiting for client preface")
|
|||||||
// returns errPrefaceTimeout on timeout, or an error if the greeting
|
// returns errPrefaceTimeout on timeout, or an error if the greeting
|
||||||
// is invalid.
|
// is invalid.
|
||||||
func (sc *serverConn) readPreface() error {
|
func (sc *serverConn) readPreface() error {
|
||||||
|
if sc.sawClientPreface {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
errc := make(chan error, 1)
|
errc := make(chan error, 1)
|
||||||
go func() {
|
go func() {
|
||||||
// Read the client preface
|
// Read the client preface
|
||||||
@ -1915,6 +1952,26 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sc *serverConn) upgradeRequest(req *http.Request) {
|
||||||
|
sc.serveG.check()
|
||||||
|
id := uint32(1)
|
||||||
|
sc.maxClientStreamID = id
|
||||||
|
st := sc.newStream(id, 0, stateHalfClosedRemote)
|
||||||
|
st.reqTrailer = req.Trailer
|
||||||
|
if st.reqTrailer != nil {
|
||||||
|
st.trailer = make(http.Header)
|
||||||
|
}
|
||||||
|
rw := sc.newResponseWriter(st, req)
|
||||||
|
|
||||||
|
// Disable any read deadline set by the net/http package
|
||||||
|
// prior to the upgrade.
|
||||||
|
if sc.hs.ReadTimeout != 0 {
|
||||||
|
sc.conn.SetReadDeadline(time.Time{})
|
||||||
|
}
|
||||||
|
|
||||||
|
go sc.runHandler(rw, req, sc.handler.ServeHTTP)
|
||||||
|
}
|
||||||
|
|
||||||
func (st *stream) processTrailerHeaders(f *MetaHeadersFrame) error {
|
func (st *stream) processTrailerHeaders(f *MetaHeadersFrame) error {
|
||||||
sc := st.sc
|
sc := st.sc
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
@ -2145,6 +2202,11 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r
|
|||||||
}
|
}
|
||||||
req = req.WithContext(st.ctx)
|
req = req.WithContext(st.ctx)
|
||||||
|
|
||||||
|
rw := sc.newResponseWriter(st, req)
|
||||||
|
return rw, req, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sc *serverConn) newResponseWriter(st *stream, req *http.Request) *responseWriter {
|
||||||
rws := responseWriterStatePool.Get().(*responseWriterState)
|
rws := responseWriterStatePool.Get().(*responseWriterState)
|
||||||
bwSave := rws.bw
|
bwSave := rws.bw
|
||||||
*rws = responseWriterState{} // zero all the fields
|
*rws = responseWriterState{} // zero all the fields
|
||||||
@ -2153,10 +2215,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r
|
|||||||
rws.bw.Reset(chunkWriter{rws})
|
rws.bw.Reset(chunkWriter{rws})
|
||||||
rws.stream = st
|
rws.stream = st
|
||||||
rws.req = req
|
rws.req = req
|
||||||
rws.body = body
|
return &responseWriter{rws: rws}
|
||||||
|
|
||||||
rw := &responseWriter{rws: rws}
|
|
||||||
return rw, req, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run on its own goroutine.
|
// Run on its own goroutine.
|
||||||
@ -2316,17 +2375,18 @@ type requestBody struct {
|
|||||||
_ incomparable
|
_ incomparable
|
||||||
stream *stream
|
stream *stream
|
||||||
conn *serverConn
|
conn *serverConn
|
||||||
closed bool // for use by Close only
|
closeOnce sync.Once // for use by Close only
|
||||||
sawEOF bool // for use by Read only
|
sawEOF bool // for use by Read only
|
||||||
pipe *pipe // non-nil if we have a HTTP entity message body
|
pipe *pipe // non-nil if we have a HTTP entity message body
|
||||||
needsContinue bool // need to send a 100-continue
|
needsContinue bool // need to send a 100-continue
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *requestBody) Close() error {
|
func (b *requestBody) Close() error {
|
||||||
if b.pipe != nil && !b.closed {
|
b.closeOnce.Do(func() {
|
||||||
b.pipe.BreakWithError(errClosedBody)
|
if b.pipe != nil {
|
||||||
}
|
b.pipe.BreakWithError(errClosedBody)
|
||||||
b.closed = true
|
}
|
||||||
|
})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2370,7 +2430,6 @@ type responseWriterState struct {
|
|||||||
// immutable within a request:
|
// immutable within a request:
|
||||||
stream *stream
|
stream *stream
|
||||||
req *http.Request
|
req *http.Request
|
||||||
body *requestBody // to close at end of request, if DATA frames didn't
|
|
||||||
conn *serverConn
|
conn *serverConn
|
||||||
|
|
||||||
// TODO: adjust buffer writing sizes based on server config, frame size updates from peer, etc
|
// TODO: adjust buffer writing sizes based on server config, frame size updates from peer, etc
|
||||||
@ -2546,8 +2605,9 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
|
|||||||
// prior to the headers being written. If the set of trailers is fixed
|
// prior to the headers being written. If the set of trailers is fixed
|
||||||
// or known before the header is written, the normal Go trailers mechanism
|
// or known before the header is written, the normal Go trailers mechanism
|
||||||
// is preferred:
|
// is preferred:
|
||||||
// https://golang.org/pkg/net/http/#ResponseWriter
|
//
|
||||||
// https://golang.org/pkg/net/http/#example_ResponseWriter_trailers
|
// https://golang.org/pkg/net/http/#ResponseWriter
|
||||||
|
// https://golang.org/pkg/net/http/#example_ResponseWriter_trailers
|
||||||
const TrailerPrefix = "Trailer:"
|
const TrailerPrefix = "Trailer:"
|
||||||
|
|
||||||
// promoteUndeclaredTrailers permits http.Handlers to set trailers
|
// promoteUndeclaredTrailers permits http.Handlers to set trailers
|
||||||
@ -2643,8 +2703,7 @@ func checkWriteHeaderCode(code int) {
|
|||||||
// Issue 22880: require valid WriteHeader status codes.
|
// Issue 22880: require valid WriteHeader status codes.
|
||||||
// For now we only enforce that it's three digits.
|
// For now we only enforce that it's three digits.
|
||||||
// In the future we might block things over 599 (600 and above aren't defined
|
// In the future we might block things over 599 (600 and above aren't defined
|
||||||
// at http://httpwg.org/specs/rfc7231.html#status.codes)
|
// at http://httpwg.org/specs/rfc7231.html#status.codes).
|
||||||
// and we might block under 200 (once we have more mature 1xx support).
|
|
||||||
// But for now any three digits.
|
// But for now any three digits.
|
||||||
//
|
//
|
||||||
// We used to send "HTTP/1.1 000 0" on the wire in responses but there's
|
// We used to send "HTTP/1.1 000 0" on the wire in responses but there's
|
||||||
@ -2665,13 +2724,41 @@ func (w *responseWriter) WriteHeader(code int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (rws *responseWriterState) writeHeader(code int) {
|
func (rws *responseWriterState) writeHeader(code int) {
|
||||||
if !rws.wroteHeader {
|
if rws.wroteHeader {
|
||||||
checkWriteHeaderCode(code)
|
return
|
||||||
rws.wroteHeader = true
|
}
|
||||||
rws.status = code
|
|
||||||
if len(rws.handlerHeader) > 0 {
|
checkWriteHeaderCode(code)
|
||||||
rws.snapHeader = cloneHeader(rws.handlerHeader)
|
|
||||||
|
// Handle informational headers
|
||||||
|
if code >= 100 && code <= 199 {
|
||||||
|
// Per RFC 8297 we must not clear the current header map
|
||||||
|
h := rws.handlerHeader
|
||||||
|
|
||||||
|
_, cl := h["Content-Length"]
|
||||||
|
_, te := h["Transfer-Encoding"]
|
||||||
|
if cl || te {
|
||||||
|
h = h.Clone()
|
||||||
|
h.Del("Content-Length")
|
||||||
|
h.Del("Transfer-Encoding")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if rws.conn.writeHeaders(rws.stream, &writeResHeaders{
|
||||||
|
streamID: rws.stream.id,
|
||||||
|
httpResCode: code,
|
||||||
|
h: h,
|
||||||
|
endStream: rws.handlerDone && !rws.hasTrailers(),
|
||||||
|
}) != nil {
|
||||||
|
rws.dirty = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
rws.wroteHeader = true
|
||||||
|
rws.status = code
|
||||||
|
if len(rws.handlerHeader) > 0 {
|
||||||
|
rws.snapHeader = cloneHeader(rws.handlerHeader)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
18
vendor/golang.org/x/net/http2/transport.go
generated
vendored
18
vendor/golang.org/x/net/http2/transport.go
generated
vendored
@ -16,7 +16,6 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
mathrand "math/rand"
|
mathrand "math/rand"
|
||||||
@ -501,12 +500,14 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res
|
|||||||
if req, err = shouldRetryRequest(req, err); err == nil {
|
if req, err = shouldRetryRequest(req, err); err == nil {
|
||||||
// After the first retry, do exponential backoff with 10% jitter.
|
// After the first retry, do exponential backoff with 10% jitter.
|
||||||
if retry == 0 {
|
if retry == 0 {
|
||||||
|
t.vlogf("RoundTrip retrying after failure: %v", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
backoff := float64(uint(1) << (uint(retry) - 1))
|
backoff := float64(uint(1) << (uint(retry) - 1))
|
||||||
backoff += backoff * (0.1 * mathrand.Float64())
|
backoff += backoff * (0.1 * mathrand.Float64())
|
||||||
select {
|
select {
|
||||||
case <-time.After(time.Second * time.Duration(backoff)):
|
case <-time.After(time.Second * time.Duration(backoff)):
|
||||||
|
t.vlogf("RoundTrip retrying after failure: %v", err)
|
||||||
continue
|
continue
|
||||||
case <-req.Context().Done():
|
case <-req.Context().Done():
|
||||||
err = req.Context().Err()
|
err = req.Context().Err()
|
||||||
@ -732,10 +733,13 @@ func (cc *ClientConn) healthCheck() {
|
|||||||
// trigger the healthCheck again if there is no frame received.
|
// trigger the healthCheck again if there is no frame received.
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), pingTimeout)
|
ctx, cancel := context.WithTimeout(context.Background(), pingTimeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
cc.vlogf("http2: Transport sending health check")
|
||||||
err := cc.Ping(ctx)
|
err := cc.Ping(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
cc.vlogf("http2: Transport health check failure: %v", err)
|
||||||
cc.closeForLostPing()
|
cc.closeForLostPing()
|
||||||
return
|
} else {
|
||||||
|
cc.vlogf("http2: Transport health check success")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1765,7 +1769,8 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail
|
|||||||
}
|
}
|
||||||
for _, v := range vv {
|
for _, v := range vv {
|
||||||
if !httpguts.ValidHeaderFieldValue(v) {
|
if !httpguts.ValidHeaderFieldValue(v) {
|
||||||
return nil, fmt.Errorf("invalid HTTP header value %q for header %q", v, k)
|
// Don't include the value in the error, because it may be sensitive.
|
||||||
|
return nil, fmt.Errorf("invalid HTTP header value for header %q", k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2898,7 +2903,12 @@ func (t *Transport) logf(format string, args ...interface{}) {
|
|||||||
log.Printf(format, args...)
|
log.Printf(format, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
var noBody io.ReadCloser = ioutil.NopCloser(bytes.NewReader(nil))
|
var noBody io.ReadCloser = noBodyReader{}
|
||||||
|
|
||||||
|
type noBodyReader struct{}
|
||||||
|
|
||||||
|
func (noBodyReader) Close() error { return nil }
|
||||||
|
func (noBodyReader) Read([]byte) (int, error) { return 0, io.EOF }
|
||||||
|
|
||||||
type missingBody struct{}
|
type missingBody struct{}
|
||||||
|
|
||||||
|
9
vendor/golang.org/x/net/http2/writesched_priority.go
generated
vendored
9
vendor/golang.org/x/net/http2/writesched_priority.go
generated
vendored
@ -383,16 +383,15 @@ func (ws *priorityWriteScheduler) AdjustStream(streamID uint32, priority Priorit
|
|||||||
|
|
||||||
func (ws *priorityWriteScheduler) Push(wr FrameWriteRequest) {
|
func (ws *priorityWriteScheduler) Push(wr FrameWriteRequest) {
|
||||||
var n *priorityNode
|
var n *priorityNode
|
||||||
if id := wr.StreamID(); id == 0 {
|
if wr.isControl() {
|
||||||
n = &ws.root
|
n = &ws.root
|
||||||
} else {
|
} else {
|
||||||
|
id := wr.StreamID()
|
||||||
n = ws.nodes[id]
|
n = ws.nodes[id]
|
||||||
if n == nil {
|
if n == nil {
|
||||||
// id is an idle or closed stream. wr should not be a HEADERS or
|
// id is an idle or closed stream. wr should not be a HEADERS or
|
||||||
// DATA frame. However, wr can be a RST_STREAM. In this case, we
|
// DATA frame. In other case, we push wr onto the root, rather
|
||||||
// push wr onto the root, rather than creating a new priorityNode,
|
// than creating a new priorityNode.
|
||||||
// since RST_STREAM is tiny and the stream's priority is unknown
|
|
||||||
// anyway. See issue #17919.
|
|
||||||
if wr.DataSize() > 0 {
|
if wr.DataSize() > 0 {
|
||||||
panic("add DATA on non-open stream")
|
panic("add DATA on non-open stream")
|
||||||
}
|
}
|
||||||
|
34
vendor/golang.org/x/net/idna/trieval.go
generated
vendored
34
vendor/golang.org/x/net/idna/trieval.go
generated
vendored
@ -17,23 +17,23 @@ package idna
|
|||||||
//
|
//
|
||||||
// The per-rune values have the following format:
|
// The per-rune values have the following format:
|
||||||
//
|
//
|
||||||
// if mapped {
|
// if mapped {
|
||||||
// if inlinedXOR {
|
// if inlinedXOR {
|
||||||
// 15..13 inline XOR marker
|
// 15..13 inline XOR marker
|
||||||
// 12..11 unused
|
// 12..11 unused
|
||||||
// 10..3 inline XOR mask
|
// 10..3 inline XOR mask
|
||||||
// } else {
|
// } else {
|
||||||
// 15..3 index into xor or mapping table
|
// 15..3 index into xor or mapping table
|
||||||
// }
|
// }
|
||||||
// } else {
|
// } else {
|
||||||
// 15..14 unused
|
// 15..14 unused
|
||||||
// 13 mayNeedNorm
|
// 13 mayNeedNorm
|
||||||
// 12..11 attributes
|
// 12..11 attributes
|
||||||
// 10..8 joining type
|
// 10..8 joining type
|
||||||
// 7..3 category type
|
// 7..3 category type
|
||||||
// }
|
// }
|
||||||
// 2 use xor pattern
|
// 2 use xor pattern
|
||||||
// 1..0 mapped category
|
// 1..0 mapped category
|
||||||
//
|
//
|
||||||
// See the definitions below for a more detailed description of the various
|
// See the definitions below for a more detailed description of the various
|
||||||
// bits.
|
// bits.
|
||||||
|
1
vendor/golang.org/x/sys/plan9/syscall.go
generated
vendored
1
vendor/golang.org/x/sys/plan9/syscall.go
generated
vendored
@ -113,5 +113,6 @@ func (tv *Timeval) Nano() int64 {
|
|||||||
|
|
||||||
// use is a no-op, but the compiler cannot see that it is.
|
// 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.
|
// Calling use(p) ensures that p is kept live until that point.
|
||||||
|
//
|
||||||
//go:noescape
|
//go:noescape
|
||||||
func use(p unsafe.Pointer)
|
func use(p unsafe.Pointer)
|
||||||
|
10
vendor/golang.org/x/sys/plan9/syscall_plan9.go
generated
vendored
10
vendor/golang.org/x/sys/plan9/syscall_plan9.go
generated
vendored
@ -115,6 +115,7 @@ func Write(fd int, p []byte) (n int, err error) {
|
|||||||
var ioSync int64
|
var ioSync int64
|
||||||
|
|
||||||
//sys fd2path(fd int, buf []byte) (err error)
|
//sys fd2path(fd int, buf []byte) (err error)
|
||||||
|
|
||||||
func Fd2path(fd int) (path string, err error) {
|
func Fd2path(fd int) (path string, err error) {
|
||||||
var buf [512]byte
|
var buf [512]byte
|
||||||
|
|
||||||
@ -126,6 +127,7 @@ func Fd2path(fd int) (path string, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//sys pipe(p *[2]int32) (err error)
|
//sys pipe(p *[2]int32) (err error)
|
||||||
|
|
||||||
func Pipe(p []int) (err error) {
|
func Pipe(p []int) (err error) {
|
||||||
if len(p) != 2 {
|
if len(p) != 2 {
|
||||||
return syscall.ErrorString("bad arg in system call")
|
return syscall.ErrorString("bad arg in system call")
|
||||||
@ -180,6 +182,7 @@ func (w Waitmsg) ExitStatus() int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//sys await(s []byte) (n int, err error)
|
//sys await(s []byte) (n int, err error)
|
||||||
|
|
||||||
func Await(w *Waitmsg) (err error) {
|
func Await(w *Waitmsg) (err error) {
|
||||||
var buf [512]byte
|
var buf [512]byte
|
||||||
var f [5][]byte
|
var f [5][]byte
|
||||||
@ -301,42 +304,49 @@ func Getgroups() (gids []int, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//sys open(path string, mode int) (fd int, err error)
|
//sys open(path string, mode int) (fd int, err error)
|
||||||
|
|
||||||
func Open(path string, mode int) (fd int, err error) {
|
func Open(path string, mode int) (fd int, err error) {
|
||||||
fixwd()
|
fixwd()
|
||||||
return open(path, mode)
|
return open(path, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys create(path string, mode int, perm uint32) (fd int, err error)
|
//sys create(path string, mode int, perm uint32) (fd int, err error)
|
||||||
|
|
||||||
func Create(path string, mode int, perm uint32) (fd int, err error) {
|
func Create(path string, mode int, perm uint32) (fd int, err error) {
|
||||||
fixwd()
|
fixwd()
|
||||||
return create(path, mode, perm)
|
return create(path, mode, perm)
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys remove(path string) (err error)
|
//sys remove(path string) (err error)
|
||||||
|
|
||||||
func Remove(path string) error {
|
func Remove(path string) error {
|
||||||
fixwd()
|
fixwd()
|
||||||
return remove(path)
|
return remove(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys stat(path string, edir []byte) (n int, err error)
|
//sys stat(path string, edir []byte) (n int, err error)
|
||||||
|
|
||||||
func Stat(path string, edir []byte) (n int, err error) {
|
func Stat(path string, edir []byte) (n int, err error) {
|
||||||
fixwd()
|
fixwd()
|
||||||
return stat(path, edir)
|
return stat(path, edir)
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys bind(name string, old string, flag int) (err error)
|
//sys bind(name string, old string, flag int) (err error)
|
||||||
|
|
||||||
func Bind(name string, old string, flag int) (err error) {
|
func Bind(name string, old string, flag int) (err error) {
|
||||||
fixwd()
|
fixwd()
|
||||||
return bind(name, old, flag)
|
return bind(name, old, flag)
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys mount(fd int, afd int, old string, flag int, aname string) (err error)
|
//sys mount(fd int, afd int, old string, flag int, aname string) (err error)
|
||||||
|
|
||||||
func Mount(fd int, afd int, old string, flag int, aname string) (err error) {
|
func Mount(fd int, afd int, old string, flag int, aname string) (err error) {
|
||||||
fixwd()
|
fixwd()
|
||||||
return mount(fd, afd, old, flag, aname)
|
return mount(fd, afd, old, flag, aname)
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys wstat(path string, edir []byte) (err error)
|
//sys wstat(path string, edir []byte) (err error)
|
||||||
|
|
||||||
func Wstat(path string, edir []byte) (err error) {
|
func Wstat(path string, edir []byte) (err error) {
|
||||||
fixwd()
|
fixwd()
|
||||||
return wstat(path, edir)
|
return wstat(path, edir)
|
||||||
|
29
vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s
generated
vendored
Normal file
29
vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s
generated
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// Copyright 2021 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.
|
||||||
|
|
||||||
|
//go:build (darwin || freebsd || netbsd || openbsd) && gc
|
||||||
|
// +build darwin freebsd netbsd openbsd
|
||||||
|
// +build gc
|
||||||
|
|
||||||
|
#include "textflag.h"
|
||||||
|
|
||||||
|
// System call support for RISCV64 BSD
|
||||||
|
|
||||||
|
// 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)
|
54
vendor/golang.org/x/sys/unix/asm_linux_loong64.s
generated
vendored
Normal file
54
vendor/golang.org/x/sys/unix/asm_linux_loong64.s
generated
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
// Copyright 2022 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.
|
||||||
|
|
||||||
|
//go:build linux && loong64 && gc
|
||||||
|
// +build linux
|
||||||
|
// +build loong64
|
||||||
|
// +build gc
|
||||||
|
|
||||||
|
#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
|
||||||
|
JMP syscall·Syscall(SB)
|
||||||
|
|
||||||
|
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
||||||
|
JMP syscall·Syscall6(SB)
|
||||||
|
|
||||||
|
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
|
||||||
|
JAL runtime·entersyscall(SB)
|
||||||
|
MOVV a1+8(FP), R4
|
||||||
|
MOVV a2+16(FP), R5
|
||||||
|
MOVV a3+24(FP), R6
|
||||||
|
MOVV R0, R7
|
||||||
|
MOVV R0, R8
|
||||||
|
MOVV R0, R9
|
||||||
|
MOVV trap+0(FP), R11 // syscall entry
|
||||||
|
SYSCALL
|
||||||
|
MOVV R4, r1+32(FP)
|
||||||
|
MOVV R0, r2+40(FP) // r2 is not used. Always set to 0
|
||||||
|
JAL runtime·exitsyscall(SB)
|
||||||
|
RET
|
||||||
|
|
||||||
|
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
||||||
|
JMP syscall·RawSyscall(SB)
|
||||||
|
|
||||||
|
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
||||||
|
JMP syscall·RawSyscall6(SB)
|
||||||
|
|
||||||
|
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
|
||||||
|
MOVV a1+8(FP), R4
|
||||||
|
MOVV a2+16(FP), R5
|
||||||
|
MOVV a3+24(FP), R6
|
||||||
|
MOVV R0, R7
|
||||||
|
MOVV R0, R8
|
||||||
|
MOVV R0, R9
|
||||||
|
MOVV trap+0(FP), R11 // syscall entry
|
||||||
|
SYSCALL
|
||||||
|
MOVV R4, r1+32(FP)
|
||||||
|
MOVV R0, r2+40(FP) // r2 is not used. Always set to 0
|
||||||
|
RET
|
4
vendor/golang.org/x/sys/unix/endian_little.go
generated
vendored
4
vendor/golang.org/x/sys/unix/endian_little.go
generated
vendored
@ -2,8 +2,8 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
//
|
//
|
||||||
//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh
|
//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh
|
||||||
// +build 386 amd64 amd64p32 alpha arm arm64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh
|
// +build 386 amd64 amd64p32 alpha arm arm64 loong64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
233
vendor/golang.org/x/sys/unix/errors_freebsd_386.go
generated
vendored
233
vendor/golang.org/x/sys/unix/errors_freebsd_386.go
generated
vendored
@ -1,233 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep
|
|
||||||
// them here for backwards compatibility.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
DLT_HHDLC = 0x79
|
|
||||||
IFF_SMART = 0x20
|
|
||||||
IFT_1822 = 0x2
|
|
||||||
IFT_A12MPPSWITCH = 0x82
|
|
||||||
IFT_AAL2 = 0xbb
|
|
||||||
IFT_AAL5 = 0x31
|
|
||||||
IFT_ADSL = 0x5e
|
|
||||||
IFT_AFLANE8023 = 0x3b
|
|
||||||
IFT_AFLANE8025 = 0x3c
|
|
||||||
IFT_ARAP = 0x58
|
|
||||||
IFT_ARCNET = 0x23
|
|
||||||
IFT_ARCNETPLUS = 0x24
|
|
||||||
IFT_ASYNC = 0x54
|
|
||||||
IFT_ATM = 0x25
|
|
||||||
IFT_ATMDXI = 0x69
|
|
||||||
IFT_ATMFUNI = 0x6a
|
|
||||||
IFT_ATMIMA = 0x6b
|
|
||||||
IFT_ATMLOGICAL = 0x50
|
|
||||||
IFT_ATMRADIO = 0xbd
|
|
||||||
IFT_ATMSUBINTERFACE = 0x86
|
|
||||||
IFT_ATMVCIENDPT = 0xc2
|
|
||||||
IFT_ATMVIRTUAL = 0x95
|
|
||||||
IFT_BGPPOLICYACCOUNTING = 0xa2
|
|
||||||
IFT_BSC = 0x53
|
|
||||||
IFT_CCTEMUL = 0x3d
|
|
||||||
IFT_CEPT = 0x13
|
|
||||||
IFT_CES = 0x85
|
|
||||||
IFT_CHANNEL = 0x46
|
|
||||||
IFT_CNR = 0x55
|
|
||||||
IFT_COFFEE = 0x84
|
|
||||||
IFT_COMPOSITELINK = 0x9b
|
|
||||||
IFT_DCN = 0x8d
|
|
||||||
IFT_DIGITALPOWERLINE = 0x8a
|
|
||||||
IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
|
|
||||||
IFT_DLSW = 0x4a
|
|
||||||
IFT_DOCSCABLEDOWNSTREAM = 0x80
|
|
||||||
IFT_DOCSCABLEMACLAYER = 0x7f
|
|
||||||
IFT_DOCSCABLEUPSTREAM = 0x81
|
|
||||||
IFT_DS0 = 0x51
|
|
||||||
IFT_DS0BUNDLE = 0x52
|
|
||||||
IFT_DS1FDL = 0xaa
|
|
||||||
IFT_DS3 = 0x1e
|
|
||||||
IFT_DTM = 0x8c
|
|
||||||
IFT_DVBASILN = 0xac
|
|
||||||
IFT_DVBASIOUT = 0xad
|
|
||||||
IFT_DVBRCCDOWNSTREAM = 0x93
|
|
||||||
IFT_DVBRCCMACLAYER = 0x92
|
|
||||||
IFT_DVBRCCUPSTREAM = 0x94
|
|
||||||
IFT_ENC = 0xf4
|
|
||||||
IFT_EON = 0x19
|
|
||||||
IFT_EPLRS = 0x57
|
|
||||||
IFT_ESCON = 0x49
|
|
||||||
IFT_ETHER = 0x6
|
|
||||||
IFT_FAITH = 0xf2
|
|
||||||
IFT_FAST = 0x7d
|
|
||||||
IFT_FASTETHER = 0x3e
|
|
||||||
IFT_FASTETHERFX = 0x45
|
|
||||||
IFT_FDDI = 0xf
|
|
||||||
IFT_FIBRECHANNEL = 0x38
|
|
||||||
IFT_FRAMERELAYINTERCONNECT = 0x3a
|
|
||||||
IFT_FRAMERELAYMPI = 0x5c
|
|
||||||
IFT_FRDLCIENDPT = 0xc1
|
|
||||||
IFT_FRELAY = 0x20
|
|
||||||
IFT_FRELAYDCE = 0x2c
|
|
||||||
IFT_FRF16MFRBUNDLE = 0xa3
|
|
||||||
IFT_FRFORWARD = 0x9e
|
|
||||||
IFT_G703AT2MB = 0x43
|
|
||||||
IFT_G703AT64K = 0x42
|
|
||||||
IFT_GIF = 0xf0
|
|
||||||
IFT_GIGABITETHERNET = 0x75
|
|
||||||
IFT_GR303IDT = 0xb2
|
|
||||||
IFT_GR303RDT = 0xb1
|
|
||||||
IFT_H323GATEKEEPER = 0xa4
|
|
||||||
IFT_H323PROXY = 0xa5
|
|
||||||
IFT_HDH1822 = 0x3
|
|
||||||
IFT_HDLC = 0x76
|
|
||||||
IFT_HDSL2 = 0xa8
|
|
||||||
IFT_HIPERLAN2 = 0xb7
|
|
||||||
IFT_HIPPI = 0x2f
|
|
||||||
IFT_HIPPIINTERFACE = 0x39
|
|
||||||
IFT_HOSTPAD = 0x5a
|
|
||||||
IFT_HSSI = 0x2e
|
|
||||||
IFT_HY = 0xe
|
|
||||||
IFT_IBM370PARCHAN = 0x48
|
|
||||||
IFT_IDSL = 0x9a
|
|
||||||
IFT_IEEE80211 = 0x47
|
|
||||||
IFT_IEEE80212 = 0x37
|
|
||||||
IFT_IEEE8023ADLAG = 0xa1
|
|
||||||
IFT_IFGSN = 0x91
|
|
||||||
IFT_IMT = 0xbe
|
|
||||||
IFT_INTERLEAVE = 0x7c
|
|
||||||
IFT_IP = 0x7e
|
|
||||||
IFT_IPFORWARD = 0x8e
|
|
||||||
IFT_IPOVERATM = 0x72
|
|
||||||
IFT_IPOVERCDLC = 0x6d
|
|
||||||
IFT_IPOVERCLAW = 0x6e
|
|
||||||
IFT_IPSWITCH = 0x4e
|
|
||||||
IFT_IPXIP = 0xf9
|
|
||||||
IFT_ISDN = 0x3f
|
|
||||||
IFT_ISDNBASIC = 0x14
|
|
||||||
IFT_ISDNPRIMARY = 0x15
|
|
||||||
IFT_ISDNS = 0x4b
|
|
||||||
IFT_ISDNU = 0x4c
|
|
||||||
IFT_ISO88022LLC = 0x29
|
|
||||||
IFT_ISO88023 = 0x7
|
|
||||||
IFT_ISO88024 = 0x8
|
|
||||||
IFT_ISO88025 = 0x9
|
|
||||||
IFT_ISO88025CRFPINT = 0x62
|
|
||||||
IFT_ISO88025DTR = 0x56
|
|
||||||
IFT_ISO88025FIBER = 0x73
|
|
||||||
IFT_ISO88026 = 0xa
|
|
||||||
IFT_ISUP = 0xb3
|
|
||||||
IFT_L3IPXVLAN = 0x89
|
|
||||||
IFT_LAPB = 0x10
|
|
||||||
IFT_LAPD = 0x4d
|
|
||||||
IFT_LAPF = 0x77
|
|
||||||
IFT_LOCALTALK = 0x2a
|
|
||||||
IFT_LOOP = 0x18
|
|
||||||
IFT_MEDIAMAILOVERIP = 0x8b
|
|
||||||
IFT_MFSIGLINK = 0xa7
|
|
||||||
IFT_MIOX25 = 0x26
|
|
||||||
IFT_MODEM = 0x30
|
|
||||||
IFT_MPC = 0x71
|
|
||||||
IFT_MPLS = 0xa6
|
|
||||||
IFT_MPLSTUNNEL = 0x96
|
|
||||||
IFT_MSDSL = 0x8f
|
|
||||||
IFT_MVL = 0xbf
|
|
||||||
IFT_MYRINET = 0x63
|
|
||||||
IFT_NFAS = 0xaf
|
|
||||||
IFT_NSIP = 0x1b
|
|
||||||
IFT_OPTICALCHANNEL = 0xc3
|
|
||||||
IFT_OPTICALTRANSPORT = 0xc4
|
|
||||||
IFT_OTHER = 0x1
|
|
||||||
IFT_P10 = 0xc
|
|
||||||
IFT_P80 = 0xd
|
|
||||||
IFT_PARA = 0x22
|
|
||||||
IFT_PFLOG = 0xf6
|
|
||||||
IFT_PFSYNC = 0xf7
|
|
||||||
IFT_PLC = 0xae
|
|
||||||
IFT_POS = 0xab
|
|
||||||
IFT_PPPMULTILINKBUNDLE = 0x6c
|
|
||||||
IFT_PROPBWAP2MP = 0xb8
|
|
||||||
IFT_PROPCNLS = 0x59
|
|
||||||
IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5
|
|
||||||
IFT_PROPDOCSWIRELESSMACLAYER = 0xb4
|
|
||||||
IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6
|
|
||||||
IFT_PROPMUX = 0x36
|
|
||||||
IFT_PROPWIRELESSP2P = 0x9d
|
|
||||||
IFT_PTPSERIAL = 0x16
|
|
||||||
IFT_PVC = 0xf1
|
|
||||||
IFT_QLLC = 0x44
|
|
||||||
IFT_RADIOMAC = 0xbc
|
|
||||||
IFT_RADSL = 0x5f
|
|
||||||
IFT_REACHDSL = 0xc0
|
|
||||||
IFT_RFC1483 = 0x9f
|
|
||||||
IFT_RS232 = 0x21
|
|
||||||
IFT_RSRB = 0x4f
|
|
||||||
IFT_SDLC = 0x11
|
|
||||||
IFT_SDSL = 0x60
|
|
||||||
IFT_SHDSL = 0xa9
|
|
||||||
IFT_SIP = 0x1f
|
|
||||||
IFT_SLIP = 0x1c
|
|
||||||
IFT_SMDSDXI = 0x2b
|
|
||||||
IFT_SMDSICIP = 0x34
|
|
||||||
IFT_SONET = 0x27
|
|
||||||
IFT_SONETOVERHEADCHANNEL = 0xb9
|
|
||||||
IFT_SONETPATH = 0x32
|
|
||||||
IFT_SONETVT = 0x33
|
|
||||||
IFT_SRP = 0x97
|
|
||||||
IFT_SS7SIGLINK = 0x9c
|
|
||||||
IFT_STACKTOSTACK = 0x6f
|
|
||||||
IFT_STARLAN = 0xb
|
|
||||||
IFT_STF = 0xd7
|
|
||||||
IFT_T1 = 0x12
|
|
||||||
IFT_TDLC = 0x74
|
|
||||||
IFT_TERMPAD = 0x5b
|
|
||||||
IFT_TR008 = 0xb0
|
|
||||||
IFT_TRANSPHDLC = 0x7b
|
|
||||||
IFT_TUNNEL = 0x83
|
|
||||||
IFT_ULTRA = 0x1d
|
|
||||||
IFT_USB = 0xa0
|
|
||||||
IFT_V11 = 0x40
|
|
||||||
IFT_V35 = 0x2d
|
|
||||||
IFT_V36 = 0x41
|
|
||||||
IFT_V37 = 0x78
|
|
||||||
IFT_VDSL = 0x61
|
|
||||||
IFT_VIRTUALIPADDRESS = 0x70
|
|
||||||
IFT_VOICEEM = 0x64
|
|
||||||
IFT_VOICEENCAP = 0x67
|
|
||||||
IFT_VOICEFXO = 0x65
|
|
||||||
IFT_VOICEFXS = 0x66
|
|
||||||
IFT_VOICEOVERATM = 0x98
|
|
||||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
|
||||||
IFT_VOICEOVERIP = 0x68
|
|
||||||
IFT_X213 = 0x5d
|
|
||||||
IFT_X25 = 0x5
|
|
||||||
IFT_X25DDN = 0x4
|
|
||||||
IFT_X25HUNTGROUP = 0x7a
|
|
||||||
IFT_X25MLP = 0x79
|
|
||||||
IFT_X25PLE = 0x28
|
|
||||||
IFT_XETHER = 0x1a
|
|
||||||
IPPROTO_MAXID = 0x34
|
|
||||||
IPV6_FAITH = 0x1d
|
|
||||||
IPV6_MIN_MEMBERSHIPS = 0x1f
|
|
||||||
IP_FAITH = 0x16
|
|
||||||
IP_MAX_SOURCE_FILTER = 0x400
|
|
||||||
IP_MIN_MEMBERSHIPS = 0x1f
|
|
||||||
MAP_NORESERVE = 0x40
|
|
||||||
MAP_RENAME = 0x20
|
|
||||||
NET_RT_MAXID = 0x6
|
|
||||||
RTF_PRCLONING = 0x10000
|
|
||||||
RTM_OLDADD = 0x9
|
|
||||||
RTM_OLDDEL = 0xa
|
|
||||||
RT_CACHING_CONTEXT = 0x1
|
|
||||||
RT_NORTREF = 0x2
|
|
||||||
SIOCADDRT = 0x8030720a
|
|
||||||
SIOCALIFADDR = 0x8118691b
|
|
||||||
SIOCDELRT = 0x8030720b
|
|
||||||
SIOCDLIFADDR = 0x8118691d
|
|
||||||
SIOCGLIFADDR = 0xc118691c
|
|
||||||
SIOCGLIFPHYADDR = 0xc118694b
|
|
||||||
SIOCSLIFPHYADDR = 0x8118694a
|
|
||||||
)
|
|
233
vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go
generated
vendored
233
vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go
generated
vendored
@ -1,233 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep
|
|
||||||
// them here for backwards compatibility.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
DLT_HHDLC = 0x79
|
|
||||||
IFF_SMART = 0x20
|
|
||||||
IFT_1822 = 0x2
|
|
||||||
IFT_A12MPPSWITCH = 0x82
|
|
||||||
IFT_AAL2 = 0xbb
|
|
||||||
IFT_AAL5 = 0x31
|
|
||||||
IFT_ADSL = 0x5e
|
|
||||||
IFT_AFLANE8023 = 0x3b
|
|
||||||
IFT_AFLANE8025 = 0x3c
|
|
||||||
IFT_ARAP = 0x58
|
|
||||||
IFT_ARCNET = 0x23
|
|
||||||
IFT_ARCNETPLUS = 0x24
|
|
||||||
IFT_ASYNC = 0x54
|
|
||||||
IFT_ATM = 0x25
|
|
||||||
IFT_ATMDXI = 0x69
|
|
||||||
IFT_ATMFUNI = 0x6a
|
|
||||||
IFT_ATMIMA = 0x6b
|
|
||||||
IFT_ATMLOGICAL = 0x50
|
|
||||||
IFT_ATMRADIO = 0xbd
|
|
||||||
IFT_ATMSUBINTERFACE = 0x86
|
|
||||||
IFT_ATMVCIENDPT = 0xc2
|
|
||||||
IFT_ATMVIRTUAL = 0x95
|
|
||||||
IFT_BGPPOLICYACCOUNTING = 0xa2
|
|
||||||
IFT_BSC = 0x53
|
|
||||||
IFT_CCTEMUL = 0x3d
|
|
||||||
IFT_CEPT = 0x13
|
|
||||||
IFT_CES = 0x85
|
|
||||||
IFT_CHANNEL = 0x46
|
|
||||||
IFT_CNR = 0x55
|
|
||||||
IFT_COFFEE = 0x84
|
|
||||||
IFT_COMPOSITELINK = 0x9b
|
|
||||||
IFT_DCN = 0x8d
|
|
||||||
IFT_DIGITALPOWERLINE = 0x8a
|
|
||||||
IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
|
|
||||||
IFT_DLSW = 0x4a
|
|
||||||
IFT_DOCSCABLEDOWNSTREAM = 0x80
|
|
||||||
IFT_DOCSCABLEMACLAYER = 0x7f
|
|
||||||
IFT_DOCSCABLEUPSTREAM = 0x81
|
|
||||||
IFT_DS0 = 0x51
|
|
||||||
IFT_DS0BUNDLE = 0x52
|
|
||||||
IFT_DS1FDL = 0xaa
|
|
||||||
IFT_DS3 = 0x1e
|
|
||||||
IFT_DTM = 0x8c
|
|
||||||
IFT_DVBASILN = 0xac
|
|
||||||
IFT_DVBASIOUT = 0xad
|
|
||||||
IFT_DVBRCCDOWNSTREAM = 0x93
|
|
||||||
IFT_DVBRCCMACLAYER = 0x92
|
|
||||||
IFT_DVBRCCUPSTREAM = 0x94
|
|
||||||
IFT_ENC = 0xf4
|
|
||||||
IFT_EON = 0x19
|
|
||||||
IFT_EPLRS = 0x57
|
|
||||||
IFT_ESCON = 0x49
|
|
||||||
IFT_ETHER = 0x6
|
|
||||||
IFT_FAITH = 0xf2
|
|
||||||
IFT_FAST = 0x7d
|
|
||||||
IFT_FASTETHER = 0x3e
|
|
||||||
IFT_FASTETHERFX = 0x45
|
|
||||||
IFT_FDDI = 0xf
|
|
||||||
IFT_FIBRECHANNEL = 0x38
|
|
||||||
IFT_FRAMERELAYINTERCONNECT = 0x3a
|
|
||||||
IFT_FRAMERELAYMPI = 0x5c
|
|
||||||
IFT_FRDLCIENDPT = 0xc1
|
|
||||||
IFT_FRELAY = 0x20
|
|
||||||
IFT_FRELAYDCE = 0x2c
|
|
||||||
IFT_FRF16MFRBUNDLE = 0xa3
|
|
||||||
IFT_FRFORWARD = 0x9e
|
|
||||||
IFT_G703AT2MB = 0x43
|
|
||||||
IFT_G703AT64K = 0x42
|
|
||||||
IFT_GIF = 0xf0
|
|
||||||
IFT_GIGABITETHERNET = 0x75
|
|
||||||
IFT_GR303IDT = 0xb2
|
|
||||||
IFT_GR303RDT = 0xb1
|
|
||||||
IFT_H323GATEKEEPER = 0xa4
|
|
||||||
IFT_H323PROXY = 0xa5
|
|
||||||
IFT_HDH1822 = 0x3
|
|
||||||
IFT_HDLC = 0x76
|
|
||||||
IFT_HDSL2 = 0xa8
|
|
||||||
IFT_HIPERLAN2 = 0xb7
|
|
||||||
IFT_HIPPI = 0x2f
|
|
||||||
IFT_HIPPIINTERFACE = 0x39
|
|
||||||
IFT_HOSTPAD = 0x5a
|
|
||||||
IFT_HSSI = 0x2e
|
|
||||||
IFT_HY = 0xe
|
|
||||||
IFT_IBM370PARCHAN = 0x48
|
|
||||||
IFT_IDSL = 0x9a
|
|
||||||
IFT_IEEE80211 = 0x47
|
|
||||||
IFT_IEEE80212 = 0x37
|
|
||||||
IFT_IEEE8023ADLAG = 0xa1
|
|
||||||
IFT_IFGSN = 0x91
|
|
||||||
IFT_IMT = 0xbe
|
|
||||||
IFT_INTERLEAVE = 0x7c
|
|
||||||
IFT_IP = 0x7e
|
|
||||||
IFT_IPFORWARD = 0x8e
|
|
||||||
IFT_IPOVERATM = 0x72
|
|
||||||
IFT_IPOVERCDLC = 0x6d
|
|
||||||
IFT_IPOVERCLAW = 0x6e
|
|
||||||
IFT_IPSWITCH = 0x4e
|
|
||||||
IFT_IPXIP = 0xf9
|
|
||||||
IFT_ISDN = 0x3f
|
|
||||||
IFT_ISDNBASIC = 0x14
|
|
||||||
IFT_ISDNPRIMARY = 0x15
|
|
||||||
IFT_ISDNS = 0x4b
|
|
||||||
IFT_ISDNU = 0x4c
|
|
||||||
IFT_ISO88022LLC = 0x29
|
|
||||||
IFT_ISO88023 = 0x7
|
|
||||||
IFT_ISO88024 = 0x8
|
|
||||||
IFT_ISO88025 = 0x9
|
|
||||||
IFT_ISO88025CRFPINT = 0x62
|
|
||||||
IFT_ISO88025DTR = 0x56
|
|
||||||
IFT_ISO88025FIBER = 0x73
|
|
||||||
IFT_ISO88026 = 0xa
|
|
||||||
IFT_ISUP = 0xb3
|
|
||||||
IFT_L3IPXVLAN = 0x89
|
|
||||||
IFT_LAPB = 0x10
|
|
||||||
IFT_LAPD = 0x4d
|
|
||||||
IFT_LAPF = 0x77
|
|
||||||
IFT_LOCALTALK = 0x2a
|
|
||||||
IFT_LOOP = 0x18
|
|
||||||
IFT_MEDIAMAILOVERIP = 0x8b
|
|
||||||
IFT_MFSIGLINK = 0xa7
|
|
||||||
IFT_MIOX25 = 0x26
|
|
||||||
IFT_MODEM = 0x30
|
|
||||||
IFT_MPC = 0x71
|
|
||||||
IFT_MPLS = 0xa6
|
|
||||||
IFT_MPLSTUNNEL = 0x96
|
|
||||||
IFT_MSDSL = 0x8f
|
|
||||||
IFT_MVL = 0xbf
|
|
||||||
IFT_MYRINET = 0x63
|
|
||||||
IFT_NFAS = 0xaf
|
|
||||||
IFT_NSIP = 0x1b
|
|
||||||
IFT_OPTICALCHANNEL = 0xc3
|
|
||||||
IFT_OPTICALTRANSPORT = 0xc4
|
|
||||||
IFT_OTHER = 0x1
|
|
||||||
IFT_P10 = 0xc
|
|
||||||
IFT_P80 = 0xd
|
|
||||||
IFT_PARA = 0x22
|
|
||||||
IFT_PFLOG = 0xf6
|
|
||||||
IFT_PFSYNC = 0xf7
|
|
||||||
IFT_PLC = 0xae
|
|
||||||
IFT_POS = 0xab
|
|
||||||
IFT_PPPMULTILINKBUNDLE = 0x6c
|
|
||||||
IFT_PROPBWAP2MP = 0xb8
|
|
||||||
IFT_PROPCNLS = 0x59
|
|
||||||
IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5
|
|
||||||
IFT_PROPDOCSWIRELESSMACLAYER = 0xb4
|
|
||||||
IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6
|
|
||||||
IFT_PROPMUX = 0x36
|
|
||||||
IFT_PROPWIRELESSP2P = 0x9d
|
|
||||||
IFT_PTPSERIAL = 0x16
|
|
||||||
IFT_PVC = 0xf1
|
|
||||||
IFT_QLLC = 0x44
|
|
||||||
IFT_RADIOMAC = 0xbc
|
|
||||||
IFT_RADSL = 0x5f
|
|
||||||
IFT_REACHDSL = 0xc0
|
|
||||||
IFT_RFC1483 = 0x9f
|
|
||||||
IFT_RS232 = 0x21
|
|
||||||
IFT_RSRB = 0x4f
|
|
||||||
IFT_SDLC = 0x11
|
|
||||||
IFT_SDSL = 0x60
|
|
||||||
IFT_SHDSL = 0xa9
|
|
||||||
IFT_SIP = 0x1f
|
|
||||||
IFT_SLIP = 0x1c
|
|
||||||
IFT_SMDSDXI = 0x2b
|
|
||||||
IFT_SMDSICIP = 0x34
|
|
||||||
IFT_SONET = 0x27
|
|
||||||
IFT_SONETOVERHEADCHANNEL = 0xb9
|
|
||||||
IFT_SONETPATH = 0x32
|
|
||||||
IFT_SONETVT = 0x33
|
|
||||||
IFT_SRP = 0x97
|
|
||||||
IFT_SS7SIGLINK = 0x9c
|
|
||||||
IFT_STACKTOSTACK = 0x6f
|
|
||||||
IFT_STARLAN = 0xb
|
|
||||||
IFT_STF = 0xd7
|
|
||||||
IFT_T1 = 0x12
|
|
||||||
IFT_TDLC = 0x74
|
|
||||||
IFT_TERMPAD = 0x5b
|
|
||||||
IFT_TR008 = 0xb0
|
|
||||||
IFT_TRANSPHDLC = 0x7b
|
|
||||||
IFT_TUNNEL = 0x83
|
|
||||||
IFT_ULTRA = 0x1d
|
|
||||||
IFT_USB = 0xa0
|
|
||||||
IFT_V11 = 0x40
|
|
||||||
IFT_V35 = 0x2d
|
|
||||||
IFT_V36 = 0x41
|
|
||||||
IFT_V37 = 0x78
|
|
||||||
IFT_VDSL = 0x61
|
|
||||||
IFT_VIRTUALIPADDRESS = 0x70
|
|
||||||
IFT_VOICEEM = 0x64
|
|
||||||
IFT_VOICEENCAP = 0x67
|
|
||||||
IFT_VOICEFXO = 0x65
|
|
||||||
IFT_VOICEFXS = 0x66
|
|
||||||
IFT_VOICEOVERATM = 0x98
|
|
||||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
|
||||||
IFT_VOICEOVERIP = 0x68
|
|
||||||
IFT_X213 = 0x5d
|
|
||||||
IFT_X25 = 0x5
|
|
||||||
IFT_X25DDN = 0x4
|
|
||||||
IFT_X25HUNTGROUP = 0x7a
|
|
||||||
IFT_X25MLP = 0x79
|
|
||||||
IFT_X25PLE = 0x28
|
|
||||||
IFT_XETHER = 0x1a
|
|
||||||
IPPROTO_MAXID = 0x34
|
|
||||||
IPV6_FAITH = 0x1d
|
|
||||||
IPV6_MIN_MEMBERSHIPS = 0x1f
|
|
||||||
IP_FAITH = 0x16
|
|
||||||
IP_MAX_SOURCE_FILTER = 0x400
|
|
||||||
IP_MIN_MEMBERSHIPS = 0x1f
|
|
||||||
MAP_NORESERVE = 0x40
|
|
||||||
MAP_RENAME = 0x20
|
|
||||||
NET_RT_MAXID = 0x6
|
|
||||||
RTF_PRCLONING = 0x10000
|
|
||||||
RTM_OLDADD = 0x9
|
|
||||||
RTM_OLDDEL = 0xa
|
|
||||||
RT_CACHING_CONTEXT = 0x1
|
|
||||||
RT_NORTREF = 0x2
|
|
||||||
SIOCADDRT = 0x8040720a
|
|
||||||
SIOCALIFADDR = 0x8118691b
|
|
||||||
SIOCDELRT = 0x8040720b
|
|
||||||
SIOCDLIFADDR = 0x8118691d
|
|
||||||
SIOCGLIFADDR = 0xc118691c
|
|
||||||
SIOCGLIFPHYADDR = 0xc118694b
|
|
||||||
SIOCSLIFPHYADDR = 0x8118694a
|
|
||||||
)
|
|
226
vendor/golang.org/x/sys/unix/errors_freebsd_arm.go
generated
vendored
226
vendor/golang.org/x/sys/unix/errors_freebsd_arm.go
generated
vendored
@ -1,226 +0,0 @@
|
|||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
IFT_1822 = 0x2
|
|
||||||
IFT_A12MPPSWITCH = 0x82
|
|
||||||
IFT_AAL2 = 0xbb
|
|
||||||
IFT_AAL5 = 0x31
|
|
||||||
IFT_ADSL = 0x5e
|
|
||||||
IFT_AFLANE8023 = 0x3b
|
|
||||||
IFT_AFLANE8025 = 0x3c
|
|
||||||
IFT_ARAP = 0x58
|
|
||||||
IFT_ARCNET = 0x23
|
|
||||||
IFT_ARCNETPLUS = 0x24
|
|
||||||
IFT_ASYNC = 0x54
|
|
||||||
IFT_ATM = 0x25
|
|
||||||
IFT_ATMDXI = 0x69
|
|
||||||
IFT_ATMFUNI = 0x6a
|
|
||||||
IFT_ATMIMA = 0x6b
|
|
||||||
IFT_ATMLOGICAL = 0x50
|
|
||||||
IFT_ATMRADIO = 0xbd
|
|
||||||
IFT_ATMSUBINTERFACE = 0x86
|
|
||||||
IFT_ATMVCIENDPT = 0xc2
|
|
||||||
IFT_ATMVIRTUAL = 0x95
|
|
||||||
IFT_BGPPOLICYACCOUNTING = 0xa2
|
|
||||||
IFT_BSC = 0x53
|
|
||||||
IFT_CCTEMUL = 0x3d
|
|
||||||
IFT_CEPT = 0x13
|
|
||||||
IFT_CES = 0x85
|
|
||||||
IFT_CHANNEL = 0x46
|
|
||||||
IFT_CNR = 0x55
|
|
||||||
IFT_COFFEE = 0x84
|
|
||||||
IFT_COMPOSITELINK = 0x9b
|
|
||||||
IFT_DCN = 0x8d
|
|
||||||
IFT_DIGITALPOWERLINE = 0x8a
|
|
||||||
IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
|
|
||||||
IFT_DLSW = 0x4a
|
|
||||||
IFT_DOCSCABLEDOWNSTREAM = 0x80
|
|
||||||
IFT_DOCSCABLEMACLAYER = 0x7f
|
|
||||||
IFT_DOCSCABLEUPSTREAM = 0x81
|
|
||||||
IFT_DS0 = 0x51
|
|
||||||
IFT_DS0BUNDLE = 0x52
|
|
||||||
IFT_DS1FDL = 0xaa
|
|
||||||
IFT_DS3 = 0x1e
|
|
||||||
IFT_DTM = 0x8c
|
|
||||||
IFT_DVBASILN = 0xac
|
|
||||||
IFT_DVBASIOUT = 0xad
|
|
||||||
IFT_DVBRCCDOWNSTREAM = 0x93
|
|
||||||
IFT_DVBRCCMACLAYER = 0x92
|
|
||||||
IFT_DVBRCCUPSTREAM = 0x94
|
|
||||||
IFT_ENC = 0xf4
|
|
||||||
IFT_EON = 0x19
|
|
||||||
IFT_EPLRS = 0x57
|
|
||||||
IFT_ESCON = 0x49
|
|
||||||
IFT_ETHER = 0x6
|
|
||||||
IFT_FAST = 0x7d
|
|
||||||
IFT_FASTETHER = 0x3e
|
|
||||||
IFT_FASTETHERFX = 0x45
|
|
||||||
IFT_FDDI = 0xf
|
|
||||||
IFT_FIBRECHANNEL = 0x38
|
|
||||||
IFT_FRAMERELAYINTERCONNECT = 0x3a
|
|
||||||
IFT_FRAMERELAYMPI = 0x5c
|
|
||||||
IFT_FRDLCIENDPT = 0xc1
|
|
||||||
IFT_FRELAY = 0x20
|
|
||||||
IFT_FRELAYDCE = 0x2c
|
|
||||||
IFT_FRF16MFRBUNDLE = 0xa3
|
|
||||||
IFT_FRFORWARD = 0x9e
|
|
||||||
IFT_G703AT2MB = 0x43
|
|
||||||
IFT_G703AT64K = 0x42
|
|
||||||
IFT_GIF = 0xf0
|
|
||||||
IFT_GIGABITETHERNET = 0x75
|
|
||||||
IFT_GR303IDT = 0xb2
|
|
||||||
IFT_GR303RDT = 0xb1
|
|
||||||
IFT_H323GATEKEEPER = 0xa4
|
|
||||||
IFT_H323PROXY = 0xa5
|
|
||||||
IFT_HDH1822 = 0x3
|
|
||||||
IFT_HDLC = 0x76
|
|
||||||
IFT_HDSL2 = 0xa8
|
|
||||||
IFT_HIPERLAN2 = 0xb7
|
|
||||||
IFT_HIPPI = 0x2f
|
|
||||||
IFT_HIPPIINTERFACE = 0x39
|
|
||||||
IFT_HOSTPAD = 0x5a
|
|
||||||
IFT_HSSI = 0x2e
|
|
||||||
IFT_HY = 0xe
|
|
||||||
IFT_IBM370PARCHAN = 0x48
|
|
||||||
IFT_IDSL = 0x9a
|
|
||||||
IFT_IEEE80211 = 0x47
|
|
||||||
IFT_IEEE80212 = 0x37
|
|
||||||
IFT_IEEE8023ADLAG = 0xa1
|
|
||||||
IFT_IFGSN = 0x91
|
|
||||||
IFT_IMT = 0xbe
|
|
||||||
IFT_INTERLEAVE = 0x7c
|
|
||||||
IFT_IP = 0x7e
|
|
||||||
IFT_IPFORWARD = 0x8e
|
|
||||||
IFT_IPOVERATM = 0x72
|
|
||||||
IFT_IPOVERCDLC = 0x6d
|
|
||||||
IFT_IPOVERCLAW = 0x6e
|
|
||||||
IFT_IPSWITCH = 0x4e
|
|
||||||
IFT_ISDN = 0x3f
|
|
||||||
IFT_ISDNBASIC = 0x14
|
|
||||||
IFT_ISDNPRIMARY = 0x15
|
|
||||||
IFT_ISDNS = 0x4b
|
|
||||||
IFT_ISDNU = 0x4c
|
|
||||||
IFT_ISO88022LLC = 0x29
|
|
||||||
IFT_ISO88023 = 0x7
|
|
||||||
IFT_ISO88024 = 0x8
|
|
||||||
IFT_ISO88025 = 0x9
|
|
||||||
IFT_ISO88025CRFPINT = 0x62
|
|
||||||
IFT_ISO88025DTR = 0x56
|
|
||||||
IFT_ISO88025FIBER = 0x73
|
|
||||||
IFT_ISO88026 = 0xa
|
|
||||||
IFT_ISUP = 0xb3
|
|
||||||
IFT_L3IPXVLAN = 0x89
|
|
||||||
IFT_LAPB = 0x10
|
|
||||||
IFT_LAPD = 0x4d
|
|
||||||
IFT_LAPF = 0x77
|
|
||||||
IFT_LOCALTALK = 0x2a
|
|
||||||
IFT_LOOP = 0x18
|
|
||||||
IFT_MEDIAMAILOVERIP = 0x8b
|
|
||||||
IFT_MFSIGLINK = 0xa7
|
|
||||||
IFT_MIOX25 = 0x26
|
|
||||||
IFT_MODEM = 0x30
|
|
||||||
IFT_MPC = 0x71
|
|
||||||
IFT_MPLS = 0xa6
|
|
||||||
IFT_MPLSTUNNEL = 0x96
|
|
||||||
IFT_MSDSL = 0x8f
|
|
||||||
IFT_MVL = 0xbf
|
|
||||||
IFT_MYRINET = 0x63
|
|
||||||
IFT_NFAS = 0xaf
|
|
||||||
IFT_NSIP = 0x1b
|
|
||||||
IFT_OPTICALCHANNEL = 0xc3
|
|
||||||
IFT_OPTICALTRANSPORT = 0xc4
|
|
||||||
IFT_OTHER = 0x1
|
|
||||||
IFT_P10 = 0xc
|
|
||||||
IFT_P80 = 0xd
|
|
||||||
IFT_PARA = 0x22
|
|
||||||
IFT_PFLOG = 0xf6
|
|
||||||
IFT_PFSYNC = 0xf7
|
|
||||||
IFT_PLC = 0xae
|
|
||||||
IFT_POS = 0xab
|
|
||||||
IFT_PPPMULTILINKBUNDLE = 0x6c
|
|
||||||
IFT_PROPBWAP2MP = 0xb8
|
|
||||||
IFT_PROPCNLS = 0x59
|
|
||||||
IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5
|
|
||||||
IFT_PROPDOCSWIRELESSMACLAYER = 0xb4
|
|
||||||
IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6
|
|
||||||
IFT_PROPMUX = 0x36
|
|
||||||
IFT_PROPWIRELESSP2P = 0x9d
|
|
||||||
IFT_PTPSERIAL = 0x16
|
|
||||||
IFT_PVC = 0xf1
|
|
||||||
IFT_QLLC = 0x44
|
|
||||||
IFT_RADIOMAC = 0xbc
|
|
||||||
IFT_RADSL = 0x5f
|
|
||||||
IFT_REACHDSL = 0xc0
|
|
||||||
IFT_RFC1483 = 0x9f
|
|
||||||
IFT_RS232 = 0x21
|
|
||||||
IFT_RSRB = 0x4f
|
|
||||||
IFT_SDLC = 0x11
|
|
||||||
IFT_SDSL = 0x60
|
|
||||||
IFT_SHDSL = 0xa9
|
|
||||||
IFT_SIP = 0x1f
|
|
||||||
IFT_SLIP = 0x1c
|
|
||||||
IFT_SMDSDXI = 0x2b
|
|
||||||
IFT_SMDSICIP = 0x34
|
|
||||||
IFT_SONET = 0x27
|
|
||||||
IFT_SONETOVERHEADCHANNEL = 0xb9
|
|
||||||
IFT_SONETPATH = 0x32
|
|
||||||
IFT_SONETVT = 0x33
|
|
||||||
IFT_SRP = 0x97
|
|
||||||
IFT_SS7SIGLINK = 0x9c
|
|
||||||
IFT_STACKTOSTACK = 0x6f
|
|
||||||
IFT_STARLAN = 0xb
|
|
||||||
IFT_STF = 0xd7
|
|
||||||
IFT_T1 = 0x12
|
|
||||||
IFT_TDLC = 0x74
|
|
||||||
IFT_TERMPAD = 0x5b
|
|
||||||
IFT_TR008 = 0xb0
|
|
||||||
IFT_TRANSPHDLC = 0x7b
|
|
||||||
IFT_TUNNEL = 0x83
|
|
||||||
IFT_ULTRA = 0x1d
|
|
||||||
IFT_USB = 0xa0
|
|
||||||
IFT_V11 = 0x40
|
|
||||||
IFT_V35 = 0x2d
|
|
||||||
IFT_V36 = 0x41
|
|
||||||
IFT_V37 = 0x78
|
|
||||||
IFT_VDSL = 0x61
|
|
||||||
IFT_VIRTUALIPADDRESS = 0x70
|
|
||||||
IFT_VOICEEM = 0x64
|
|
||||||
IFT_VOICEENCAP = 0x67
|
|
||||||
IFT_VOICEFXO = 0x65
|
|
||||||
IFT_VOICEFXS = 0x66
|
|
||||||
IFT_VOICEOVERATM = 0x98
|
|
||||||
IFT_VOICEOVERFRAMERELAY = 0x99
|
|
||||||
IFT_VOICEOVERIP = 0x68
|
|
||||||
IFT_X213 = 0x5d
|
|
||||||
IFT_X25 = 0x5
|
|
||||||
IFT_X25DDN = 0x4
|
|
||||||
IFT_X25HUNTGROUP = 0x7a
|
|
||||||
IFT_X25MLP = 0x79
|
|
||||||
IFT_X25PLE = 0x28
|
|
||||||
IFT_XETHER = 0x1a
|
|
||||||
|
|
||||||
// missing constants on FreeBSD-11.1-RELEASE, copied from old values in ztypes_freebsd_arm.go
|
|
||||||
IFF_SMART = 0x20
|
|
||||||
IFT_FAITH = 0xf2
|
|
||||||
IFT_IPXIP = 0xf9
|
|
||||||
IPPROTO_MAXID = 0x34
|
|
||||||
IPV6_FAITH = 0x1d
|
|
||||||
IP_FAITH = 0x16
|
|
||||||
MAP_NORESERVE = 0x40
|
|
||||||
MAP_RENAME = 0x20
|
|
||||||
NET_RT_MAXID = 0x6
|
|
||||||
RTF_PRCLONING = 0x10000
|
|
||||||
RTM_OLDADD = 0x9
|
|
||||||
RTM_OLDDEL = 0xa
|
|
||||||
SIOCADDRT = 0x8030720a
|
|
||||||
SIOCALIFADDR = 0x8118691b
|
|
||||||
SIOCDELRT = 0x8030720b
|
|
||||||
SIOCDLIFADDR = 0x8118691d
|
|
||||||
SIOCGLIFADDR = 0xc118691c
|
|
||||||
SIOCGLIFPHYADDR = 0xc118694b
|
|
||||||
SIOCSLIFPHYADDR = 0x8118694a
|
|
||||||
)
|
|
17
vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go
generated
vendored
17
vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go
generated
vendored
@ -1,17 +0,0 @@
|
|||||||
// Copyright 2020 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep
|
|
||||||
// them here for backwards compatibility.
|
|
||||||
|
|
||||||
package unix
|
|
||||||
|
|
||||||
const (
|
|
||||||
DLT_HHDLC = 0x79
|
|
||||||
IPV6_MIN_MEMBERSHIPS = 0x1f
|
|
||||||
IP_MAX_SOURCE_FILTER = 0x400
|
|
||||||
IP_MIN_MEMBERSHIPS = 0x1f
|
|
||||||
RT_CACHING_CONTEXT = 0x1
|
|
||||||
RT_NORTREF = 0x2
|
|
||||||
)
|
|
9
vendor/golang.org/x/sys/unix/ifreq_linux.go
generated
vendored
9
vendor/golang.org/x/sys/unix/ifreq_linux.go
generated
vendored
@ -8,7 +8,6 @@
|
|||||||
package unix
|
package unix
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -45,13 +44,7 @@ func NewIfreq(name string) (*Ifreq, error) {
|
|||||||
|
|
||||||
// Name returns the interface name associated with the Ifreq.
|
// Name returns the interface name associated with the Ifreq.
|
||||||
func (ifr *Ifreq) Name() string {
|
func (ifr *Ifreq) Name() string {
|
||||||
// BytePtrToString requires a NULL terminator or the program may crash. If
|
return ByteSliceToString(ifr.raw.Ifrn[:])
|
||||||
// one is not present, just return the empty string.
|
|
||||||
if !bytes.Contains(ifr.raw.Ifrn[:], []byte{0x00}) {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
return BytePtrToString(&ifr.raw.Ifrn[0])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// According to netdevice(7), only AF_INET addresses are returned for numerous
|
// According to netdevice(7), only AF_INET addresses are returned for numerous
|
||||||
|
13
vendor/golang.org/x/sys/unix/mkall.sh
generated
vendored
13
vendor/golang.org/x/sys/unix/mkall.sh
generated
vendored
@ -89,25 +89,30 @@ dragonfly_amd64)
|
|||||||
freebsd_386)
|
freebsd_386)
|
||||||
mkerrors="$mkerrors -m32"
|
mkerrors="$mkerrors -m32"
|
||||||
mksyscall="go run mksyscall.go -l32"
|
mksyscall="go run mksyscall.go -l32"
|
||||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
|
mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
;;
|
;;
|
||||||
freebsd_amd64)
|
freebsd_amd64)
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
|
mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
;;
|
;;
|
||||||
freebsd_arm)
|
freebsd_arm)
|
||||||
mkerrors="$mkerrors"
|
mkerrors="$mkerrors"
|
||||||
mksyscall="go run mksyscall.go -l32 -arm"
|
mksyscall="go run mksyscall.go -l32 -arm"
|
||||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
|
mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
|
||||||
# Let the type of C char be signed for making the bare syscall
|
# Let the type of C char be signed for making the bare syscall
|
||||||
# API consistent across platforms.
|
# API consistent across platforms.
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
;;
|
;;
|
||||||
freebsd_arm64)
|
freebsd_arm64)
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
|
mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
|
;;
|
||||||
|
freebsd_riscv64)
|
||||||
|
mkerrors="$mkerrors -m64"
|
||||||
|
mksysnum="go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'"
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
;;
|
;;
|
||||||
netbsd_386)
|
netbsd_386)
|
||||||
|
8
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
8
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
@ -128,6 +128,7 @@ includes_FreeBSD='
|
|||||||
#include <sys/mount.h>
|
#include <sys/mount.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/ptrace.h>
|
||||||
#include <net/bpf.h>
|
#include <net/bpf.h>
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
#include <net/if_types.h>
|
#include <net/if_types.h>
|
||||||
@ -202,6 +203,7 @@ struct ltchars {
|
|||||||
#include <sys/timerfd.h>
|
#include <sys/timerfd.h>
|
||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
#include <sys/xattr.h>
|
#include <sys/xattr.h>
|
||||||
|
#include <linux/audit.h>
|
||||||
#include <linux/bpf.h>
|
#include <linux/bpf.h>
|
||||||
#include <linux/can.h>
|
#include <linux/can.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
@ -215,6 +217,7 @@ struct ltchars {
|
|||||||
#include <linux/ethtool_netlink.h>
|
#include <linux/ethtool_netlink.h>
|
||||||
#include <linux/falloc.h>
|
#include <linux/falloc.h>
|
||||||
#include <linux/fanotify.h>
|
#include <linux/fanotify.h>
|
||||||
|
#include <linux/fib_rules.h>
|
||||||
#include <linux/filter.h>
|
#include <linux/filter.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/fscrypt.h>
|
#include <linux/fscrypt.h>
|
||||||
@ -528,7 +531,7 @@ ccflags="$@"
|
|||||||
$2 ~ /^(MS|MNT|MOUNT|UMOUNT)_/ ||
|
$2 ~ /^(MS|MNT|MOUNT|UMOUNT)_/ ||
|
||||||
$2 ~ /^NS_GET_/ ||
|
$2 ~ /^NS_GET_/ ||
|
||||||
$2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||
|
$2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||
|
||||||
$2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|TFD)_/ ||
|
$2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|PIOD|TFD)_/ ||
|
||||||
$2 ~ /^KEXEC_/ ||
|
$2 ~ /^KEXEC_/ ||
|
||||||
$2 ~ /^LINUX_REBOOT_CMD_/ ||
|
$2 ~ /^LINUX_REBOOT_CMD_/ ||
|
||||||
$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ ||
|
$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ ||
|
||||||
@ -552,6 +555,7 @@ ccflags="$@"
|
|||||||
$2 ~ /^CLONE_[A-Z_]+/ ||
|
$2 ~ /^CLONE_[A-Z_]+/ ||
|
||||||
$2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+)$/ &&
|
$2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+)$/ &&
|
||||||
$2 ~ /^(BPF|DLT)_/ ||
|
$2 ~ /^(BPF|DLT)_/ ||
|
||||||
|
$2 ~ /^AUDIT_/ ||
|
||||||
$2 ~ /^(CLOCK|TIMER)_/ ||
|
$2 ~ /^(CLOCK|TIMER)_/ ||
|
||||||
$2 ~ /^CAN_/ ||
|
$2 ~ /^CAN_/ ||
|
||||||
$2 ~ /^CAP_/ ||
|
$2 ~ /^CAP_/ ||
|
||||||
@ -574,7 +578,6 @@ ccflags="$@"
|
|||||||
$2 ~ /^SEEK_/ ||
|
$2 ~ /^SEEK_/ ||
|
||||||
$2 ~ /^SPLICE_/ ||
|
$2 ~ /^SPLICE_/ ||
|
||||||
$2 ~ /^SYNC_FILE_RANGE_/ ||
|
$2 ~ /^SYNC_FILE_RANGE_/ ||
|
||||||
$2 !~ /^AUDIT_RECORD_MAGIC/ &&
|
|
||||||
$2 !~ /IOC_MAGIC/ &&
|
$2 !~ /IOC_MAGIC/ &&
|
||||||
$2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ ||
|
$2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ ||
|
||||||
$2 ~ /^(VM|VMADDR)_/ ||
|
$2 ~ /^(VM|VMADDR)_/ ||
|
||||||
@ -613,6 +616,7 @@ ccflags="$@"
|
|||||||
$2 ~ /^OTP/ ||
|
$2 ~ /^OTP/ ||
|
||||||
$2 ~ /^MEM/ ||
|
$2 ~ /^MEM/ ||
|
||||||
$2 ~ /^WG/ ||
|
$2 ~ /^WG/ ||
|
||||||
|
$2 ~ /^FIB_RULE_/ ||
|
||||||
$2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)}
|
$2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)}
|
||||||
$2 ~ /^__WCOREFLAG$/ {next}
|
$2 ~ /^__WCOREFLAG$/ {next}
|
||||||
$2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)}
|
$2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)}
|
||||||
|
10
vendor/golang.org/x/sys/unix/syscall_aix.go
generated
vendored
10
vendor/golang.org/x/sys/unix/syscall_aix.go
generated
vendored
@ -37,6 +37,7 @@ func Creat(path string, mode uint32) (fd int, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//sys utimes(path string, times *[2]Timeval) (err error)
|
//sys utimes(path string, times *[2]Timeval) (err error)
|
||||||
|
|
||||||
func Utimes(path string, tv []Timeval) error {
|
func Utimes(path string, tv []Timeval) error {
|
||||||
if len(tv) != 2 {
|
if len(tv) != 2 {
|
||||||
return EINVAL
|
return EINVAL
|
||||||
@ -45,6 +46,7 @@ func Utimes(path string, tv []Timeval) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//sys utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error)
|
//sys utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error)
|
||||||
|
|
||||||
func UtimesNano(path string, ts []Timespec) error {
|
func UtimesNano(path string, ts []Timespec) error {
|
||||||
if len(ts) != 2 {
|
if len(ts) != 2 {
|
||||||
return EINVAL
|
return EINVAL
|
||||||
@ -215,12 +217,12 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
|
func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
|
||||||
// Recvmsg not implemented on AIX
|
// Recvmsg not implemented on AIX
|
||||||
return -1, -1, -1, ENOSYS
|
return -1, -1, -1, ENOSYS
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
|
func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
|
||||||
// SendmsgN not implemented on AIX
|
// SendmsgN not implemented on AIX
|
||||||
return -1, ENOSYS
|
return -1, ENOSYS
|
||||||
}
|
}
|
||||||
@ -300,11 +302,13 @@ func direntNamlen(buf []byte) (uint64, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//sys getdirent(fd int, buf []byte) (n int, err error)
|
//sys getdirent(fd int, buf []byte) (n int, err error)
|
||||||
|
|
||||||
func Getdents(fd int, buf []byte) (n int, err error) {
|
func Getdents(fd int, buf []byte) (n int, err error) {
|
||||||
return getdirent(fd, buf)
|
return getdirent(fd, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error)
|
//sys wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error)
|
||||||
|
|
||||||
func Wait4(pid int, wstatus *WaitStatus, 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
|
var status _C_int
|
||||||
var r Pid_t
|
var r Pid_t
|
||||||
@ -372,6 +376,7 @@ func (w WaitStatus) TrapCause() int { return -1 }
|
|||||||
//sys fcntl(fd int, cmd int, arg int) (val int, err error)
|
//sys fcntl(fd int, cmd int, arg int) (val int, err error)
|
||||||
|
|
||||||
//sys fsyncRange(fd int, how int, start int64, length int64) (err error) = fsync_range
|
//sys fsyncRange(fd int, how int, start int64, length int64) (err error) = fsync_range
|
||||||
|
|
||||||
func Fsync(fd int) error {
|
func Fsync(fd int) error {
|
||||||
return fsyncRange(fd, O_SYNC, 0, 0)
|
return fsyncRange(fd, O_SYNC, 0, 0)
|
||||||
}
|
}
|
||||||
@ -536,6 +541,7 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
|
|||||||
//sys Getsystemcfg(label int) (n uint64)
|
//sys Getsystemcfg(label int) (n uint64)
|
||||||
|
|
||||||
//sys umount(target string) (err error)
|
//sys umount(target string) (err error)
|
||||||
|
|
||||||
func Unmount(target string, flags int) (err error) {
|
func Unmount(target string, flags int) (err error) {
|
||||||
if flags != 0 {
|
if flags != 0 {
|
||||||
// AIX doesn't have any flags for umount.
|
// AIX doesn't have any flags for umount.
|
||||||
|
57
vendor/golang.org/x/sys/unix/syscall_bsd.go
generated
vendored
57
vendor/golang.org/x/sys/unix/syscall_bsd.go
generated
vendored
@ -325,27 +325,26 @@ func GetsockoptString(fd, level, opt int) (string, error) {
|
|||||||
//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (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)
|
//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
|
||||||
|
|
||||||
func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
|
func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
|
||||||
var msg Msghdr
|
var msg Msghdr
|
||||||
msg.Name = (*byte)(unsafe.Pointer(rsa))
|
msg.Name = (*byte)(unsafe.Pointer(rsa))
|
||||||
msg.Namelen = uint32(SizeofSockaddrAny)
|
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
|
var dummy byte
|
||||||
if len(oob) > 0 {
|
if len(oob) > 0 {
|
||||||
// receive at least one normal byte
|
// receive at least one normal byte
|
||||||
if len(p) == 0 {
|
if emptyIovecs(iov) {
|
||||||
iov.Base = &dummy
|
var iova [1]Iovec
|
||||||
iov.SetLen(1)
|
iova[0].Base = &dummy
|
||||||
|
iova[0].SetLen(1)
|
||||||
|
iov = iova[:]
|
||||||
}
|
}
|
||||||
msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
|
msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
|
||||||
msg.SetControllen(len(oob))
|
msg.SetControllen(len(oob))
|
||||||
}
|
}
|
||||||
msg.Iov = &iov
|
if len(iov) > 0 {
|
||||||
msg.Iovlen = 1
|
msg.Iov = &iov[0]
|
||||||
|
msg.SetIovlen(len(iov))
|
||||||
|
}
|
||||||
if n, err = recvmsg(fd, &msg, flags); err != nil {
|
if n, err = recvmsg(fd, &msg, flags); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -356,31 +355,32 @@ func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn
|
|||||||
|
|
||||||
//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
|
//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
|
||||||
|
|
||||||
func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
|
func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
|
||||||
var msg Msghdr
|
var msg Msghdr
|
||||||
msg.Name = (*byte)(unsafe.Pointer(ptr))
|
msg.Name = (*byte)(unsafe.Pointer(ptr))
|
||||||
msg.Namelen = uint32(salen)
|
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
|
var dummy byte
|
||||||
|
var empty bool
|
||||||
if len(oob) > 0 {
|
if len(oob) > 0 {
|
||||||
// send at least one normal byte
|
// send at least one normal byte
|
||||||
if len(p) == 0 {
|
empty := emptyIovecs(iov)
|
||||||
iov.Base = &dummy
|
if empty {
|
||||||
iov.SetLen(1)
|
var iova [1]Iovec
|
||||||
|
iova[0].Base = &dummy
|
||||||
|
iova[0].SetLen(1)
|
||||||
|
iov = iova[:]
|
||||||
}
|
}
|
||||||
msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
|
msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
|
||||||
msg.SetControllen(len(oob))
|
msg.SetControllen(len(oob))
|
||||||
}
|
}
|
||||||
msg.Iov = &iov
|
if len(iov) > 0 {
|
||||||
msg.Iovlen = 1
|
msg.Iov = &iov[0]
|
||||||
|
msg.SetIovlen(len(iov))
|
||||||
|
}
|
||||||
if n, err = sendmsg(fd, &msg, flags); err != nil {
|
if n, err = sendmsg(fd, &msg, flags); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
if len(oob) > 0 && len(p) == 0 {
|
if len(oob) > 0 && empty {
|
||||||
n = 0
|
n = 0
|
||||||
}
|
}
|
||||||
return n, nil
|
return n, nil
|
||||||
@ -553,12 +553,7 @@ func UtimesNano(path string, ts []Timespec) error {
|
|||||||
if len(ts) != 2 {
|
if len(ts) != 2 {
|
||||||
return EINVAL
|
return EINVAL
|
||||||
}
|
}
|
||||||
// Darwin setattrlist can set nanosecond timestamps
|
err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
|
||||||
err := setattrlistTimes(path, ts, 0)
|
|
||||||
if err != ENOSYS {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
err = utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
|
|
||||||
if err != ENOSYS {
|
if err != ENOSYS {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -578,10 +573,6 @@ func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
|
|||||||
if len(ts) != 2 {
|
if len(ts) != 2 {
|
||||||
return EINVAL
|
return EINVAL
|
||||||
}
|
}
|
||||||
err := setattrlistTimes(path, ts, flags)
|
|
||||||
if err != ENOSYS {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
|
return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
50
vendor/golang.org/x/sys/unix/syscall_darwin.go
generated
vendored
50
vendor/golang.org/x/sys/unix/syscall_darwin.go
generated
vendored
@ -141,16 +141,6 @@ func direntNamlen(buf []byte) (uint64, bool) {
|
|||||||
func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }
|
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) }
|
func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }
|
||||||
|
|
||||||
type attrList struct {
|
|
||||||
bitmapCount uint16
|
|
||||||
_ uint16
|
|
||||||
CommonAttr uint32
|
|
||||||
VolAttr uint32
|
|
||||||
DirAttr uint32
|
|
||||||
FileAttr uint32
|
|
||||||
Forkattr uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
//sysnb pipe(p *[2]int32) (err error)
|
//sysnb pipe(p *[2]int32) (err error)
|
||||||
|
|
||||||
func Pipe(p []int) (err error) {
|
func Pipe(p []int) (err error) {
|
||||||
@ -282,36 +272,7 @@ func Flistxattr(fd int, dest []byte) (sz int, err error) {
|
|||||||
return flistxattr(fd, xattrPointer(dest), len(dest), 0)
|
return flistxattr(fd, xattrPointer(dest), len(dest), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func setattrlistTimes(path string, times []Timespec, flags int) error {
|
//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)
|
||||||
_p0, err := BytePtrFromString(path)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
var attrList attrList
|
|
||||||
attrList.bitmapCount = ATTR_BIT_MAP_COUNT
|
|
||||||
attrList.CommonAttr = ATTR_CMN_MODTIME | ATTR_CMN_ACCTIME
|
|
||||||
|
|
||||||
// order is mtime, atime: the opposite of Chtimes
|
|
||||||
attributes := [2]Timespec{times[1], times[0]}
|
|
||||||
options := 0
|
|
||||||
if flags&AT_SYMLINK_NOFOLLOW != 0 {
|
|
||||||
options |= FSOPT_NOFOLLOW
|
|
||||||
}
|
|
||||||
return setattrlist(
|
|
||||||
_p0,
|
|
||||||
unsafe.Pointer(&attrList),
|
|
||||||
unsafe.Pointer(&attributes),
|
|
||||||
unsafe.Sizeof(attributes),
|
|
||||||
options)
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)
|
|
||||||
|
|
||||||
func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error {
|
|
||||||
// Darwin doesn't support SYS_UTIMENSAT
|
|
||||||
return ENOSYS
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wrapped
|
* Wrapped
|
||||||
@ -432,6 +393,13 @@ func GetsockoptXucred(fd, level, opt int) (*Xucred, error) {
|
|||||||
return x, err
|
return x, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetsockoptTCPConnectionInfo(fd, level, opt int) (*TCPConnectionInfo, error) {
|
||||||
|
var value TCPConnectionInfo
|
||||||
|
vallen := _Socklen(SizeofTCPConnectionInfo)
|
||||||
|
err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
|
||||||
|
return &value, err
|
||||||
|
}
|
||||||
|
|
||||||
func SysctlKinfoProc(name string, args ...int) (*KinfoProc, error) {
|
func SysctlKinfoProc(name string, args ...int) (*KinfoProc, error) {
|
||||||
mib, err := sysctlmib(name, args...)
|
mib, err := sysctlmib(name, args...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -543,6 +511,7 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) {
|
|||||||
//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
|
//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
|
||||||
//sys Mkfifo(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 Mknod(path string, mode uint32, dev int) (err error)
|
||||||
|
//sys Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error)
|
||||||
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
||||||
//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
|
//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
|
||||||
//sys Pathconf(path string, name int) (val int, err error)
|
//sys Pathconf(path string, name int) (val int, err error)
|
||||||
@ -611,7 +580,6 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) {
|
|||||||
// Nfssvc
|
// Nfssvc
|
||||||
// Getfh
|
// Getfh
|
||||||
// Quotactl
|
// Quotactl
|
||||||
// Mount
|
|
||||||
// Csops
|
// Csops
|
||||||
// Waitid
|
// Waitid
|
||||||
// Add_profil
|
// Add_profil
|
||||||
|
7
vendor/golang.org/x/sys/unix/syscall_dragonfly.go
generated
vendored
7
vendor/golang.org/x/sys/unix/syscall_dragonfly.go
generated
vendored
@ -125,11 +125,13 @@ func Pipe2(p []int, flags int) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error)
|
//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) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
return extpread(fd, p, 0, offset)
|
return extpread(fd, p, 0, offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error)
|
//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) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
return extpwrite(fd, p, 0, offset)
|
return extpwrite(fd, p, 0, offset)
|
||||||
}
|
}
|
||||||
@ -169,11 +171,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func setattrlistTimes(path string, times []Timespec, flags int) error {
|
|
||||||
// used on Darwin for UtimesNano
|
|
||||||
return ENOSYS
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
||||||
|
|
||||||
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
||||||
|
330
vendor/golang.org/x/sys/unix/syscall_freebsd.go
generated
vendored
330
vendor/golang.org/x/sys/unix/syscall_freebsd.go
generated
vendored
@ -17,25 +17,12 @@ import (
|
|||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
SYS_FSTAT_FREEBSD12 = 551 // { int fstat(int fd, _Out_ struct stat *sb); }
|
|
||||||
SYS_FSTATAT_FREEBSD12 = 552 // { int fstatat(int fd, _In_z_ char *path, \
|
|
||||||
SYS_GETDIRENTRIES_FREEBSD12 = 554 // { ssize_t getdirentries(int fd, \
|
|
||||||
SYS_STATFS_FREEBSD12 = 555 // { int statfs(_In_z_ char *path, \
|
|
||||||
SYS_FSTATFS_FREEBSD12 = 556 // { int fstatfs(int fd, \
|
|
||||||
SYS_GETFSSTAT_FREEBSD12 = 557 // { int getfsstat( \
|
|
||||||
SYS_MKNODAT_FREEBSD12 = 559 // { int mknodat(int fd, _In_z_ char *path, \
|
|
||||||
)
|
|
||||||
|
|
||||||
// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html.
|
// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html.
|
||||||
var (
|
var (
|
||||||
osreldateOnce sync.Once
|
osreldateOnce sync.Once
|
||||||
osreldate uint32
|
osreldate uint32
|
||||||
)
|
)
|
||||||
|
|
||||||
// INO64_FIRST from /usr/src/lib/libc/sys/compat-ino64.h
|
|
||||||
const _ino64First = 1200031
|
|
||||||
|
|
||||||
func supportsABI(ver uint32) bool {
|
func supportsABI(ver uint32) bool {
|
||||||
osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") })
|
osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") })
|
||||||
return osreldate >= ver
|
return osreldate >= ver
|
||||||
@ -159,46 +146,21 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
|
|||||||
|
|
||||||
func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
|
func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
|
||||||
var (
|
var (
|
||||||
_p0 unsafe.Pointer
|
_p0 unsafe.Pointer
|
||||||
bufsize uintptr
|
bufsize uintptr
|
||||||
oldBuf []statfs_freebsd11_t
|
|
||||||
needsConvert bool
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if len(buf) > 0 {
|
if len(buf) > 0 {
|
||||||
if supportsABI(_ino64First) {
|
_p0 = unsafe.Pointer(&buf[0])
|
||||||
_p0 = unsafe.Pointer(&buf[0])
|
bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
|
||||||
bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
|
|
||||||
} else {
|
|
||||||
n := len(buf)
|
|
||||||
oldBuf = make([]statfs_freebsd11_t, n)
|
|
||||||
_p0 = unsafe.Pointer(&oldBuf[0])
|
|
||||||
bufsize = unsafe.Sizeof(statfs_freebsd11_t{}) * uintptr(n)
|
|
||||||
needsConvert = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
var sysno uintptr = SYS_GETFSSTAT
|
r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
|
||||||
if supportsABI(_ino64First) {
|
|
||||||
sysno = SYS_GETFSSTAT_FREEBSD12
|
|
||||||
}
|
|
||||||
r0, _, e1 := Syscall(sysno, uintptr(_p0), bufsize, uintptr(flags))
|
|
||||||
n = int(r0)
|
n = int(r0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
err = e1
|
err = e1
|
||||||
}
|
}
|
||||||
if e1 == 0 && needsConvert {
|
|
||||||
for i := range oldBuf {
|
|
||||||
buf[i].convertFrom(&oldBuf[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func setattrlistTimes(path string, times []Timespec, flags int) error {
|
|
||||||
// used on Darwin for UtimesNano
|
|
||||||
return ENOSYS
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
||||||
|
|
||||||
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
||||||
@ -250,87 +212,11 @@ func Uname(uname *Utsname) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Stat(path string, st *Stat_t) (err error) {
|
func Stat(path string, st *Stat_t) (err error) {
|
||||||
var oldStat stat_freebsd11_t
|
return Fstatat(AT_FDCWD, path, st, 0)
|
||||||
if supportsABI(_ino64First) {
|
|
||||||
return fstatat_freebsd12(AT_FDCWD, path, st, 0)
|
|
||||||
}
|
|
||||||
err = stat(path, &oldStat)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
st.convertFrom(&oldStat)
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Lstat(path string, st *Stat_t) (err error) {
|
func Lstat(path string, st *Stat_t) (err error) {
|
||||||
var oldStat stat_freebsd11_t
|
return Fstatat(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW)
|
||||||
if supportsABI(_ino64First) {
|
|
||||||
return fstatat_freebsd12(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW)
|
|
||||||
}
|
|
||||||
err = lstat(path, &oldStat)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
st.convertFrom(&oldStat)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Fstat(fd int, st *Stat_t) (err error) {
|
|
||||||
var oldStat stat_freebsd11_t
|
|
||||||
if supportsABI(_ino64First) {
|
|
||||||
return fstat_freebsd12(fd, st)
|
|
||||||
}
|
|
||||||
err = fstat(fd, &oldStat)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
st.convertFrom(&oldStat)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Fstatat(fd int, path string, st *Stat_t, flags int) (err error) {
|
|
||||||
var oldStat stat_freebsd11_t
|
|
||||||
if supportsABI(_ino64First) {
|
|
||||||
return fstatat_freebsd12(fd, path, st, flags)
|
|
||||||
}
|
|
||||||
err = fstatat(fd, path, &oldStat, flags)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
st.convertFrom(&oldStat)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Statfs(path string, st *Statfs_t) (err error) {
|
|
||||||
var oldStatfs statfs_freebsd11_t
|
|
||||||
if supportsABI(_ino64First) {
|
|
||||||
return statfs_freebsd12(path, st)
|
|
||||||
}
|
|
||||||
err = statfs(path, &oldStatfs)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
st.convertFrom(&oldStatfs)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Fstatfs(fd int, st *Statfs_t) (err error) {
|
|
||||||
var oldStatfs statfs_freebsd11_t
|
|
||||||
if supportsABI(_ino64First) {
|
|
||||||
return fstatfs_freebsd12(fd, st)
|
|
||||||
}
|
|
||||||
err = fstatfs(fd, &oldStatfs)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
st.convertFrom(&oldStatfs)
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Getdents(fd int, buf []byte) (n int, err error) {
|
func Getdents(fd int, buf []byte) (n int, err error) {
|
||||||
@ -338,162 +224,25 @@ func Getdents(fd int, buf []byte) (n int, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
||||||
if supportsABI(_ino64First) {
|
if basep == nil || unsafe.Sizeof(*basep) == 8 {
|
||||||
if basep == nil || unsafe.Sizeof(*basep) == 8 {
|
return getdirentries(fd, buf, (*uint64)(unsafe.Pointer(basep)))
|
||||||
return getdirentries_freebsd12(fd, buf, (*uint64)(unsafe.Pointer(basep)))
|
|
||||||
}
|
|
||||||
// The freebsd12 syscall needs a 64-bit base. On 32-bit machines
|
|
||||||
// we can't just use the basep passed in. See #32498.
|
|
||||||
var base uint64 = uint64(*basep)
|
|
||||||
n, err = getdirentries_freebsd12(fd, buf, &base)
|
|
||||||
*basep = uintptr(base)
|
|
||||||
if base>>32 != 0 {
|
|
||||||
// We can't stuff the base back into a uintptr, so any
|
|
||||||
// future calls would be suspect. Generate an error.
|
|
||||||
// EIO is allowed by getdirentries.
|
|
||||||
err = EIO
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
// The syscall needs a 64-bit base. On 32-bit machines
|
||||||
// The old syscall entries are smaller than the new. Use 1/4 of the original
|
// we can't just use the basep passed in. See #32498.
|
||||||
// buffer size rounded up to DIRBLKSIZ (see /usr/src/lib/libc/sys/getdirentries.c).
|
var base uint64 = uint64(*basep)
|
||||||
oldBufLen := roundup(len(buf)/4, _dirblksiz)
|
n, err = getdirentries(fd, buf, &base)
|
||||||
oldBuf := make([]byte, oldBufLen)
|
*basep = uintptr(base)
|
||||||
n, err = getdirentries(fd, oldBuf, basep)
|
if base>>32 != 0 {
|
||||||
if err == nil && n > 0 {
|
// We can't stuff the base back into a uintptr, so any
|
||||||
n = convertFromDirents11(buf, oldBuf[:n])
|
// future calls would be suspect. Generate an error.
|
||||||
|
// EIO is allowed by getdirentries.
|
||||||
|
err = EIO
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func Mknod(path string, mode uint32, dev uint64) (err error) {
|
func Mknod(path string, mode uint32, dev uint64) (err error) {
|
||||||
var oldDev int
|
return Mknodat(AT_FDCWD, path, mode, dev)
|
||||||
if supportsABI(_ino64First) {
|
|
||||||
return mknodat_freebsd12(AT_FDCWD, path, mode, dev)
|
|
||||||
}
|
|
||||||
oldDev = int(dev)
|
|
||||||
return mknod(path, mode, oldDev)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {
|
|
||||||
var oldDev int
|
|
||||||
if supportsABI(_ino64First) {
|
|
||||||
return mknodat_freebsd12(fd, path, mode, dev)
|
|
||||||
}
|
|
||||||
oldDev = int(dev)
|
|
||||||
return mknodat(fd, path, mode, oldDev)
|
|
||||||
}
|
|
||||||
|
|
||||||
// round x to the nearest multiple of y, larger or equal to x.
|
|
||||||
//
|
|
||||||
// from /usr/include/sys/param.h Macros for counting and rounding.
|
|
||||||
// #define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
|
|
||||||
func roundup(x, y int) int {
|
|
||||||
return ((x + y - 1) / y) * y
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Stat_t) convertFrom(old *stat_freebsd11_t) {
|
|
||||||
*s = Stat_t{
|
|
||||||
Dev: uint64(old.Dev),
|
|
||||||
Ino: uint64(old.Ino),
|
|
||||||
Nlink: uint64(old.Nlink),
|
|
||||||
Mode: old.Mode,
|
|
||||||
Uid: old.Uid,
|
|
||||||
Gid: old.Gid,
|
|
||||||
Rdev: uint64(old.Rdev),
|
|
||||||
Atim: old.Atim,
|
|
||||||
Mtim: old.Mtim,
|
|
||||||
Ctim: old.Ctim,
|
|
||||||
Btim: old.Btim,
|
|
||||||
Size: old.Size,
|
|
||||||
Blocks: old.Blocks,
|
|
||||||
Blksize: old.Blksize,
|
|
||||||
Flags: old.Flags,
|
|
||||||
Gen: uint64(old.Gen),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Statfs_t) convertFrom(old *statfs_freebsd11_t) {
|
|
||||||
*s = Statfs_t{
|
|
||||||
Version: _statfsVersion,
|
|
||||||
Type: old.Type,
|
|
||||||
Flags: old.Flags,
|
|
||||||
Bsize: old.Bsize,
|
|
||||||
Iosize: old.Iosize,
|
|
||||||
Blocks: old.Blocks,
|
|
||||||
Bfree: old.Bfree,
|
|
||||||
Bavail: old.Bavail,
|
|
||||||
Files: old.Files,
|
|
||||||
Ffree: old.Ffree,
|
|
||||||
Syncwrites: old.Syncwrites,
|
|
||||||
Asyncwrites: old.Asyncwrites,
|
|
||||||
Syncreads: old.Syncreads,
|
|
||||||
Asyncreads: old.Asyncreads,
|
|
||||||
// Spare
|
|
||||||
Namemax: old.Namemax,
|
|
||||||
Owner: old.Owner,
|
|
||||||
Fsid: old.Fsid,
|
|
||||||
// Charspare
|
|
||||||
// Fstypename
|
|
||||||
// Mntfromname
|
|
||||||
// Mntonname
|
|
||||||
}
|
|
||||||
|
|
||||||
sl := old.Fstypename[:]
|
|
||||||
n := clen(*(*[]byte)(unsafe.Pointer(&sl)))
|
|
||||||
copy(s.Fstypename[:], old.Fstypename[:n])
|
|
||||||
|
|
||||||
sl = old.Mntfromname[:]
|
|
||||||
n = clen(*(*[]byte)(unsafe.Pointer(&sl)))
|
|
||||||
copy(s.Mntfromname[:], old.Mntfromname[:n])
|
|
||||||
|
|
||||||
sl = old.Mntonname[:]
|
|
||||||
n = clen(*(*[]byte)(unsafe.Pointer(&sl)))
|
|
||||||
copy(s.Mntonname[:], old.Mntonname[:n])
|
|
||||||
}
|
|
||||||
|
|
||||||
func convertFromDirents11(buf []byte, old []byte) int {
|
|
||||||
const (
|
|
||||||
fixedSize = int(unsafe.Offsetof(Dirent{}.Name))
|
|
||||||
oldFixedSize = int(unsafe.Offsetof(dirent_freebsd11{}.Name))
|
|
||||||
)
|
|
||||||
|
|
||||||
dstPos := 0
|
|
||||||
srcPos := 0
|
|
||||||
for dstPos+fixedSize < len(buf) && srcPos+oldFixedSize < len(old) {
|
|
||||||
var dstDirent Dirent
|
|
||||||
var srcDirent dirent_freebsd11
|
|
||||||
|
|
||||||
// If multiple direntries are written, sometimes when we reach the final one,
|
|
||||||
// we may have cap of old less than size of dirent_freebsd11.
|
|
||||||
copy((*[unsafe.Sizeof(srcDirent)]byte)(unsafe.Pointer(&srcDirent))[:], old[srcPos:])
|
|
||||||
|
|
||||||
reclen := roundup(fixedSize+int(srcDirent.Namlen)+1, 8)
|
|
||||||
if dstPos+reclen > len(buf) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
dstDirent.Fileno = uint64(srcDirent.Fileno)
|
|
||||||
dstDirent.Off = 0
|
|
||||||
dstDirent.Reclen = uint16(reclen)
|
|
||||||
dstDirent.Type = srcDirent.Type
|
|
||||||
dstDirent.Pad0 = 0
|
|
||||||
dstDirent.Namlen = uint16(srcDirent.Namlen)
|
|
||||||
dstDirent.Pad1 = 0
|
|
||||||
|
|
||||||
copy(dstDirent.Name[:], srcDirent.Name[:srcDirent.Namlen])
|
|
||||||
copy(buf[dstPos:], (*[unsafe.Sizeof(dstDirent)]byte)(unsafe.Pointer(&dstDirent))[:])
|
|
||||||
padding := buf[dstPos+fixedSize+int(dstDirent.Namlen) : dstPos+reclen]
|
|
||||||
for i := range padding {
|
|
||||||
padding[i] = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
dstPos += int(dstDirent.Reclen)
|
|
||||||
srcPos += int(srcDirent.Reclen)
|
|
||||||
}
|
|
||||||
|
|
||||||
return dstPos
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
||||||
@ -506,31 +255,31 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||||||
//sys ptrace(request int, pid int, addr uintptr, data int) (err error)
|
//sys ptrace(request int, pid int, addr uintptr, data int) (err error)
|
||||||
|
|
||||||
func PtraceAttach(pid int) (err error) {
|
func PtraceAttach(pid int) (err error) {
|
||||||
return ptrace(PTRACE_ATTACH, pid, 0, 0)
|
return ptrace(PT_ATTACH, pid, 0, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtraceCont(pid int, signal int) (err error) {
|
func PtraceCont(pid int, signal int) (err error) {
|
||||||
return ptrace(PTRACE_CONT, pid, 1, signal)
|
return ptrace(PT_CONTINUE, pid, 1, signal)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtraceDetach(pid int) (err error) {
|
func PtraceDetach(pid int) (err error) {
|
||||||
return ptrace(PTRACE_DETACH, pid, 1, 0)
|
return ptrace(PT_DETACH, pid, 1, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) {
|
func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) {
|
||||||
return ptrace(PTRACE_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0)
|
return ptrace(PT_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtraceGetRegs(pid int, regsout *Reg) (err error) {
|
func PtraceGetRegs(pid int, regsout *Reg) (err error) {
|
||||||
return ptrace(PTRACE_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0)
|
return ptrace(PT_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtraceLwpEvents(pid int, enable int) (err error) {
|
func PtraceLwpEvents(pid int, enable int) (err error) {
|
||||||
return ptrace(PTRACE_LWPEVENTS, pid, 0, enable)
|
return ptrace(PT_LWP_EVENTS, pid, 0, enable)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtraceLwpInfo(pid int, info uintptr) (err error) {
|
func PtraceLwpInfo(pid int, info uintptr) (err error) {
|
||||||
return ptrace(PTRACE_LWPINFO, pid, info, int(unsafe.Sizeof(PtraceLwpInfoStruct{})))
|
return ptrace(PT_LWPINFO, pid, info, int(unsafe.Sizeof(PtraceLwpInfoStruct{})))
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {
|
func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {
|
||||||
@ -550,11 +299,11 @@ func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func PtraceSetRegs(pid int, regs *Reg) (err error) {
|
func PtraceSetRegs(pid int, regs *Reg) (err error) {
|
||||||
return ptrace(PTRACE_SETREGS, pid, uintptr(unsafe.Pointer(regs)), 0)
|
return ptrace(PT_SETREGS, pid, uintptr(unsafe.Pointer(regs)), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtraceSingleStep(pid int) (err error) {
|
func PtraceSingleStep(pid int) (err error) {
|
||||||
return ptrace(PTRACE_SINGLESTEP, pid, 1, 0)
|
return ptrace(PT_STEP, pid, 1, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -596,16 +345,12 @@ func PtraceSingleStep(pid int) (err error) {
|
|||||||
//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
|
//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
|
||||||
//sys Flock(fd int, how int) (err error)
|
//sys Flock(fd int, how int) (err error)
|
||||||
//sys Fpathconf(fd int, name int) (val int, err error)
|
//sys Fpathconf(fd int, name int) (val int, err error)
|
||||||
//sys fstat(fd int, stat *stat_freebsd11_t) (err error)
|
//sys Fstat(fd int, stat *Stat_t) (err error)
|
||||||
//sys fstat_freebsd12(fd int, stat *Stat_t) (err error)
|
//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
|
||||||
//sys fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error)
|
//sys Fstatfs(fd int, stat *Statfs_t) (err error)
|
||||||
//sys fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error)
|
|
||||||
//sys fstatfs(fd int, stat *statfs_freebsd11_t) (err error)
|
|
||||||
//sys fstatfs_freebsd12(fd int, stat *Statfs_t) (err error)
|
|
||||||
//sys Fsync(fd int) (err error)
|
//sys Fsync(fd int) (err error)
|
||||||
//sys Ftruncate(fd int, length int64) (err error)
|
//sys Ftruncate(fd int, length int64) (err error)
|
||||||
//sys getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
|
//sys getdirentries(fd int, buf []byte, basep *uint64) (n int, err error)
|
||||||
//sys getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error)
|
|
||||||
//sys Getdtablesize() (size int)
|
//sys Getdtablesize() (size int)
|
||||||
//sysnb Getegid() (egid int)
|
//sysnb Getegid() (egid int)
|
||||||
//sysnb Geteuid() (uid int)
|
//sysnb Geteuid() (uid int)
|
||||||
@ -627,13 +372,10 @@ func PtraceSingleStep(pid int) (err error) {
|
|||||||
//sys Link(path string, link string) (err error)
|
//sys Link(path string, link string) (err error)
|
||||||
//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
|
//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
|
||||||
//sys Listen(s int, backlog int) (err error)
|
//sys Listen(s int, backlog int) (err error)
|
||||||
//sys lstat(path string, stat *stat_freebsd11_t) (err error)
|
|
||||||
//sys Mkdir(path string, mode uint32) (err error)
|
//sys Mkdir(path string, mode uint32) (err error)
|
||||||
//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
|
//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
|
||||||
//sys Mkfifo(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 Mknodat(fd int, path string, mode uint32, dev uint64) (err error)
|
||||||
//sys mknodat(fd int, path string, mode uint32, dev int) (err error)
|
|
||||||
//sys mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error)
|
|
||||||
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
|
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
|
||||||
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
||||||
//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error)
|
//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error)
|
||||||
@ -663,9 +405,7 @@ func PtraceSingleStep(pid int) (err error) {
|
|||||||
//sysnb Setsid() (pid int, err error)
|
//sysnb Setsid() (pid int, err error)
|
||||||
//sysnb Settimeofday(tp *Timeval) (err error)
|
//sysnb Settimeofday(tp *Timeval) (err error)
|
||||||
//sysnb Setuid(uid int) (err error)
|
//sysnb Setuid(uid int) (err error)
|
||||||
//sys stat(path string, stat *stat_freebsd11_t) (err error)
|
//sys Statfs(path string, stat *Statfs_t) (err error)
|
||||||
//sys statfs(path string, stat *statfs_freebsd11_t) (err error)
|
|
||||||
//sys statfs_freebsd12(path string, stat *Statfs_t) (err error)
|
|
||||||
//sys Symlink(path string, link string) (err error)
|
//sys Symlink(path string, link string) (err error)
|
||||||
//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
|
//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys Sync() (err error)
|
//sys Sync() (err error)
|
||||||
|
4
vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
generated
vendored
4
vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
generated
vendored
@ -57,11 +57,11 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
||||||
|
|
||||||
func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
|
func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
|
||||||
return ptrace(PTRACE_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
|
return ptrace(PT_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
||||||
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
|
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
|
||||||
err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
return int(ioDesc.Len), err
|
return int(ioDesc.Len), err
|
||||||
}
|
}
|
||||||
|
4
vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
generated
vendored
4
vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
generated
vendored
@ -57,11 +57,11 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
||||||
|
|
||||||
func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
|
func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
|
||||||
return ptrace(PTRACE_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
|
return ptrace(PT_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
||||||
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
|
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
|
||||||
err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
return int(ioDesc.Len), err
|
return int(ioDesc.Len), err
|
||||||
}
|
}
|
||||||
|
2
vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
generated
vendored
2
vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
generated
vendored
@ -58,6 +58,6 @@ func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
|
|||||||
|
|
||||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
||||||
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
|
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
|
||||||
err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
return int(ioDesc.Len), err
|
return int(ioDesc.Len), err
|
||||||
}
|
}
|
||||||
|
2
vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
generated
vendored
2
vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
generated
vendored
@ -58,6 +58,6 @@ func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
|
|||||||
|
|
||||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
||||||
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
|
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
|
||||||
err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
return int(ioDesc.Len), err
|
return int(ioDesc.Len), err
|
||||||
}
|
}
|
||||||
|
63
vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go
generated
vendored
Normal file
63
vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go
generated
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
// Copyright 2022 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.
|
||||||
|
|
||||||
|
//go:build riscv64 && freebsd
|
||||||
|
// +build riscv64,freebsd
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setTimespec(sec, nsec int64) Timespec {
|
||||||
|
return Timespec{Sec: sec, Nsec: nsec}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setTimeval(sec, usec int64) Timeval {
|
||||||
|
return Timeval{Sec: sec, Usec: usec}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 (msghdr *Msghdr) SetIovlen(length int) {
|
||||||
|
msghdr.Iovlen = int32(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)
|
||||||
|
|
||||||
|
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
||||||
|
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
|
||||||
|
err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||||
|
return int(ioDesc.Len), err
|
||||||
|
}
|
5
vendor/golang.org/x/sys/unix/syscall_illumos.go
generated
vendored
5
vendor/golang.org/x/sys/unix/syscall_illumos.go
generated
vendored
@ -20,10 +20,9 @@ func bytes2iovec(bs [][]byte) []Iovec {
|
|||||||
for i, b := range bs {
|
for i, b := range bs {
|
||||||
iovecs[i].SetLen(len(b))
|
iovecs[i].SetLen(len(b))
|
||||||
if len(b) > 0 {
|
if len(b) > 0 {
|
||||||
// somehow Iovec.Base on illumos is (*int8), not (*byte)
|
iovecs[i].Base = &b[0]
|
||||||
iovecs[i].Base = (*int8)(unsafe.Pointer(&b[0]))
|
|
||||||
} else {
|
} else {
|
||||||
iovecs[i].Base = (*int8)(unsafe.Pointer(&_zero))
|
iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return iovecs
|
return iovecs
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user