Update caddyserver/certmagic (#16789)
Fixes issue with windows users & letsencrypt Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
parent
f31e7a67cf
commit
1cd4a3b963
16
go.mod
16
go.mod
|
@ -22,7 +22,7 @@ require (
|
||||||
github.com/blevesearch/bleve/v2 v2.0.6
|
github.com/blevesearch/bleve/v2 v2.0.6
|
||||||
github.com/boombuler/barcode v1.0.1 // indirect
|
github.com/boombuler/barcode v1.0.1 // indirect
|
||||||
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b // indirect
|
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b // indirect
|
||||||
github.com/caddyserver/certmagic v0.14.0
|
github.com/caddyserver/certmagic v0.14.1
|
||||||
github.com/chi-middleware/proxy v1.1.1
|
github.com/chi-middleware/proxy v1.1.1
|
||||||
github.com/couchbase/go-couchbase v0.0.0-20210224140812-5740cd35f448 // indirect
|
github.com/couchbase/go-couchbase v0.0.0-20210224140812-5740cd35f448 // indirect
|
||||||
github.com/couchbase/gomemcached v0.1.2 // indirect
|
github.com/couchbase/gomemcached v0.1.2 // indirect
|
||||||
|
@ -70,7 +70,7 @@ require (
|
||||||
github.com/kevinburke/ssh_config v1.1.0 // indirect
|
github.com/kevinburke/ssh_config v1.1.0 // indirect
|
||||||
github.com/keybase/go-crypto v0.0.0-20200123153347-de78d2cb44f4
|
github.com/keybase/go-crypto v0.0.0-20200123153347-de78d2cb44f4
|
||||||
github.com/klauspost/compress v1.13.1
|
github.com/klauspost/compress v1.13.1
|
||||||
github.com/klauspost/cpuid/v2 v2.0.8 // indirect
|
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
|
||||||
github.com/klauspost/pgzip v1.2.5 // indirect
|
github.com/klauspost/pgzip v1.2.5 // indirect
|
||||||
github.com/lafriks/xormstore v1.4.0
|
github.com/lafriks/xormstore v1.4.0
|
||||||
github.com/lib/pq v1.10.2
|
github.com/lib/pq v1.10.2
|
||||||
|
@ -121,14 +121,14 @@ require (
|
||||||
go.etcd.io/bbolt v1.3.6 // indirect
|
go.etcd.io/bbolt v1.3.6 // indirect
|
||||||
go.jolheiser.com/hcaptcha v0.0.4
|
go.jolheiser.com/hcaptcha v0.0.4
|
||||||
go.jolheiser.com/pwn v0.0.3
|
go.jolheiser.com/pwn v0.0.3
|
||||||
go.uber.org/atomic v1.8.0 // indirect
|
go.uber.org/atomic v1.9.0 // indirect
|
||||||
go.uber.org/multierr v1.7.0 // indirect
|
go.uber.org/multierr v1.7.0 // indirect
|
||||||
go.uber.org/zap v1.18.1 // indirect
|
go.uber.org/zap v1.19.0 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97
|
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5
|
||||||
golang.org/x/net v0.0.0-20210716203947-853a461950ff
|
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d
|
||||||
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914
|
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914
|
||||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c
|
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf
|
||||||
golang.org/x/text v0.3.6
|
golang.org/x/text v0.3.7
|
||||||
golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6 // indirect
|
golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6 // indirect
|
||||||
golang.org/x/tools v0.1.0
|
golang.org/x/tools v0.1.0
|
||||||
google.golang.org/protobuf v1.27.1 // indirect
|
google.golang.org/protobuf v1.27.1 // indirect
|
||||||
|
|
39
go.sum
39
go.sum
|
@ -61,7 +61,6 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
|
||||||
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/Julusian/godocdown v0.0.0-20170816220326-6d19f8ff2df8/go.mod h1:INZr5t32rG59/5xeltqoCJoNY7e5x/3xoY9WSWVWg74=
|
github.com/Julusian/godocdown v0.0.0-20170816220326-6d19f8ff2df8/go.mod h1:INZr5t32rG59/5xeltqoCJoNY7e5x/3xoY9WSWVWg74=
|
||||||
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=
|
||||||
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
|
|
||||||
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
|
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
|
||||||
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
|
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
|
||||||
github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
|
github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
|
||||||
|
@ -197,8 +196,8 @@ github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl
|
||||||
github.com/bradfitz/gomemcache v0.0.0-20190329173943-551aad21a668/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
|
github.com/bradfitz/gomemcache v0.0.0-20190329173943-551aad21a668/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
|
||||||
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0=
|
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0=
|
||||||
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
|
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
|
||||||
github.com/caddyserver/certmagic v0.14.0 h1:XW1o32s7smIYEJSc6g+N8YXljpjRo5ZE2zi3CIYTs74=
|
github.com/caddyserver/certmagic v0.14.1 h1:8RIFS/LbGne/I7Op56Kkm2annnei7io9VW/IWDttE9U=
|
||||||
github.com/caddyserver/certmagic v0.14.0/go.mod h1:oRQOZmUVKwlpgNidslysHt05osM9uMrJ4YMk+Ot4P4Q=
|
github.com/caddyserver/certmagic v0.14.1/go.mod h1:oRQOZmUVKwlpgNidslysHt05osM9uMrJ4YMk+Ot4P4Q=
|
||||||
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
|
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
|
||||||
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
|
@ -216,7 +215,6 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk
|
||||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||||
github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I=
|
|
||||||
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
|
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
|
||||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
||||||
|
@ -496,7 +494,6 @@ github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJA
|
||||||
github.com/goccy/go-json v0.7.4 h1:B44qRUFwz/vxPKPISQ1KhvzRi9kZ28RAf6YtjriBZ5k=
|
github.com/goccy/go-json v0.7.4 h1:B44qRUFwz/vxPKPISQ1KhvzRi9kZ28RAf6YtjriBZ5k=
|
||||||
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/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 h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
|
|
||||||
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=
|
||||||
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
|
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
|
@ -684,7 +681,6 @@ github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8
|
||||||
github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE=
|
github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE=
|
||||||
github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8=
|
github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8=
|
||||||
github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE=
|
github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE=
|
||||||
github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd h1:eDErF6V/JPJON/B7s68BxwHgfmyOntHJQ8IOaz0x4R8=
|
|
||||||
github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c=
|
github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c=
|
||||||
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
||||||
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
||||||
|
@ -781,8 +777,8 @@ github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd
|
||||||
github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||||
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||||
github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||||
github.com/klauspost/cpuid/v2 v2.0.8 h1:bhR2mgIlno/Sfk4oUbH4sPlc83z1yGrN9bvqiq3C33I=
|
github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
|
||||||
github.com/klauspost/cpuid/v2 v2.0.8/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||||
github.com/klauspost/pgzip v1.2.4/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
|
github.com/klauspost/pgzip v1.2.4/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
|
||||||
github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE=
|
github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE=
|
||||||
github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
|
github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
|
||||||
|
@ -1060,7 +1056,6 @@ github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
|
||||||
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
|
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
|
||||||
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
|
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
|
||||||
github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
|
github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
|
||||||
github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
|
|
||||||
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
|
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
|
||||||
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk=
|
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk=
|
||||||
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
|
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
|
||||||
|
@ -1226,8 +1221,8 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
go.uber.org/atomic v1.8.0 h1:CUhrE4N1rqSE6FM9ecihEjRkLQu8cDfgDyoOs83mEY4=
|
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
|
||||||
go.uber.org/atomic v1.8.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
|
go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
|
||||||
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
|
@ -1242,8 +1237,8 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||||
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
|
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
|
||||||
go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
|
go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
|
||||||
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
|
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
|
||||||
go.uber.org/zap v1.18.1 h1:CSUJ2mjFszzEWt4CdKISEuChVIXGBn3lAPwkRGyVrc4=
|
go.uber.org/zap v1.19.0 h1:mZQZefskPPCMIBCSEH0v2/iUqqLrYtaeqwD6FUGUnFE=
|
||||||
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
|
@ -1273,8 +1268,8 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm
|
||||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||||
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
|
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
|
||||||
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI=
|
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
|
||||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
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=
|
||||||
|
@ -1367,8 +1362,8 @@ golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5o
|
||||||
golang.org/x/net v0.0.0-20210331060903-cb1fcc7394e5/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
golang.org/x/net v0.0.0-20210331060903-cb1fcc7394e5/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||||
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20210716203947-853a461950ff h1:j2EK/QoxYNBsXI4R7fQkkRUk8y6wnOBI+6hgPdP/6Ds=
|
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d h1:LO7XpTYMwTqxjLcGWPijK3vRXg1aWdlNOVOHRq45d7c=
|
||||||
golang.org/x/net v0.0.0-20210716203947-853a461950ff/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
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-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/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=
|
||||||
|
@ -1474,8 +1469,8 @@ golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||||
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
|
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf h1:2ucpDCmfkl8Bd/FsLtiD653Wf96cW37s+iGx93zsu4k=
|
||||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/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 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
|
||||||
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=
|
||||||
|
@ -1486,8 +1481,9 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
|
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
|
||||||
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
|
@ -1731,7 +1727,6 @@ 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/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/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM=
|
|
||||||
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=
|
||||||
|
@ -1749,11 +1744,9 @@ 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/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 h1:N03RwthgTR/l/eQvz3UjfYnvVVj1G2sZqzFGfoD4HE4=
|
|
||||||
modernc.org/tcl v1.5.5/go.mod h1:ADkaTUuwukkrlhqwERyq0SM8OvyXo7+TjFz7yAF56EI=
|
modernc.org/tcl v1.5.5/go.mod h1:ADkaTUuwukkrlhqwERyq0SM8OvyXo7+TjFz7yAF56EI=
|
||||||
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 h1:WyIDpEpAIx4Hel6q/Pcgj/VhaQV5XPJ2I6ryIYbjnpc=
|
|
||||||
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=
|
||||||
mvdan.cc/xurls/v2 v2.2.0 h1:NSZPykBXJFCetGZykLAxaL6SIpvbVy/UFEniIfHAa8A=
|
mvdan.cc/xurls/v2 v2.2.0 h1:NSZPykBXJFCetGZykLAxaL6SIpvbVy/UFEniIfHAa8A=
|
||||||
mvdan.cc/xurls/v2 v2.2.0/go.mod h1:EV1RMtya9D6G5DMYPGD8zTQzaHet6Jh8gFlRgGRJeO8=
|
mvdan.cc/xurls/v2 v2.2.0/go.mod h1:EV1RMtya9D6G5DMYPGD8zTQzaHet6Jh8gFlRgGRJeO8=
|
||||||
|
|
|
@ -508,8 +508,10 @@ func (cfg *Config) obtainCert(ctx context.Context, name string, interactive bool
|
||||||
var issuedCert *IssuedCertificate
|
var issuedCert *IssuedCertificate
|
||||||
var issuerUsed Issuer
|
var issuerUsed Issuer
|
||||||
for i, issuer := range issuers {
|
for i, issuer := range issuers {
|
||||||
|
if log != nil {
|
||||||
log.Debug(fmt.Sprintf("trying issuer %d/%d", i+1, len(cfg.Issuers)),
|
log.Debug(fmt.Sprintf("trying issuer %d/%d", i+1, len(cfg.Issuers)),
|
||||||
zap.String("issuer", issuer.IssuerKey()))
|
zap.String("issuer", issuer.IssuerKey()))
|
||||||
|
}
|
||||||
|
|
||||||
if prechecker, ok := issuer.(PreChecker); ok {
|
if prechecker, ok := issuer.(PreChecker); ok {
|
||||||
err = prechecker.PreCheck(ctx, []string{name}, interactive)
|
err = prechecker.PreCheck(ctx, []string{name}, interactive)
|
||||||
|
@ -531,11 +533,13 @@ func (cfg *Config) obtainCert(ctx context.Context, name string, interactive bool
|
||||||
if errors.As(err, &problem) {
|
if errors.As(err, &problem) {
|
||||||
errToLog = problem
|
errToLog = problem
|
||||||
}
|
}
|
||||||
|
if log != nil {
|
||||||
log.Error("could not get certificate from issuer",
|
log.Error("could not get certificate from issuer",
|
||||||
zap.String("identifier", name),
|
zap.String("identifier", name),
|
||||||
zap.String("issuer", issuer.IssuerKey()),
|
zap.String("issuer", issuer.IssuerKey()),
|
||||||
zap.Error(errToLog))
|
zap.Error(errToLog))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// only the error from the last issuer will be returned, but we logged the others
|
// only the error from the last issuer will be returned, but we logged the others
|
||||||
return fmt.Errorf("[%s] Obtain: %w", name, err)
|
return fmt.Errorf("[%s] Obtain: %w", name, err)
|
||||||
|
@ -745,11 +749,13 @@ func (cfg *Config) renewCert(ctx context.Context, name string, force, interactiv
|
||||||
if errors.As(err, &problem) {
|
if errors.As(err, &problem) {
|
||||||
errToLog = problem
|
errToLog = problem
|
||||||
}
|
}
|
||||||
|
if log != nil {
|
||||||
log.Error("could not get certificate from issuer",
|
log.Error("could not get certificate from issuer",
|
||||||
zap.String("identifier", name),
|
zap.String("identifier", name),
|
||||||
zap.String("issuer", issuer.IssuerKey()),
|
zap.String("issuer", issuer.IssuerKey()),
|
||||||
zap.Error(errToLog))
|
zap.Error(errToLog))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// only the error from the last issuer will be returned, but we logged the others
|
// only the error from the last issuer will be returned, but we logged the others
|
||||||
return fmt.Errorf("[%s] Renew: %w", name, err)
|
return fmt.Errorf("[%s] Renew: %w", name, err)
|
||||||
|
|
|
@ -83,6 +83,7 @@ const (
|
||||||
AVX512DQ // AVX-512 Doubleword and Quadword Instructions
|
AVX512DQ // AVX-512 Doubleword and Quadword Instructions
|
||||||
AVX512ER // AVX-512 Exponential and Reciprocal Instructions
|
AVX512ER // AVX-512 Exponential and Reciprocal Instructions
|
||||||
AVX512F // AVX-512 Foundation
|
AVX512F // AVX-512 Foundation
|
||||||
|
AVX512FP16 // AVX-512 FP16 Instructions
|
||||||
AVX512IFMA // AVX-512 Integer Fused Multiply-Add Instructions
|
AVX512IFMA // AVX-512 Integer Fused Multiply-Add Instructions
|
||||||
AVX512PF // AVX-512 Prefetch Instructions
|
AVX512PF // AVX-512 Prefetch Instructions
|
||||||
AVX512VBMI // AVX-512 Vector Bit Manipulation Instructions
|
AVX512VBMI // AVX-512 Vector Bit Manipulation Instructions
|
||||||
|
@ -980,6 +981,7 @@ func support() flagSet {
|
||||||
// edx
|
// edx
|
||||||
fs.setIf(edx&(1<<8) != 0, AVX512VP2INTERSECT)
|
fs.setIf(edx&(1<<8) != 0, AVX512VP2INTERSECT)
|
||||||
fs.setIf(edx&(1<<22) != 0, AMXBF16)
|
fs.setIf(edx&(1<<22) != 0, AMXBF16)
|
||||||
|
fs.setIf(edx&(1<<23) != 0, AVX512FP16)
|
||||||
fs.setIf(edx&(1<<24) != 0, AMXTILE)
|
fs.setIf(edx&(1<<24) != 0, AMXTILE)
|
||||||
fs.setIf(edx&(1<<25) != 0, AMXINT8)
|
fs.setIf(edx&(1<<25) != 0, AMXINT8)
|
||||||
// eax1 = CPUID.(EAX=7, ECX=1).EAX
|
// eax1 = CPUID.(EAX=7, ECX=1).EAX
|
||||||
|
|
|
@ -24,114 +24,115 @@ func _() {
|
||||||
_ = x[AVX512DQ-14]
|
_ = x[AVX512DQ-14]
|
||||||
_ = x[AVX512ER-15]
|
_ = x[AVX512ER-15]
|
||||||
_ = x[AVX512F-16]
|
_ = x[AVX512F-16]
|
||||||
_ = x[AVX512IFMA-17]
|
_ = x[AVX512FP16-17]
|
||||||
_ = x[AVX512PF-18]
|
_ = x[AVX512IFMA-18]
|
||||||
_ = x[AVX512VBMI-19]
|
_ = x[AVX512PF-19]
|
||||||
_ = x[AVX512VBMI2-20]
|
_ = x[AVX512VBMI-20]
|
||||||
_ = x[AVX512VL-21]
|
_ = x[AVX512VBMI2-21]
|
||||||
_ = x[AVX512VNNI-22]
|
_ = x[AVX512VL-22]
|
||||||
_ = x[AVX512VP2INTERSECT-23]
|
_ = x[AVX512VNNI-23]
|
||||||
_ = x[AVX512VPOPCNTDQ-24]
|
_ = x[AVX512VP2INTERSECT-24]
|
||||||
_ = x[AVXSLOW-25]
|
_ = x[AVX512VPOPCNTDQ-25]
|
||||||
_ = x[BMI1-26]
|
_ = x[AVXSLOW-26]
|
||||||
_ = x[BMI2-27]
|
_ = x[BMI1-27]
|
||||||
_ = x[CLDEMOTE-28]
|
_ = x[BMI2-28]
|
||||||
_ = x[CLMUL-29]
|
_ = x[CLDEMOTE-29]
|
||||||
_ = x[CLZERO-30]
|
_ = x[CLMUL-30]
|
||||||
_ = x[CMOV-31]
|
_ = x[CLZERO-31]
|
||||||
_ = x[CPBOOST-32]
|
_ = x[CMOV-32]
|
||||||
_ = x[CX16-33]
|
_ = x[CPBOOST-33]
|
||||||
_ = x[ENQCMD-34]
|
_ = x[CX16-34]
|
||||||
_ = x[ERMS-35]
|
_ = x[ENQCMD-35]
|
||||||
_ = x[F16C-36]
|
_ = x[ERMS-36]
|
||||||
_ = x[FMA3-37]
|
_ = x[F16C-37]
|
||||||
_ = x[FMA4-38]
|
_ = x[FMA3-38]
|
||||||
_ = x[GFNI-39]
|
_ = x[FMA4-39]
|
||||||
_ = x[HLE-40]
|
_ = x[GFNI-40]
|
||||||
_ = x[HTT-41]
|
_ = x[HLE-41]
|
||||||
_ = x[HWA-42]
|
_ = x[HTT-42]
|
||||||
_ = x[HYPERVISOR-43]
|
_ = x[HWA-43]
|
||||||
_ = x[IBPB-44]
|
_ = x[HYPERVISOR-44]
|
||||||
_ = x[IBS-45]
|
_ = x[IBPB-45]
|
||||||
_ = x[IBSBRNTRGT-46]
|
_ = x[IBS-46]
|
||||||
_ = x[IBSFETCHSAM-47]
|
_ = x[IBSBRNTRGT-47]
|
||||||
_ = x[IBSFFV-48]
|
_ = x[IBSFETCHSAM-48]
|
||||||
_ = x[IBSOPCNT-49]
|
_ = x[IBSFFV-49]
|
||||||
_ = x[IBSOPCNTEXT-50]
|
_ = x[IBSOPCNT-50]
|
||||||
_ = x[IBSOPSAM-51]
|
_ = x[IBSOPCNTEXT-51]
|
||||||
_ = x[IBSRDWROPCNT-52]
|
_ = x[IBSOPSAM-52]
|
||||||
_ = x[IBSRIPINVALIDCHK-53]
|
_ = x[IBSRDWROPCNT-53]
|
||||||
_ = x[INT_WBINVD-54]
|
_ = x[IBSRIPINVALIDCHK-54]
|
||||||
_ = x[INVLPGB-55]
|
_ = x[INT_WBINVD-55]
|
||||||
_ = x[LZCNT-56]
|
_ = x[INVLPGB-56]
|
||||||
_ = x[MCAOVERFLOW-57]
|
_ = x[LZCNT-57]
|
||||||
_ = x[MCOMMIT-58]
|
_ = x[MCAOVERFLOW-58]
|
||||||
_ = x[MMX-59]
|
_ = x[MCOMMIT-59]
|
||||||
_ = x[MMXEXT-60]
|
_ = x[MMX-60]
|
||||||
_ = x[MOVDIR64B-61]
|
_ = x[MMXEXT-61]
|
||||||
_ = x[MOVDIRI-62]
|
_ = x[MOVDIR64B-62]
|
||||||
_ = x[MPX-63]
|
_ = x[MOVDIRI-63]
|
||||||
_ = x[MSRIRC-64]
|
_ = x[MPX-64]
|
||||||
_ = x[NX-65]
|
_ = x[MSRIRC-65]
|
||||||
_ = x[POPCNT-66]
|
_ = x[NX-66]
|
||||||
_ = x[RDPRU-67]
|
_ = x[POPCNT-67]
|
||||||
_ = x[RDRAND-68]
|
_ = x[RDPRU-68]
|
||||||
_ = x[RDSEED-69]
|
_ = x[RDRAND-69]
|
||||||
_ = x[RDTSCP-70]
|
_ = x[RDSEED-70]
|
||||||
_ = x[RTM-71]
|
_ = x[RDTSCP-71]
|
||||||
_ = x[RTM_ALWAYS_ABORT-72]
|
_ = x[RTM-72]
|
||||||
_ = x[SERIALIZE-73]
|
_ = x[RTM_ALWAYS_ABORT-73]
|
||||||
_ = x[SGX-74]
|
_ = x[SERIALIZE-74]
|
||||||
_ = x[SGXLC-75]
|
_ = x[SGX-75]
|
||||||
_ = x[SHA-76]
|
_ = x[SGXLC-76]
|
||||||
_ = x[SSE-77]
|
_ = x[SHA-77]
|
||||||
_ = x[SSE2-78]
|
_ = x[SSE-78]
|
||||||
_ = x[SSE3-79]
|
_ = x[SSE2-79]
|
||||||
_ = x[SSE4-80]
|
_ = x[SSE3-80]
|
||||||
_ = x[SSE42-81]
|
_ = x[SSE4-81]
|
||||||
_ = x[SSE4A-82]
|
_ = x[SSE42-82]
|
||||||
_ = x[SSSE3-83]
|
_ = x[SSE4A-83]
|
||||||
_ = x[STIBP-84]
|
_ = x[SSSE3-84]
|
||||||
_ = x[SUCCOR-85]
|
_ = x[STIBP-85]
|
||||||
_ = x[TBM-86]
|
_ = x[SUCCOR-86]
|
||||||
_ = x[TSXLDTRK-87]
|
_ = x[TBM-87]
|
||||||
_ = x[VAES-88]
|
_ = x[TSXLDTRK-88]
|
||||||
_ = x[VMX-89]
|
_ = x[VAES-89]
|
||||||
_ = x[VPCLMULQDQ-90]
|
_ = x[VMX-90]
|
||||||
_ = x[WAITPKG-91]
|
_ = x[VPCLMULQDQ-91]
|
||||||
_ = x[WBNOINVD-92]
|
_ = x[WAITPKG-92]
|
||||||
_ = x[XOP-93]
|
_ = x[WBNOINVD-93]
|
||||||
_ = x[AESARM-94]
|
_ = x[XOP-94]
|
||||||
_ = x[ARMCPUID-95]
|
_ = x[AESARM-95]
|
||||||
_ = x[ASIMD-96]
|
_ = x[ARMCPUID-96]
|
||||||
_ = x[ASIMDDP-97]
|
_ = x[ASIMD-97]
|
||||||
_ = x[ASIMDHP-98]
|
_ = x[ASIMDDP-98]
|
||||||
_ = x[ASIMDRDM-99]
|
_ = x[ASIMDHP-99]
|
||||||
_ = x[ATOMICS-100]
|
_ = x[ASIMDRDM-100]
|
||||||
_ = x[CRC32-101]
|
_ = x[ATOMICS-101]
|
||||||
_ = x[DCPOP-102]
|
_ = x[CRC32-102]
|
||||||
_ = x[EVTSTRM-103]
|
_ = x[DCPOP-103]
|
||||||
_ = x[FCMA-104]
|
_ = x[EVTSTRM-104]
|
||||||
_ = x[FP-105]
|
_ = x[FCMA-105]
|
||||||
_ = x[FPHP-106]
|
_ = x[FP-106]
|
||||||
_ = x[GPA-107]
|
_ = x[FPHP-107]
|
||||||
_ = x[JSCVT-108]
|
_ = x[GPA-108]
|
||||||
_ = x[LRCPC-109]
|
_ = x[JSCVT-109]
|
||||||
_ = x[PMULL-110]
|
_ = x[LRCPC-110]
|
||||||
_ = x[SHA1-111]
|
_ = x[PMULL-111]
|
||||||
_ = x[SHA2-112]
|
_ = x[SHA1-112]
|
||||||
_ = x[SHA3-113]
|
_ = x[SHA2-113]
|
||||||
_ = x[SHA512-114]
|
_ = x[SHA3-114]
|
||||||
_ = x[SM3-115]
|
_ = x[SHA512-115]
|
||||||
_ = x[SM4-116]
|
_ = x[SM3-116]
|
||||||
_ = x[SVE-117]
|
_ = x[SM4-117]
|
||||||
_ = x[lastID-118]
|
_ = x[SVE-118]
|
||||||
|
_ = x[lastID-119]
|
||||||
_ = x[firstID-0]
|
_ = x[firstID-0]
|
||||||
}
|
}
|
||||||
|
|
||||||
const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWBMI1BMI2CLDEMOTECLMULCLZEROCMOVCPBOOSTCX16ENQCMDERMSF16CFMA3FMA4GFNIHLEHTTHWAHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKINT_WBINVDINVLPGBLZCNTMCAOVERFLOWMCOMMITMMXMMXEXTMOVDIR64BMOVDIRIMPXMSRIRCNXPOPCNTRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSERIALIZESGXSGXLCSHASSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSUCCORTBMTSXLDTRKVAESVMXVPCLMULQDQWAITPKGWBNOINVDXOPAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID"
|
const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWBMI1BMI2CLDEMOTECLMULCLZEROCMOVCPBOOSTCX16ENQCMDERMSF16CFMA3FMA4GFNIHLEHTTHWAHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKINT_WBINVDINVLPGBLZCNTMCAOVERFLOWMCOMMITMMXMMXEXTMOVDIR64BMOVDIRIMPXMSRIRCNXPOPCNTRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSERIALIZESGXSGXLCSHASSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSUCCORTBMTSXLDTRKVAESVMXVPCLMULQDQWAITPKGWBNOINVDXOPAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID"
|
||||||
|
|
||||||
var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 58, 62, 72, 84, 92, 100, 108, 116, 123, 133, 141, 151, 162, 170, 180, 198, 213, 220, 224, 228, 236, 241, 247, 251, 258, 262, 268, 272, 276, 280, 284, 288, 291, 294, 297, 307, 311, 314, 324, 335, 341, 349, 360, 368, 380, 396, 406, 413, 418, 429, 436, 439, 445, 454, 461, 464, 470, 472, 478, 483, 489, 495, 501, 504, 520, 529, 532, 537, 540, 543, 547, 551, 555, 560, 565, 570, 575, 581, 584, 592, 596, 599, 609, 616, 624, 627, 633, 641, 646, 653, 660, 668, 675, 680, 685, 692, 696, 698, 702, 705, 710, 715, 720, 724, 728, 732, 738, 741, 744, 747, 753}
|
var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 58, 62, 72, 84, 92, 100, 108, 116, 123, 133, 143, 151, 161, 172, 180, 190, 208, 223, 230, 234, 238, 246, 251, 257, 261, 268, 272, 278, 282, 286, 290, 294, 298, 301, 304, 307, 317, 321, 324, 334, 345, 351, 359, 370, 378, 390, 406, 416, 423, 428, 439, 446, 449, 455, 464, 471, 474, 480, 482, 488, 493, 499, 505, 511, 514, 530, 539, 542, 547, 550, 553, 557, 561, 565, 570, 575, 580, 585, 591, 594, 602, 606, 609, 619, 626, 634, 637, 643, 651, 656, 663, 670, 678, 685, 690, 695, 702, 706, 708, 712, 715, 720, 725, 730, 734, 738, 742, 748, 751, 754, 757, 763}
|
||||||
|
|
||||||
func (i FeatureID) String() string {
|
func (i FeatureID) String() string {
|
||||||
if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) {
|
if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) {
|
||||||
|
|
|
@ -4,11 +4,20 @@ All notable changes to this project will be documented in this file.
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [1.9.0] - 2021-07-15
|
||||||
|
### Added
|
||||||
|
- Add `Float64.Swap` to match int atomic operations.
|
||||||
|
- Add `atomic.Time` type for atomic operations on `time.Time` values.
|
||||||
|
|
||||||
|
[1.9.0]: https://github.com/uber-go/atomic/compare/v1.8.0...v1.9.0
|
||||||
|
|
||||||
## [1.8.0] - 2021-06-09
|
## [1.8.0] - 2021-06-09
|
||||||
### Added
|
### Added
|
||||||
- Add `atomic.Uintptr` type for atomic operations on `uintptr` values.
|
- Add `atomic.Uintptr` type for atomic operations on `uintptr` values.
|
||||||
- Add `atomic.UnsafePointer` type for atomic operations on `unsafe.Pointer` values.
|
- Add `atomic.UnsafePointer` type for atomic operations on `unsafe.Pointer` values.
|
||||||
|
|
||||||
|
[1.8.0]: https://github.com/uber-go/atomic/compare/v1.7.0...v1.8.0
|
||||||
|
|
||||||
## [1.7.0] - 2020-09-14
|
## [1.7.0] - 2020-09-14
|
||||||
### Added
|
### Added
|
||||||
- Support JSON serialization and deserialization of primitive atomic types.
|
- Support JSON serialization and deserialization of primitive atomic types.
|
||||||
|
@ -20,32 +29,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
### Removed
|
### Removed
|
||||||
- Remove dependency on `golang.org/x/{lint, tools}`.
|
- Remove dependency on `golang.org/x/{lint, tools}`.
|
||||||
|
|
||||||
|
[1.7.0]: https://github.com/uber-go/atomic/compare/v1.6.0...v1.7.0
|
||||||
|
|
||||||
## [1.6.0] - 2020-02-24
|
## [1.6.0] - 2020-02-24
|
||||||
### Changed
|
### Changed
|
||||||
- Drop library dependency on `golang.org/x/{lint, tools}`.
|
- Drop library dependency on `golang.org/x/{lint, tools}`.
|
||||||
|
|
||||||
|
[1.6.0]: https://github.com/uber-go/atomic/compare/v1.5.1...v1.6.0
|
||||||
|
|
||||||
## [1.5.1] - 2019-11-19
|
## [1.5.1] - 2019-11-19
|
||||||
- Fix bug where `Bool.CAS` and `Bool.Toggle` do work correctly together
|
- Fix bug where `Bool.CAS` and `Bool.Toggle` do work correctly together
|
||||||
causing `CAS` to fail even though the old value matches.
|
causing `CAS` to fail even though the old value matches.
|
||||||
|
|
||||||
|
[1.5.1]: https://github.com/uber-go/atomic/compare/v1.5.0...v1.5.1
|
||||||
|
|
||||||
## [1.5.0] - 2019-10-29
|
## [1.5.0] - 2019-10-29
|
||||||
### Changed
|
### Changed
|
||||||
- With Go modules, only the `go.uber.org/atomic` import path is supported now.
|
- With Go modules, only the `go.uber.org/atomic` import path is supported now.
|
||||||
If you need to use the old import path, please add a `replace` directive to
|
If you need to use the old import path, please add a `replace` directive to
|
||||||
your `go.mod`.
|
your `go.mod`.
|
||||||
|
|
||||||
|
[1.5.0]: https://github.com/uber-go/atomic/compare/v1.4.0...v1.5.0
|
||||||
|
|
||||||
## [1.4.0] - 2019-05-01
|
## [1.4.0] - 2019-05-01
|
||||||
### Added
|
### Added
|
||||||
- Add `atomic.Error` type for atomic operations on `error` values.
|
- Add `atomic.Error` type for atomic operations on `error` values.
|
||||||
|
|
||||||
|
[1.4.0]: https://github.com/uber-go/atomic/compare/v1.3.2...v1.4.0
|
||||||
|
|
||||||
## [1.3.2] - 2018-05-02
|
## [1.3.2] - 2018-05-02
|
||||||
### Added
|
### Added
|
||||||
- Add `atomic.Duration` type for atomic operations on `time.Duration` values.
|
- Add `atomic.Duration` type for atomic operations on `time.Duration` values.
|
||||||
|
|
||||||
|
[1.3.2]: https://github.com/uber-go/atomic/compare/v1.3.1...v1.3.2
|
||||||
|
|
||||||
## [1.3.1] - 2017-11-14
|
## [1.3.1] - 2017-11-14
|
||||||
### Fixed
|
### Fixed
|
||||||
- Revert optimization for `atomic.String.Store("")` which caused data races.
|
- Revert optimization for `atomic.String.Store("")` which caused data races.
|
||||||
|
|
||||||
|
[1.3.1]: https://github.com/uber-go/atomic/compare/v1.3.0...v1.3.1
|
||||||
|
|
||||||
## [1.3.0] - 2017-11-13
|
## [1.3.0] - 2017-11-13
|
||||||
### Added
|
### Added
|
||||||
- Add `atomic.Bool.CAS` for compare-and-swap semantics on bools.
|
- Add `atomic.Bool.CAS` for compare-and-swap semantics on bools.
|
||||||
|
@ -53,10 +76,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
### Changed
|
### Changed
|
||||||
- Optimize `atomic.String.Store("")` by avoiding an allocation.
|
- Optimize `atomic.String.Store("")` by avoiding an allocation.
|
||||||
|
|
||||||
|
[1.3.0]: https://github.com/uber-go/atomic/compare/v1.2.0...v1.3.0
|
||||||
|
|
||||||
## [1.2.0] - 2017-04-12
|
## [1.2.0] - 2017-04-12
|
||||||
### Added
|
### Added
|
||||||
- Shadow `atomic.Value` from `sync/atomic`.
|
- Shadow `atomic.Value` from `sync/atomic`.
|
||||||
|
|
||||||
|
[1.2.0]: https://github.com/uber-go/atomic/compare/v1.1.0...v1.2.0
|
||||||
|
|
||||||
## [1.1.0] - 2017-03-10
|
## [1.1.0] - 2017-03-10
|
||||||
### Added
|
### Added
|
||||||
- Add atomic `Float64` type.
|
- Add atomic `Float64` type.
|
||||||
|
@ -64,19 +91,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
### Changed
|
### Changed
|
||||||
- Support new `go.uber.org/atomic` import path.
|
- Support new `go.uber.org/atomic` import path.
|
||||||
|
|
||||||
|
[1.1.0]: https://github.com/uber-go/atomic/compare/v1.0.0...v1.1.0
|
||||||
|
|
||||||
## [1.0.0] - 2016-07-18
|
## [1.0.0] - 2016-07-18
|
||||||
|
|
||||||
- Initial release.
|
- Initial release.
|
||||||
|
|
||||||
[1.8.0]: https://github.com/uber-go/atomic/compare/v1.7.0...v1.8.0
|
|
||||||
[1.7.0]: https://github.com/uber-go/atomic/compare/v1.6.0...v1.7.0
|
|
||||||
[1.6.0]: https://github.com/uber-go/atomic/compare/v1.5.1...v1.6.0
|
|
||||||
[1.5.1]: https://github.com/uber-go/atomic/compare/v1.5.0...v1.5.1
|
|
||||||
[1.5.0]: https://github.com/uber-go/atomic/compare/v1.4.0...v1.5.0
|
|
||||||
[1.4.0]: https://github.com/uber-go/atomic/compare/v1.3.2...v1.4.0
|
|
||||||
[1.3.2]: https://github.com/uber-go/atomic/compare/v1.3.1...v1.3.2
|
|
||||||
[1.3.1]: https://github.com/uber-go/atomic/compare/v1.3.0...v1.3.1
|
|
||||||
[1.3.0]: https://github.com/uber-go/atomic/compare/v1.2.0...v1.3.0
|
|
||||||
[1.2.0]: https://github.com/uber-go/atomic/compare/v1.1.0...v1.2.0
|
|
||||||
[1.1.0]: https://github.com/uber-go/atomic/compare/v1.0.0...v1.1.0
|
|
||||||
[1.0.0]: https://github.com/uber-go/atomic/releases/tag/v1.0.0
|
[1.0.0]: https://github.com/uber-go/atomic/releases/tag/v1.0.0
|
||||||
|
|
|
@ -36,10 +36,10 @@ type Bool struct {
|
||||||
var _zeroBool bool
|
var _zeroBool bool
|
||||||
|
|
||||||
// NewBool creates a new Bool.
|
// NewBool creates a new Bool.
|
||||||
func NewBool(v bool) *Bool {
|
func NewBool(val bool) *Bool {
|
||||||
x := &Bool{}
|
x := &Bool{}
|
||||||
if v != _zeroBool {
|
if val != _zeroBool {
|
||||||
x.Store(v)
|
x.Store(val)
|
||||||
}
|
}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
@ -50,19 +50,19 @@ func (x *Bool) Load() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed bool.
|
// Store atomically stores the passed bool.
|
||||||
func (x *Bool) Store(v bool) {
|
func (x *Bool) Store(val bool) {
|
||||||
x.v.Store(boolToInt(v))
|
x.v.Store(boolToInt(val))
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap for bool values.
|
// CAS is an atomic compare-and-swap for bool values.
|
||||||
func (x *Bool) CAS(o, n bool) bool {
|
func (x *Bool) CAS(old, new bool) (swapped bool) {
|
||||||
return x.v.CAS(boolToInt(o), boolToInt(n))
|
return x.v.CAS(boolToInt(old), boolToInt(new))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically stores the given bool and returns the old
|
// Swap atomically stores the given bool and returns the old
|
||||||
// value.
|
// value.
|
||||||
func (x *Bool) Swap(o bool) bool {
|
func (x *Bool) Swap(val bool) (old bool) {
|
||||||
return truthy(x.v.Swap(boolToInt(o)))
|
return truthy(x.v.Swap(boolToInt(val)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped bool into JSON.
|
// MarshalJSON encodes the wrapped bool into JSON.
|
||||||
|
|
|
@ -38,7 +38,7 @@ func boolToInt(b bool) uint32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle atomically negates the Boolean and returns the previous value.
|
// Toggle atomically negates the Boolean and returns the previous value.
|
||||||
func (b *Bool) Toggle() bool {
|
func (b *Bool) Toggle() (old bool) {
|
||||||
for {
|
for {
|
||||||
old := b.Load()
|
old := b.Load()
|
||||||
if b.CAS(old, !old) {
|
if b.CAS(old, !old) {
|
||||||
|
|
|
@ -37,10 +37,10 @@ type Duration struct {
|
||||||
var _zeroDuration time.Duration
|
var _zeroDuration time.Duration
|
||||||
|
|
||||||
// NewDuration creates a new Duration.
|
// NewDuration creates a new Duration.
|
||||||
func NewDuration(v time.Duration) *Duration {
|
func NewDuration(val time.Duration) *Duration {
|
||||||
x := &Duration{}
|
x := &Duration{}
|
||||||
if v != _zeroDuration {
|
if val != _zeroDuration {
|
||||||
x.Store(v)
|
x.Store(val)
|
||||||
}
|
}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
@ -51,19 +51,19 @@ func (x *Duration) Load() time.Duration {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed time.Duration.
|
// Store atomically stores the passed time.Duration.
|
||||||
func (x *Duration) Store(v time.Duration) {
|
func (x *Duration) Store(val time.Duration) {
|
||||||
x.v.Store(int64(v))
|
x.v.Store(int64(val))
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap for time.Duration values.
|
// CAS is an atomic compare-and-swap for time.Duration values.
|
||||||
func (x *Duration) CAS(o, n time.Duration) bool {
|
func (x *Duration) CAS(old, new time.Duration) (swapped bool) {
|
||||||
return x.v.CAS(int64(o), int64(n))
|
return x.v.CAS(int64(old), int64(new))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically stores the given time.Duration and returns the old
|
// Swap atomically stores the given time.Duration and returns the old
|
||||||
// value.
|
// value.
|
||||||
func (x *Duration) Swap(o time.Duration) time.Duration {
|
func (x *Duration) Swap(val time.Duration) (old time.Duration) {
|
||||||
return time.Duration(x.v.Swap(int64(o)))
|
return time.Duration(x.v.Swap(int64(val)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped time.Duration into JSON.
|
// MarshalJSON encodes the wrapped time.Duration into JSON.
|
||||||
|
|
|
@ -25,13 +25,13 @@ import "time"
|
||||||
//go:generate bin/gen-atomicwrapper -name=Duration -type=time.Duration -wrapped=Int64 -pack=int64 -unpack=time.Duration -cas -swap -json -imports time -file=duration.go
|
//go:generate bin/gen-atomicwrapper -name=Duration -type=time.Duration -wrapped=Int64 -pack=int64 -unpack=time.Duration -cas -swap -json -imports time -file=duration.go
|
||||||
|
|
||||||
// Add atomically adds to the wrapped time.Duration and returns the new value.
|
// Add atomically adds to the wrapped time.Duration and returns the new value.
|
||||||
func (d *Duration) Add(n time.Duration) time.Duration {
|
func (d *Duration) Add(delta time.Duration) time.Duration {
|
||||||
return time.Duration(d.v.Add(int64(n)))
|
return time.Duration(d.v.Add(int64(delta)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped time.Duration and returns the new value.
|
// Sub atomically subtracts from the wrapped time.Duration and returns the new value.
|
||||||
func (d *Duration) Sub(n time.Duration) time.Duration {
|
func (d *Duration) Sub(delta time.Duration) time.Duration {
|
||||||
return time.Duration(d.v.Sub(int64(n)))
|
return time.Duration(d.v.Sub(int64(delta)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// String encodes the wrapped value as a string.
|
// String encodes the wrapped value as a string.
|
||||||
|
|
|
@ -32,10 +32,10 @@ type Error struct {
|
||||||
var _zeroError error
|
var _zeroError error
|
||||||
|
|
||||||
// NewError creates a new Error.
|
// NewError creates a new Error.
|
||||||
func NewError(v error) *Error {
|
func NewError(val error) *Error {
|
||||||
x := &Error{}
|
x := &Error{}
|
||||||
if v != _zeroError {
|
if val != _zeroError {
|
||||||
x.Store(v)
|
x.Store(val)
|
||||||
}
|
}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,6 @@ func (x *Error) Load() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed error.
|
// Store atomically stores the passed error.
|
||||||
func (x *Error) Store(v error) {
|
func (x *Error) Store(val error) {
|
||||||
x.v.Store(packError(v))
|
x.v.Store(packError(val))
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,10 +37,10 @@ type Float64 struct {
|
||||||
var _zeroFloat64 float64
|
var _zeroFloat64 float64
|
||||||
|
|
||||||
// NewFloat64 creates a new Float64.
|
// NewFloat64 creates a new Float64.
|
||||||
func NewFloat64(v float64) *Float64 {
|
func NewFloat64(val float64) *Float64 {
|
||||||
x := &Float64{}
|
x := &Float64{}
|
||||||
if v != _zeroFloat64 {
|
if val != _zeroFloat64 {
|
||||||
x.Store(v)
|
x.Store(val)
|
||||||
}
|
}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
@ -51,13 +51,14 @@ func (x *Float64) Load() float64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed float64.
|
// Store atomically stores the passed float64.
|
||||||
func (x *Float64) Store(v float64) {
|
func (x *Float64) Store(val float64) {
|
||||||
x.v.Store(math.Float64bits(v))
|
x.v.Store(math.Float64bits(val))
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap for float64 values.
|
// Swap atomically stores the given float64 and returns the old
|
||||||
func (x *Float64) CAS(o, n float64) bool {
|
// value.
|
||||||
return x.v.CAS(math.Float64bits(o), math.Float64bits(n))
|
func (x *Float64) Swap(val float64) (old float64) {
|
||||||
|
return math.Float64frombits(x.v.Swap(math.Float64bits(val)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped float64 into JSON.
|
// MarshalJSON encodes the wrapped float64 into JSON.
|
||||||
|
|
|
@ -20,15 +20,18 @@
|
||||||
|
|
||||||
package atomic
|
package atomic
|
||||||
|
|
||||||
import "strconv"
|
import (
|
||||||
|
"math"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
//go:generate bin/gen-atomicwrapper -name=Float64 -type=float64 -wrapped=Uint64 -pack=math.Float64bits -unpack=math.Float64frombits -cas -json -imports math -file=float64.go
|
//go:generate bin/gen-atomicwrapper -name=Float64 -type=float64 -wrapped=Uint64 -pack=math.Float64bits -unpack=math.Float64frombits -swap -json -imports math -file=float64.go
|
||||||
|
|
||||||
// Add atomically adds to the wrapped float64 and returns the new value.
|
// Add atomically adds to the wrapped float64 and returns the new value.
|
||||||
func (f *Float64) Add(s float64) float64 {
|
func (f *Float64) Add(delta float64) float64 {
|
||||||
for {
|
for {
|
||||||
old := f.Load()
|
old := f.Load()
|
||||||
new := old + s
|
new := old + delta
|
||||||
if f.CAS(old, new) {
|
if f.CAS(old, new) {
|
||||||
return new
|
return new
|
||||||
}
|
}
|
||||||
|
@ -36,8 +39,27 @@ func (f *Float64) Add(s float64) float64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped float64 and returns the new value.
|
// Sub atomically subtracts from the wrapped float64 and returns the new value.
|
||||||
func (f *Float64) Sub(s float64) float64 {
|
func (f *Float64) Sub(delta float64) float64 {
|
||||||
return f.Add(-s)
|
return f.Add(-delta)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CAS is an atomic compare-and-swap for float64 values.
|
||||||
|
//
|
||||||
|
// Note: CAS handles NaN incorrectly. NaN != NaN using Go's inbuilt operators
|
||||||
|
// but CAS allows a stored NaN to compare equal to a passed in NaN.
|
||||||
|
// This avoids typical CAS loops from blocking forever, e.g.,
|
||||||
|
//
|
||||||
|
// for {
|
||||||
|
// old := atom.Load()
|
||||||
|
// new = f(old)
|
||||||
|
// if atom.CAS(old, new) {
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// If CAS did not match NaN to match, then the above would loop forever.
|
||||||
|
func (f *Float64) CAS(old, new float64) (swapped bool) {
|
||||||
|
return f.v.CAS(math.Float64bits(old), math.Float64bits(new))
|
||||||
}
|
}
|
||||||
|
|
||||||
// String encodes the wrapped value as a string.
|
// String encodes the wrapped value as a string.
|
||||||
|
|
|
@ -36,8 +36,8 @@ type Int32 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewInt32 creates a new Int32.
|
// NewInt32 creates a new Int32.
|
||||||
func NewInt32(i int32) *Int32 {
|
func NewInt32(val int32) *Int32 {
|
||||||
return &Int32{v: i}
|
return &Int32{v: val}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load atomically loads the wrapped value.
|
// Load atomically loads the wrapped value.
|
||||||
|
@ -46,13 +46,13 @@ func (i *Int32) Load() int32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add atomically adds to the wrapped int32 and returns the new value.
|
// Add atomically adds to the wrapped int32 and returns the new value.
|
||||||
func (i *Int32) Add(n int32) int32 {
|
func (i *Int32) Add(delta int32) int32 {
|
||||||
return atomic.AddInt32(&i.v, n)
|
return atomic.AddInt32(&i.v, delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped int32 and returns the new value.
|
// Sub atomically subtracts from the wrapped int32 and returns the new value.
|
||||||
func (i *Int32) Sub(n int32) int32 {
|
func (i *Int32) Sub(delta int32) int32 {
|
||||||
return atomic.AddInt32(&i.v, -n)
|
return atomic.AddInt32(&i.v, -delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inc atomically increments the wrapped int32 and returns the new value.
|
// Inc atomically increments the wrapped int32 and returns the new value.
|
||||||
|
@ -66,18 +66,18 @@ func (i *Int32) Dec() int32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap.
|
// CAS is an atomic compare-and-swap.
|
||||||
func (i *Int32) CAS(old, new int32) bool {
|
func (i *Int32) CAS(old, new int32) (swapped bool) {
|
||||||
return atomic.CompareAndSwapInt32(&i.v, old, new)
|
return atomic.CompareAndSwapInt32(&i.v, old, new)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed value.
|
// Store atomically stores the passed value.
|
||||||
func (i *Int32) Store(n int32) {
|
func (i *Int32) Store(val int32) {
|
||||||
atomic.StoreInt32(&i.v, n)
|
atomic.StoreInt32(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically swaps the wrapped int32 and returns the old value.
|
// Swap atomically swaps the wrapped int32 and returns the old value.
|
||||||
func (i *Int32) Swap(n int32) int32 {
|
func (i *Int32) Swap(val int32) (old int32) {
|
||||||
return atomic.SwapInt32(&i.v, n)
|
return atomic.SwapInt32(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped int32 into JSON.
|
// MarshalJSON encodes the wrapped int32 into JSON.
|
||||||
|
|
|
@ -36,8 +36,8 @@ type Int64 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewInt64 creates a new Int64.
|
// NewInt64 creates a new Int64.
|
||||||
func NewInt64(i int64) *Int64 {
|
func NewInt64(val int64) *Int64 {
|
||||||
return &Int64{v: i}
|
return &Int64{v: val}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load atomically loads the wrapped value.
|
// Load atomically loads the wrapped value.
|
||||||
|
@ -46,13 +46,13 @@ func (i *Int64) Load() int64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add atomically adds to the wrapped int64 and returns the new value.
|
// Add atomically adds to the wrapped int64 and returns the new value.
|
||||||
func (i *Int64) Add(n int64) int64 {
|
func (i *Int64) Add(delta int64) int64 {
|
||||||
return atomic.AddInt64(&i.v, n)
|
return atomic.AddInt64(&i.v, delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped int64 and returns the new value.
|
// Sub atomically subtracts from the wrapped int64 and returns the new value.
|
||||||
func (i *Int64) Sub(n int64) int64 {
|
func (i *Int64) Sub(delta int64) int64 {
|
||||||
return atomic.AddInt64(&i.v, -n)
|
return atomic.AddInt64(&i.v, -delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inc atomically increments the wrapped int64 and returns the new value.
|
// Inc atomically increments the wrapped int64 and returns the new value.
|
||||||
|
@ -66,18 +66,18 @@ func (i *Int64) Dec() int64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap.
|
// CAS is an atomic compare-and-swap.
|
||||||
func (i *Int64) CAS(old, new int64) bool {
|
func (i *Int64) CAS(old, new int64) (swapped bool) {
|
||||||
return atomic.CompareAndSwapInt64(&i.v, old, new)
|
return atomic.CompareAndSwapInt64(&i.v, old, new)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed value.
|
// Store atomically stores the passed value.
|
||||||
func (i *Int64) Store(n int64) {
|
func (i *Int64) Store(val int64) {
|
||||||
atomic.StoreInt64(&i.v, n)
|
atomic.StoreInt64(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically swaps the wrapped int64 and returns the old value.
|
// Swap atomically swaps the wrapped int64 and returns the old value.
|
||||||
func (i *Int64) Swap(n int64) int64 {
|
func (i *Int64) Swap(val int64) (old int64) {
|
||||||
return atomic.SwapInt64(&i.v, n)
|
return atomic.SwapInt64(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped int64 into JSON.
|
// MarshalJSON encodes the wrapped int64 into JSON.
|
||||||
|
|
|
@ -32,10 +32,10 @@ type String struct {
|
||||||
var _zeroString string
|
var _zeroString string
|
||||||
|
|
||||||
// NewString creates a new String.
|
// NewString creates a new String.
|
||||||
func NewString(v string) *String {
|
func NewString(val string) *String {
|
||||||
x := &String{}
|
x := &String{}
|
||||||
if v != _zeroString {
|
if val != _zeroString {
|
||||||
x.Store(v)
|
x.Store(val)
|
||||||
}
|
}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,6 @@ func (x *String) Load() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed string.
|
// Store atomically stores the passed string.
|
||||||
func (x *String) Store(v string) {
|
func (x *String) Store(val string) {
|
||||||
x.v.Store(v)
|
x.v.Store(val)
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
package atomic
|
package atomic
|
||||||
|
|
||||||
//go:generate bin/gen-atomicwrapper -name=String -type=string -wrapped=Value -file=string.go
|
//go:generate bin/gen-atomicwrapper -name=String -type=string -wrapped=Value -file=string.go
|
||||||
|
// Note: No Swap as String wraps Value, which wraps the stdlib sync/atomic.Value which
|
||||||
|
// only supports Swap as of go1.17: https://github.com/golang/go/issues/39351
|
||||||
|
|
||||||
// String returns the wrapped value.
|
// String returns the wrapped value.
|
||||||
func (s *String) String() string {
|
func (s *String) String() string {
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
// @generated Code generated by gen-atomicwrapper.
|
||||||
|
|
||||||
|
// Copyright (c) 2020-2021 Uber Technologies, Inc.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
package atomic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Time is an atomic type-safe wrapper for time.Time values.
|
||||||
|
type Time struct {
|
||||||
|
_ nocmp // disallow non-atomic comparison
|
||||||
|
|
||||||
|
v Value
|
||||||
|
}
|
||||||
|
|
||||||
|
var _zeroTime time.Time
|
||||||
|
|
||||||
|
// NewTime creates a new Time.
|
||||||
|
func NewTime(val time.Time) *Time {
|
||||||
|
x := &Time{}
|
||||||
|
if val != _zeroTime {
|
||||||
|
x.Store(val)
|
||||||
|
}
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load atomically loads the wrapped time.Time.
|
||||||
|
func (x *Time) Load() time.Time {
|
||||||
|
return unpackTime(x.v.Load())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store atomically stores the passed time.Time.
|
||||||
|
func (x *Time) Store(val time.Time) {
|
||||||
|
x.v.Store(packTime(val))
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
// Copyright (c) 2021 Uber Technologies, Inc.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
package atomic
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
//go:generate bin/gen-atomicwrapper -name=Time -type=time.Time -wrapped=Value -pack=packTime -unpack=unpackTime -imports time -file=time.go
|
||||||
|
|
||||||
|
func packTime(t time.Time) interface{} {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
func unpackTime(v interface{}) time.Time {
|
||||||
|
if t, ok := v.(time.Time); ok {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
return time.Time{}
|
||||||
|
}
|
|
@ -36,8 +36,8 @@ type Uint32 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewUint32 creates a new Uint32.
|
// NewUint32 creates a new Uint32.
|
||||||
func NewUint32(i uint32) *Uint32 {
|
func NewUint32(val uint32) *Uint32 {
|
||||||
return &Uint32{v: i}
|
return &Uint32{v: val}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load atomically loads the wrapped value.
|
// Load atomically loads the wrapped value.
|
||||||
|
@ -46,13 +46,13 @@ func (i *Uint32) Load() uint32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add atomically adds to the wrapped uint32 and returns the new value.
|
// Add atomically adds to the wrapped uint32 and returns the new value.
|
||||||
func (i *Uint32) Add(n uint32) uint32 {
|
func (i *Uint32) Add(delta uint32) uint32 {
|
||||||
return atomic.AddUint32(&i.v, n)
|
return atomic.AddUint32(&i.v, delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped uint32 and returns the new value.
|
// Sub atomically subtracts from the wrapped uint32 and returns the new value.
|
||||||
func (i *Uint32) Sub(n uint32) uint32 {
|
func (i *Uint32) Sub(delta uint32) uint32 {
|
||||||
return atomic.AddUint32(&i.v, ^(n - 1))
|
return atomic.AddUint32(&i.v, ^(delta - 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inc atomically increments the wrapped uint32 and returns the new value.
|
// Inc atomically increments the wrapped uint32 and returns the new value.
|
||||||
|
@ -66,18 +66,18 @@ func (i *Uint32) Dec() uint32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap.
|
// CAS is an atomic compare-and-swap.
|
||||||
func (i *Uint32) CAS(old, new uint32) bool {
|
func (i *Uint32) CAS(old, new uint32) (swapped bool) {
|
||||||
return atomic.CompareAndSwapUint32(&i.v, old, new)
|
return atomic.CompareAndSwapUint32(&i.v, old, new)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed value.
|
// Store atomically stores the passed value.
|
||||||
func (i *Uint32) Store(n uint32) {
|
func (i *Uint32) Store(val uint32) {
|
||||||
atomic.StoreUint32(&i.v, n)
|
atomic.StoreUint32(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically swaps the wrapped uint32 and returns the old value.
|
// Swap atomically swaps the wrapped uint32 and returns the old value.
|
||||||
func (i *Uint32) Swap(n uint32) uint32 {
|
func (i *Uint32) Swap(val uint32) (old uint32) {
|
||||||
return atomic.SwapUint32(&i.v, n)
|
return atomic.SwapUint32(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped uint32 into JSON.
|
// MarshalJSON encodes the wrapped uint32 into JSON.
|
||||||
|
|
|
@ -36,8 +36,8 @@ type Uint64 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewUint64 creates a new Uint64.
|
// NewUint64 creates a new Uint64.
|
||||||
func NewUint64(i uint64) *Uint64 {
|
func NewUint64(val uint64) *Uint64 {
|
||||||
return &Uint64{v: i}
|
return &Uint64{v: val}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load atomically loads the wrapped value.
|
// Load atomically loads the wrapped value.
|
||||||
|
@ -46,13 +46,13 @@ func (i *Uint64) Load() uint64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add atomically adds to the wrapped uint64 and returns the new value.
|
// Add atomically adds to the wrapped uint64 and returns the new value.
|
||||||
func (i *Uint64) Add(n uint64) uint64 {
|
func (i *Uint64) Add(delta uint64) uint64 {
|
||||||
return atomic.AddUint64(&i.v, n)
|
return atomic.AddUint64(&i.v, delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped uint64 and returns the new value.
|
// Sub atomically subtracts from the wrapped uint64 and returns the new value.
|
||||||
func (i *Uint64) Sub(n uint64) uint64 {
|
func (i *Uint64) Sub(delta uint64) uint64 {
|
||||||
return atomic.AddUint64(&i.v, ^(n - 1))
|
return atomic.AddUint64(&i.v, ^(delta - 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inc atomically increments the wrapped uint64 and returns the new value.
|
// Inc atomically increments the wrapped uint64 and returns the new value.
|
||||||
|
@ -66,18 +66,18 @@ func (i *Uint64) Dec() uint64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap.
|
// CAS is an atomic compare-and-swap.
|
||||||
func (i *Uint64) CAS(old, new uint64) bool {
|
func (i *Uint64) CAS(old, new uint64) (swapped bool) {
|
||||||
return atomic.CompareAndSwapUint64(&i.v, old, new)
|
return atomic.CompareAndSwapUint64(&i.v, old, new)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed value.
|
// Store atomically stores the passed value.
|
||||||
func (i *Uint64) Store(n uint64) {
|
func (i *Uint64) Store(val uint64) {
|
||||||
atomic.StoreUint64(&i.v, n)
|
atomic.StoreUint64(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically swaps the wrapped uint64 and returns the old value.
|
// Swap atomically swaps the wrapped uint64 and returns the old value.
|
||||||
func (i *Uint64) Swap(n uint64) uint64 {
|
func (i *Uint64) Swap(val uint64) (old uint64) {
|
||||||
return atomic.SwapUint64(&i.v, n)
|
return atomic.SwapUint64(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped uint64 into JSON.
|
// MarshalJSON encodes the wrapped uint64 into JSON.
|
||||||
|
|
|
@ -36,8 +36,8 @@ type Uintptr struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewUintptr creates a new Uintptr.
|
// NewUintptr creates a new Uintptr.
|
||||||
func NewUintptr(i uintptr) *Uintptr {
|
func NewUintptr(val uintptr) *Uintptr {
|
||||||
return &Uintptr{v: i}
|
return &Uintptr{v: val}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load atomically loads the wrapped value.
|
// Load atomically loads the wrapped value.
|
||||||
|
@ -46,13 +46,13 @@ func (i *Uintptr) Load() uintptr {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add atomically adds to the wrapped uintptr and returns the new value.
|
// Add atomically adds to the wrapped uintptr and returns the new value.
|
||||||
func (i *Uintptr) Add(n uintptr) uintptr {
|
func (i *Uintptr) Add(delta uintptr) uintptr {
|
||||||
return atomic.AddUintptr(&i.v, n)
|
return atomic.AddUintptr(&i.v, delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped uintptr and returns the new value.
|
// Sub atomically subtracts from the wrapped uintptr and returns the new value.
|
||||||
func (i *Uintptr) Sub(n uintptr) uintptr {
|
func (i *Uintptr) Sub(delta uintptr) uintptr {
|
||||||
return atomic.AddUintptr(&i.v, ^(n - 1))
|
return atomic.AddUintptr(&i.v, ^(delta - 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inc atomically increments the wrapped uintptr and returns the new value.
|
// Inc atomically increments the wrapped uintptr and returns the new value.
|
||||||
|
@ -66,18 +66,18 @@ func (i *Uintptr) Dec() uintptr {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap.
|
// CAS is an atomic compare-and-swap.
|
||||||
func (i *Uintptr) CAS(old, new uintptr) bool {
|
func (i *Uintptr) CAS(old, new uintptr) (swapped bool) {
|
||||||
return atomic.CompareAndSwapUintptr(&i.v, old, new)
|
return atomic.CompareAndSwapUintptr(&i.v, old, new)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed value.
|
// Store atomically stores the passed value.
|
||||||
func (i *Uintptr) Store(n uintptr) {
|
func (i *Uintptr) Store(val uintptr) {
|
||||||
atomic.StoreUintptr(&i.v, n)
|
atomic.StoreUintptr(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically swaps the wrapped uintptr and returns the old value.
|
// Swap atomically swaps the wrapped uintptr and returns the old value.
|
||||||
func (i *Uintptr) Swap(n uintptr) uintptr {
|
func (i *Uintptr) Swap(val uintptr) (old uintptr) {
|
||||||
return atomic.SwapUintptr(&i.v, n)
|
return atomic.SwapUintptr(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped uintptr into JSON.
|
// MarshalJSON encodes the wrapped uintptr into JSON.
|
||||||
|
|
|
@ -33,8 +33,8 @@ type UnsafePointer struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewUnsafePointer creates a new UnsafePointer.
|
// NewUnsafePointer creates a new UnsafePointer.
|
||||||
func NewUnsafePointer(p unsafe.Pointer) *UnsafePointer {
|
func NewUnsafePointer(val unsafe.Pointer) *UnsafePointer {
|
||||||
return &UnsafePointer{v: p}
|
return &UnsafePointer{v: val}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load atomically loads the wrapped value.
|
// Load atomically loads the wrapped value.
|
||||||
|
@ -43,16 +43,16 @@ func (p *UnsafePointer) Load() unsafe.Pointer {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed value.
|
// Store atomically stores the passed value.
|
||||||
func (p *UnsafePointer) Store(q unsafe.Pointer) {
|
func (p *UnsafePointer) Store(val unsafe.Pointer) {
|
||||||
atomic.StorePointer(&p.v, q)
|
atomic.StorePointer(&p.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically swaps the wrapped unsafe.Pointer and returns the old value.
|
// Swap atomically swaps the wrapped unsafe.Pointer and returns the old value.
|
||||||
func (p *UnsafePointer) Swap(q unsafe.Pointer) unsafe.Pointer {
|
func (p *UnsafePointer) Swap(val unsafe.Pointer) (old unsafe.Pointer) {
|
||||||
return atomic.SwapPointer(&p.v, q)
|
return atomic.SwapPointer(&p.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap.
|
// CAS is an atomic compare-and-swap.
|
||||||
func (p *UnsafePointer) CAS(old, new unsafe.Pointer) bool {
|
func (p *UnsafePointer) CAS(old, new unsafe.Pointer) (swapped bool) {
|
||||||
return atomic.CompareAndSwapPointer(&p.v, old, new)
|
return atomic.CompareAndSwapPointer(&p.v, old, new)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,17 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 1.19.0 (9 Aug 2021)
|
||||||
|
|
||||||
|
Enhancements:
|
||||||
|
* [#975][]: Avoid panicking in Sampler core if the level is out of bounds.
|
||||||
|
* [#984][]: Reduce the size of BufferedWriteSyncer by aligning the fields
|
||||||
|
better.
|
||||||
|
|
||||||
|
[#975]: https://github.com/uber-go/zap/pull/975
|
||||||
|
[#984]: https://github.com/uber-go/zap/pull/984
|
||||||
|
|
||||||
|
Thanks to @lancoLiu and @thockin for their contributions to this release.
|
||||||
|
|
||||||
## 1.18.1 (28 Jun 2021)
|
## 1.18.1 (28 Jun 2021)
|
||||||
|
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
|
|
|
@ -5,7 +5,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=
|
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
|
@ -13,7 +12,6 @@ github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
|
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
|
@ -25,23 +23,17 @@ go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
|
||||||
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
||||||
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
|
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
|
||||||
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
|
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
|
||||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
|
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
|
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
|
||||||
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/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11 h1:Yq9t9jnGoR+dBuitxdo9l6Q7xh/zOyNnYUtDKaQ3x0E=
|
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11 h1:Yq9t9jnGoR+dBuitxdo9l6Q7xh/zOyNnYUtDKaQ3x0E=
|
||||||
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
|
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||||
|
|
|
@ -71,10 +71,10 @@ type BufferedWriteSyncer struct {
|
||||||
// unexported fields for state
|
// unexported fields for state
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
initialized bool // whether initialize() has run
|
initialized bool // whether initialize() has run
|
||||||
|
stopped bool // whether Stop() has run
|
||||||
writer *bufio.Writer
|
writer *bufio.Writer
|
||||||
ticker *time.Ticker
|
ticker *time.Ticker
|
||||||
stop chan struct{} // closed when flushLoop should stop
|
stop chan struct{} // closed when flushLoop should stop
|
||||||
stopped bool // whether Stop() has run
|
|
||||||
done chan struct{} // closed when flushLoop has stopped
|
done chan struct{} // closed when flushLoop has stopped
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -219,12 +219,10 @@ func (ce *CheckedEntry) Write(fields ...Field) {
|
||||||
for i := range ce.cores {
|
for i := range ce.cores {
|
||||||
err = multierr.Append(err, ce.cores[i].Write(ce.Entry, fields))
|
err = multierr.Append(err, ce.cores[i].Write(ce.Entry, fields))
|
||||||
}
|
}
|
||||||
if ce.ErrorOutput != nil {
|
if err != nil && ce.ErrorOutput != nil {
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintf(ce.ErrorOutput, "%v write error: %v\n", ce.Time, err)
|
fmt.Fprintf(ce.ErrorOutput, "%v write error: %v\n", ce.Time, err)
|
||||||
ce.ErrorOutput.Sync()
|
ce.ErrorOutput.Sync()
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
should, msg := ce.should, ce.Message
|
should, msg := ce.should, ce.Message
|
||||||
putCheckedEntry(ce)
|
putCheckedEntry(ce)
|
||||||
|
|
|
@ -83,7 +83,7 @@ type errorGroup interface {
|
||||||
Errors() []error
|
Errors() []error
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note that errArry and errArrayElem are very similar to the version
|
// Note that errArray and errArrayElem are very similar to the version
|
||||||
// implemented in the top-level error.go file. We can't re-use this because
|
// implemented in the top-level error.go file. We can't re-use this because
|
||||||
// that would require exporting errArray as part of the zapcore API.
|
// that would require exporting errArray as part of the zapcore API.
|
||||||
|
|
||||||
|
|
|
@ -197,6 +197,7 @@ func (s *sampler) Check(ent Entry, ce *CheckedEntry) *CheckedEntry {
|
||||||
return ce
|
return ce
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ent.Level >= _minLevel && ent.Level <= _maxLevel {
|
||||||
counter := s.counts.get(ent.Level, ent.Message)
|
counter := s.counts.get(ent.Level, ent.Message)
|
||||||
n := counter.IncCheckReset(ent.Time, s.tick)
|
n := counter.IncCheckReset(ent.Time, s.tick)
|
||||||
if n > s.first && (n-s.first)%s.thereafter != 0 {
|
if n > s.first && (n-s.first)%s.thereafter != 0 {
|
||||||
|
@ -204,5 +205,6 @@ func (s *sampler) Check(ent Entry, ce *CheckedEntry) *CheckedEntry {
|
||||||
return ce
|
return ce
|
||||||
}
|
}
|
||||||
s.hook(ent, LogSampled)
|
s.hook(ent, LogSampled)
|
||||||
|
}
|
||||||
return s.Core.Check(ent, ce)
|
return s.Core.Check(ent, ce)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,12 @@
|
||||||
|
|
||||||
// Package armor implements OpenPGP ASCII Armor, see RFC 4880. OpenPGP Armor is
|
// Package armor implements OpenPGP ASCII Armor, see RFC 4880. OpenPGP Armor is
|
||||||
// very similar to PEM except that it has an additional CRC checksum.
|
// very similar to PEM except that it has an additional CRC checksum.
|
||||||
|
//
|
||||||
|
// Deprecated: this package is unmaintained except for security fixes. New
|
||||||
|
// applications should consider a more focused, modern alternative to OpenPGP
|
||||||
|
// for their specific task. If you are required to interoperate with OpenPGP
|
||||||
|
// systems and need a maintained package, consider a community fork.
|
||||||
|
// See https://golang.org/issue/44226.
|
||||||
package armor // import "golang.org/x/crypto/openpgp/armor"
|
package armor // import "golang.org/x/crypto/openpgp/armor"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -10,6 +10,12 @@
|
||||||
// This form of ElGamal embeds PKCS#1 v1.5 padding, which may make it
|
// This form of ElGamal embeds PKCS#1 v1.5 padding, which may make it
|
||||||
// unsuitable for other protocols. RSA should be used in preference in any
|
// unsuitable for other protocols. RSA should be used in preference in any
|
||||||
// case.
|
// case.
|
||||||
|
//
|
||||||
|
// Deprecated: this package was only provided to support ElGamal encryption in
|
||||||
|
// OpenPGP. The golang.org/x/crypto/openpgp package is now deprecated (see
|
||||||
|
// https://golang.org/issue/44226), and ElGamal in the OpenPGP ecosystem has
|
||||||
|
// compatibility and security issues (see https://eprint.iacr.org/2021/923).
|
||||||
|
// Moreover, this package doesn't protect against side-channel attacks.
|
||||||
package elgamal // import "golang.org/x/crypto/openpgp/elgamal"
|
package elgamal // import "golang.org/x/crypto/openpgp/elgamal"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -3,6 +3,12 @@
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// Package errors contains common error types for the OpenPGP packages.
|
// Package errors contains common error types for the OpenPGP packages.
|
||||||
|
//
|
||||||
|
// Deprecated: this package is unmaintained except for security fixes. New
|
||||||
|
// applications should consider a more focused, modern alternative to OpenPGP
|
||||||
|
// for their specific task. If you are required to interoperate with OpenPGP
|
||||||
|
// systems and need a maintained package, consider a community fork.
|
||||||
|
// See https://golang.org/issue/44226.
|
||||||
package errors // import "golang.org/x/crypto/openpgp/errors"
|
package errors // import "golang.org/x/crypto/openpgp/errors"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -4,6 +4,12 @@
|
||||||
|
|
||||||
// Package packet implements parsing and serialization of OpenPGP packets, as
|
// Package packet implements parsing and serialization of OpenPGP packets, as
|
||||||
// specified in RFC 4880.
|
// specified in RFC 4880.
|
||||||
|
//
|
||||||
|
// Deprecated: this package is unmaintained except for security fixes. New
|
||||||
|
// applications should consider a more focused, modern alternative to OpenPGP
|
||||||
|
// for their specific task. If you are required to interoperate with OpenPGP
|
||||||
|
// systems and need a maintained package, consider a community fork.
|
||||||
|
// See https://golang.org/issue/44226.
|
||||||
package packet // import "golang.org/x/crypto/openpgp/packet"
|
package packet // import "golang.org/x/crypto/openpgp/packet"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -3,6 +3,12 @@
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// Package openpgp implements high level operations on OpenPGP messages.
|
// Package openpgp implements high level operations on OpenPGP messages.
|
||||||
|
//
|
||||||
|
// Deprecated: this package is unmaintained except for security fixes. New
|
||||||
|
// applications should consider a more focused, modern alternative to OpenPGP
|
||||||
|
// for their specific task. If you are required to interoperate with OpenPGP
|
||||||
|
// systems and need a maintained package, consider a community fork.
|
||||||
|
// See https://golang.org/issue/44226.
|
||||||
package openpgp // import "golang.org/x/crypto/openpgp"
|
package openpgp // import "golang.org/x/crypto/openpgp"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -4,6 +4,12 @@
|
||||||
|
|
||||||
// Package s2k implements the various OpenPGP string-to-key transforms as
|
// Package s2k implements the various OpenPGP string-to-key transforms as
|
||||||
// specified in RFC 4800 section 3.7.1.
|
// specified in RFC 4800 section 3.7.1.
|
||||||
|
//
|
||||||
|
// Deprecated: this package is unmaintained except for security fixes. New
|
||||||
|
// applications should consider a more focused, modern alternative to OpenPGP
|
||||||
|
// for their specific task. If you are required to interoperate with OpenPGP
|
||||||
|
// systems and need a maintained package, consider a community fork.
|
||||||
|
// See https://golang.org/issue/44226.
|
||||||
package s2k // import "golang.org/x/crypto/openpgp/s2k"
|
package s2k // import "golang.org/x/crypto/openpgp/s2k"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
// 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 || dragonfly || freebsd || linux || netbsd || openbsd || solaris
|
||||||
|
// +build darwin dragonfly freebsd linux netbsd openbsd solaris
|
||||||
|
|
||||||
|
package socket
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ioComplete checks the flags and result of a syscall, to be used as return
|
||||||
|
// value in a syscall.RawConn.Read or Write callback.
|
||||||
|
func ioComplete(flags int, operr error) bool {
|
||||||
|
if flags&syscall.MSG_DONTWAIT != 0 {
|
||||||
|
// Caller explicitly said don't wait, so always return immediately.
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if operr == syscall.EAGAIN || operr == syscall.EWOULDBLOCK {
|
||||||
|
// No data available, block for I/O and try again.
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
// 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 aix || windows || zos
|
||||||
|
// +build aix windows zos
|
||||||
|
|
||||||
|
package socket
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ioComplete checks the flags and result of a syscall, to be used as return
|
||||||
|
// value in a syscall.RawConn.Read or Write callback.
|
||||||
|
func ioComplete(flags int, operr error) bool {
|
||||||
|
if operr == syscall.EAGAIN || operr == syscall.EWOULDBLOCK {
|
||||||
|
// No data available, block for I/O and try again.
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
|
@ -10,7 +10,6 @@ package socket
|
||||||
import (
|
import (
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"syscall"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) {
|
func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) {
|
||||||
|
@ -28,10 +27,7 @@ func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) {
|
||||||
var n int
|
var n int
|
||||||
fn := func(s uintptr) bool {
|
fn := func(s uintptr) bool {
|
||||||
n, operr = recvmmsg(s, hs, flags)
|
n, operr = recvmmsg(s, hs, flags)
|
||||||
if operr == syscall.EAGAIN {
|
return ioComplete(flags, operr)
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
if err := c.c.Read(fn); err != nil {
|
if err := c.c.Read(fn); err != nil {
|
||||||
return n, err
|
return n, err
|
||||||
|
@ -60,10 +56,7 @@ func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) {
|
||||||
var n int
|
var n int
|
||||||
fn := func(s uintptr) bool {
|
fn := func(s uintptr) bool {
|
||||||
n, operr = sendmmsg(s, hs, flags)
|
n, operr = sendmmsg(s, hs, flags)
|
||||||
if operr == syscall.EAGAIN {
|
return ioComplete(flags, operr)
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
if err := c.c.Write(fn); err != nil {
|
if err := c.c.Write(fn); err != nil {
|
||||||
return n, err
|
return n, err
|
||||||
|
|
|
@ -9,7 +9,6 @@ package socket
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"syscall"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *Conn) recvMsg(m *Message, flags int) error {
|
func (c *Conn) recvMsg(m *Message, flags int) error {
|
||||||
|
@ -25,10 +24,7 @@ func (c *Conn) recvMsg(m *Message, flags int) error {
|
||||||
var n int
|
var n int
|
||||||
fn := func(s uintptr) bool {
|
fn := func(s uintptr) bool {
|
||||||
n, operr = recvmsg(s, &h, flags)
|
n, operr = recvmsg(s, &h, flags)
|
||||||
if operr == syscall.EAGAIN || operr == syscall.EWOULDBLOCK {
|
return ioComplete(flags, operr)
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
if err := c.c.Read(fn); err != nil {
|
if err := c.c.Read(fn); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -64,10 +60,7 @@ func (c *Conn) sendMsg(m *Message, flags int) error {
|
||||||
var n int
|
var n int
|
||||||
fn := func(s uintptr) bool {
|
fn := func(s uintptr) bool {
|
||||||
n, operr = sendmsg(s, &h, flags)
|
n, operr = sendmsg(s, &h, flags)
|
||||||
if operr == syscall.EAGAIN || operr == syscall.EWOULDBLOCK {
|
return ioComplete(flags, operr)
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
if err := c.c.Write(fn); err != nil {
|
if err := c.c.Write(fn); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -56,6 +56,7 @@ var X86 struct {
|
||||||
HasAVX512BF16 bool // Advanced vector extension 512 BFloat16 Instructions
|
HasAVX512BF16 bool // Advanced vector extension 512 BFloat16 Instructions
|
||||||
HasBMI1 bool // Bit manipulation instruction set 1
|
HasBMI1 bool // Bit manipulation instruction set 1
|
||||||
HasBMI2 bool // Bit manipulation instruction set 2
|
HasBMI2 bool // Bit manipulation instruction set 2
|
||||||
|
HasCX16 bool // Compare and exchange 16 Bytes
|
||||||
HasERMS bool // Enhanced REP for MOVSB and STOSB
|
HasERMS bool // Enhanced REP for MOVSB and STOSB
|
||||||
HasFMA bool // Fused-multiply-add instructions
|
HasFMA bool // Fused-multiply-add instructions
|
||||||
HasOSXSAVE bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers.
|
HasOSXSAVE bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers.
|
||||||
|
|
|
@ -39,6 +39,7 @@ func initOptions() {
|
||||||
{Name: "avx512bf16", Feature: &X86.HasAVX512BF16},
|
{Name: "avx512bf16", Feature: &X86.HasAVX512BF16},
|
||||||
{Name: "bmi1", Feature: &X86.HasBMI1},
|
{Name: "bmi1", Feature: &X86.HasBMI1},
|
||||||
{Name: "bmi2", Feature: &X86.HasBMI2},
|
{Name: "bmi2", Feature: &X86.HasBMI2},
|
||||||
|
{Name: "cx16", Feature: &X86.HasCX16},
|
||||||
{Name: "erms", Feature: &X86.HasERMS},
|
{Name: "erms", Feature: &X86.HasERMS},
|
||||||
{Name: "fma", Feature: &X86.HasFMA},
|
{Name: "fma", Feature: &X86.HasFMA},
|
||||||
{Name: "osxsave", Feature: &X86.HasOSXSAVE},
|
{Name: "osxsave", Feature: &X86.HasOSXSAVE},
|
||||||
|
@ -73,6 +74,7 @@ func archInit() {
|
||||||
X86.HasPCLMULQDQ = isSet(1, ecx1)
|
X86.HasPCLMULQDQ = isSet(1, ecx1)
|
||||||
X86.HasSSSE3 = isSet(9, ecx1)
|
X86.HasSSSE3 = isSet(9, ecx1)
|
||||||
X86.HasFMA = isSet(12, ecx1)
|
X86.HasFMA = isSet(12, ecx1)
|
||||||
|
X86.HasCX16 = isSet(13, ecx1)
|
||||||
X86.HasSSE41 = isSet(19, ecx1)
|
X86.HasSSE41 = isSet(19, ecx1)
|
||||||
X86.HasSSE42 = isSet(20, ecx1)
|
X86.HasSSE42 = isSet(20, ecx1)
|
||||||
X86.HasPOPCNT = isSet(23, ecx1)
|
X86.HasPOPCNT = isSet(23, ecx1)
|
||||||
|
|
|
@ -0,0 +1,149 @@
|
||||||
|
// 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 linux
|
||||||
|
// +build linux
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Helpers for dealing with ifreq since it contains a union and thus requires a
|
||||||
|
// lot of unsafe.Pointer casts to use properly.
|
||||||
|
|
||||||
|
// An Ifreq is a type-safe wrapper around the raw ifreq struct. An Ifreq
|
||||||
|
// contains an interface name and a union of arbitrary data which can be
|
||||||
|
// accessed using the Ifreq's methods. To create an Ifreq, use the NewIfreq
|
||||||
|
// function.
|
||||||
|
//
|
||||||
|
// Use the Name method to access the stored interface name. The union data
|
||||||
|
// fields can be get and set using the following methods:
|
||||||
|
// - Uint16/SetUint16: flags
|
||||||
|
// - Uint32/SetUint32: ifindex, metric, mtu
|
||||||
|
type Ifreq struct{ raw ifreq }
|
||||||
|
|
||||||
|
// NewIfreq creates an Ifreq with the input network interface name after
|
||||||
|
// validating the name does not exceed IFNAMSIZ-1 (trailing NULL required)
|
||||||
|
// bytes.
|
||||||
|
func NewIfreq(name string) (*Ifreq, error) {
|
||||||
|
// Leave room for terminating NULL byte.
|
||||||
|
if len(name) >= IFNAMSIZ {
|
||||||
|
return nil, EINVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
var ifr ifreq
|
||||||
|
copy(ifr.Ifrn[:], name)
|
||||||
|
|
||||||
|
return &Ifreq{raw: ifr}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(mdlayher): get/set methods for hardware address sockaddr, char array, etc.
|
||||||
|
|
||||||
|
// Name returns the interface name associated with the Ifreq.
|
||||||
|
func (ifr *Ifreq) Name() string {
|
||||||
|
// BytePtrToString requires a NULL terminator or the program may crash. If
|
||||||
|
// 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
|
||||||
|
// sockaddr ioctls. For convenience, we expose these as Inet4Addr since the Port
|
||||||
|
// field and other data is always empty.
|
||||||
|
|
||||||
|
// Inet4Addr returns the Ifreq union data from an embedded sockaddr as a C
|
||||||
|
// in_addr/Go []byte (4-byte IPv4 address) value. If the sockaddr family is not
|
||||||
|
// AF_INET, an error is returned.
|
||||||
|
func (ifr *Ifreq) Inet4Addr() ([]byte, error) {
|
||||||
|
raw := *(*RawSockaddrInet4)(unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]))
|
||||||
|
if raw.Family != AF_INET {
|
||||||
|
// Cannot safely interpret raw.Addr bytes as an IPv4 address.
|
||||||
|
return nil, EINVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
return raw.Addr[:], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetInet4Addr sets a C in_addr/Go []byte (4-byte IPv4 address) value in an
|
||||||
|
// embedded sockaddr within the Ifreq's union data. v must be 4 bytes in length
|
||||||
|
// or an error will be returned.
|
||||||
|
func (ifr *Ifreq) SetInet4Addr(v []byte) error {
|
||||||
|
if len(v) != 4 {
|
||||||
|
return EINVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
var addr [4]byte
|
||||||
|
copy(addr[:], v)
|
||||||
|
|
||||||
|
ifr.clear()
|
||||||
|
*(*RawSockaddrInet4)(
|
||||||
|
unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]),
|
||||||
|
) = RawSockaddrInet4{
|
||||||
|
// Always set IP family as ioctls would require it anyway.
|
||||||
|
Family: AF_INET,
|
||||||
|
Addr: addr,
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uint16 returns the Ifreq union data as a C short/Go uint16 value.
|
||||||
|
func (ifr *Ifreq) Uint16() uint16 {
|
||||||
|
return *(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0]))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetUint16 sets a C short/Go uint16 value as the Ifreq's union data.
|
||||||
|
func (ifr *Ifreq) SetUint16(v uint16) {
|
||||||
|
ifr.clear()
|
||||||
|
*(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0])) = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uint32 returns the Ifreq union data as a C int/Go uint32 value.
|
||||||
|
func (ifr *Ifreq) Uint32() uint32 {
|
||||||
|
return *(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0]))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetUint32 sets a C int/Go uint32 value as the Ifreq's union data.
|
||||||
|
func (ifr *Ifreq) SetUint32(v uint32) {
|
||||||
|
ifr.clear()
|
||||||
|
*(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0])) = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// clear zeroes the ifreq's union field to prevent trailing garbage data from
|
||||||
|
// being sent to the kernel if an ifreq is reused.
|
||||||
|
func (ifr *Ifreq) clear() {
|
||||||
|
for i := range ifr.raw.Ifru {
|
||||||
|
ifr.raw.Ifru[i] = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(mdlayher): export as IfreqData? For now we can provide helpers such as
|
||||||
|
// IoctlGetEthtoolDrvinfo which use these APIs under the hood.
|
||||||
|
|
||||||
|
// An ifreqData is an Ifreq which carries pointer data. To produce an ifreqData,
|
||||||
|
// use the Ifreq.withData method.
|
||||||
|
type ifreqData struct {
|
||||||
|
name [IFNAMSIZ]byte
|
||||||
|
// A type separate from ifreq is required in order to comply with the
|
||||||
|
// unsafe.Pointer rules since the "pointer-ness" of data would not be
|
||||||
|
// preserved if it were cast into the byte array of a raw ifreq.
|
||||||
|
data unsafe.Pointer
|
||||||
|
// Pad to the same size as ifreq.
|
||||||
|
_ [len(ifreq{}.Ifru) - SizeofPtr]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// withData produces an ifreqData with the pointer p set for ioctls which require
|
||||||
|
// arbitrary pointer data.
|
||||||
|
func (ifr Ifreq) withData(p unsafe.Pointer) ifreqData {
|
||||||
|
return ifreqData{
|
||||||
|
name: ifr.raw.Ifrn,
|
||||||
|
data: p,
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,7 +5,6 @@
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"runtime"
|
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -22,56 +21,42 @@ func IoctlRetInt(fd int, req uint) (int, error) {
|
||||||
|
|
||||||
func IoctlGetUint32(fd int, req uint) (uint32, error) {
|
func IoctlGetUint32(fd int, req uint) (uint32, error) {
|
||||||
var value uint32
|
var value uint32
|
||||||
err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
|
err := ioctlPtr(fd, req, unsafe.Pointer(&value))
|
||||||
return value, err
|
return value, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func IoctlGetRTCTime(fd int) (*RTCTime, error) {
|
func IoctlGetRTCTime(fd int) (*RTCTime, error) {
|
||||||
var value RTCTime
|
var value RTCTime
|
||||||
err := ioctl(fd, RTC_RD_TIME, uintptr(unsafe.Pointer(&value)))
|
err := ioctlPtr(fd, RTC_RD_TIME, unsafe.Pointer(&value))
|
||||||
return &value, err
|
return &value, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func IoctlSetRTCTime(fd int, value *RTCTime) error {
|
func IoctlSetRTCTime(fd int, value *RTCTime) error {
|
||||||
err := ioctl(fd, RTC_SET_TIME, uintptr(unsafe.Pointer(value)))
|
return ioctlPtr(fd, RTC_SET_TIME, unsafe.Pointer(value))
|
||||||
runtime.KeepAlive(value)
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) {
|
func IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) {
|
||||||
var value RTCWkAlrm
|
var value RTCWkAlrm
|
||||||
err := ioctl(fd, RTC_WKALM_RD, uintptr(unsafe.Pointer(&value)))
|
err := ioctlPtr(fd, RTC_WKALM_RD, unsafe.Pointer(&value))
|
||||||
return &value, err
|
return &value, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error {
|
func IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error {
|
||||||
err := ioctl(fd, RTC_WKALM_SET, uintptr(unsafe.Pointer(value)))
|
return ioctlPtr(fd, RTC_WKALM_SET, unsafe.Pointer(value))
|
||||||
runtime.KeepAlive(value)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
type ifreqEthtool struct {
|
|
||||||
name [IFNAMSIZ]byte
|
|
||||||
data unsafe.Pointer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// IoctlGetEthtoolDrvinfo fetches ethtool driver information for the network
|
// IoctlGetEthtoolDrvinfo fetches ethtool driver information for the network
|
||||||
// device specified by ifname.
|
// device specified by ifname.
|
||||||
func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) {
|
func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) {
|
||||||
// Leave room for terminating NULL byte.
|
ifr, err := NewIfreq(ifname)
|
||||||
if len(ifname) >= IFNAMSIZ {
|
if err != nil {
|
||||||
return nil, EINVAL
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
value := EthtoolDrvinfo{
|
value := EthtoolDrvinfo{Cmd: ETHTOOL_GDRVINFO}
|
||||||
Cmd: ETHTOOL_GDRVINFO,
|
ifrd := ifr.withData(unsafe.Pointer(&value))
|
||||||
}
|
|
||||||
ifreq := ifreqEthtool{
|
err = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd)
|
||||||
data: unsafe.Pointer(&value),
|
|
||||||
}
|
|
||||||
copy(ifreq.name[:], ifname)
|
|
||||||
err := ioctl(fd, SIOCETHTOOL, uintptr(unsafe.Pointer(&ifreq)))
|
|
||||||
runtime.KeepAlive(ifreq)
|
|
||||||
return &value, err
|
return &value, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +65,7 @@ func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) {
|
||||||
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
|
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
|
||||||
func IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) {
|
func IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) {
|
||||||
var value WatchdogInfo
|
var value WatchdogInfo
|
||||||
err := ioctl(fd, WDIOC_GETSUPPORT, uintptr(unsafe.Pointer(&value)))
|
err := ioctlPtr(fd, WDIOC_GETSUPPORT, unsafe.Pointer(&value))
|
||||||
return &value, err
|
return &value, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,6 +73,7 @@ func IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) {
|
||||||
// more information, see:
|
// more information, see:
|
||||||
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
|
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
|
||||||
func IoctlWatchdogKeepalive(fd int) error {
|
func IoctlWatchdogKeepalive(fd int) error {
|
||||||
|
// arg is ignored and not a pointer, so ioctl is fine instead of ioctlPtr.
|
||||||
return ioctl(fd, WDIOC_KEEPALIVE, 0)
|
return ioctl(fd, WDIOC_KEEPALIVE, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,9 +81,7 @@ func IoctlWatchdogKeepalive(fd int) error {
|
||||||
// range of data conveyed in value to the file associated with the file
|
// range of data conveyed in value to the file associated with the file
|
||||||
// descriptor destFd. See the ioctl_ficlonerange(2) man page for details.
|
// descriptor destFd. See the ioctl_ficlonerange(2) man page for details.
|
||||||
func IoctlFileCloneRange(destFd int, value *FileCloneRange) error {
|
func IoctlFileCloneRange(destFd int, value *FileCloneRange) error {
|
||||||
err := ioctl(destFd, FICLONERANGE, uintptr(unsafe.Pointer(value)))
|
return ioctlPtr(destFd, FICLONERANGE, unsafe.Pointer(value))
|
||||||
runtime.KeepAlive(value)
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// IoctlFileClone performs an FICLONE ioctl operation to clone the entire file
|
// IoctlFileClone performs an FICLONE ioctl operation to clone the entire file
|
||||||
|
@ -148,7 +132,7 @@ func IoctlFileDedupeRange(srcFd int, value *FileDedupeRange) error {
|
||||||
rawinfo.Reserved = value.Info[i].Reserved
|
rawinfo.Reserved = value.Info[i].Reserved
|
||||||
}
|
}
|
||||||
|
|
||||||
err := ioctl(srcFd, FIDEDUPERANGE, uintptr(unsafe.Pointer(&buf[0])))
|
err := ioctlPtr(srcFd, FIDEDUPERANGE, unsafe.Pointer(&buf[0]))
|
||||||
|
|
||||||
// Output
|
// Output
|
||||||
for i := range value.Info {
|
for i := range value.Info {
|
||||||
|
@ -166,31 +150,47 @@ func IoctlFileDedupeRange(srcFd int, value *FileDedupeRange) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func IoctlHIDGetDesc(fd int, value *HIDRawReportDescriptor) error {
|
func IoctlHIDGetDesc(fd int, value *HIDRawReportDescriptor) error {
|
||||||
err := ioctl(fd, HIDIOCGRDESC, uintptr(unsafe.Pointer(value)))
|
return ioctlPtr(fd, HIDIOCGRDESC, unsafe.Pointer(value))
|
||||||
runtime.KeepAlive(value)
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func IoctlHIDGetRawInfo(fd int) (*HIDRawDevInfo, error) {
|
func IoctlHIDGetRawInfo(fd int) (*HIDRawDevInfo, error) {
|
||||||
var value HIDRawDevInfo
|
var value HIDRawDevInfo
|
||||||
err := ioctl(fd, HIDIOCGRAWINFO, uintptr(unsafe.Pointer(&value)))
|
err := ioctlPtr(fd, HIDIOCGRAWINFO, unsafe.Pointer(&value))
|
||||||
return &value, err
|
return &value, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func IoctlHIDGetRawName(fd int) (string, error) {
|
func IoctlHIDGetRawName(fd int) (string, error) {
|
||||||
var value [_HIDIOCGRAWNAME_LEN]byte
|
var value [_HIDIOCGRAWNAME_LEN]byte
|
||||||
err := ioctl(fd, _HIDIOCGRAWNAME, uintptr(unsafe.Pointer(&value[0])))
|
err := ioctlPtr(fd, _HIDIOCGRAWNAME, unsafe.Pointer(&value[0]))
|
||||||
return ByteSliceToString(value[:]), err
|
return ByteSliceToString(value[:]), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func IoctlHIDGetRawPhys(fd int) (string, error) {
|
func IoctlHIDGetRawPhys(fd int) (string, error) {
|
||||||
var value [_HIDIOCGRAWPHYS_LEN]byte
|
var value [_HIDIOCGRAWPHYS_LEN]byte
|
||||||
err := ioctl(fd, _HIDIOCGRAWPHYS, uintptr(unsafe.Pointer(&value[0])))
|
err := ioctlPtr(fd, _HIDIOCGRAWPHYS, unsafe.Pointer(&value[0]))
|
||||||
return ByteSliceToString(value[:]), err
|
return ByteSliceToString(value[:]), err
|
||||||
}
|
}
|
||||||
|
|
||||||
func IoctlHIDGetRawUniq(fd int) (string, error) {
|
func IoctlHIDGetRawUniq(fd int) (string, error) {
|
||||||
var value [_HIDIOCGRAWUNIQ_LEN]byte
|
var value [_HIDIOCGRAWUNIQ_LEN]byte
|
||||||
err := ioctl(fd, _HIDIOCGRAWUNIQ, uintptr(unsafe.Pointer(&value[0])))
|
err := ioctlPtr(fd, _HIDIOCGRAWUNIQ, unsafe.Pointer(&value[0]))
|
||||||
return ByteSliceToString(value[:]), err
|
return ByteSliceToString(value[:]), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IoctlIfreq performs an ioctl using an Ifreq structure for input and/or
|
||||||
|
// output. See the netdevice(7) man page for details.
|
||||||
|
func IoctlIfreq(fd int, req uint, value *Ifreq) error {
|
||||||
|
// It is possible we will add more fields to *Ifreq itself later to prevent
|
||||||
|
// misuse, so pass the raw *ifreq directly.
|
||||||
|
return ioctlPtr(fd, req, unsafe.Pointer(&value.raw))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(mdlayher): export if and when IfreqData is exported.
|
||||||
|
|
||||||
|
// ioctlIfreqData performs an ioctl using an ifreqData structure for input
|
||||||
|
// and/or output. See the netdevice(7) man page for details.
|
||||||
|
func ioctlIfreqData(fd int, req uint, value *ifreqData) error {
|
||||||
|
// The memory layout of IfreqData (type-safe) and ifreq (not type-safe) are
|
||||||
|
// identical so pass *IfreqData directly.
|
||||||
|
return ioctlPtr(fd, req, unsafe.Pointer(value))
|
||||||
|
}
|
||||||
|
|
|
@ -217,8 +217,6 @@ struct ltchars {
|
||||||
#include <linux/genetlink.h>
|
#include <linux/genetlink.h>
|
||||||
#include <linux/hdreg.h>
|
#include <linux/hdreg.h>
|
||||||
#include <linux/hidraw.h>
|
#include <linux/hidraw.h>
|
||||||
#include <linux/icmp.h>
|
|
||||||
#include <linux/icmpv6.h>
|
|
||||||
#include <linux/if.h>
|
#include <linux/if.h>
|
||||||
#include <linux/if_addr.h>
|
#include <linux/if_addr.h>
|
||||||
#include <linux/if_alg.h>
|
#include <linux/if_alg.h>
|
||||||
|
@ -502,7 +500,7 @@ ccflags="$@"
|
||||||
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
|
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
|
||||||
$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
|
$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
|
||||||
$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||
|
$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||
|
||||||
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL)_/ ||
|
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT)_/ ||
|
||||||
$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||
|
$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||
|
||||||
$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||
|
$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||
|
||||||
$2 ~ /^RAW_PAYLOAD_/ ||
|
$2 ~ /^RAW_PAYLOAD_/ ||
|
||||||
|
|
|
@ -66,11 +66,18 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
|
||||||
return fchmodat(dirfd, path, mode)
|
return fchmodat(dirfd, path, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
//sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL
|
||||||
|
//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL
|
||||||
|
|
||||||
// ioctl itself should not be exposed directly, but additional get/set
|
// ioctl itself should not be exposed directly, but additional get/set functions
|
||||||
// functions for specific types are permissible.
|
// for specific types are permissible. These are defined in ioctl.go and
|
||||||
// These are defined in ioctl.go and ioctl_linux.go.
|
// ioctl_linux.go.
|
||||||
|
//
|
||||||
|
// The third argument to ioctl is often a pointer but sometimes an integer.
|
||||||
|
// Callers should use ioctlPtr when the third argument is a pointer and ioctl
|
||||||
|
// when the third argument is an integer.
|
||||||
|
//
|
||||||
|
// TODO: some existing code incorrectly uses ioctl when it should use ioctlPtr.
|
||||||
|
|
||||||
//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)
|
//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)
|
||||||
|
|
||||||
|
@ -1348,6 +1355,13 @@ func SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error {
|
||||||
return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))
|
return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetsockoptTCPRepairOpt(fd, level, opt int, o []TCPRepairOpt) (err error) {
|
||||||
|
if len(o) == 0 {
|
||||||
|
return EINVAL
|
||||||
|
}
|
||||||
|
return setsockopt(fd, level, opt, unsafe.Pointer(&o[0]), uintptr(SizeofTCPRepairOpt*len(o)))
|
||||||
|
}
|
||||||
|
|
||||||
// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html)
|
// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html)
|
||||||
|
|
||||||
// KeyctlInt calls keyctl commands in which each argument is an int.
|
// KeyctlInt calls keyctl commands in which each argument is an int.
|
||||||
|
@ -1859,7 +1873,7 @@ func Getpgrp() (pid int) {
|
||||||
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
|
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
|
||||||
//sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error)
|
//sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error)
|
||||||
//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT
|
//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT
|
||||||
//sysnb prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64
|
//sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64
|
||||||
//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)
|
//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)
|
||||||
//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6
|
//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6
|
||||||
//sys read(fd int, p []byte) (n int, err error)
|
//sys read(fd int, p []byte) (n int, err error)
|
||||||
|
|
|
@ -105,7 +105,7 @@ const rlimInf32 = ^uint32(0)
|
||||||
const rlimInf64 = ^uint64(0)
|
const rlimInf64 = ^uint64(0)
|
||||||
|
|
||||||
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
err = prlimit(0, resource, nil, rlim)
|
err = Prlimit(0, resource, nil, rlim)
|
||||||
if err != ENOSYS {
|
if err != ENOSYS {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -133,7 +133,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
|
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
|
||||||
|
|
||||||
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
err = prlimit(0, resource, rlim, nil)
|
err = Prlimit(0, resource, rlim, nil)
|
||||||
if err != ENOSYS {
|
if err != ENOSYS {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -184,7 +184,7 @@ const rlimInf32 = ^uint32(0)
|
||||||
const rlimInf64 = ^uint64(0)
|
const rlimInf64 = ^uint64(0)
|
||||||
|
|
||||||
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
err = prlimit(0, resource, nil, rlim)
|
err = Prlimit(0, resource, nil, rlim)
|
||||||
if err != ENOSYS {
|
if err != ENOSYS {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -212,7 +212,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
|
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
|
||||||
|
|
||||||
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
err = prlimit(0, resource, rlim, nil)
|
err = Prlimit(0, resource, rlim, nil)
|
||||||
if err != ENOSYS {
|
if err != ENOSYS {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -171,7 +171,7 @@ func Pipe2(p []int, flags int) (err error) {
|
||||||
|
|
||||||
// Getrlimit prefers the prlimit64 system call. See issue 38604.
|
// Getrlimit prefers the prlimit64 system call. See issue 38604.
|
||||||
func Getrlimit(resource int, rlim *Rlimit) error {
|
func Getrlimit(resource int, rlim *Rlimit) error {
|
||||||
err := prlimit(0, resource, nil, rlim)
|
err := Prlimit(0, resource, nil, rlim)
|
||||||
if err != ENOSYS {
|
if err != ENOSYS {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -180,7 +180,7 @@ func Getrlimit(resource int, rlim *Rlimit) error {
|
||||||
|
|
||||||
// Setrlimit prefers the prlimit64 system call. See issue 38604.
|
// Setrlimit prefers the prlimit64 system call. See issue 38604.
|
||||||
func Setrlimit(resource int, rlim *Rlimit) error {
|
func Setrlimit(resource int, rlim *Rlimit) error {
|
||||||
err := prlimit(0, resource, rlim, nil)
|
err := Prlimit(0, resource, rlim, nil)
|
||||||
if err != ENOSYS {
|
if err != ENOSYS {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -157,7 +157,7 @@ type rlimit32 struct {
|
||||||
//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT
|
//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT
|
||||||
|
|
||||||
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
err = prlimit(0, resource, nil, rlim)
|
err = Prlimit(0, resource, nil, rlim)
|
||||||
if err != ENOSYS {
|
if err != ENOSYS {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -185,7 +185,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
|
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
|
||||||
|
|
||||||
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
err = prlimit(0, resource, rlim, nil)
|
err = Prlimit(0, resource, rlim, nil)
|
||||||
if err != ENOSYS {
|
if err != ENOSYS {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,7 @@
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build linux && ppc
|
//go:build linux && ppc
|
||||||
// +build linux
|
// +build linux,ppc
|
||||||
// +build ppc
|
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
@ -143,7 +142,7 @@ const rlimInf32 = ^uint32(0)
|
||||||
const rlimInf64 = ^uint64(0)
|
const rlimInf64 = ^uint64(0)
|
||||||
|
|
||||||
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
err = prlimit(0, resource, nil, rlim)
|
err = Prlimit(0, resource, nil, rlim)
|
||||||
if err != ENOSYS {
|
if err != ENOSYS {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -171,7 +170,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
|
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
|
||||||
|
|
||||||
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
err = prlimit(0, resource, rlim, nil)
|
err = Prlimit(0, resource, rlim, nil)
|
||||||
if err != ENOSYS {
|
if err != ENOSYS {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,10 @@
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -744,3 +747,240 @@ func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, e
|
||||||
func Munmap(b []byte) (err error) {
|
func Munmap(b []byte) (err error) {
|
||||||
return mapper.Munmap(b)
|
return mapper.Munmap(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Event Ports
|
||||||
|
|
||||||
|
type fileObjCookie struct {
|
||||||
|
fobj *fileObj
|
||||||
|
cookie interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// EventPort provides a safe abstraction on top of Solaris/illumos Event Ports.
|
||||||
|
type EventPort struct {
|
||||||
|
port int
|
||||||
|
mu sync.Mutex
|
||||||
|
fds map[uintptr]interface{}
|
||||||
|
paths map[string]*fileObjCookie
|
||||||
|
}
|
||||||
|
|
||||||
|
// PortEvent is an abstraction of the port_event C struct.
|
||||||
|
// Compare Source against PORT_SOURCE_FILE or PORT_SOURCE_FD
|
||||||
|
// to see if Path or Fd was the event source. The other will be
|
||||||
|
// uninitialized.
|
||||||
|
type PortEvent struct {
|
||||||
|
Cookie interface{}
|
||||||
|
Events int32
|
||||||
|
Fd uintptr
|
||||||
|
Path string
|
||||||
|
Source uint16
|
||||||
|
fobj *fileObj
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewEventPort creates a new EventPort including the
|
||||||
|
// underlying call to port_create(3c).
|
||||||
|
func NewEventPort() (*EventPort, error) {
|
||||||
|
port, err := port_create()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
e := &EventPort{
|
||||||
|
port: port,
|
||||||
|
fds: make(map[uintptr]interface{}),
|
||||||
|
paths: make(map[string]*fileObjCookie),
|
||||||
|
}
|
||||||
|
return e, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys port_create() (n int, err error)
|
||||||
|
//sys port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error)
|
||||||
|
//sys port_dissociate(port int, source int, object uintptr) (n int, err error)
|
||||||
|
//sys port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error)
|
||||||
|
//sys port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error)
|
||||||
|
|
||||||
|
// Close closes the event port.
|
||||||
|
func (e *EventPort) Close() error {
|
||||||
|
e.mu.Lock()
|
||||||
|
defer e.mu.Unlock()
|
||||||
|
e.fds = nil
|
||||||
|
e.paths = nil
|
||||||
|
return Close(e.port)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PathIsWatched checks to see if path is associated with this EventPort.
|
||||||
|
func (e *EventPort) PathIsWatched(path string) bool {
|
||||||
|
e.mu.Lock()
|
||||||
|
defer e.mu.Unlock()
|
||||||
|
_, found := e.paths[path]
|
||||||
|
return found
|
||||||
|
}
|
||||||
|
|
||||||
|
// FdIsWatched checks to see if fd is associated with this EventPort.
|
||||||
|
func (e *EventPort) FdIsWatched(fd uintptr) bool {
|
||||||
|
e.mu.Lock()
|
||||||
|
defer e.mu.Unlock()
|
||||||
|
_, found := e.fds[fd]
|
||||||
|
return found
|
||||||
|
}
|
||||||
|
|
||||||
|
// AssociatePath wraps port_associate(3c) for a filesystem path including
|
||||||
|
// creating the necessary file_obj from the provided stat information.
|
||||||
|
func (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, cookie interface{}) error {
|
||||||
|
e.mu.Lock()
|
||||||
|
defer e.mu.Unlock()
|
||||||
|
if _, found := e.paths[path]; found {
|
||||||
|
return fmt.Errorf("%v is already associated with this Event Port", path)
|
||||||
|
}
|
||||||
|
fobj, err := createFileObj(path, stat)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fCookie := &fileObjCookie{fobj, cookie}
|
||||||
|
_, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fobj)), events, (*byte)(unsafe.Pointer(&fCookie.cookie)))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
e.paths[path] = fCookie
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DissociatePath wraps port_dissociate(3c) for a filesystem path.
|
||||||
|
func (e *EventPort) DissociatePath(path string) error {
|
||||||
|
e.mu.Lock()
|
||||||
|
defer e.mu.Unlock()
|
||||||
|
f, ok := e.paths[path]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("%v is not associated with this Event Port", path)
|
||||||
|
}
|
||||||
|
_, err := port_dissociate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(f.fobj)))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
delete(e.paths, path)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// AssociateFd wraps calls to port_associate(3c) on file descriptors.
|
||||||
|
func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) error {
|
||||||
|
e.mu.Lock()
|
||||||
|
defer e.mu.Unlock()
|
||||||
|
if _, found := e.fds[fd]; found {
|
||||||
|
return fmt.Errorf("%v is already associated with this Event Port", fd)
|
||||||
|
}
|
||||||
|
pcookie := &cookie
|
||||||
|
_, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(pcookie)))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
e.fds[fd] = pcookie
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DissociateFd wraps calls to port_dissociate(3c) on file descriptors.
|
||||||
|
func (e *EventPort) DissociateFd(fd uintptr) error {
|
||||||
|
e.mu.Lock()
|
||||||
|
defer e.mu.Unlock()
|
||||||
|
_, ok := e.fds[fd]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("%v is not associated with this Event Port", fd)
|
||||||
|
}
|
||||||
|
_, err := port_dissociate(e.port, PORT_SOURCE_FD, fd)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
delete(e.fds, fd)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func createFileObj(name string, stat os.FileInfo) (*fileObj, error) {
|
||||||
|
fobj := new(fileObj)
|
||||||
|
bs, err := ByteSliceFromString(name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
fobj.Name = (*int8)(unsafe.Pointer(&bs[0]))
|
||||||
|
s := stat.Sys().(*syscall.Stat_t)
|
||||||
|
fobj.Atim.Sec = s.Atim.Sec
|
||||||
|
fobj.Atim.Nsec = s.Atim.Nsec
|
||||||
|
fobj.Mtim.Sec = s.Mtim.Sec
|
||||||
|
fobj.Mtim.Nsec = s.Mtim.Nsec
|
||||||
|
fobj.Ctim.Sec = s.Ctim.Sec
|
||||||
|
fobj.Ctim.Nsec = s.Ctim.Nsec
|
||||||
|
return fobj, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetOne wraps port_get(3c) and returns a single PortEvent.
|
||||||
|
func (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) {
|
||||||
|
pe := new(portEvent)
|
||||||
|
_, err := port_get(e.port, pe, t)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
p := new(PortEvent)
|
||||||
|
p.Events = pe.Events
|
||||||
|
p.Source = pe.Source
|
||||||
|
e.mu.Lock()
|
||||||
|
defer e.mu.Unlock()
|
||||||
|
switch pe.Source {
|
||||||
|
case PORT_SOURCE_FD:
|
||||||
|
p.Fd = uintptr(pe.Object)
|
||||||
|
cookie := (*interface{})(unsafe.Pointer(pe.User))
|
||||||
|
p.Cookie = *cookie
|
||||||
|
delete(e.fds, p.Fd)
|
||||||
|
case PORT_SOURCE_FILE:
|
||||||
|
p.fobj = (*fileObj)(unsafe.Pointer(uintptr(pe.Object)))
|
||||||
|
p.Path = BytePtrToString((*byte)(unsafe.Pointer(p.fobj.Name)))
|
||||||
|
cookie := (*interface{})(unsafe.Pointer(pe.User))
|
||||||
|
p.Cookie = *cookie
|
||||||
|
delete(e.paths, p.Path)
|
||||||
|
}
|
||||||
|
return p, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pending wraps port_getn(3c) and returns how many events are pending.
|
||||||
|
func (e *EventPort) Pending() (int, error) {
|
||||||
|
var n uint32 = 0
|
||||||
|
_, err := port_getn(e.port, nil, 0, &n, nil)
|
||||||
|
return int(n), err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get wraps port_getn(3c) and fills a slice of PortEvent.
|
||||||
|
// It will block until either min events have been received
|
||||||
|
// or the timeout has been exceeded. It will return how many
|
||||||
|
// events were actually received along with any error information.
|
||||||
|
func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error) {
|
||||||
|
if min == 0 {
|
||||||
|
return 0, fmt.Errorf("need to request at least one event or use Pending() instead")
|
||||||
|
}
|
||||||
|
if len(s) < min {
|
||||||
|
return 0, fmt.Errorf("len(s) (%d) is less than min events requested (%d)", len(s), min)
|
||||||
|
}
|
||||||
|
got := uint32(min)
|
||||||
|
max := uint32(len(s))
|
||||||
|
var err error
|
||||||
|
ps := make([]portEvent, max, max)
|
||||||
|
_, err = port_getn(e.port, &ps[0], max, &got, timeout)
|
||||||
|
// got will be trustworthy with ETIME, but not any other error.
|
||||||
|
if err != nil && err != ETIME {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
e.mu.Lock()
|
||||||
|
defer e.mu.Unlock()
|
||||||
|
for i := 0; i < int(got); i++ {
|
||||||
|
s[i].Events = ps[i].Events
|
||||||
|
s[i].Source = ps[i].Source
|
||||||
|
switch ps[i].Source {
|
||||||
|
case PORT_SOURCE_FD:
|
||||||
|
s[i].Fd = uintptr(ps[i].Object)
|
||||||
|
cookie := (*interface{})(unsafe.Pointer(ps[i].User))
|
||||||
|
s[i].Cookie = *cookie
|
||||||
|
delete(e.fds, s[i].Fd)
|
||||||
|
case PORT_SOURCE_FILE:
|
||||||
|
s[i].fobj = (*fileObj)(unsafe.Pointer(uintptr(ps[i].Object)))
|
||||||
|
s[i].Path = BytePtrToString((*byte)(unsafe.Pointer(s[i].fobj.Name)))
|
||||||
|
cookie := (*interface{})(unsafe.Pointer(ps[i].User))
|
||||||
|
s[i].Cookie = *cookie
|
||||||
|
delete(e.paths, s[i].Path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return int(got), err
|
||||||
|
}
|
||||||
|
|
|
@ -313,6 +313,10 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Send(s int, buf []byte, flags int) (err error) {
|
||||||
|
return sendto(s, buf, flags, nil, 0)
|
||||||
|
}
|
||||||
|
|
||||||
func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {
|
func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {
|
||||||
ptr, n, err := to.sockaddr()
|
ptr, n, err := to.sockaddr()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -1206,6 +1206,7 @@ const (
|
||||||
RTF_DONE = 0x40
|
RTF_DONE = 0x40
|
||||||
RTF_DYNAMIC = 0x10
|
RTF_DYNAMIC = 0x10
|
||||||
RTF_GATEWAY = 0x2
|
RTF_GATEWAY = 0x2
|
||||||
|
RTF_GLOBAL = 0x40000000
|
||||||
RTF_HOST = 0x4
|
RTF_HOST = 0x4
|
||||||
RTF_IFREF = 0x4000000
|
RTF_IFREF = 0x4000000
|
||||||
RTF_IFSCOPE = 0x1000000
|
RTF_IFSCOPE = 0x1000000
|
||||||
|
|
|
@ -1206,6 +1206,7 @@ const (
|
||||||
RTF_DONE = 0x40
|
RTF_DONE = 0x40
|
||||||
RTF_DYNAMIC = 0x10
|
RTF_DYNAMIC = 0x10
|
||||||
RTF_GATEWAY = 0x2
|
RTF_GATEWAY = 0x2
|
||||||
|
RTF_GLOBAL = 0x40000000
|
||||||
RTF_HOST = 0x4
|
RTF_HOST = 0x4
|
||||||
RTF_IFREF = 0x4000000
|
RTF_IFREF = 0x4000000
|
||||||
RTF_IFSCOPE = 0x1000000
|
RTF_IFSCOPE = 0x1000000
|
||||||
|
|
|
@ -228,6 +228,8 @@ const (
|
||||||
BPF_OR = 0x40
|
BPF_OR = 0x40
|
||||||
BPF_PSEUDO_BTF_ID = 0x3
|
BPF_PSEUDO_BTF_ID = 0x3
|
||||||
BPF_PSEUDO_CALL = 0x1
|
BPF_PSEUDO_CALL = 0x1
|
||||||
|
BPF_PSEUDO_FUNC = 0x4
|
||||||
|
BPF_PSEUDO_KFUNC_CALL = 0x2
|
||||||
BPF_PSEUDO_MAP_FD = 0x1
|
BPF_PSEUDO_MAP_FD = 0x1
|
||||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||||
BPF_RET = 0x6
|
BPF_RET = 0x6
|
||||||
|
@ -475,6 +477,8 @@ const (
|
||||||
DM_LIST_VERSIONS = 0xc138fd0d
|
DM_LIST_VERSIONS = 0xc138fd0d
|
||||||
DM_MAX_TYPE_NAME = 0x10
|
DM_MAX_TYPE_NAME = 0x10
|
||||||
DM_NAME_LEN = 0x80
|
DM_NAME_LEN = 0x80
|
||||||
|
DM_NAME_LIST_FLAG_DOESNT_HAVE_UUID = 0x2
|
||||||
|
DM_NAME_LIST_FLAG_HAS_UUID = 0x1
|
||||||
DM_NOFLUSH_FLAG = 0x800
|
DM_NOFLUSH_FLAG = 0x800
|
||||||
DM_PERSISTENT_DEV_FLAG = 0x8
|
DM_PERSISTENT_DEV_FLAG = 0x8
|
||||||
DM_QUERY_INACTIVE_TABLE_FLAG = 0x1000
|
DM_QUERY_INACTIVE_TABLE_FLAG = 0x1000
|
||||||
|
@ -494,9 +498,9 @@ const (
|
||||||
DM_UUID_FLAG = 0x4000
|
DM_UUID_FLAG = 0x4000
|
||||||
DM_UUID_LEN = 0x81
|
DM_UUID_LEN = 0x81
|
||||||
DM_VERSION = 0xc138fd00
|
DM_VERSION = 0xc138fd00
|
||||||
DM_VERSION_EXTRA = "-ioctl (2021-02-01)"
|
DM_VERSION_EXTRA = "-ioctl (2021-03-22)"
|
||||||
DM_VERSION_MAJOR = 0x4
|
DM_VERSION_MAJOR = 0x4
|
||||||
DM_VERSION_MINOR = 0x2c
|
DM_VERSION_MINOR = 0x2d
|
||||||
DM_VERSION_PATCHLEVEL = 0x0
|
DM_VERSION_PATCHLEVEL = 0x0
|
||||||
DT_BLK = 0x6
|
DT_BLK = 0x6
|
||||||
DT_CHR = 0x2
|
DT_CHR = 0x2
|
||||||
|
@ -981,12 +985,6 @@ const (
|
||||||
HPFS_SUPER_MAGIC = 0xf995e849
|
HPFS_SUPER_MAGIC = 0xf995e849
|
||||||
HUGETLBFS_MAGIC = 0x958458f6
|
HUGETLBFS_MAGIC = 0x958458f6
|
||||||
IBSHIFT = 0x10
|
IBSHIFT = 0x10
|
||||||
ICMPV6_FILTER = 0x1
|
|
||||||
ICMPV6_FILTER_BLOCK = 0x1
|
|
||||||
ICMPV6_FILTER_BLOCKOTHERS = 0x3
|
|
||||||
ICMPV6_FILTER_PASS = 0x2
|
|
||||||
ICMPV6_FILTER_PASSONLY = 0x4
|
|
||||||
ICMP_FILTER = 0x1
|
|
||||||
ICRNL = 0x100
|
ICRNL = 0x100
|
||||||
IFA_F_DADFAILED = 0x8
|
IFA_F_DADFAILED = 0x8
|
||||||
IFA_F_DEPRECATED = 0x20
|
IFA_F_DEPRECATED = 0x20
|
||||||
|
@ -1257,6 +1255,7 @@ const (
|
||||||
KEXEC_ARCH_PARISC = 0xf0000
|
KEXEC_ARCH_PARISC = 0xf0000
|
||||||
KEXEC_ARCH_PPC = 0x140000
|
KEXEC_ARCH_PPC = 0x140000
|
||||||
KEXEC_ARCH_PPC64 = 0x150000
|
KEXEC_ARCH_PPC64 = 0x150000
|
||||||
|
KEXEC_ARCH_RISCV = 0xf30000
|
||||||
KEXEC_ARCH_S390 = 0x160000
|
KEXEC_ARCH_S390 = 0x160000
|
||||||
KEXEC_ARCH_SH = 0x2a0000
|
KEXEC_ARCH_SH = 0x2a0000
|
||||||
KEXEC_ARCH_X86_64 = 0x3e0000
|
KEXEC_ARCH_X86_64 = 0x3e0000
|
||||||
|
@ -1756,14 +1755,19 @@ const (
|
||||||
PERF_ATTR_SIZE_VER4 = 0x68
|
PERF_ATTR_SIZE_VER4 = 0x68
|
||||||
PERF_ATTR_SIZE_VER5 = 0x70
|
PERF_ATTR_SIZE_VER5 = 0x70
|
||||||
PERF_ATTR_SIZE_VER6 = 0x78
|
PERF_ATTR_SIZE_VER6 = 0x78
|
||||||
|
PERF_ATTR_SIZE_VER7 = 0x80
|
||||||
PERF_AUX_FLAG_COLLISION = 0x8
|
PERF_AUX_FLAG_COLLISION = 0x8
|
||||||
|
PERF_AUX_FLAG_CORESIGHT_FORMAT_CORESIGHT = 0x0
|
||||||
|
PERF_AUX_FLAG_CORESIGHT_FORMAT_RAW = 0x100
|
||||||
PERF_AUX_FLAG_OVERWRITE = 0x2
|
PERF_AUX_FLAG_OVERWRITE = 0x2
|
||||||
PERF_AUX_FLAG_PARTIAL = 0x4
|
PERF_AUX_FLAG_PARTIAL = 0x4
|
||||||
|
PERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK = 0xff00
|
||||||
PERF_AUX_FLAG_TRUNCATED = 0x1
|
PERF_AUX_FLAG_TRUNCATED = 0x1
|
||||||
PERF_FLAG_FD_CLOEXEC = 0x8
|
PERF_FLAG_FD_CLOEXEC = 0x8
|
||||||
PERF_FLAG_FD_NO_GROUP = 0x1
|
PERF_FLAG_FD_NO_GROUP = 0x1
|
||||||
PERF_FLAG_FD_OUTPUT = 0x2
|
PERF_FLAG_FD_OUTPUT = 0x2
|
||||||
PERF_FLAG_PID_CGROUP = 0x4
|
PERF_FLAG_PID_CGROUP = 0x4
|
||||||
|
PERF_HW_EVENT_MASK = 0xffffffff
|
||||||
PERF_MAX_CONTEXTS_PER_STACK = 0x8
|
PERF_MAX_CONTEXTS_PER_STACK = 0x8
|
||||||
PERF_MAX_STACK_DEPTH = 0x7f
|
PERF_MAX_STACK_DEPTH = 0x7f
|
||||||
PERF_MEM_BLK_ADDR = 0x4
|
PERF_MEM_BLK_ADDR = 0x4
|
||||||
|
@ -1822,6 +1826,7 @@ const (
|
||||||
PERF_MEM_TLB_OS = 0x40
|
PERF_MEM_TLB_OS = 0x40
|
||||||
PERF_MEM_TLB_SHIFT = 0x1a
|
PERF_MEM_TLB_SHIFT = 0x1a
|
||||||
PERF_MEM_TLB_WK = 0x20
|
PERF_MEM_TLB_WK = 0x20
|
||||||
|
PERF_PMU_TYPE_SHIFT = 0x20
|
||||||
PERF_RECORD_KSYMBOL_FLAGS_UNREGISTER = 0x1
|
PERF_RECORD_KSYMBOL_FLAGS_UNREGISTER = 0x1
|
||||||
PERF_RECORD_MISC_COMM_EXEC = 0x2000
|
PERF_RECORD_MISC_COMM_EXEC = 0x2000
|
||||||
PERF_RECORD_MISC_CPUMODE_MASK = 0x7
|
PERF_RECORD_MISC_CPUMODE_MASK = 0x7
|
||||||
|
@ -1921,7 +1926,9 @@ const (
|
||||||
PR_PAC_APGAKEY = 0x10
|
PR_PAC_APGAKEY = 0x10
|
||||||
PR_PAC_APIAKEY = 0x1
|
PR_PAC_APIAKEY = 0x1
|
||||||
PR_PAC_APIBKEY = 0x2
|
PR_PAC_APIBKEY = 0x2
|
||||||
|
PR_PAC_GET_ENABLED_KEYS = 0x3d
|
||||||
PR_PAC_RESET_KEYS = 0x36
|
PR_PAC_RESET_KEYS = 0x36
|
||||||
|
PR_PAC_SET_ENABLED_KEYS = 0x3c
|
||||||
PR_SET_CHILD_SUBREAPER = 0x24
|
PR_SET_CHILD_SUBREAPER = 0x24
|
||||||
PR_SET_DUMPABLE = 0x4
|
PR_SET_DUMPABLE = 0x4
|
||||||
PR_SET_ENDIAN = 0x14
|
PR_SET_ENDIAN = 0x14
|
||||||
|
@ -2003,6 +2010,7 @@ const (
|
||||||
PTRACE_GETREGSET = 0x4204
|
PTRACE_GETREGSET = 0x4204
|
||||||
PTRACE_GETSIGINFO = 0x4202
|
PTRACE_GETSIGINFO = 0x4202
|
||||||
PTRACE_GETSIGMASK = 0x420a
|
PTRACE_GETSIGMASK = 0x420a
|
||||||
|
PTRACE_GET_RSEQ_CONFIGURATION = 0x420f
|
||||||
PTRACE_GET_SYSCALL_INFO = 0x420e
|
PTRACE_GET_SYSCALL_INFO = 0x420e
|
||||||
PTRACE_INTERRUPT = 0x4207
|
PTRACE_INTERRUPT = 0x4207
|
||||||
PTRACE_KILL = 0x8
|
PTRACE_KILL = 0x8
|
||||||
|
@ -2163,6 +2171,7 @@ const (
|
||||||
RTM_DELNEIGH = 0x1d
|
RTM_DELNEIGH = 0x1d
|
||||||
RTM_DELNETCONF = 0x51
|
RTM_DELNETCONF = 0x51
|
||||||
RTM_DELNEXTHOP = 0x69
|
RTM_DELNEXTHOP = 0x69
|
||||||
|
RTM_DELNEXTHOPBUCKET = 0x75
|
||||||
RTM_DELNSID = 0x59
|
RTM_DELNSID = 0x59
|
||||||
RTM_DELQDISC = 0x25
|
RTM_DELQDISC = 0x25
|
||||||
RTM_DELROUTE = 0x19
|
RTM_DELROUTE = 0x19
|
||||||
|
@ -2193,6 +2202,7 @@ const (
|
||||||
RTM_GETNEIGHTBL = 0x42
|
RTM_GETNEIGHTBL = 0x42
|
||||||
RTM_GETNETCONF = 0x52
|
RTM_GETNETCONF = 0x52
|
||||||
RTM_GETNEXTHOP = 0x6a
|
RTM_GETNEXTHOP = 0x6a
|
||||||
|
RTM_GETNEXTHOPBUCKET = 0x76
|
||||||
RTM_GETNSID = 0x5a
|
RTM_GETNSID = 0x5a
|
||||||
RTM_GETQDISC = 0x26
|
RTM_GETQDISC = 0x26
|
||||||
RTM_GETROUTE = 0x1a
|
RTM_GETROUTE = 0x1a
|
||||||
|
@ -2201,7 +2211,7 @@ const (
|
||||||
RTM_GETTCLASS = 0x2a
|
RTM_GETTCLASS = 0x2a
|
||||||
RTM_GETTFILTER = 0x2e
|
RTM_GETTFILTER = 0x2e
|
||||||
RTM_GETVLAN = 0x72
|
RTM_GETVLAN = 0x72
|
||||||
RTM_MAX = 0x73
|
RTM_MAX = 0x77
|
||||||
RTM_NEWACTION = 0x30
|
RTM_NEWACTION = 0x30
|
||||||
RTM_NEWADDR = 0x14
|
RTM_NEWADDR = 0x14
|
||||||
RTM_NEWADDRLABEL = 0x48
|
RTM_NEWADDRLABEL = 0x48
|
||||||
|
@ -2215,6 +2225,7 @@ const (
|
||||||
RTM_NEWNEIGHTBL = 0x40
|
RTM_NEWNEIGHTBL = 0x40
|
||||||
RTM_NEWNETCONF = 0x50
|
RTM_NEWNETCONF = 0x50
|
||||||
RTM_NEWNEXTHOP = 0x68
|
RTM_NEWNEXTHOP = 0x68
|
||||||
|
RTM_NEWNEXTHOPBUCKET = 0x74
|
||||||
RTM_NEWNSID = 0x58
|
RTM_NEWNSID = 0x58
|
||||||
RTM_NEWNVLAN = 0x70
|
RTM_NEWNVLAN = 0x70
|
||||||
RTM_NEWPREFIX = 0x34
|
RTM_NEWPREFIX = 0x34
|
||||||
|
@ -2224,8 +2235,8 @@ const (
|
||||||
RTM_NEWSTATS = 0x5c
|
RTM_NEWSTATS = 0x5c
|
||||||
RTM_NEWTCLASS = 0x28
|
RTM_NEWTCLASS = 0x28
|
||||||
RTM_NEWTFILTER = 0x2c
|
RTM_NEWTFILTER = 0x2c
|
||||||
RTM_NR_FAMILIES = 0x19
|
RTM_NR_FAMILIES = 0x1a
|
||||||
RTM_NR_MSGTYPES = 0x64
|
RTM_NR_MSGTYPES = 0x68
|
||||||
RTM_SETDCB = 0x4f
|
RTM_SETDCB = 0x4f
|
||||||
RTM_SETLINK = 0x13
|
RTM_SETLINK = 0x13
|
||||||
RTM_SETNEIGHTBL = 0x43
|
RTM_SETNEIGHTBL = 0x43
|
||||||
|
@ -2253,6 +2264,7 @@ const (
|
||||||
RTPROT_MROUTED = 0x11
|
RTPROT_MROUTED = 0x11
|
||||||
RTPROT_MRT = 0xa
|
RTPROT_MRT = 0xa
|
||||||
RTPROT_NTK = 0xf
|
RTPROT_NTK = 0xf
|
||||||
|
RTPROT_OPENR = 0x63
|
||||||
RTPROT_OSPF = 0xbc
|
RTPROT_OSPF = 0xbc
|
||||||
RTPROT_RA = 0x9
|
RTPROT_RA = 0x9
|
||||||
RTPROT_REDIRECT = 0x1
|
RTPROT_REDIRECT = 0x1
|
||||||
|
@ -2536,6 +2548,14 @@ const (
|
||||||
TCOFLUSH = 0x1
|
TCOFLUSH = 0x1
|
||||||
TCOOFF = 0x0
|
TCOOFF = 0x0
|
||||||
TCOON = 0x1
|
TCOON = 0x1
|
||||||
|
TCPOPT_EOL = 0x0
|
||||||
|
TCPOPT_MAXSEG = 0x2
|
||||||
|
TCPOPT_NOP = 0x1
|
||||||
|
TCPOPT_SACK = 0x5
|
||||||
|
TCPOPT_SACK_PERMITTED = 0x4
|
||||||
|
TCPOPT_TIMESTAMP = 0x8
|
||||||
|
TCPOPT_TSTAMP_HDR = 0x101080a
|
||||||
|
TCPOPT_WINDOW = 0x3
|
||||||
TCP_CC_INFO = 0x1a
|
TCP_CC_INFO = 0x1a
|
||||||
TCP_CM_INQ = 0x24
|
TCP_CM_INQ = 0x24
|
||||||
TCP_CONGESTION = 0xd
|
TCP_CONGESTION = 0xd
|
||||||
|
|
|
@ -147,6 +147,7 @@ const (
|
||||||
NS_GET_USERNS = 0xb701
|
NS_GET_USERNS = 0xb701
|
||||||
OLCUC = 0x2
|
OLCUC = 0x2
|
||||||
ONLCR = 0x4
|
ONLCR = 0x4
|
||||||
|
OTPERASE = 0x400c4d19
|
||||||
OTPGETREGIONCOUNT = 0x40044d0e
|
OTPGETREGIONCOUNT = 0x40044d0e
|
||||||
OTPGETREGIONINFO = 0x400c4d0f
|
OTPGETREGIONINFO = 0x400c4d0f
|
||||||
OTPLOCK = 0x800c4d10
|
OTPLOCK = 0x800c4d10
|
||||||
|
|
|
@ -147,6 +147,7 @@ const (
|
||||||
NS_GET_USERNS = 0xb701
|
NS_GET_USERNS = 0xb701
|
||||||
OLCUC = 0x2
|
OLCUC = 0x2
|
||||||
ONLCR = 0x4
|
ONLCR = 0x4
|
||||||
|
OTPERASE = 0x400c4d19
|
||||||
OTPGETREGIONCOUNT = 0x40044d0e
|
OTPGETREGIONCOUNT = 0x40044d0e
|
||||||
OTPGETREGIONINFO = 0x400c4d0f
|
OTPGETREGIONINFO = 0x400c4d0f
|
||||||
OTPLOCK = 0x800c4d10
|
OTPLOCK = 0x800c4d10
|
||||||
|
|
|
@ -145,6 +145,7 @@ const (
|
||||||
NS_GET_USERNS = 0xb701
|
NS_GET_USERNS = 0xb701
|
||||||
OLCUC = 0x2
|
OLCUC = 0x2
|
||||||
ONLCR = 0x4
|
ONLCR = 0x4
|
||||||
|
OTPERASE = 0x400c4d19
|
||||||
OTPGETREGIONCOUNT = 0x40044d0e
|
OTPGETREGIONCOUNT = 0x40044d0e
|
||||||
OTPGETREGIONINFO = 0x400c4d0f
|
OTPGETREGIONINFO = 0x400c4d0f
|
||||||
OTPLOCK = 0x800c4d10
|
OTPLOCK = 0x800c4d10
|
||||||
|
|
|
@ -148,6 +148,7 @@ const (
|
||||||
NS_GET_USERNS = 0xb701
|
NS_GET_USERNS = 0xb701
|
||||||
OLCUC = 0x2
|
OLCUC = 0x2
|
||||||
ONLCR = 0x4
|
ONLCR = 0x4
|
||||||
|
OTPERASE = 0x400c4d19
|
||||||
OTPGETREGIONCOUNT = 0x40044d0e
|
OTPGETREGIONCOUNT = 0x40044d0e
|
||||||
OTPGETREGIONINFO = 0x400c4d0f
|
OTPGETREGIONINFO = 0x400c4d0f
|
||||||
OTPLOCK = 0x800c4d10
|
OTPLOCK = 0x800c4d10
|
||||||
|
|
|
@ -145,6 +145,7 @@ const (
|
||||||
NS_GET_USERNS = 0x2000b701
|
NS_GET_USERNS = 0x2000b701
|
||||||
OLCUC = 0x2
|
OLCUC = 0x2
|
||||||
ONLCR = 0x4
|
ONLCR = 0x4
|
||||||
|
OTPERASE = 0x800c4d19
|
||||||
OTPGETREGIONCOUNT = 0x80044d0e
|
OTPGETREGIONCOUNT = 0x80044d0e
|
||||||
OTPGETREGIONINFO = 0x800c4d0f
|
OTPGETREGIONINFO = 0x800c4d0f
|
||||||
OTPLOCK = 0x400c4d10
|
OTPLOCK = 0x400c4d10
|
||||||
|
|
|
@ -145,6 +145,7 @@ const (
|
||||||
NS_GET_USERNS = 0x2000b701
|
NS_GET_USERNS = 0x2000b701
|
||||||
OLCUC = 0x2
|
OLCUC = 0x2
|
||||||
ONLCR = 0x4
|
ONLCR = 0x4
|
||||||
|
OTPERASE = 0x800c4d19
|
||||||
OTPGETREGIONCOUNT = 0x80044d0e
|
OTPGETREGIONCOUNT = 0x80044d0e
|
||||||
OTPGETREGIONINFO = 0x800c4d0f
|
OTPGETREGIONINFO = 0x800c4d0f
|
||||||
OTPLOCK = 0x400c4d10
|
OTPLOCK = 0x400c4d10
|
||||||
|
|
|
@ -145,6 +145,7 @@ const (
|
||||||
NS_GET_USERNS = 0x2000b701
|
NS_GET_USERNS = 0x2000b701
|
||||||
OLCUC = 0x2
|
OLCUC = 0x2
|
||||||
ONLCR = 0x4
|
ONLCR = 0x4
|
||||||
|
OTPERASE = 0x800c4d19
|
||||||
OTPGETREGIONCOUNT = 0x80044d0e
|
OTPGETREGIONCOUNT = 0x80044d0e
|
||||||
OTPGETREGIONINFO = 0x800c4d0f
|
OTPGETREGIONINFO = 0x800c4d0f
|
||||||
OTPLOCK = 0x400c4d10
|
OTPLOCK = 0x400c4d10
|
||||||
|
|
|
@ -145,6 +145,7 @@ const (
|
||||||
NS_GET_USERNS = 0x2000b701
|
NS_GET_USERNS = 0x2000b701
|
||||||
OLCUC = 0x2
|
OLCUC = 0x2
|
||||||
ONLCR = 0x4
|
ONLCR = 0x4
|
||||||
|
OTPERASE = 0x800c4d19
|
||||||
OTPGETREGIONCOUNT = 0x80044d0e
|
OTPGETREGIONCOUNT = 0x80044d0e
|
||||||
OTPGETREGIONINFO = 0x800c4d0f
|
OTPGETREGIONINFO = 0x800c4d0f
|
||||||
OTPLOCK = 0x400c4d10
|
OTPLOCK = 0x400c4d10
|
||||||
|
|
|
@ -147,6 +147,7 @@ const (
|
||||||
NS_GET_USERNS = 0x2000b701
|
NS_GET_USERNS = 0x2000b701
|
||||||
OLCUC = 0x4
|
OLCUC = 0x4
|
||||||
ONLCR = 0x2
|
ONLCR = 0x2
|
||||||
|
OTPERASE = 0x800c4d19
|
||||||
OTPGETREGIONCOUNT = 0x80044d0e
|
OTPGETREGIONCOUNT = 0x80044d0e
|
||||||
OTPGETREGIONINFO = 0x800c4d0f
|
OTPGETREGIONINFO = 0x800c4d0f
|
||||||
OTPLOCK = 0x400c4d10
|
OTPLOCK = 0x400c4d10
|
||||||
|
|
|
@ -147,6 +147,7 @@ const (
|
||||||
NS_GET_USERNS = 0x2000b701
|
NS_GET_USERNS = 0x2000b701
|
||||||
OLCUC = 0x4
|
OLCUC = 0x4
|
||||||
ONLCR = 0x2
|
ONLCR = 0x2
|
||||||
|
OTPERASE = 0x800c4d19
|
||||||
OTPGETREGIONCOUNT = 0x80044d0e
|
OTPGETREGIONCOUNT = 0x80044d0e
|
||||||
OTPGETREGIONINFO = 0x800c4d0f
|
OTPGETREGIONINFO = 0x800c4d0f
|
||||||
OTPLOCK = 0x400c4d10
|
OTPLOCK = 0x400c4d10
|
||||||
|
|
|
@ -147,6 +147,7 @@ const (
|
||||||
NS_GET_USERNS = 0x2000b701
|
NS_GET_USERNS = 0x2000b701
|
||||||
OLCUC = 0x4
|
OLCUC = 0x4
|
||||||
ONLCR = 0x2
|
ONLCR = 0x2
|
||||||
|
OTPERASE = 0x800c4d19
|
||||||
OTPGETREGIONCOUNT = 0x80044d0e
|
OTPGETREGIONCOUNT = 0x80044d0e
|
||||||
OTPGETREGIONINFO = 0x800c4d0f
|
OTPGETREGIONINFO = 0x800c4d0f
|
||||||
OTPLOCK = 0x400c4d10
|
OTPLOCK = 0x400c4d10
|
||||||
|
|
|
@ -145,6 +145,7 @@ const (
|
||||||
NS_GET_USERNS = 0xb701
|
NS_GET_USERNS = 0xb701
|
||||||
OLCUC = 0x2
|
OLCUC = 0x2
|
||||||
ONLCR = 0x4
|
ONLCR = 0x4
|
||||||
|
OTPERASE = 0x400c4d19
|
||||||
OTPGETREGIONCOUNT = 0x40044d0e
|
OTPGETREGIONCOUNT = 0x40044d0e
|
||||||
OTPGETREGIONINFO = 0x400c4d0f
|
OTPGETREGIONINFO = 0x400c4d0f
|
||||||
OTPLOCK = 0x800c4d10
|
OTPLOCK = 0x800c4d10
|
||||||
|
|
|
@ -145,6 +145,7 @@ const (
|
||||||
NS_GET_USERNS = 0xb701
|
NS_GET_USERNS = 0xb701
|
||||||
OLCUC = 0x2
|
OLCUC = 0x2
|
||||||
ONLCR = 0x4
|
ONLCR = 0x4
|
||||||
|
OTPERASE = 0x400c4d19
|
||||||
OTPGETREGIONCOUNT = 0x40044d0e
|
OTPGETREGIONCOUNT = 0x40044d0e
|
||||||
OTPGETREGIONINFO = 0x400c4d0f
|
OTPGETREGIONINFO = 0x400c4d0f
|
||||||
OTPLOCK = 0x800c4d10
|
OTPLOCK = 0x800c4d10
|
||||||
|
|
|
@ -150,6 +150,7 @@ const (
|
||||||
NS_GET_USERNS = 0x2000b701
|
NS_GET_USERNS = 0x2000b701
|
||||||
OLCUC = 0x2
|
OLCUC = 0x2
|
||||||
ONLCR = 0x4
|
ONLCR = 0x4
|
||||||
|
OTPERASE = 0x800c4d19
|
||||||
OTPGETREGIONCOUNT = 0x80044d0e
|
OTPGETREGIONCOUNT = 0x80044d0e
|
||||||
OTPGETREGIONINFO = 0x800c4d0f
|
OTPGETREGIONINFO = 0x800c4d0f
|
||||||
OTPLOCK = 0x400c4d10
|
OTPLOCK = 0x400c4d10
|
||||||
|
|
|
@ -1020,7 +1020,10 @@ const (
|
||||||
RLIMIT_CPU = 0x0
|
RLIMIT_CPU = 0x0
|
||||||
RLIMIT_DATA = 0x2
|
RLIMIT_DATA = 0x2
|
||||||
RLIMIT_FSIZE = 0x1
|
RLIMIT_FSIZE = 0x1
|
||||||
|
RLIMIT_MEMLOCK = 0x6
|
||||||
RLIMIT_NOFILE = 0x8
|
RLIMIT_NOFILE = 0x8
|
||||||
|
RLIMIT_NPROC = 0x7
|
||||||
|
RLIMIT_RSS = 0x5
|
||||||
RLIMIT_STACK = 0x3
|
RLIMIT_STACK = 0x3
|
||||||
RLIM_INFINITY = 0x7fffffffffffffff
|
RLIM_INFINITY = 0x7fffffffffffffff
|
||||||
RTAX_AUTHOR = 0x6
|
RTAX_AUTHOR = 0x6
|
||||||
|
|
|
@ -1020,7 +1020,10 @@ const (
|
||||||
RLIMIT_CPU = 0x0
|
RLIMIT_CPU = 0x0
|
||||||
RLIMIT_DATA = 0x2
|
RLIMIT_DATA = 0x2
|
||||||
RLIMIT_FSIZE = 0x1
|
RLIMIT_FSIZE = 0x1
|
||||||
|
RLIMIT_MEMLOCK = 0x6
|
||||||
RLIMIT_NOFILE = 0x8
|
RLIMIT_NOFILE = 0x8
|
||||||
|
RLIMIT_NPROC = 0x7
|
||||||
|
RLIMIT_RSS = 0x5
|
||||||
RLIMIT_STACK = 0x3
|
RLIMIT_STACK = 0x3
|
||||||
RLIM_INFINITY = 0x7fffffffffffffff
|
RLIM_INFINITY = 0x7fffffffffffffff
|
||||||
RTAX_AUTHOR = 0x6
|
RTAX_AUTHOR = 0x6
|
||||||
|
|
|
@ -48,6 +48,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
_p0, err = BytePtrFromString(oldpath)
|
_p0, err = BytePtrFromString(oldpath)
|
||||||
|
@ -1201,7 +1211,7 @@ func PivotRoot(newroot string, putold string) (err error) {
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
|
func Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
|
||||||
_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
|
_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
err = errnoErr(e1)
|
err = errnoErr(e1)
|
||||||
|
|
|
@ -141,6 +141,11 @@ import (
|
||||||
//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so"
|
//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so"
|
||||||
//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
|
//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
|
||||||
//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so"
|
//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so"
|
||||||
|
//go:cgo_import_dynamic libc_port_create port_create "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_port_associate port_associate "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_port_get port_get "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_port_getn port_getn "libc.so"
|
||||||
|
|
||||||
//go:linkname procpipe libc_pipe
|
//go:linkname procpipe libc_pipe
|
||||||
//go:linkname procpipe2 libc_pipe2
|
//go:linkname procpipe2 libc_pipe2
|
||||||
|
@ -272,6 +277,11 @@ import (
|
||||||
//go:linkname procgetpeername libc_getpeername
|
//go:linkname procgetpeername libc_getpeername
|
||||||
//go:linkname procsetsockopt libc_setsockopt
|
//go:linkname procsetsockopt libc_setsockopt
|
||||||
//go:linkname procrecvfrom libc_recvfrom
|
//go:linkname procrecvfrom libc_recvfrom
|
||||||
|
//go:linkname procport_create libc_port_create
|
||||||
|
//go:linkname procport_associate libc_port_associate
|
||||||
|
//go:linkname procport_dissociate libc_port_dissociate
|
||||||
|
//go:linkname procport_get libc_port_get
|
||||||
|
//go:linkname procport_getn libc_port_getn
|
||||||
|
|
||||||
var (
|
var (
|
||||||
procpipe,
|
procpipe,
|
||||||
|
@ -403,7 +413,12 @@ var (
|
||||||
proc__xnet_getsockopt,
|
proc__xnet_getsockopt,
|
||||||
procgetpeername,
|
procgetpeername,
|
||||||
procsetsockopt,
|
procsetsockopt,
|
||||||
procrecvfrom syscallFunc
|
procrecvfrom,
|
||||||
|
procport_create,
|
||||||
|
procport_associate,
|
||||||
|
procport_dissociate,
|
||||||
|
procport_get,
|
||||||
|
procport_getn syscallFunc
|
||||||
)
|
)
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
@ -1981,3 +1996,58 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func port_create() (n int, err error) {
|
||||||
|
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error) {
|
||||||
|
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_associate)), 5, uintptr(port), uintptr(source), uintptr(object), uintptr(events), uintptr(unsafe.Pointer(user)), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func port_dissociate(port int, source int, object uintptr) (n int, err error) {
|
||||||
|
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_dissociate)), 3, uintptr(port), uintptr(source), uintptr(object), 0, 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error) {
|
||||||
|
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_get)), 3, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(unsafe.Pointer(timeout)), 0, 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error) {
|
||||||
|
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_getn)), 5, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(max), uintptr(unsafe.Pointer(nget)), uintptr(unsafe.Pointer(timeout)), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
|
@ -439,4 +439,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 440
|
SYS_PROCESS_MADVISE = 440
|
||||||
SYS_EPOLL_PWAIT2 = 441
|
SYS_EPOLL_PWAIT2 = 441
|
||||||
SYS_MOUNT_SETATTR = 442
|
SYS_MOUNT_SETATTR = 442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||||
)
|
)
|
||||||
|
|
|
@ -361,4 +361,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 440
|
SYS_PROCESS_MADVISE = 440
|
||||||
SYS_EPOLL_PWAIT2 = 441
|
SYS_EPOLL_PWAIT2 = 441
|
||||||
SYS_MOUNT_SETATTR = 442
|
SYS_MOUNT_SETATTR = 442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||||
)
|
)
|
||||||
|
|
|
@ -403,4 +403,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 440
|
SYS_PROCESS_MADVISE = 440
|
||||||
SYS_EPOLL_PWAIT2 = 441
|
SYS_EPOLL_PWAIT2 = 441
|
||||||
SYS_MOUNT_SETATTR = 442
|
SYS_MOUNT_SETATTR = 442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||||
)
|
)
|
||||||
|
|
|
@ -306,4 +306,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 440
|
SYS_PROCESS_MADVISE = 440
|
||||||
SYS_EPOLL_PWAIT2 = 441
|
SYS_EPOLL_PWAIT2 = 441
|
||||||
SYS_MOUNT_SETATTR = 442
|
SYS_MOUNT_SETATTR = 442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||||
)
|
)
|
||||||
|
|
|
@ -424,4 +424,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 4440
|
SYS_PROCESS_MADVISE = 4440
|
||||||
SYS_EPOLL_PWAIT2 = 4441
|
SYS_EPOLL_PWAIT2 = 4441
|
||||||
SYS_MOUNT_SETATTR = 4442
|
SYS_MOUNT_SETATTR = 4442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 4444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 4445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 4446
|
||||||
)
|
)
|
||||||
|
|
|
@ -354,4 +354,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 5440
|
SYS_PROCESS_MADVISE = 5440
|
||||||
SYS_EPOLL_PWAIT2 = 5441
|
SYS_EPOLL_PWAIT2 = 5441
|
||||||
SYS_MOUNT_SETATTR = 5442
|
SYS_MOUNT_SETATTR = 5442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 5444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 5445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 5446
|
||||||
)
|
)
|
||||||
|
|
|
@ -354,4 +354,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 5440
|
SYS_PROCESS_MADVISE = 5440
|
||||||
SYS_EPOLL_PWAIT2 = 5441
|
SYS_EPOLL_PWAIT2 = 5441
|
||||||
SYS_MOUNT_SETATTR = 5442
|
SYS_MOUNT_SETATTR = 5442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 5444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 5445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 5446
|
||||||
)
|
)
|
||||||
|
|
|
@ -424,4 +424,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 4440
|
SYS_PROCESS_MADVISE = 4440
|
||||||
SYS_EPOLL_PWAIT2 = 4441
|
SYS_EPOLL_PWAIT2 = 4441
|
||||||
SYS_MOUNT_SETATTR = 4442
|
SYS_MOUNT_SETATTR = 4442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 4444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 4445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 4446
|
||||||
)
|
)
|
||||||
|
|
|
@ -431,4 +431,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 440
|
SYS_PROCESS_MADVISE = 440
|
||||||
SYS_EPOLL_PWAIT2 = 441
|
SYS_EPOLL_PWAIT2 = 441
|
||||||
SYS_MOUNT_SETATTR = 442
|
SYS_MOUNT_SETATTR = 442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||||
)
|
)
|
||||||
|
|
|
@ -403,4 +403,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 440
|
SYS_PROCESS_MADVISE = 440
|
||||||
SYS_EPOLL_PWAIT2 = 441
|
SYS_EPOLL_PWAIT2 = 441
|
||||||
SYS_MOUNT_SETATTR = 442
|
SYS_MOUNT_SETATTR = 442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||||
)
|
)
|
||||||
|
|
|
@ -403,4 +403,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 440
|
SYS_PROCESS_MADVISE = 440
|
||||||
SYS_EPOLL_PWAIT2 = 441
|
SYS_EPOLL_PWAIT2 = 441
|
||||||
SYS_MOUNT_SETATTR = 442
|
SYS_MOUNT_SETATTR = 442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||||
)
|
)
|
||||||
|
|
|
@ -305,4 +305,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 440
|
SYS_PROCESS_MADVISE = 440
|
||||||
SYS_EPOLL_PWAIT2 = 441
|
SYS_EPOLL_PWAIT2 = 441
|
||||||
SYS_MOUNT_SETATTR = 442
|
SYS_MOUNT_SETATTR = 442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||||
)
|
)
|
||||||
|
|
|
@ -368,4 +368,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 440
|
SYS_PROCESS_MADVISE = 440
|
||||||
SYS_EPOLL_PWAIT2 = 441
|
SYS_EPOLL_PWAIT2 = 441
|
||||||
SYS_MOUNT_SETATTR = 442
|
SYS_MOUNT_SETATTR = 442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||||
)
|
)
|
||||||
|
|
|
@ -382,4 +382,7 @@ const (
|
||||||
SYS_PROCESS_MADVISE = 440
|
SYS_PROCESS_MADVISE = 440
|
||||||
SYS_EPOLL_PWAIT2 = 441
|
SYS_EPOLL_PWAIT2 = 441
|
||||||
SYS_MOUNT_SETATTR = 442
|
SYS_MOUNT_SETATTR = 442
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||||
)
|
)
|
||||||
|
|
|
@ -452,6 +452,11 @@ type CanFilter struct {
|
||||||
Mask uint32
|
Mask uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TCPRepairOpt struct {
|
||||||
|
Code uint32
|
||||||
|
Val uint32
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrInet4 = 0x10
|
SizeofSockaddrInet4 = 0x10
|
||||||
SizeofSockaddrInet6 = 0x1c
|
SizeofSockaddrInet6 = 0x1c
|
||||||
|
@ -484,6 +489,7 @@ const (
|
||||||
SizeofUcred = 0xc
|
SizeofUcred = 0xc
|
||||||
SizeofTCPInfo = 0x68
|
SizeofTCPInfo = 0x68
|
||||||
SizeofCanFilter = 0x8
|
SizeofCanFilter = 0x8
|
||||||
|
SizeofTCPRepairOpt = 0x8
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -681,6 +687,16 @@ type NdMsg struct {
|
||||||
Type uint8
|
Type uint8
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
ICMP_FILTER = 0x1
|
||||||
|
|
||||||
|
ICMPV6_FILTER = 0x1
|
||||||
|
ICMPV6_FILTER_BLOCK = 0x1
|
||||||
|
ICMPV6_FILTER_BLOCKOTHERS = 0x3
|
||||||
|
ICMPV6_FILTER_PASS = 0x2
|
||||||
|
ICMPV6_FILTER_PASSONLY = 0x4
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockFilter = 0x8
|
SizeofSockFilter = 0x8
|
||||||
)
|
)
|
||||||
|
@ -1001,7 +1017,7 @@ const (
|
||||||
PERF_COUNT_SW_EMULATION_FAULTS = 0x8
|
PERF_COUNT_SW_EMULATION_FAULTS = 0x8
|
||||||
PERF_COUNT_SW_DUMMY = 0x9
|
PERF_COUNT_SW_DUMMY = 0x9
|
||||||
PERF_COUNT_SW_BPF_OUTPUT = 0xa
|
PERF_COUNT_SW_BPF_OUTPUT = 0xa
|
||||||
PERF_COUNT_SW_MAX = 0xb
|
PERF_COUNT_SW_MAX = 0xc
|
||||||
PERF_SAMPLE_IP = 0x1
|
PERF_SAMPLE_IP = 0x1
|
||||||
PERF_SAMPLE_TID = 0x2
|
PERF_SAMPLE_TID = 0x2
|
||||||
PERF_SAMPLE_TIME = 0x4
|
PERF_SAMPLE_TIME = 0x4
|
||||||
|
@ -3436,7 +3452,7 @@ const (
|
||||||
ETHTOOL_MSG_CABLE_TEST_ACT = 0x1a
|
ETHTOOL_MSG_CABLE_TEST_ACT = 0x1a
|
||||||
ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 0x1b
|
ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 0x1b
|
||||||
ETHTOOL_MSG_TUNNEL_INFO_GET = 0x1c
|
ETHTOOL_MSG_TUNNEL_INFO_GET = 0x1c
|
||||||
ETHTOOL_MSG_USER_MAX = 0x1c
|
ETHTOOL_MSG_USER_MAX = 0x20
|
||||||
ETHTOOL_MSG_KERNEL_NONE = 0x0
|
ETHTOOL_MSG_KERNEL_NONE = 0x0
|
||||||
ETHTOOL_MSG_STRSET_GET_REPLY = 0x1
|
ETHTOOL_MSG_STRSET_GET_REPLY = 0x1
|
||||||
ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2
|
ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2
|
||||||
|
@ -3467,7 +3483,7 @@ const (
|
||||||
ETHTOOL_MSG_CABLE_TEST_NTF = 0x1b
|
ETHTOOL_MSG_CABLE_TEST_NTF = 0x1b
|
||||||
ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 0x1c
|
ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 0x1c
|
||||||
ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 0x1d
|
ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 0x1d
|
||||||
ETHTOOL_MSG_KERNEL_MAX = 0x1d
|
ETHTOOL_MSG_KERNEL_MAX = 0x21
|
||||||
ETHTOOL_A_HEADER_UNSPEC = 0x0
|
ETHTOOL_A_HEADER_UNSPEC = 0x0
|
||||||
ETHTOOL_A_HEADER_DEV_INDEX = 0x1
|
ETHTOOL_A_HEADER_DEV_INDEX = 0x1
|
||||||
ETHTOOL_A_HEADER_DEV_NAME = 0x2
|
ETHTOOL_A_HEADER_DEV_NAME = 0x2
|
||||||
|
|
|
@ -170,6 +170,11 @@ type Cmsghdr struct {
|
||||||
Type int32
|
Type int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [16]byte
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrNFCLLCP = 0x58
|
SizeofSockaddrNFCLLCP = 0x58
|
||||||
SizeofIovec = 0x8
|
SizeofIovec = 0x8
|
||||||
|
|
|
@ -173,6 +173,11 @@ type Cmsghdr struct {
|
||||||
Type int32
|
Type int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [24]byte
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrNFCLLCP = 0x60
|
SizeofSockaddrNFCLLCP = 0x60
|
||||||
SizeofIovec = 0x10
|
SizeofIovec = 0x10
|
||||||
|
|
|
@ -176,6 +176,11 @@ type Cmsghdr struct {
|
||||||
Type int32
|
Type int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [16]byte
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrNFCLLCP = 0x58
|
SizeofSockaddrNFCLLCP = 0x58
|
||||||
SizeofIovec = 0x8
|
SizeofIovec = 0x8
|
||||||
|
|
|
@ -174,6 +174,11 @@ type Cmsghdr struct {
|
||||||
Type int32
|
Type int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [24]byte
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrNFCLLCP = 0x60
|
SizeofSockaddrNFCLLCP = 0x60
|
||||||
SizeofIovec = 0x10
|
SizeofIovec = 0x10
|
||||||
|
|
|
@ -175,6 +175,11 @@ type Cmsghdr struct {
|
||||||
Type int32
|
Type int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [16]byte
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrNFCLLCP = 0x58
|
SizeofSockaddrNFCLLCP = 0x58
|
||||||
SizeofIovec = 0x8
|
SizeofIovec = 0x8
|
||||||
|
|
|
@ -174,6 +174,11 @@ type Cmsghdr struct {
|
||||||
Type int32
|
Type int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [24]byte
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrNFCLLCP = 0x60
|
SizeofSockaddrNFCLLCP = 0x60
|
||||||
SizeofIovec = 0x10
|
SizeofIovec = 0x10
|
||||||
|
|
|
@ -174,6 +174,11 @@ type Cmsghdr struct {
|
||||||
Type int32
|
Type int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [24]byte
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrNFCLLCP = 0x60
|
SizeofSockaddrNFCLLCP = 0x60
|
||||||
SizeofIovec = 0x10
|
SizeofIovec = 0x10
|
||||||
|
|
|
@ -175,6 +175,11 @@ type Cmsghdr struct {
|
||||||
Type int32
|
Type int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [16]byte
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrNFCLLCP = 0x58
|
SizeofSockaddrNFCLLCP = 0x58
|
||||||
SizeofIovec = 0x8
|
SizeofIovec = 0x8
|
||||||
|
|
|
@ -176,6 +176,11 @@ type Cmsghdr struct {
|
||||||
Type int32
|
Type int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [16]byte
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrNFCLLCP = 0x58
|
SizeofSockaddrNFCLLCP = 0x58
|
||||||
SizeofIovec = 0x8
|
SizeofIovec = 0x8
|
||||||
|
|
|
@ -175,6 +175,11 @@ type Cmsghdr struct {
|
||||||
Type int32
|
Type int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [24]byte
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrNFCLLCP = 0x60
|
SizeofSockaddrNFCLLCP = 0x60
|
||||||
SizeofIovec = 0x10
|
SizeofIovec = 0x10
|
||||||
|
|
|
@ -175,6 +175,11 @@ type Cmsghdr struct {
|
||||||
Type int32
|
Type int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [24]byte
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrNFCLLCP = 0x60
|
SizeofSockaddrNFCLLCP = 0x60
|
||||||
SizeofIovec = 0x10
|
SizeofIovec = 0x10
|
||||||
|
|
|
@ -174,6 +174,11 @@ type Cmsghdr struct {
|
||||||
Type int32
|
Type int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [24]byte
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SizeofSockaddrNFCLLCP = 0x60
|
SizeofSockaddrNFCLLCP = 0x60
|
||||||
SizeofIovec = 0x10
|
SizeofIovec = 0x10
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue