Bump cloud.google.com/go/storage from 1.21.0 to 1.22.0 (#2041)
Bumps [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go) from 1.21.0 to 1.22.0. - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/spanner/v1.21.0...spanner/v1.22.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/storage dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
parent
6c7d03a5ea
commit
697bfc6acb
23
go.mod
23
go.mod
|
|
@ -11,7 +11,7 @@ replace (
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go/storage v1.21.0
|
cloud.google.com/go/storage v1.22.0
|
||||||
github.com/Azure/azure-storage-blob-go v0.14.0
|
github.com/Azure/azure-storage-blob-go v0.14.0
|
||||||
github.com/aws/aws-sdk-go v1.43.31
|
github.com/aws/aws-sdk-go v1.43.31
|
||||||
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20220228164355-396b2034c795
|
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20220228164355-396b2034c795
|
||||||
|
|
@ -35,8 +35,8 @@ require (
|
||||||
github.com/spf13/afero v1.8.2
|
github.com/spf13/afero v1.8.2
|
||||||
github.com/spf13/cobra v1.4.0
|
github.com/spf13/cobra v1.4.0
|
||||||
github.com/spf13/pflag v1.0.5
|
github.com/spf13/pflag v1.0.5
|
||||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd
|
golang.org/x/net v0.0.0-20220325170049-de3da57026de
|
||||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
|
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -44,8 +44,8 @@ require github.com/containerd/containerd v1.6.2
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go v0.100.2 // indirect
|
cloud.google.com/go v0.100.2 // indirect
|
||||||
cloud.google.com/go/compute v1.2.0 // indirect
|
cloud.google.com/go/compute v1.5.0 // indirect
|
||||||
cloud.google.com/go/iam v0.1.1 // indirect
|
cloud.google.com/go/iam v0.3.0 // indirect
|
||||||
github.com/Azure/azure-pipeline-go v0.2.3 // indirect
|
github.com/Azure/azure-pipeline-go v0.2.3 // indirect
|
||||||
github.com/Azure/azure-sdk-for-go v61.3.0+incompatible // indirect
|
github.com/Azure/azure-sdk-for-go v61.3.0+incompatible // indirect
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
||||||
|
|
@ -102,7 +102,8 @@ require (
|
||||||
github.com/golang/protobuf v1.5.2 // indirect
|
github.com/golang/protobuf v1.5.2 // indirect
|
||||||
github.com/google/go-querystring v1.1.0 // indirect
|
github.com/google/go-querystring v1.1.0 // indirect
|
||||||
github.com/google/uuid v1.3.0 // indirect
|
github.com/google/uuid v1.3.0 // indirect
|
||||||
github.com/googleapis/gax-go/v2 v2.1.1 // indirect
|
github.com/googleapis/gax-go/v2 v2.2.0 // indirect
|
||||||
|
github.com/googleapis/go-type-adapters v1.0.0 // indirect
|
||||||
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
||||||
github.com/hashicorp/go-memdb v1.3.2 // indirect
|
github.com/hashicorp/go-memdb v1.3.2 // indirect
|
||||||
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
||||||
|
|
@ -137,14 +138,14 @@ require (
|
||||||
github.com/xanzy/ssh-agent v0.3.1 // indirect
|
github.com/xanzy/ssh-agent v0.3.1 // indirect
|
||||||
go.opencensus.io v0.23.0 // indirect
|
go.opencensus.io v0.23.0 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce // indirect
|
golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce // indirect
|
||||||
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 // indirect
|
golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886 // indirect
|
||||||
golang.org/x/text v0.3.7 // indirect
|
golang.org/x/text v0.3.7 // indirect
|
||||||
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect
|
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||||
google.golang.org/api v0.69.0 // indirect
|
google.golang.org/api v0.74.0 // indirect
|
||||||
google.golang.org/appengine v1.6.7 // indirect
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8 // indirect
|
google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf // indirect
|
||||||
google.golang.org/grpc v1.44.0 // indirect
|
google.golang.org/grpc v1.45.0 // indirect
|
||||||
google.golang.org/protobuf v1.27.1 // indirect
|
google.golang.org/protobuf v1.28.0 // indirect
|
||||||
gopkg.in/warnings.v0 v0.1.2 // indirect
|
gopkg.in/warnings.v0 v0.1.2 // indirect
|
||||||
)
|
)
|
||||||
|
|
|
||||||
62
go.sum
62
go.sum
|
|
@ -40,7 +40,6 @@ cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW
|
||||||
cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=
|
cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=
|
||||||
cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM=
|
cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM=
|
||||||
cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA=
|
cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA=
|
||||||
cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U=
|
|
||||||
cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y=
|
cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y=
|
||||||
cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A=
|
cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A=
|
||||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||||
|
|
@ -50,15 +49,16 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM
|
||||||
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
||||||
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
||||||
cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
|
cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
|
||||||
cloud.google.com/go/compute v1.2.0 h1:EKki8sSdvDU0OO9mAXGwPXOTOgPz2l08R0/IutDH11I=
|
cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
|
||||||
cloud.google.com/go/compute v1.2.0/go.mod h1:xlogom/6gr8RJGBe7nT2eGsQYAFUbbv8dbC29qE3Xmw=
|
cloud.google.com/go/compute v1.5.0 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiLM=
|
||||||
|
cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=
|
||||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||||
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
|
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
|
||||||
cloud.google.com/go/firestore v1.6.0/go.mod h1:afJwI0vaXwAG54kI7A//lP/lSPDkQORQuMkv56TxEPU=
|
cloud.google.com/go/firestore v1.6.0/go.mod h1:afJwI0vaXwAG54kI7A//lP/lSPDkQORQuMkv56TxEPU=
|
||||||
cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY=
|
cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY=
|
||||||
cloud.google.com/go/iam v0.1.1 h1:4CapQyNFjiksks1/x7jsvsygFPhihslYk5GptIrlX68=
|
cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc=
|
||||||
cloud.google.com/go/iam v0.1.1/go.mod h1:CKqrcnI/suGpybEHxZ7BMehL0oA4LpdyJdUlTl9jVMw=
|
cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=
|
||||||
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
||||||
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
|
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
|
||||||
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
|
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
|
||||||
|
|
@ -71,8 +71,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl
|
||||||
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
|
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
|
||||||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||||
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
|
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
|
||||||
cloud.google.com/go/storage v1.21.0 h1:HwnT2u2D309SFDHQII6m18HlrCi3jAXhUMTLOWXYH14=
|
cloud.google.com/go/storage v1.22.0 h1:NUV0NNp9nkBuW66BFRLuMgldN60C57ET3dhbwLIYio8=
|
||||||
cloud.google.com/go/storage v1.21.0/go.mod h1:XmRlxkgPjlBONznT2dDUU/5XlpU2OjMnKuqnZI01LAA=
|
cloud.google.com/go/storage v1.22.0/go.mod h1:GbaLEoMqbVm6sx3Z0R++gSiBlgMv6yUi2q1DeGFKQgE=
|
||||||
code.gitea.io/sdk/gitea v0.12.0/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY=
|
code.gitea.io/sdk/gitea v0.12.0/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY=
|
||||||
contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA=
|
contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA=
|
||||||
contrib.go.opencensus.io/exporter/ocagent v0.5.0/go.mod h1:ImxhfLRpxoYiSq891pBrLVhN+qmP8BTVvdH2YLs7Gl0=
|
contrib.go.opencensus.io/exporter/ocagent v0.5.0/go.mod h1:ImxhfLRpxoYiSq891pBrLVhN+qmP8BTVvdH2YLs7Gl0=
|
||||||
|
|
@ -900,13 +900,16 @@ github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||||
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
|
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
|
||||||
github.com/googleapis/gax-go/v2 v2.1.1 h1:dp3bWCh+PPO1zjRRiCSczJav13sBvG4UhNyVTa1KqdU=
|
|
||||||
github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=
|
github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=
|
||||||
|
github.com/googleapis/gax-go/v2 v2.2.0 h1:s7jOdKSaksJVOxE0Y/S32otcfiP+UQ0cL8/GTKaONwE=
|
||||||
|
github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM=
|
||||||
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
||||||
github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
||||||
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
||||||
github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
|
github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
|
||||||
github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
|
github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
|
||||||
|
github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA=
|
||||||
|
github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
|
||||||
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
|
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
|
||||||
github.com/gookit/color v1.2.4/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg=
|
github.com/gookit/color v1.2.4/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg=
|
||||||
github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ=
|
github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ=
|
||||||
|
|
@ -1899,8 +1902,10 @@ golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qx
|
||||||
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220107192237-5cfca573fb4d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20220107192237-5cfca573fb4d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220127074510-2fabfed7e28f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220127074510-2fabfed7e28f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=
|
|
||||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
|
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
|
golang.org/x/net v0.0.0-20220325170049-de3da57026de h1:pZB1TWnKi+o4bENlbzAgLrEbY4RMYmUIRobMcSmfeYc=
|
||||||
|
golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/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-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
|
|
@ -1923,8 +1928,10 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ
|
||||||
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||||
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||||
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
|
||||||
golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw=
|
golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
|
@ -2075,9 +2082,11 @@ golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220110181412-a018aaa089fe/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220110181412-a018aaa089fe/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs=
|
|
||||||
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886 h1:eJv7u3ksNXoLbGSKuv2s/SIO4tJVxc/A+MTpzxDgz/Q=
|
||||||
|
golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
|
@ -2282,10 +2291,11 @@ google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUb
|
||||||
google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I=
|
google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I=
|
||||||
google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw=
|
google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw=
|
||||||
google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo=
|
google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo=
|
||||||
google.golang.org/api v0.64.0/go.mod h1:931CdxA8Rm4t6zqTFGSsgwbAEZ2+GMYurbndwSimebM=
|
google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g=
|
||||||
google.golang.org/api v0.66.0/go.mod h1:I1dmXYpX7HGwz/ejRxwQp2qj5bFAz93HiCU1C1oYd9M=
|
google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA=
|
||||||
google.golang.org/api v0.69.0 h1:yHW5s2SFyDapr/43kYtIQmoaaFVW4baLMLwqV4auj2A=
|
google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8=
|
||||||
google.golang.org/api v0.69.0/go.mod h1:boanBiw+h5c3s+tBPgEzLDRHfFLWV0qXxRHz3ws7C80=
|
google.golang.org/api v0.74.0 h1:ExR2D+5TYIrMphWgs5JCgwRhEDlPDXXrLwHHMgPHTXE=
|
||||||
|
google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
|
|
@ -2356,6 +2366,7 @@ google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6D
|
||||||
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
|
google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
|
||||||
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
|
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
|
||||||
google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
|
google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
|
||||||
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
|
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
|
||||||
|
|
@ -2381,14 +2392,15 @@ google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ6
|
||||||
google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||||
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||||
google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||||
google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
|
||||||
google.golang.org/genproto v0.0.0-20220111164026-67b88f271998/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
|
||||||
google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
|
||||||
google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||||
google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||||
google.golang.org/genproto v0.0.0-20220211171837-173942840c17/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||||
google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8 h1:divpuJZKgX3Qt7MFDE5v62yu0yQcQbTCD9VJp9leX58=
|
google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||||
google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||||
|
google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||||
|
google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E=
|
||||||
|
google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf h1:JTjwKJX9erVpsw17w+OIPP7iAgEkN/r8urhWSunEDTs=
|
||||||
|
google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||||
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
|
|
@ -2426,8 +2438,9 @@ google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9K
|
||||||
google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||||
google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
|
google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
|
||||||
google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
|
google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
|
||||||
google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg=
|
|
||||||
google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
|
google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
|
||||||
|
google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M=
|
||||||
|
google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
|
||||||
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
|
|
@ -2441,8 +2454,9 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
|
||||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
|
|
||||||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
|
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
|
||||||
|
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||||
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
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=
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,19 @@
|
||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
|
## [0.3.0](https://github.com/googleapis/google-cloud-go/compare/iam/v0.2.0...iam/v0.3.0) (2022-02-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **iam:** set versionClient to module version ([55f0d92](https://github.com/googleapis/google-cloud-go/commit/55f0d92bf112f14b024b4ab0076c9875a17423c9))
|
||||||
|
|
||||||
|
## [0.2.0](https://github.com/googleapis/google-cloud-go/compare/iam/v0.1.1...iam/v0.2.0) (2022-02-14)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **iam:** add file for tracking version ([17b36ea](https://github.com/googleapis/google-cloud-go/commit/17b36ead42a96b1a01105122074e65164357519e))
|
||||||
|
|
||||||
### [0.1.1](https://www.github.com/googleapis/google-cloud-go/compare/iam/v0.1.0...iam/v0.1.1) (2022-01-14)
|
### [0.1.1](https://www.github.com/googleapis/google-cloud-go/compare/iam/v0.1.0...iam/v0.1.1) (2022-01-14)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"storage": "1.22.0"
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,19 @@
|
||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
|
|
||||||
|
## [1.22.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.21.0...storage/v1.22.0) (2022-03-31)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **storage:** allow specifying includeTrailingDelimiter ([#5617](https://github.com/googleapis/google-cloud-go/issues/5617)) ([a34503b](https://github.com/googleapis/google-cloud-go/commit/a34503bc0f0b95399285e8db66976b227e3b0072))
|
||||||
|
* **storage:** set versionClient to module version ([55f0d92](https://github.com/googleapis/google-cloud-go/commit/55f0d92bf112f14b024b4ab0076c9875a17423c9))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **storage:** respect STORAGE_EMULATOR_HOST in signedURL ([#5673](https://github.com/googleapis/google-cloud-go/issues/5673)) ([1c249ae](https://github.com/googleapis/google-cloud-go/commit/1c249ae5b4980cf53fa74635943ca8bf6a96a341))
|
||||||
|
|
||||||
## [1.21.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.20.0...storage/v1.21.0) (2022-02-17)
|
## [1.21.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.20.0...storage/v1.21.0) (2022-02-17)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -243,10 +243,10 @@ func toObjectACLRules(items []*raw.ObjectAccessControl) []ACLRule {
|
||||||
return rs
|
return rs
|
||||||
}
|
}
|
||||||
|
|
||||||
func fromProtoToObjectACLRules(items []*storagepb.ObjectAccessControl) []ACLRule {
|
func toObjectACLRulesFromProto(items []*storagepb.ObjectAccessControl) []ACLRule {
|
||||||
var rs []ACLRule
|
var rs []ACLRule
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
rs = append(rs, fromProtoToObjectACLRule(item))
|
rs = append(rs, toObjectACLRuleFromProto(item))
|
||||||
}
|
}
|
||||||
return rs
|
return rs
|
||||||
}
|
}
|
||||||
|
|
@ -259,6 +259,14 @@ func toBucketACLRules(items []*raw.BucketAccessControl) []ACLRule {
|
||||||
return rs
|
return rs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toBucketACLRulesFromProto(items []*storagepb.BucketAccessControl) []ACLRule {
|
||||||
|
var rs []ACLRule
|
||||||
|
for _, item := range items {
|
||||||
|
rs = append(rs, toBucketACLRuleFromProto(item))
|
||||||
|
}
|
||||||
|
return rs
|
||||||
|
}
|
||||||
|
|
||||||
func toObjectACLRule(a *raw.ObjectAccessControl) ACLRule {
|
func toObjectACLRule(a *raw.ObjectAccessControl) ACLRule {
|
||||||
return ACLRule{
|
return ACLRule{
|
||||||
Entity: ACLEntity(a.Entity),
|
Entity: ACLEntity(a.Entity),
|
||||||
|
|
@ -270,14 +278,14 @@ func toObjectACLRule(a *raw.ObjectAccessControl) ACLRule {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func fromProtoToObjectACLRule(a *storagepb.ObjectAccessControl) ACLRule {
|
func toObjectACLRuleFromProto(a *storagepb.ObjectAccessControl) ACLRule {
|
||||||
return ACLRule{
|
return ACLRule{
|
||||||
Entity: ACLEntity(a.GetEntity()),
|
Entity: ACLEntity(a.GetEntity()),
|
||||||
EntityID: a.GetEntityId(),
|
EntityID: a.GetEntityId(),
|
||||||
Role: ACLRole(a.GetRole()),
|
Role: ACLRole(a.GetRole()),
|
||||||
Domain: a.GetDomain(),
|
Domain: a.GetDomain(),
|
||||||
Email: a.GetEmail(),
|
Email: a.GetEmail(),
|
||||||
ProjectTeam: fromProtoToObjectProjectTeam(a.GetProjectTeam()),
|
ProjectTeam: toProjectTeamFromProto(a.GetProjectTeam()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -292,6 +300,17 @@ func toBucketACLRule(a *raw.BucketAccessControl) ACLRule {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toBucketACLRuleFromProto(a *storagepb.BucketAccessControl) ACLRule {
|
||||||
|
return ACLRule{
|
||||||
|
Entity: ACLEntity(a.GetEntity()),
|
||||||
|
EntityID: a.GetEntityId(),
|
||||||
|
Role: ACLRole(a.GetRole()),
|
||||||
|
Domain: a.GetDomain(),
|
||||||
|
Email: a.GetEmail(),
|
||||||
|
ProjectTeam: toProjectTeamFromProto(a.GetProjectTeam()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func toRawObjectACL(rules []ACLRule) []*raw.ObjectAccessControl {
|
func toRawObjectACL(rules []ACLRule) []*raw.ObjectAccessControl {
|
||||||
if len(rules) == 0 {
|
if len(rules) == 0 {
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -325,6 +344,17 @@ func toRawBucketACL(rules []ACLRule) []*raw.BucketAccessControl {
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toProtoBucketACL(rules []ACLRule) []*storagepb.BucketAccessControl {
|
||||||
|
if len(rules) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
r := make([]*storagepb.BucketAccessControl, 0, len(rules))
|
||||||
|
for _, rule := range rules {
|
||||||
|
r = append(r, rule.toProtoBucketAccessControl())
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
func (r ACLRule) toRawBucketAccessControl(bucket string) *raw.BucketAccessControl {
|
func (r ACLRule) toRawBucketAccessControl(bucket string) *raw.BucketAccessControl {
|
||||||
return &raw.BucketAccessControl{
|
return &raw.BucketAccessControl{
|
||||||
Bucket: bucket,
|
Bucket: bucket,
|
||||||
|
|
@ -351,6 +381,14 @@ func (r ACLRule) toProtoObjectAccessControl(bucket string) *storagepb.ObjectAcce
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r ACLRule) toProtoBucketAccessControl() *storagepb.BucketAccessControl {
|
||||||
|
return &storagepb.BucketAccessControl{
|
||||||
|
Entity: string(r.Entity),
|
||||||
|
Role: string(r.Role),
|
||||||
|
// The other fields are not settable.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func toBucketProjectTeam(p *raw.BucketAccessControlProjectTeam) *ProjectTeam {
|
func toBucketProjectTeam(p *raw.BucketAccessControlProjectTeam) *ProjectTeam {
|
||||||
if p == nil {
|
if p == nil {
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -361,6 +399,16 @@ func toBucketProjectTeam(p *raw.BucketAccessControlProjectTeam) *ProjectTeam {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toProjectTeamFromProto(p *storagepb.ProjectTeam) *ProjectTeam {
|
||||||
|
if p == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &ProjectTeam{
|
||||||
|
ProjectNumber: p.GetProjectNumber(),
|
||||||
|
Team: p.GetTeam(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func toObjectProjectTeam(p *raw.ObjectAccessControlProjectTeam) *ProjectTeam {
|
func toObjectProjectTeam(p *raw.ObjectAccessControlProjectTeam) *ProjectTeam {
|
||||||
if p == nil {
|
if p == nil {
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -370,13 +418,3 @@ func toObjectProjectTeam(p *raw.ObjectAccessControlProjectTeam) *ProjectTeam {
|
||||||
Team: p.Team,
|
Team: p.Team,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func fromProtoToObjectProjectTeam(p *storagepb.ProjectTeam) *ProjectTeam {
|
|
||||||
if p == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return &ProjectTeam{
|
|
||||||
ProjectNumber: p.GetProjectNumber(),
|
|
||||||
Team: p.GetTeam(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -27,12 +27,16 @@ import (
|
||||||
"cloud.google.com/go/compute/metadata"
|
"cloud.google.com/go/compute/metadata"
|
||||||
"cloud.google.com/go/internal/optional"
|
"cloud.google.com/go/internal/optional"
|
||||||
"cloud.google.com/go/internal/trace"
|
"cloud.google.com/go/internal/trace"
|
||||||
|
"github.com/googleapis/go-type-adapters/adapters"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
"google.golang.org/api/googleapi"
|
"google.golang.org/api/googleapi"
|
||||||
"google.golang.org/api/iamcredentials/v1"
|
"google.golang.org/api/iamcredentials/v1"
|
||||||
"google.golang.org/api/iterator"
|
"google.golang.org/api/iterator"
|
||||||
"google.golang.org/api/option"
|
"google.golang.org/api/option"
|
||||||
raw "google.golang.org/api/storage/v1"
|
raw "google.golang.org/api/storage/v1"
|
||||||
|
"google.golang.org/genproto/googleapis/storage/v2"
|
||||||
|
storagepb "google.golang.org/genproto/googleapis/storage/v2"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
// BucketHandle provides operations on a Google Cloud Storage bucket.
|
// BucketHandle provides operations on a Google Cloud Storage bucket.
|
||||||
|
|
@ -801,6 +805,36 @@ func newBucket(b *raw.Bucket) (*BucketAttrs, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func newBucketFromProto(b *storagepb.Bucket) *BucketAttrs {
|
||||||
|
if b == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &BucketAttrs{
|
||||||
|
Name: parseBucketName(b.GetName()),
|
||||||
|
Location: b.GetLocation(),
|
||||||
|
MetaGeneration: b.GetMetageneration(),
|
||||||
|
DefaultEventBasedHold: b.GetDefaultEventBasedHold(),
|
||||||
|
StorageClass: b.GetStorageClass(),
|
||||||
|
Created: b.GetCreateTime().AsTime(),
|
||||||
|
VersioningEnabled: b.GetVersioning().GetEnabled(),
|
||||||
|
ACL: toBucketACLRulesFromProto(b.GetAcl()),
|
||||||
|
DefaultObjectACL: toObjectACLRulesFromProto(b.GetDefaultObjectAcl()),
|
||||||
|
Labels: b.GetLabels(),
|
||||||
|
RequesterPays: b.GetBilling().GetRequesterPays(),
|
||||||
|
Lifecycle: toLifecycleFromProto(b.GetLifecycle()),
|
||||||
|
RetentionPolicy: toRetentionPolicyFromProto(b.GetRetentionPolicy()),
|
||||||
|
CORS: toCORSFromProto(b.GetCors()),
|
||||||
|
Encryption: toBucketEncryptionFromProto(b.GetEncryption()),
|
||||||
|
Logging: toBucketLoggingFromProto(b.GetLogging()),
|
||||||
|
Website: toBucketWebsiteFromProto(b.GetWebsite()),
|
||||||
|
BucketPolicyOnly: toBucketPolicyOnlyFromProto(b.GetIamConfig()),
|
||||||
|
UniformBucketLevelAccess: toUniformBucketLevelAccessFromProto(b.GetIamConfig()),
|
||||||
|
PublicAccessPrevention: toPublicAccessPreventionFromProto(b.GetIamConfig()),
|
||||||
|
LocationType: b.GetLocationType(),
|
||||||
|
RPO: toRPOFromProto(b),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// toRawBucket copies the editable attribute from b to the raw library's Bucket type.
|
// toRawBucket copies the editable attribute from b to the raw library's Bucket type.
|
||||||
func (b *BucketAttrs) toRawBucket() *raw.Bucket {
|
func (b *BucketAttrs) toRawBucket() *raw.Bucket {
|
||||||
// Copy label map.
|
// Copy label map.
|
||||||
|
|
@ -854,6 +888,66 @@ func (b *BucketAttrs) toRawBucket() *raw.Bucket {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *BucketAttrs) toProtoBucket() *storagepb.Bucket {
|
||||||
|
if b == nil {
|
||||||
|
return &storagepb.Bucket{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy label map.
|
||||||
|
var labels map[string]string
|
||||||
|
if len(b.Labels) > 0 {
|
||||||
|
labels = make(map[string]string, len(b.Labels))
|
||||||
|
for k, v := range b.Labels {
|
||||||
|
labels[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore VersioningEnabled if it is false. This is OK because
|
||||||
|
// we only call this method when creating a bucket, and by default
|
||||||
|
// new buckets have versioning off.
|
||||||
|
var v *storagepb.Bucket_Versioning
|
||||||
|
if b.VersioningEnabled {
|
||||||
|
v = &storagepb.Bucket_Versioning{Enabled: true}
|
||||||
|
}
|
||||||
|
var bb *storagepb.Bucket_Billing
|
||||||
|
if b.RequesterPays {
|
||||||
|
bb = &storage.Bucket_Billing{RequesterPays: true}
|
||||||
|
}
|
||||||
|
var bktIAM *storagepb.Bucket_IamConfig
|
||||||
|
if b.UniformBucketLevelAccess.Enabled || b.BucketPolicyOnly.Enabled || b.PublicAccessPrevention != PublicAccessPreventionUnknown {
|
||||||
|
bktIAM = &storagepb.Bucket_IamConfig{}
|
||||||
|
if b.UniformBucketLevelAccess.Enabled || b.BucketPolicyOnly.Enabled {
|
||||||
|
bktIAM.UniformBucketLevelAccess = &storagepb.Bucket_IamConfig_UniformBucketLevelAccess{
|
||||||
|
Enabled: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO(noahdietz): This will be switched to a string.
|
||||||
|
//
|
||||||
|
// if b.PublicAccessPrevention != PublicAccessPreventionUnknown {
|
||||||
|
// bktIAM.PublicAccessPrevention = b.PublicAccessPrevention.String()
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
return &storagepb.Bucket{
|
||||||
|
Name: b.Name,
|
||||||
|
Location: b.Location,
|
||||||
|
StorageClass: b.StorageClass,
|
||||||
|
Acl: toProtoBucketACL(b.ACL),
|
||||||
|
DefaultObjectAcl: toProtoObjectACL(b.DefaultObjectACL),
|
||||||
|
Versioning: v,
|
||||||
|
Labels: labels,
|
||||||
|
Billing: bb,
|
||||||
|
Lifecycle: toProtoLifecycle(b.Lifecycle),
|
||||||
|
RetentionPolicy: b.RetentionPolicy.toProtoRetentionPolicy(),
|
||||||
|
Cors: toProtoCORS(b.CORS),
|
||||||
|
Encryption: b.Encryption.toProtoBucketEncryption(),
|
||||||
|
Logging: b.Logging.toProtoBucketLogging(),
|
||||||
|
Website: b.Website.toProtoBucketWebsite(),
|
||||||
|
IamConfig: bktIAM,
|
||||||
|
Rpo: b.RPO.String(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// CORS is the bucket's Cross-Origin Resource Sharing (CORS) configuration.
|
// CORS is the bucket's Cross-Origin Resource Sharing (CORS) configuration.
|
||||||
type CORS struct {
|
type CORS struct {
|
||||||
// MaxAge is the value to return in the Access-Control-Max-Age
|
// MaxAge is the value to return in the Access-Control-Max-Age
|
||||||
|
|
@ -1190,6 +1284,32 @@ func applyBucketConds(method string, conds *BucketConditions, call interface{})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// applyBucketConds modifies the provided request message using the conditions
|
||||||
|
// in conds. msg is a protobuf Message that has fields if_metageneration_match
|
||||||
|
// and if_metageneration_not_match.
|
||||||
|
func applyBucketCondsProto(method string, conds *BucketConditions, msg proto.Message) error {
|
||||||
|
rmsg := msg.ProtoReflect()
|
||||||
|
|
||||||
|
if conds == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if err := conds.validate(method); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case conds.MetagenerationMatch != 0:
|
||||||
|
if !setConditionProtoField(rmsg, "if_metageneration_match", conds.MetagenerationMatch) {
|
||||||
|
return fmt.Errorf("storage: %s: ifMetagenerationMatch not supported", method)
|
||||||
|
}
|
||||||
|
case conds.MetagenerationNotMatch != 0:
|
||||||
|
if !setConditionProtoField(rmsg, "if_metageneration_not_match", conds.MetagenerationNotMatch) {
|
||||||
|
return fmt.Errorf("storage: %s: ifMetagenerationNotMatch not supported", method)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (rp *RetentionPolicy) toRawRetentionPolicy() *raw.BucketRetentionPolicy {
|
func (rp *RetentionPolicy) toRawRetentionPolicy() *raw.BucketRetentionPolicy {
|
||||||
if rp == nil {
|
if rp == nil {
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -1199,6 +1319,15 @@ func (rp *RetentionPolicy) toRawRetentionPolicy() *raw.BucketRetentionPolicy {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rp *RetentionPolicy) toProtoRetentionPolicy() *storagepb.Bucket_RetentionPolicy {
|
||||||
|
if rp == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &storagepb.Bucket_RetentionPolicy{
|
||||||
|
RetentionPeriod: int64(rp.RetentionPeriod / time.Second),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func toRetentionPolicy(rp *raw.BucketRetentionPolicy) (*RetentionPolicy, error) {
|
func toRetentionPolicy(rp *raw.BucketRetentionPolicy) (*RetentionPolicy, error) {
|
||||||
if rp == nil {
|
if rp == nil {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
|
@ -1214,6 +1343,17 @@ func toRetentionPolicy(rp *raw.BucketRetentionPolicy) (*RetentionPolicy, error)
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toRetentionPolicyFromProto(rp *storagepb.Bucket_RetentionPolicy) *RetentionPolicy {
|
||||||
|
if rp == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &RetentionPolicy{
|
||||||
|
RetentionPeriod: time.Duration(rp.GetRetentionPeriod()) * time.Second,
|
||||||
|
EffectiveTime: rp.GetEffectiveTime().AsTime(),
|
||||||
|
IsLocked: rp.GetIsLocked(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func toRawCORS(c []CORS) []*raw.BucketCors {
|
func toRawCORS(c []CORS) []*raw.BucketCors {
|
||||||
var out []*raw.BucketCors
|
var out []*raw.BucketCors
|
||||||
for _, v := range c {
|
for _, v := range c {
|
||||||
|
|
@ -1227,6 +1367,19 @@ func toRawCORS(c []CORS) []*raw.BucketCors {
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toProtoCORS(c []CORS) []*storagepb.Bucket_Cors {
|
||||||
|
var out []*storagepb.Bucket_Cors
|
||||||
|
for _, v := range c {
|
||||||
|
out = append(out, &storagepb.Bucket_Cors{
|
||||||
|
MaxAgeSeconds: int32(v.MaxAge / time.Second),
|
||||||
|
Method: v.Methods,
|
||||||
|
Origin: v.Origins,
|
||||||
|
ResponseHeader: v.ResponseHeaders,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
func toCORS(rc []*raw.BucketCors) []CORS {
|
func toCORS(rc []*raw.BucketCors) []CORS {
|
||||||
var out []CORS
|
var out []CORS
|
||||||
for _, v := range rc {
|
for _, v := range rc {
|
||||||
|
|
@ -1240,6 +1393,19 @@ func toCORS(rc []*raw.BucketCors) []CORS {
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toCORSFromProto(rc []*storagepb.Bucket_Cors) []CORS {
|
||||||
|
var out []CORS
|
||||||
|
for _, v := range rc {
|
||||||
|
out = append(out, CORS{
|
||||||
|
MaxAge: time.Duration(v.GetMaxAgeSeconds()) * time.Second,
|
||||||
|
Methods: v.GetMethod(),
|
||||||
|
Origins: v.GetOrigin(),
|
||||||
|
ResponseHeaders: v.GetResponseHeader(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
func toRawLifecycle(l Lifecycle) *raw.BucketLifecycle {
|
func toRawLifecycle(l Lifecycle) *raw.BucketLifecycle {
|
||||||
var rl raw.BucketLifecycle
|
var rl raw.BucketLifecycle
|
||||||
if len(l.Rules) == 0 {
|
if len(l.Rules) == 0 {
|
||||||
|
|
@ -1283,6 +1449,51 @@ func toRawLifecycle(l Lifecycle) *raw.BucketLifecycle {
|
||||||
return &rl
|
return &rl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toProtoLifecycle(l Lifecycle) *storagepb.Bucket_Lifecycle {
|
||||||
|
var rl storagepb.Bucket_Lifecycle
|
||||||
|
|
||||||
|
for _, r := range l.Rules {
|
||||||
|
rr := &storagepb.Bucket_Lifecycle_Rule{
|
||||||
|
Action: &storagepb.Bucket_Lifecycle_Rule_Action{
|
||||||
|
Type: r.Action.Type,
|
||||||
|
StorageClass: r.Action.StorageClass,
|
||||||
|
},
|
||||||
|
Condition: &storagepb.Bucket_Lifecycle_Rule_Condition{
|
||||||
|
// Note: The Apiary types use int64 (even though the Discovery
|
||||||
|
// doc states "format: int32"), so the client types used int64,
|
||||||
|
// but the proto uses int32 so we have a potentially lossy
|
||||||
|
// conversion.
|
||||||
|
AgeDays: proto.Int32(int32(r.Condition.AgeInDays)),
|
||||||
|
DaysSinceCustomTime: proto.Int32(int32(r.Condition.DaysSinceCustomTime)),
|
||||||
|
DaysSinceNoncurrentTime: proto.Int32(int32(r.Condition.DaysSinceNoncurrentTime)),
|
||||||
|
MatchesStorageClass: r.Condition.MatchesStorageClasses,
|
||||||
|
NumNewerVersions: proto.Int32(int32(r.Condition.NumNewerVersions)),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
switch r.Condition.Liveness {
|
||||||
|
case LiveAndArchived:
|
||||||
|
rr.Condition.IsLive = nil
|
||||||
|
case Live:
|
||||||
|
rr.Condition.IsLive = proto.Bool(true)
|
||||||
|
case Archived:
|
||||||
|
rr.Condition.IsLive = proto.Bool(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !r.Condition.CreatedBefore.IsZero() {
|
||||||
|
rr.Condition.CreatedBefore = adapters.TimeToProtoDate(r.Condition.CreatedBefore)
|
||||||
|
}
|
||||||
|
if !r.Condition.CustomTimeBefore.IsZero() {
|
||||||
|
rr.Condition.CustomTimeBefore = adapters.TimeToProtoDate(r.Condition.CustomTimeBefore)
|
||||||
|
}
|
||||||
|
if !r.Condition.NoncurrentTimeBefore.IsZero() {
|
||||||
|
rr.Condition.NoncurrentTimeBefore = adapters.TimeToProtoDate(r.Condition.NoncurrentTimeBefore)
|
||||||
|
}
|
||||||
|
rl.Rule = append(rl.Rule, rr)
|
||||||
|
}
|
||||||
|
return &rl
|
||||||
|
}
|
||||||
|
|
||||||
func toLifecycle(rl *raw.BucketLifecycle) Lifecycle {
|
func toLifecycle(rl *raw.BucketLifecycle) Lifecycle {
|
||||||
var l Lifecycle
|
var l Lifecycle
|
||||||
if rl == nil {
|
if rl == nil {
|
||||||
|
|
@ -1325,6 +1536,48 @@ func toLifecycle(rl *raw.BucketLifecycle) Lifecycle {
|
||||||
return l
|
return l
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toLifecycleFromProto(rl *storagepb.Bucket_Lifecycle) Lifecycle {
|
||||||
|
var l Lifecycle
|
||||||
|
if rl == nil {
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
for _, rr := range rl.GetRule() {
|
||||||
|
r := LifecycleRule{
|
||||||
|
Action: LifecycleAction{
|
||||||
|
Type: rr.GetAction().GetType(),
|
||||||
|
StorageClass: rr.GetAction().GetStorageClass(),
|
||||||
|
},
|
||||||
|
Condition: LifecycleCondition{
|
||||||
|
AgeInDays: int64(rr.GetCondition().GetAgeDays()),
|
||||||
|
DaysSinceCustomTime: int64(rr.GetCondition().GetDaysSinceCustomTime()),
|
||||||
|
DaysSinceNoncurrentTime: int64(rr.GetCondition().GetDaysSinceNoncurrentTime()),
|
||||||
|
MatchesStorageClasses: rr.GetCondition().GetMatchesStorageClass(),
|
||||||
|
NumNewerVersions: int64(rr.GetCondition().GetNumNewerVersions()),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if rr.GetCondition().IsLive == nil {
|
||||||
|
r.Condition.Liveness = LiveAndArchived
|
||||||
|
} else if rr.GetCondition().GetIsLive() {
|
||||||
|
r.Condition.Liveness = Live
|
||||||
|
} else {
|
||||||
|
r.Condition.Liveness = Archived
|
||||||
|
}
|
||||||
|
|
||||||
|
if rr.GetCondition().GetCreatedBefore() != nil {
|
||||||
|
r.Condition.CreatedBefore = adapters.ProtoDateToUTCTime(rr.GetCondition().GetCreatedBefore())
|
||||||
|
}
|
||||||
|
if rr.GetCondition().GetCustomTimeBefore() != nil {
|
||||||
|
r.Condition.CustomTimeBefore = adapters.ProtoDateToUTCTime(rr.GetCondition().GetCustomTimeBefore())
|
||||||
|
}
|
||||||
|
if rr.GetCondition().GetNoncurrentTimeBefore() != nil {
|
||||||
|
r.Condition.NoncurrentTimeBefore = adapters.ProtoDateToUTCTime(rr.GetCondition().GetNoncurrentTimeBefore())
|
||||||
|
}
|
||||||
|
l.Rules = append(l.Rules, r)
|
||||||
|
}
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
|
||||||
func (e *BucketEncryption) toRawBucketEncryption() *raw.BucketEncryption {
|
func (e *BucketEncryption) toRawBucketEncryption() *raw.BucketEncryption {
|
||||||
if e == nil {
|
if e == nil {
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -1334,6 +1587,15 @@ func (e *BucketEncryption) toRawBucketEncryption() *raw.BucketEncryption {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *BucketEncryption) toProtoBucketEncryption() *storagepb.Bucket_Encryption {
|
||||||
|
if e == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &storagepb.Bucket_Encryption{
|
||||||
|
DefaultKmsKey: e.DefaultKMSKeyName,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func toBucketEncryption(e *raw.BucketEncryption) *BucketEncryption {
|
func toBucketEncryption(e *raw.BucketEncryption) *BucketEncryption {
|
||||||
if e == nil {
|
if e == nil {
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -1341,6 +1603,13 @@ func toBucketEncryption(e *raw.BucketEncryption) *BucketEncryption {
|
||||||
return &BucketEncryption{DefaultKMSKeyName: e.DefaultKmsKeyName}
|
return &BucketEncryption{DefaultKMSKeyName: e.DefaultKmsKeyName}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toBucketEncryptionFromProto(e *storagepb.Bucket_Encryption) *BucketEncryption {
|
||||||
|
if e == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &BucketEncryption{DefaultKMSKeyName: e.GetDefaultKmsKey()}
|
||||||
|
}
|
||||||
|
|
||||||
func (b *BucketLogging) toRawBucketLogging() *raw.BucketLogging {
|
func (b *BucketLogging) toRawBucketLogging() *raw.BucketLogging {
|
||||||
if b == nil {
|
if b == nil {
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -1351,6 +1620,16 @@ func (b *BucketLogging) toRawBucketLogging() *raw.BucketLogging {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *BucketLogging) toProtoBucketLogging() *storagepb.Bucket_Logging {
|
||||||
|
if b == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &storagepb.Bucket_Logging{
|
||||||
|
LogBucket: b.LogBucket,
|
||||||
|
LogObjectPrefix: b.LogObjectPrefix,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func toBucketLogging(b *raw.BucketLogging) *BucketLogging {
|
func toBucketLogging(b *raw.BucketLogging) *BucketLogging {
|
||||||
if b == nil {
|
if b == nil {
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -1361,6 +1640,16 @@ func toBucketLogging(b *raw.BucketLogging) *BucketLogging {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toBucketLoggingFromProto(b *storagepb.Bucket_Logging) *BucketLogging {
|
||||||
|
if b == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &BucketLogging{
|
||||||
|
LogBucket: b.GetLogBucket(),
|
||||||
|
LogObjectPrefix: b.GetLogObjectPrefix(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (w *BucketWebsite) toRawBucketWebsite() *raw.BucketWebsite {
|
func (w *BucketWebsite) toRawBucketWebsite() *raw.BucketWebsite {
|
||||||
if w == nil {
|
if w == nil {
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -1371,6 +1660,16 @@ func (w *BucketWebsite) toRawBucketWebsite() *raw.BucketWebsite {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *BucketWebsite) toProtoBucketWebsite() *storagepb.Bucket_Website {
|
||||||
|
if w == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &storagepb.Bucket_Website{
|
||||||
|
MainPageSuffix: w.MainPageSuffix,
|
||||||
|
NotFoundPage: w.NotFoundPage,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func toBucketWebsite(w *raw.BucketWebsite) *BucketWebsite {
|
func toBucketWebsite(w *raw.BucketWebsite) *BucketWebsite {
|
||||||
if w == nil {
|
if w == nil {
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -1381,6 +1680,16 @@ func toBucketWebsite(w *raw.BucketWebsite) *BucketWebsite {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toBucketWebsiteFromProto(w *storagepb.Bucket_Website) *BucketWebsite {
|
||||||
|
if w == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &BucketWebsite{
|
||||||
|
MainPageSuffix: w.GetMainPageSuffix(),
|
||||||
|
NotFoundPage: w.GetNotFoundPage(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func toBucketPolicyOnly(b *raw.BucketIamConfiguration) BucketPolicyOnly {
|
func toBucketPolicyOnly(b *raw.BucketIamConfiguration) BucketPolicyOnly {
|
||||||
if b == nil || b.BucketPolicyOnly == nil || !b.BucketPolicyOnly.Enabled {
|
if b == nil || b.BucketPolicyOnly == nil || !b.BucketPolicyOnly.Enabled {
|
||||||
return BucketPolicyOnly{}
|
return BucketPolicyOnly{}
|
||||||
|
|
@ -1397,6 +1706,16 @@ func toBucketPolicyOnly(b *raw.BucketIamConfiguration) BucketPolicyOnly {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toBucketPolicyOnlyFromProto(b *storagepb.Bucket_IamConfig) BucketPolicyOnly {
|
||||||
|
if b == nil || !b.GetUniformBucketLevelAccess().GetEnabled() {
|
||||||
|
return BucketPolicyOnly{}
|
||||||
|
}
|
||||||
|
return BucketPolicyOnly{
|
||||||
|
Enabled: true,
|
||||||
|
LockedTime: b.GetUniformBucketLevelAccess().GetLockTime().AsTime(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func toUniformBucketLevelAccess(b *raw.BucketIamConfiguration) UniformBucketLevelAccess {
|
func toUniformBucketLevelAccess(b *raw.BucketIamConfiguration) UniformBucketLevelAccess {
|
||||||
if b == nil || b.UniformBucketLevelAccess == nil || !b.UniformBucketLevelAccess.Enabled {
|
if b == nil || b.UniformBucketLevelAccess == nil || !b.UniformBucketLevelAccess.Enabled {
|
||||||
return UniformBucketLevelAccess{}
|
return UniformBucketLevelAccess{}
|
||||||
|
|
@ -1413,6 +1732,16 @@ func toUniformBucketLevelAccess(b *raw.BucketIamConfiguration) UniformBucketLeve
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toUniformBucketLevelAccessFromProto(b *storagepb.Bucket_IamConfig) UniformBucketLevelAccess {
|
||||||
|
if b == nil || !b.GetUniformBucketLevelAccess().GetEnabled() {
|
||||||
|
return UniformBucketLevelAccess{}
|
||||||
|
}
|
||||||
|
return UniformBucketLevelAccess{
|
||||||
|
Enabled: true,
|
||||||
|
LockedTime: b.GetUniformBucketLevelAccess().GetLockTime().AsTime(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func toPublicAccessPrevention(b *raw.BucketIamConfiguration) PublicAccessPrevention {
|
func toPublicAccessPrevention(b *raw.BucketIamConfiguration) PublicAccessPrevention {
|
||||||
if b == nil {
|
if b == nil {
|
||||||
return PublicAccessPreventionUnknown
|
return PublicAccessPreventionUnknown
|
||||||
|
|
@ -1427,6 +1756,20 @@ func toPublicAccessPrevention(b *raw.BucketIamConfiguration) PublicAccessPrevent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toPublicAccessPreventionFromProto(b *storagepb.Bucket_IamConfig) PublicAccessPrevention {
|
||||||
|
if b == nil {
|
||||||
|
return PublicAccessPreventionUnknown
|
||||||
|
}
|
||||||
|
switch b.GetPublicAccessPrevention() {
|
||||||
|
case publicAccessPreventionInherited, publicAccessPreventionUnspecified:
|
||||||
|
return PublicAccessPreventionInherited
|
||||||
|
case publicAccessPreventionEnforced:
|
||||||
|
return PublicAccessPreventionEnforced
|
||||||
|
default:
|
||||||
|
return PublicAccessPreventionUnknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func toRPO(b *raw.Bucket) RPO {
|
func toRPO(b *raw.Bucket) RPO {
|
||||||
if b == nil {
|
if b == nil {
|
||||||
return RPOUnknown
|
return RPOUnknown
|
||||||
|
|
@ -1441,6 +1784,20 @@ func toRPO(b *raw.Bucket) RPO {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toRPOFromProto(b *storagepb.Bucket) RPO {
|
||||||
|
if b == nil {
|
||||||
|
return RPOUnknown
|
||||||
|
}
|
||||||
|
switch b.GetRpo() {
|
||||||
|
case rpoDefault:
|
||||||
|
return RPODefault
|
||||||
|
case rpoAsyncTurbo:
|
||||||
|
return RPOAsyncTurbo
|
||||||
|
default:
|
||||||
|
return RPOUnknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Objects returns an iterator over the objects in the bucket that match the
|
// Objects returns an iterator over the objects in the bucket that match the
|
||||||
// Query q. If q is nil, no filtering is done. Objects will be iterated over
|
// Query q. If q is nil, no filtering is done. Objects will be iterated over
|
||||||
// lexicographically by name.
|
// lexicographically by name.
|
||||||
|
|
@ -1543,6 +1900,7 @@ func (it *ObjectIterator) fetch(pageSize int, pageToken string) (string, error)
|
||||||
req.StartOffset(it.query.StartOffset)
|
req.StartOffset(it.query.StartOffset)
|
||||||
req.EndOffset(it.query.EndOffset)
|
req.EndOffset(it.query.EndOffset)
|
||||||
req.Versions(it.query.Versions)
|
req.Versions(it.query.Versions)
|
||||||
|
req.IncludeTrailingDelimiter(it.query.IncludeTrailingDelimiter)
|
||||||
if len(it.query.fieldSelection) > 0 {
|
if len(it.query.fieldSelection) > 0 {
|
||||||
req.Fields("nextPageToken", googleapi.Field(it.query.fieldSelection))
|
req.Fields("nextPageToken", googleapi.Field(it.query.fieldSelection))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,241 @@
|
||||||
|
// Copyright 2022 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
gax "github.com/googleapis/gax-go/v2"
|
||||||
|
"google.golang.org/api/option"
|
||||||
|
iampb "google.golang.org/genproto/googleapis/iam/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TODO(noahdietz): Move existing factory methods to this file.
|
||||||
|
|
||||||
|
// storageClient is an internal-only interface designed to separate the
|
||||||
|
// transport-specific logic of making Storage API calls from the logic of the
|
||||||
|
// client library.
|
||||||
|
//
|
||||||
|
// Implementation requirements beyond implementing the interface include:
|
||||||
|
// * factory method(s) must accept a `userProject string` param
|
||||||
|
// * `settings` must be retained per instance
|
||||||
|
// * `storageOption`s must be resolved in the order they are received
|
||||||
|
// * all API errors must be wrapped in the gax-go APIError type
|
||||||
|
// * any unimplemented interface methods must return a StorageUnimplementedErr
|
||||||
|
//
|
||||||
|
// TODO(noahdietz): This interface is currently not used in the production code
|
||||||
|
// paths
|
||||||
|
type storageClient interface {
|
||||||
|
|
||||||
|
// Top-level methods.
|
||||||
|
|
||||||
|
GetServiceAccount(ctx context.Context, project string, opts ...storageOption) (string, error)
|
||||||
|
CreateBucket(ctx context.Context, project string, attrs *BucketAttrs, opts ...storageOption) (*BucketAttrs, error)
|
||||||
|
ListBuckets(ctx context.Context, project string, opts ...storageOption) (*BucketIterator, error)
|
||||||
|
Close() error
|
||||||
|
|
||||||
|
// Bucket methods.
|
||||||
|
|
||||||
|
DeleteBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) error
|
||||||
|
GetBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error)
|
||||||
|
UpdateBucket(ctx context.Context, uattrs *BucketAttrsToUpdate, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error)
|
||||||
|
LockBucketRetentionPolicy(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) error
|
||||||
|
ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) (*ObjectIterator, error)
|
||||||
|
|
||||||
|
// Object metadata methods.
|
||||||
|
|
||||||
|
DeleteObject(ctx context.Context, bucket, object string, conds *Conditions, opts ...storageOption) error
|
||||||
|
GetObject(ctx context.Context, bucket, object string, conds *Conditions, opts ...storageOption) (*ObjectAttrs, error)
|
||||||
|
UpdateObject(ctx context.Context, bucket, object string, uattrs *ObjectAttrsToUpdate, conds *Conditions, opts ...storageOption) (*ObjectAttrs, error)
|
||||||
|
|
||||||
|
// Default Object ACL methods.
|
||||||
|
|
||||||
|
DeleteDefaultObjectACL(ctx context.Context, bucket string, entity ACLEntity, opts ...storageOption) error
|
||||||
|
ListDefaultObjectACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error)
|
||||||
|
UpdateDefaultObjectACL(ctx context.Context, opts ...storageOption) (*ACLRule, error)
|
||||||
|
|
||||||
|
// Bucket ACL methods.
|
||||||
|
|
||||||
|
DeleteBucketACL(ctx context.Context, bucket string, entity ACLEntity, opts ...storageOption) error
|
||||||
|
ListBucketACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error)
|
||||||
|
UpdateBucketACL(ctx context.Context, bucket string, entity ACLEntity, role ACLRole, opts ...storageOption) (*ACLRule, error)
|
||||||
|
|
||||||
|
// Object ACL methods.
|
||||||
|
|
||||||
|
DeleteObjectACL(ctx context.Context, bucket, object string, entity ACLEntity, opts ...storageOption) error
|
||||||
|
ListObjectACLs(ctx context.Context, bucket, object string, opts ...storageOption) ([]ACLRule, error)
|
||||||
|
UpdateObjectACL(ctx context.Context, bucket, object string, entity ACLEntity, role ACLRole, opts ...storageOption) (*ACLRule, error)
|
||||||
|
|
||||||
|
// Media operations.
|
||||||
|
|
||||||
|
ComposeObject(ctx context.Context, req *composeObjectRequest, opts ...storageOption) (*ObjectAttrs, error)
|
||||||
|
RewriteObject(ctx context.Context, req *rewriteObjectRequest, opts ...storageOption) (*rewriteObjectResponse, error)
|
||||||
|
|
||||||
|
OpenReader(ctx context.Context, r *Reader, opts ...storageOption) error
|
||||||
|
OpenWriter(ctx context.Context, w *Writer, opts ...storageOption) error
|
||||||
|
|
||||||
|
// IAM methods.
|
||||||
|
|
||||||
|
GetIamPolicy(ctx context.Context, resource string, version int32, opts ...storageOption) (*iampb.Policy, error)
|
||||||
|
SetIamPolicy(ctx context.Context, resource string, policy *iampb.Policy, opts ...storageOption) error
|
||||||
|
TestIamPermissions(ctx context.Context, resource string, permissions []string, opts ...storageOption) ([]string, error)
|
||||||
|
|
||||||
|
// HMAC Key methods.
|
||||||
|
|
||||||
|
GetHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) (*HMACKey, error)
|
||||||
|
ListHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) *HMACKeysIterator
|
||||||
|
UpdateHMACKey(ctx context.Context, desc *hmacKeyDesc, attrs *HMACKeyAttrsToUpdate, opts ...storageOption) (*HMACKey, error)
|
||||||
|
CreateHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) (*HMACKey, error)
|
||||||
|
DeleteHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// settings contains transport-agnostic configuration for API calls made via
|
||||||
|
// the storageClient inteface. All implementations must utilize settings
|
||||||
|
// and respect those that are applicable.
|
||||||
|
type settings struct {
|
||||||
|
// retry is the complete retry configuration to use when evaluating if an
|
||||||
|
// API call should be retried.
|
||||||
|
retry *retryConfig
|
||||||
|
|
||||||
|
// gax is a set of gax.CallOption to be conveyed to gax.Invoke.
|
||||||
|
// Note: Not all storageClient interfaces will must use gax.Invoke.
|
||||||
|
gax []gax.CallOption
|
||||||
|
|
||||||
|
// idempotent indicates if the call is idempotent or not when considering
|
||||||
|
// if the call should be retired or not.
|
||||||
|
idempotent bool
|
||||||
|
|
||||||
|
// clientOption is a set of option.ClientOption to be used during client
|
||||||
|
// transport initialization. See https://pkg.go.dev/google.golang.org/api/option
|
||||||
|
// for a list of supported options.
|
||||||
|
clientOption []option.ClientOption
|
||||||
|
|
||||||
|
// userProject is the user project that should be billed for the request.
|
||||||
|
userProject string
|
||||||
|
}
|
||||||
|
|
||||||
|
func initSettings(opts ...storageOption) *settings {
|
||||||
|
s := &settings{}
|
||||||
|
resolveOptions(s, opts...)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func resolveOptions(s *settings, opts ...storageOption) {
|
||||||
|
for _, o := range opts {
|
||||||
|
o.Apply(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// callSettings is a helper for resolving storage options against the settings
|
||||||
|
// in the context of an individual call. This is to ensure that client-level
|
||||||
|
// default settings are not mutated by two different calls getting options.
|
||||||
|
//
|
||||||
|
// Example: s := callSettings(c.settings, opts...)
|
||||||
|
func callSettings(defaults *settings, opts ...storageOption) *settings {
|
||||||
|
if defaults == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
// This does not make a deep copy of the pointer/slice fields, but all
|
||||||
|
// options replace the settings fields rather than modify their values in
|
||||||
|
// place.
|
||||||
|
cs := *defaults
|
||||||
|
resolveOptions(&cs, opts...)
|
||||||
|
return &cs
|
||||||
|
}
|
||||||
|
|
||||||
|
// storageOption is the transport-agnostic call option for the storageClient
|
||||||
|
// interface.
|
||||||
|
type storageOption interface {
|
||||||
|
Apply(s *settings)
|
||||||
|
}
|
||||||
|
|
||||||
|
func withGAXOptions(opts ...gax.CallOption) storageOption {
|
||||||
|
return &gaxOption{opts}
|
||||||
|
}
|
||||||
|
|
||||||
|
type gaxOption struct {
|
||||||
|
opts []gax.CallOption
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *gaxOption) Apply(s *settings) { s.gax = o.opts }
|
||||||
|
|
||||||
|
func withRetryConfig(rc *retryConfig) storageOption {
|
||||||
|
return &retryOption{rc}
|
||||||
|
}
|
||||||
|
|
||||||
|
type retryOption struct {
|
||||||
|
rc *retryConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *retryOption) Apply(s *settings) { s.retry = o.rc }
|
||||||
|
|
||||||
|
func idempotent(i bool) storageOption {
|
||||||
|
return &idempotentOption{i}
|
||||||
|
}
|
||||||
|
|
||||||
|
type idempotentOption struct {
|
||||||
|
idempotency bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *idempotentOption) Apply(s *settings) { s.idempotent = o.idempotency }
|
||||||
|
|
||||||
|
func withClientOptions(opts ...option.ClientOption) storageOption {
|
||||||
|
return &clientOption{opts: opts}
|
||||||
|
}
|
||||||
|
|
||||||
|
type clientOption struct {
|
||||||
|
opts []option.ClientOption
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *clientOption) Apply(s *settings) { s.clientOption = o.opts }
|
||||||
|
|
||||||
|
func withUserProject(project string) storageOption {
|
||||||
|
return &userProjectOption{project}
|
||||||
|
}
|
||||||
|
|
||||||
|
type userProjectOption struct {
|
||||||
|
project string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *userProjectOption) Apply(s *settings) { s.userProject = o.project }
|
||||||
|
|
||||||
|
type composeObjectRequest struct {
|
||||||
|
dstBucket string
|
||||||
|
dstObject string
|
||||||
|
srcs []string
|
||||||
|
gen int64
|
||||||
|
conds *Conditions
|
||||||
|
predefinedACL string
|
||||||
|
}
|
||||||
|
|
||||||
|
type rewriteObjectRequest struct {
|
||||||
|
srcBucket string
|
||||||
|
srcObject string
|
||||||
|
dstBucket string
|
||||||
|
dstObject string
|
||||||
|
dstKeyName string
|
||||||
|
attrs *ObjectAttrs
|
||||||
|
gen int64
|
||||||
|
conds *Conditions
|
||||||
|
predefinedACL string
|
||||||
|
token string
|
||||||
|
}
|
||||||
|
|
||||||
|
type rewriteObjectResponse struct {
|
||||||
|
resource *ObjectAttrs
|
||||||
|
done bool
|
||||||
|
written int64
|
||||||
|
token string
|
||||||
|
}
|
||||||
|
|
@ -214,7 +214,17 @@ since you read it. Here is how to express that:
|
||||||
Signed URLs
|
Signed URLs
|
||||||
|
|
||||||
You can obtain a URL that lets anyone read or write an object for a limited time.
|
You can obtain a URL that lets anyone read or write an object for a limited time.
|
||||||
You don't need to create a client to do this. See the documentation of
|
Signing a URL requires credentials authorized to sign a URL. To use the same
|
||||||
|
authentication that was used when instantiating the Storage client, use the
|
||||||
|
BucketHandle.SignedURL method.
|
||||||
|
|
||||||
|
url, err := client.Bucket(bucketName).SignedURL(objectName, opts)
|
||||||
|
if err != nil {
|
||||||
|
// TODO: Handle error.
|
||||||
|
}
|
||||||
|
fmt.Println(url)
|
||||||
|
|
||||||
|
You can also sign a URL wihout creating a client. See the documentation of
|
||||||
SignedURL for details.
|
SignedURL for details.
|
||||||
|
|
||||||
url, err := storage.SignedURL(bucketName, "shared-object", opts)
|
url, err := storage.SignedURL(bucketName, "shared-object", opts)
|
||||||
|
|
@ -230,9 +240,9 @@ temporary permission. Conditions can be applied to restrict how the HTML form is
|
||||||
by a user.
|
by a user.
|
||||||
|
|
||||||
For more information, please see https://cloud.google.com/storage/docs/xml-api/post-object as well
|
For more information, please see https://cloud.google.com/storage/docs/xml-api/post-object as well
|
||||||
as the documentation of GenerateSignedPostPolicyV4.
|
as the documentation of BucketHandle.GenerateSignedPostPolicyV4.
|
||||||
|
|
||||||
pv4, err := storage.GenerateSignedPostPolicyV4(bucketName, objectName, opts)
|
pv4, err := client.Bucket(bucketName).GenerateSignedPostPolicyV4(objectName, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO: Handle error.
|
// TODO: Handle error.
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,23 +32,42 @@ if [ "$minor_ver" -lt "$min_minor_ver" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export STORAGE_EMULATOR_HOST="http://localhost:9000"
|
export STORAGE_EMULATOR_HOST="http://localhost:9000"
|
||||||
|
export STORAGE_EMULATOR_HOST_GRPC="localhost:8888"
|
||||||
|
|
||||||
DEFAULT_IMAGE_NAME='gcr.io/cloud-devrel-public-resources/storage-testbench'
|
DEFAULT_IMAGE_NAME='gcr.io/cloud-devrel-public-resources/storage-testbench'
|
||||||
DEFAULT_IMAGE_TAG='latest'
|
DEFAULT_IMAGE_TAG='latest'
|
||||||
DOCKER_IMAGE=${DEFAULT_IMAGE_NAME}:${DEFAULT_IMAGE_TAG}
|
DOCKER_IMAGE=${DEFAULT_IMAGE_NAME}:${DEFAULT_IMAGE_TAG}
|
||||||
CONTAINER_NAME=storage_testbench
|
CONTAINER_NAME=storage_testbench
|
||||||
|
|
||||||
# Get the docker image for the testbench
|
|
||||||
docker pull $DOCKER_IMAGE
|
|
||||||
|
|
||||||
# Start the testbench
|
|
||||||
# Note: --net=host makes the container bind directly to the Docker host’s network,
|
# Note: --net=host makes the container bind directly to the Docker host’s network,
|
||||||
# with no network isolation. If we were to use port-mapping instead, reset connection errors
|
# with no network isolation. If we were to use port-mapping instead, reset connection errors
|
||||||
# would be captured differently and cause unexpected test behaviour.
|
# would be captured differently and cause unexpected test behaviour.
|
||||||
# The host networking driver works only on Linux hosts.
|
# The host networking driver works only on Linux hosts.
|
||||||
# See more about using host networking: https://docs.docker.com/network/host/
|
# See more about using host networking: https://docs.docker.com/network/host/
|
||||||
docker run --name $CONTAINER_NAME --rm --net=host $DOCKER_IMAGE &
|
DOCKER_NETWORK="--net=host"
|
||||||
|
# Note: We do not expect the RetryConformanceTest suite to pass on darwin due to
|
||||||
|
# differences in the network errors emitted by the system.
|
||||||
|
if [ `go env GOOS` == 'darwin' ]; then
|
||||||
|
DOCKER_NETWORK="-p 9000:9000 -p 8888:8888"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get the docker image for the testbench
|
||||||
|
docker pull $DOCKER_IMAGE
|
||||||
|
|
||||||
|
# Start the testbench
|
||||||
|
|
||||||
|
docker run --name $CONTAINER_NAME --rm -d $DOCKER_NETWORK $DOCKER_IMAGE
|
||||||
echo "Running the Cloud Storage testbench: $STORAGE_EMULATOR_HOST"
|
echo "Running the Cloud Storage testbench: $STORAGE_EMULATOR_HOST"
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
# Stop the testbench & cleanup environment variables
|
||||||
|
function cleanup() {
|
||||||
|
echo "Cleanup testbench"
|
||||||
|
docker stop $CONTAINER_NAME
|
||||||
|
unset STORAGE_EMULATOR_HOST;
|
||||||
|
unset STORAGE_EMULATOR_HOST_GRPC;
|
||||||
|
}
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
# Check that the server is running - retry several times to allow for start-up time
|
# Check that the server is running - retry several times to allow for start-up time
|
||||||
response=$(curl -w "%{http_code}\n" $STORAGE_EMULATOR_HOST --retry-connrefused --retry 5 -o /dev/null)
|
response=$(curl -w "%{http_code}\n" $STORAGE_EMULATOR_HOST --retry-connrefused --retry 5 -o /dev/null)
|
||||||
|
|
@ -59,13 +78,15 @@ then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Stop the testbench & cleanup environment variables
|
# Start the gRPC server on port 8888.
|
||||||
function cleanup() {
|
echo "Starting the gRPC server on port 8888"
|
||||||
echo "Cleanup testbench"
|
response=$(curl -w "%{http_code}\n" --retry 5 --retry-max-time 40 -o /dev/null "$STORAGE_EMULATOR_HOST/start_grpc?port=8888")
|
||||||
docker stop $CONTAINER_NAME
|
|
||||||
unset STORAGE_EMULATOR_HOST;
|
if [[ $response != 200 ]]
|
||||||
}
|
then
|
||||||
trap cleanup EXIT
|
echo "Testbench gRPC server did not start correctly"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Run tests
|
# Run tests
|
||||||
go test -v -timeout 10m ./ -run="TestRetryConformance" -short 2>&1 | tee -a sponge_log.log
|
go test -v -timeout 10m ./ -run="^Test(RetryConformance|.*Emulated)$" -short 2>&1 | tee -a sponge_log.log
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,346 @@
|
||||||
|
// Copyright 2022 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
gapic "cloud.google.com/go/storage/internal/apiv2"
|
||||||
|
"google.golang.org/api/option"
|
||||||
|
iampb "google.golang.org/genproto/googleapis/iam/v1"
|
||||||
|
storagepb "google.golang.org/genproto/googleapis/storage/v2"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
|
"google.golang.org/grpc/status"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// defaultConnPoolSize is the default number of connections
|
||||||
|
// to initialize in the GAPIC gRPC connection pool. A larger
|
||||||
|
// connection pool may be necessary for jobs that require
|
||||||
|
// high throughput and/or leverage many concurrent streams.
|
||||||
|
//
|
||||||
|
// This is an experimental API and not intended for public use.
|
||||||
|
defaultConnPoolSize = 4
|
||||||
|
|
||||||
|
// globalProjectAlias is the project ID alias used for global buckets.
|
||||||
|
//
|
||||||
|
// This is only used for the gRPC API.
|
||||||
|
globalProjectAlias = "_"
|
||||||
|
)
|
||||||
|
|
||||||
|
// defaultGRPCOptions returns a set of the default client options
|
||||||
|
// for gRPC client initialization.
|
||||||
|
//
|
||||||
|
// This is an experimental API and not intended for public use.
|
||||||
|
func defaultGRPCOptions() []option.ClientOption {
|
||||||
|
defaults := []option.ClientOption{
|
||||||
|
option.WithGRPCConnectionPool(defaultConnPoolSize),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set emulator options for gRPC if an emulator was specified. Note that in a
|
||||||
|
// hybrid client, STORAGE_EMULATOR_HOST will set the host to use for HTTP and
|
||||||
|
// STORAGE_EMULATOR_HOST_GRPC will set the host to use for gRPC (when using a
|
||||||
|
// local emulator, HTTP and gRPC must use different ports, so this is
|
||||||
|
// necessary).
|
||||||
|
//
|
||||||
|
// TODO: When the newHybridClient is not longer used, remove
|
||||||
|
// STORAGE_EMULATOR_HOST_GRPC and use STORAGE_EMULATOR_HOST for both the
|
||||||
|
// HTTP and gRPC based clients.
|
||||||
|
if host := os.Getenv("STORAGE_EMULATOR_HOST_GRPC"); host != "" {
|
||||||
|
// Strip the scheme from the emulator host. WithEndpoint does not take a
|
||||||
|
// scheme for gRPC.
|
||||||
|
host = stripScheme(host)
|
||||||
|
|
||||||
|
defaults = append(defaults,
|
||||||
|
option.WithEndpoint(host),
|
||||||
|
option.WithGRPCDialOption(grpc.WithInsecure()),
|
||||||
|
option.WithoutAuthentication(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaults
|
||||||
|
}
|
||||||
|
|
||||||
|
// grpcStorageClient is the gRPC API implementation of the transport-agnostic
|
||||||
|
// storageClient interface.
|
||||||
|
//
|
||||||
|
// This is an experimental API and not intended for public use.
|
||||||
|
type grpcStorageClient struct {
|
||||||
|
raw *gapic.Client
|
||||||
|
settings *settings
|
||||||
|
}
|
||||||
|
|
||||||
|
// newGRPCStorageClient initializes a new storageClient that uses the gRPC
|
||||||
|
// Storage API.
|
||||||
|
//
|
||||||
|
// This is an experimental API and not intended for public use.
|
||||||
|
func newGRPCStorageClient(ctx context.Context, opts ...storageOption) (storageClient, error) {
|
||||||
|
s := initSettings(opts...)
|
||||||
|
s.clientOption = append(defaultGRPCOptions(), s.clientOption...)
|
||||||
|
|
||||||
|
g, err := gapic.NewClient(ctx, s.clientOption...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &grpcStorageClient{
|
||||||
|
raw: g,
|
||||||
|
settings: s,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) Close() error {
|
||||||
|
return c.raw.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Top-level methods.
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) GetServiceAccount(ctx context.Context, project string, opts ...storageOption) (string, error) {
|
||||||
|
return "", errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) CreateBucket(ctx context.Context, project string, attrs *BucketAttrs, opts ...storageOption) (*BucketAttrs, error) {
|
||||||
|
s := callSettings(c.settings, opts...)
|
||||||
|
b := attrs.toProtoBucket()
|
||||||
|
|
||||||
|
// If there is lifecycle information but no location, explicitly set
|
||||||
|
// the location. This is a GCS quirk/bug.
|
||||||
|
if b.GetLocation() == "" && b.GetLifecycle() != nil {
|
||||||
|
b.Location = "US"
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &storagepb.CreateBucketRequest{
|
||||||
|
Parent: toProjectResource(project),
|
||||||
|
Bucket: b,
|
||||||
|
BucketId: b.GetName(),
|
||||||
|
// TODO(noahdietz): This will be switched to a string.
|
||||||
|
//
|
||||||
|
// PredefinedAcl: attrs.PredefinedACL,
|
||||||
|
// PredefinedDefaultObjectAcl: attrs.PredefinedDefaultObjectACL,
|
||||||
|
}
|
||||||
|
|
||||||
|
var battrs *BucketAttrs
|
||||||
|
err := run(ctx, func() error {
|
||||||
|
res, err := c.raw.CreateBucket(ctx, req, s.gax...)
|
||||||
|
|
||||||
|
battrs = newBucketFromProto(res)
|
||||||
|
|
||||||
|
return err
|
||||||
|
}, s.retry, s.idempotent)
|
||||||
|
|
||||||
|
return battrs, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) ListBuckets(ctx context.Context, project string, opts ...storageOption) (*BucketIterator, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bucket methods.
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) DeleteBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) error {
|
||||||
|
s := callSettings(c.settings, opts...)
|
||||||
|
req := &storagepb.DeleteBucketRequest{
|
||||||
|
Name: bucketResourceName(globalProjectAlias, bucket),
|
||||||
|
}
|
||||||
|
if err := applyBucketCondsProto("grpcStorageClient.DeleteBucket", conds, req); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if s.userProject != "" {
|
||||||
|
req.CommonRequestParams = &storagepb.CommonRequestParams{
|
||||||
|
UserProject: toProjectResource(s.userProject),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return run(ctx, func() error {
|
||||||
|
return c.raw.DeleteBucket(ctx, req, s.gax...)
|
||||||
|
}, s.retry, s.idempotent)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) GetBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) {
|
||||||
|
s := callSettings(c.settings, opts...)
|
||||||
|
req := &storagepb.GetBucketRequest{
|
||||||
|
Name: bucketResourceName(globalProjectAlias, bucket),
|
||||||
|
}
|
||||||
|
if err := applyBucketCondsProto("grpcStorageClient.GetBucket", conds, req); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if s.userProject != "" {
|
||||||
|
req.CommonRequestParams = &storagepb.CommonRequestParams{
|
||||||
|
UserProject: toProjectResource(s.userProject),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var battrs *BucketAttrs
|
||||||
|
err := run(ctx, func() error {
|
||||||
|
res, err := c.raw.GetBucket(ctx, req, s.gax...)
|
||||||
|
|
||||||
|
battrs = newBucketFromProto(res)
|
||||||
|
|
||||||
|
return err
|
||||||
|
}, s.retry, s.idempotent)
|
||||||
|
|
||||||
|
if s, ok := status.FromError(err); ok && s.Code() == codes.NotFound {
|
||||||
|
return nil, ErrBucketNotExist
|
||||||
|
}
|
||||||
|
|
||||||
|
return battrs, err
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) UpdateBucket(ctx context.Context, uattrs *BucketAttrsToUpdate, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) LockBucketRetentionPolicy(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) (*ObjectIterator, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// Object metadata methods.
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) DeleteObject(ctx context.Context, bucket, object string, conds *Conditions, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) GetObject(ctx context.Context, bucket, object string, conds *Conditions, opts ...storageOption) (*ObjectAttrs, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) UpdateObject(ctx context.Context, bucket, object string, uattrs *ObjectAttrsToUpdate, conds *Conditions, opts ...storageOption) (*ObjectAttrs, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default Object ACL methods.
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) DeleteDefaultObjectACL(ctx context.Context, bucket string, entity ACLEntity, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) ListDefaultObjectACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) UpdateDefaultObjectACL(ctx context.Context, opts ...storageOption) (*ACLRule, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bucket ACL methods.
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) DeleteBucketACL(ctx context.Context, bucket string, entity ACLEntity, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) ListBucketACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) UpdateBucketACL(ctx context.Context, bucket string, entity ACLEntity, role ACLRole, opts ...storageOption) (*ACLRule, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// Object ACL methods.
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) DeleteObjectACL(ctx context.Context, bucket, object string, entity ACLEntity, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) ListObjectACLs(ctx context.Context, bucket, object string, opts ...storageOption) ([]ACLRule, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) UpdateObjectACL(ctx context.Context, bucket, object string, entity ACLEntity, role ACLRole, opts ...storageOption) (*ACLRule, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// Media operations.
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) ComposeObject(ctx context.Context, req *composeObjectRequest, opts ...storageOption) (*ObjectAttrs, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) RewriteObject(ctx context.Context, req *rewriteObjectRequest, opts ...storageOption) (*rewriteObjectResponse, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) OpenReader(ctx context.Context, r *Reader, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) OpenWriter(ctx context.Context, w *Writer, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// IAM methods.
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) GetIamPolicy(ctx context.Context, resource string, version int32, opts ...storageOption) (*iampb.Policy, error) {
|
||||||
|
// TODO: Need a way to set UserProject, potentially in X-Goog-User-Project system parameter.
|
||||||
|
s := callSettings(c.settings, opts...)
|
||||||
|
req := &iampb.GetIamPolicyRequest{
|
||||||
|
Resource: bucketResourceName(globalProjectAlias, resource),
|
||||||
|
Options: &iampb.GetPolicyOptions{
|
||||||
|
RequestedPolicyVersion: version,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
var rp *iampb.Policy
|
||||||
|
err := run(ctx, func() error {
|
||||||
|
var err error
|
||||||
|
rp, err = c.raw.GetIamPolicy(ctx, req, s.gax...)
|
||||||
|
return err
|
||||||
|
}, s.retry, s.idempotent)
|
||||||
|
|
||||||
|
return rp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) SetIamPolicy(ctx context.Context, resource string, policy *iampb.Policy, opts ...storageOption) error {
|
||||||
|
// TODO: Need a way to set UserProject, potentially in X-Goog-User-Project system parameter.
|
||||||
|
s := callSettings(c.settings, opts...)
|
||||||
|
|
||||||
|
req := &iampb.SetIamPolicyRequest{
|
||||||
|
Resource: bucketResourceName(globalProjectAlias, resource),
|
||||||
|
Policy: policy,
|
||||||
|
}
|
||||||
|
|
||||||
|
return run(ctx, func() error {
|
||||||
|
_, err := c.raw.SetIamPolicy(ctx, req, s.gax...)
|
||||||
|
return err
|
||||||
|
}, s.retry, s.idempotent)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) TestIamPermissions(ctx context.Context, resource string, permissions []string, opts ...storageOption) ([]string, error) {
|
||||||
|
// TODO: Need a way to set UserProject, potentially in X-Goog-User-Project system parameter.
|
||||||
|
s := callSettings(c.settings, opts...)
|
||||||
|
req := &iampb.TestIamPermissionsRequest{
|
||||||
|
Resource: bucketResourceName(globalProjectAlias, resource),
|
||||||
|
Permissions: permissions,
|
||||||
|
}
|
||||||
|
var res *iampb.TestIamPermissionsResponse
|
||||||
|
err := run(ctx, func() error {
|
||||||
|
var err error
|
||||||
|
res, err = c.raw.TestIamPermissions(ctx, req, s.gax...)
|
||||||
|
return err
|
||||||
|
}, s.retry, s.idempotent)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res.Permissions, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// HMAC Key methods.
|
||||||
|
|
||||||
|
func (c *grpcStorageClient) GetHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) (*HMACKey, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) ListHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) *HMACKeysIterator {
|
||||||
|
return &HMACKeysIterator{}
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) UpdateHMACKey(ctx context.Context, desc *hmacKeyDesc, attrs *HMACKeyAttrsToUpdate, opts ...storageOption) (*HMACKey, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) CreateHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) (*HMACKey, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *grpcStorageClient) DeleteHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,369 @@
|
||||||
|
// Copyright 2022 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"golang.org/x/oauth2/google"
|
||||||
|
"google.golang.org/api/googleapi"
|
||||||
|
"google.golang.org/api/option"
|
||||||
|
"google.golang.org/api/option/internaloption"
|
||||||
|
raw "google.golang.org/api/storage/v1"
|
||||||
|
"google.golang.org/api/transport"
|
||||||
|
htransport "google.golang.org/api/transport/http"
|
||||||
|
iampb "google.golang.org/genproto/googleapis/iam/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
// httpStorageClient is the HTTP-JSON API implementation of the transport-agnostic
|
||||||
|
// storageClient interface.
|
||||||
|
//
|
||||||
|
// This is an experimental API and not intended for public use.
|
||||||
|
type httpStorageClient struct {
|
||||||
|
creds *google.Credentials
|
||||||
|
hc *http.Client
|
||||||
|
readHost string
|
||||||
|
raw *raw.Service
|
||||||
|
scheme string
|
||||||
|
settings *settings
|
||||||
|
}
|
||||||
|
|
||||||
|
// newHTTPStorageClient initializes a new storageClient that uses the HTTP-JSON
|
||||||
|
// Storage API.
|
||||||
|
//
|
||||||
|
// This is an experimental API and not intended for public use.
|
||||||
|
func newHTTPStorageClient(ctx context.Context, opts ...storageOption) (storageClient, error) {
|
||||||
|
s := initSettings(opts...)
|
||||||
|
o := s.clientOption
|
||||||
|
|
||||||
|
var creds *google.Credentials
|
||||||
|
// In general, it is recommended to use raw.NewService instead of htransport.NewClient
|
||||||
|
// since raw.NewService configures the correct default endpoints when initializing the
|
||||||
|
// internal http client. However, in our case, "NewRangeReader" in reader.go needs to
|
||||||
|
// access the http client directly to make requests, so we create the client manually
|
||||||
|
// here so it can be re-used by both reader.go and raw.NewService. This means we need to
|
||||||
|
// manually configure the default endpoint options on the http client. Furthermore, we
|
||||||
|
// need to account for STORAGE_EMULATOR_HOST override when setting the default endpoints.
|
||||||
|
if host := os.Getenv("STORAGE_EMULATOR_HOST"); host == "" {
|
||||||
|
// Prepend default options to avoid overriding options passed by the user.
|
||||||
|
o = append([]option.ClientOption{option.WithScopes(ScopeFullControl, "https://www.googleapis.com/auth/cloud-platform"), option.WithUserAgent(userAgent)}, o...)
|
||||||
|
|
||||||
|
o = append(o, internaloption.WithDefaultEndpoint("https://storage.googleapis.com/storage/v1/"))
|
||||||
|
o = append(o, internaloption.WithDefaultMTLSEndpoint("https://storage.mtls.googleapis.com/storage/v1/"))
|
||||||
|
|
||||||
|
// Don't error out here. The user may have passed in their own HTTP
|
||||||
|
// client which does not auth with ADC or other common conventions.
|
||||||
|
c, err := transport.Creds(ctx, o...)
|
||||||
|
if err == nil {
|
||||||
|
creds = c
|
||||||
|
o = append(o, internaloption.WithCredentials(creds))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var hostURL *url.URL
|
||||||
|
|
||||||
|
if strings.Contains(host, "://") {
|
||||||
|
h, err := url.Parse(host)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
hostURL = h
|
||||||
|
} else {
|
||||||
|
// Add scheme for user if not supplied in STORAGE_EMULATOR_HOST
|
||||||
|
// URL is only parsed correctly if it has a scheme, so we build it ourselves
|
||||||
|
hostURL = &url.URL{Scheme: "http", Host: host}
|
||||||
|
}
|
||||||
|
|
||||||
|
hostURL.Path = "storage/v1/"
|
||||||
|
endpoint := hostURL.String()
|
||||||
|
|
||||||
|
// Append the emulator host as default endpoint for the user
|
||||||
|
o = append([]option.ClientOption{option.WithoutAuthentication()}, o...)
|
||||||
|
|
||||||
|
o = append(o, internaloption.WithDefaultEndpoint(endpoint))
|
||||||
|
o = append(o, internaloption.WithDefaultMTLSEndpoint(endpoint))
|
||||||
|
}
|
||||||
|
s.clientOption = o
|
||||||
|
|
||||||
|
// htransport selects the correct endpoint among WithEndpoint (user override), WithDefaultEndpoint, and WithDefaultMTLSEndpoint.
|
||||||
|
hc, ep, err := htransport.NewClient(ctx, s.clientOption...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("dialing: %v", err)
|
||||||
|
}
|
||||||
|
// RawService should be created with the chosen endpoint to take account of user override.
|
||||||
|
rawService, err := raw.NewService(ctx, option.WithEndpoint(ep), option.WithHTTPClient(hc))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("storage client: %v", err)
|
||||||
|
}
|
||||||
|
// Update readHost and scheme with the chosen endpoint.
|
||||||
|
u, err := url.Parse(ep)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("supplied endpoint %q is not valid: %v", ep, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return &httpStorageClient{
|
||||||
|
creds: creds,
|
||||||
|
hc: hc,
|
||||||
|
readHost: u.Host,
|
||||||
|
raw: rawService,
|
||||||
|
scheme: u.Scheme,
|
||||||
|
settings: s,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *httpStorageClient) Close() error {
|
||||||
|
c.hc.CloseIdleConnections()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Top-level methods.
|
||||||
|
|
||||||
|
func (c *httpStorageClient) GetServiceAccount(ctx context.Context, project string, opts ...storageOption) (string, error) {
|
||||||
|
return "", errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *httpStorageClient) CreateBucket(ctx context.Context, project string, attrs *BucketAttrs, opts ...storageOption) (*BucketAttrs, error) {
|
||||||
|
s := callSettings(c.settings, opts...)
|
||||||
|
var bkt *raw.Bucket
|
||||||
|
if attrs != nil {
|
||||||
|
bkt = attrs.toRawBucket()
|
||||||
|
} else {
|
||||||
|
bkt = &raw.Bucket{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there is lifecycle information but no location, explicitly set
|
||||||
|
// the location. This is a GCS quirk/bug.
|
||||||
|
if bkt.Location == "" && bkt.Lifecycle != nil {
|
||||||
|
bkt.Location = "US"
|
||||||
|
}
|
||||||
|
req := c.raw.Buckets.Insert(project, bkt)
|
||||||
|
setClientHeader(req.Header())
|
||||||
|
if attrs != nil && attrs.PredefinedACL != "" {
|
||||||
|
req.PredefinedAcl(attrs.PredefinedACL)
|
||||||
|
}
|
||||||
|
if attrs != nil && attrs.PredefinedDefaultObjectACL != "" {
|
||||||
|
req.PredefinedDefaultObjectAcl(attrs.PredefinedDefaultObjectACL)
|
||||||
|
}
|
||||||
|
var battrs *BucketAttrs
|
||||||
|
err := run(ctx, func() error {
|
||||||
|
b, err := req.Context(ctx).Do()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
battrs, err = newBucket(b)
|
||||||
|
return err
|
||||||
|
}, s.retry, s.idempotent)
|
||||||
|
return battrs, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *httpStorageClient) ListBuckets(ctx context.Context, project string, opts ...storageOption) (*BucketIterator, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bucket methods.
|
||||||
|
|
||||||
|
func (c *httpStorageClient) DeleteBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) error {
|
||||||
|
s := callSettings(c.settings, opts...)
|
||||||
|
req := c.raw.Buckets.Delete(bucket)
|
||||||
|
setClientHeader(req.Header())
|
||||||
|
if err := applyBucketConds("httpStorageClient.DeleteBucket", conds, req); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if s.userProject != "" {
|
||||||
|
req.UserProject(s.userProject)
|
||||||
|
}
|
||||||
|
|
||||||
|
return run(ctx, func() error { return req.Context(ctx).Do() }, s.retry, s.idempotent)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *httpStorageClient) GetBucket(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) {
|
||||||
|
s := callSettings(c.settings, opts...)
|
||||||
|
req := c.raw.Buckets.Get(bucket).Projection("full")
|
||||||
|
setClientHeader(req.Header())
|
||||||
|
err := applyBucketConds("httpStorageClient.GetBucket", conds, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if s.userProject != "" {
|
||||||
|
req.UserProject(s.userProject)
|
||||||
|
}
|
||||||
|
|
||||||
|
var resp *raw.Bucket
|
||||||
|
err = run(ctx, func() error {
|
||||||
|
resp, err = req.Context(ctx).Do()
|
||||||
|
return err
|
||||||
|
}, s.retry, s.idempotent)
|
||||||
|
|
||||||
|
var e *googleapi.Error
|
||||||
|
if ok := errors.As(err, &e); ok && e.Code == http.StatusNotFound {
|
||||||
|
return nil, ErrBucketNotExist
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return newBucket(resp)
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) UpdateBucket(ctx context.Context, uattrs *BucketAttrsToUpdate, conds *BucketConditions, opts ...storageOption) (*BucketAttrs, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) LockBucketRetentionPolicy(ctx context.Context, bucket string, conds *BucketConditions, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) ListObjects(ctx context.Context, bucket string, q *Query, opts ...storageOption) (*ObjectIterator, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// Object metadata methods.
|
||||||
|
|
||||||
|
func (c *httpStorageClient) DeleteObject(ctx context.Context, bucket, object string, conds *Conditions, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) GetObject(ctx context.Context, bucket, object string, conds *Conditions, opts ...storageOption) (*ObjectAttrs, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) UpdateObject(ctx context.Context, bucket, object string, uattrs *ObjectAttrsToUpdate, conds *Conditions, opts ...storageOption) (*ObjectAttrs, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default Object ACL methods.
|
||||||
|
|
||||||
|
func (c *httpStorageClient) DeleteDefaultObjectACL(ctx context.Context, bucket string, entity ACLEntity, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) ListDefaultObjectACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) UpdateDefaultObjectACL(ctx context.Context, opts ...storageOption) (*ACLRule, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bucket ACL methods.
|
||||||
|
|
||||||
|
func (c *httpStorageClient) DeleteBucketACL(ctx context.Context, bucket string, entity ACLEntity, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) ListBucketACLs(ctx context.Context, bucket string, opts ...storageOption) ([]ACLRule, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) UpdateBucketACL(ctx context.Context, bucket string, entity ACLEntity, role ACLRole, opts ...storageOption) (*ACLRule, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// Object ACL methods.
|
||||||
|
|
||||||
|
func (c *httpStorageClient) DeleteObjectACL(ctx context.Context, bucket, object string, entity ACLEntity, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) ListObjectACLs(ctx context.Context, bucket, object string, opts ...storageOption) ([]ACLRule, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) UpdateObjectACL(ctx context.Context, bucket, object string, entity ACLEntity, role ACLRole, opts ...storageOption) (*ACLRule, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// Media operations.
|
||||||
|
|
||||||
|
func (c *httpStorageClient) ComposeObject(ctx context.Context, req *composeObjectRequest, opts ...storageOption) (*ObjectAttrs, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) RewriteObject(ctx context.Context, req *rewriteObjectRequest, opts ...storageOption) (*rewriteObjectResponse, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *httpStorageClient) OpenReader(ctx context.Context, r *Reader, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) OpenWriter(ctx context.Context, w *Writer, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
// IAM methods.
|
||||||
|
|
||||||
|
func (c *httpStorageClient) GetIamPolicy(ctx context.Context, resource string, version int32, opts ...storageOption) (*iampb.Policy, error) {
|
||||||
|
s := callSettings(c.settings, opts...)
|
||||||
|
call := c.raw.Buckets.GetIamPolicy(resource).OptionsRequestedPolicyVersion(int64(version))
|
||||||
|
setClientHeader(call.Header())
|
||||||
|
if s.userProject != "" {
|
||||||
|
call.UserProject(s.userProject)
|
||||||
|
}
|
||||||
|
var rp *raw.Policy
|
||||||
|
err := run(ctx, func() error {
|
||||||
|
var err error
|
||||||
|
rp, err = call.Context(ctx).Do()
|
||||||
|
return err
|
||||||
|
}, s.retry, s.idempotent)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return iamFromStoragePolicy(rp), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *httpStorageClient) SetIamPolicy(ctx context.Context, resource string, policy *iampb.Policy, opts ...storageOption) error {
|
||||||
|
s := callSettings(c.settings, opts...)
|
||||||
|
|
||||||
|
rp := iamToStoragePolicy(policy)
|
||||||
|
call := c.raw.Buckets.SetIamPolicy(resource, rp)
|
||||||
|
setClientHeader(call.Header())
|
||||||
|
if s.userProject != "" {
|
||||||
|
call.UserProject(s.userProject)
|
||||||
|
}
|
||||||
|
|
||||||
|
return run(ctx, func() error {
|
||||||
|
_, err := call.Context(ctx).Do()
|
||||||
|
return err
|
||||||
|
}, s.retry, s.idempotent)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *httpStorageClient) TestIamPermissions(ctx context.Context, resource string, permissions []string, opts ...storageOption) ([]string, error) {
|
||||||
|
s := callSettings(c.settings, opts...)
|
||||||
|
call := c.raw.Buckets.TestIamPermissions(resource, permissions)
|
||||||
|
setClientHeader(call.Header())
|
||||||
|
if s.userProject != "" {
|
||||||
|
call.UserProject(s.userProject)
|
||||||
|
}
|
||||||
|
var res *raw.TestIamPermissionsResponse
|
||||||
|
err := run(ctx, func() error {
|
||||||
|
var err error
|
||||||
|
res, err = call.Context(ctx).Do()
|
||||||
|
return err
|
||||||
|
}, s.retry, s.idempotent)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res.Permissions, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// HMAC Key methods.
|
||||||
|
|
||||||
|
func (c *httpStorageClient) GetHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) (*HMACKey, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) ListHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) *HMACKeysIterator {
|
||||||
|
return &HMACKeysIterator{}
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) UpdateHMACKey(ctx context.Context, desc *hmacKeyDesc, attrs *HMACKeyAttrsToUpdate, opts ...storageOption) (*HMACKey, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) CreateHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) (*HMACKey, error) {
|
||||||
|
return nil, errMethodNotSupported
|
||||||
|
}
|
||||||
|
func (c *httpStorageClient) DeleteHMACKey(ctx context.Context, desc *hmacKeyDesc, opts ...storageOption) error {
|
||||||
|
return errMethodNotSupported
|
||||||
|
}
|
||||||
|
|
@ -84,7 +84,14 @@ import (
|
||||||
type clientHookParams struct{}
|
type clientHookParams struct{}
|
||||||
type clientHook func(context.Context, clientHookParams) ([]option.ClientOption, error)
|
type clientHook func(context.Context, clientHookParams) ([]option.ClientOption, error)
|
||||||
|
|
||||||
const versionClient = "20220216"
|
var versionClient string
|
||||||
|
|
||||||
|
func getVersionClient() string {
|
||||||
|
if versionClient == "" {
|
||||||
|
return "UNKNOWN"
|
||||||
|
}
|
||||||
|
return versionClient
|
||||||
|
}
|
||||||
|
|
||||||
func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
|
func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {
|
||||||
out, _ := metadata.FromOutgoingContext(ctx)
|
out, _ := metadata.FromOutgoingContext(ctx)
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ package storage
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"math"
|
"math"
|
||||||
"time"
|
|
||||||
|
|
||||||
gax "github.com/googleapis/gax-go/v2"
|
gax "github.com/googleapis/gax-go/v2"
|
||||||
"google.golang.org/api/iterator"
|
"google.golang.org/api/iterator"
|
||||||
|
|
@ -29,7 +28,6 @@ import (
|
||||||
iampb "google.golang.org/genproto/googleapis/iam/v1"
|
iampb "google.golang.org/genproto/googleapis/iam/v1"
|
||||||
storagepb "google.golang.org/genproto/googleapis/storage/v2"
|
storagepb "google.golang.org/genproto/googleapis/storage/v2"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"google.golang.org/grpc/codes"
|
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
@ -83,354 +81,35 @@ func defaultGRPCClientOptions() []option.ClientOption {
|
||||||
|
|
||||||
func defaultCallOptions() *CallOptions {
|
func defaultCallOptions() *CallOptions {
|
||||||
return &CallOptions{
|
return &CallOptions{
|
||||||
DeleteBucket: []gax.CallOption{
|
DeleteBucket: []gax.CallOption{},
|
||||||
gax.WithRetry(func() gax.Retryer {
|
GetBucket: []gax.CallOption{},
|
||||||
return gax.OnCodes([]codes.Code{
|
CreateBucket: []gax.CallOption{},
|
||||||
codes.DeadlineExceeded,
|
ListBuckets: []gax.CallOption{},
|
||||||
codes.Unavailable,
|
LockBucketRetentionPolicy: []gax.CallOption{},
|
||||||
}, gax.Backoff{
|
GetIamPolicy: []gax.CallOption{},
|
||||||
Initial: 1000 * time.Millisecond,
|
SetIamPolicy: []gax.CallOption{},
|
||||||
Max: 60000 * time.Millisecond,
|
TestIamPermissions: []gax.CallOption{},
|
||||||
Multiplier: 2.00,
|
UpdateBucket: []gax.CallOption{},
|
||||||
})
|
DeleteNotification: []gax.CallOption{},
|
||||||
}),
|
GetNotification: []gax.CallOption{},
|
||||||
},
|
CreateNotification: []gax.CallOption{},
|
||||||
GetBucket: []gax.CallOption{
|
ListNotifications: []gax.CallOption{},
|
||||||
gax.WithRetry(func() gax.Retryer {
|
ComposeObject: []gax.CallOption{},
|
||||||
return gax.OnCodes([]codes.Code{
|
DeleteObject: []gax.CallOption{},
|
||||||
codes.DeadlineExceeded,
|
GetObject: []gax.CallOption{},
|
||||||
codes.Unavailable,
|
ReadObject: []gax.CallOption{},
|
||||||
}, gax.Backoff{
|
UpdateObject: []gax.CallOption{},
|
||||||
Initial: 1000 * time.Millisecond,
|
WriteObject: []gax.CallOption{},
|
||||||
Max: 60000 * time.Millisecond,
|
ListObjects: []gax.CallOption{},
|
||||||
Multiplier: 2.00,
|
RewriteObject: []gax.CallOption{},
|
||||||
})
|
StartResumableWrite: []gax.CallOption{},
|
||||||
}),
|
QueryWriteStatus: []gax.CallOption{},
|
||||||
},
|
GetServiceAccount: []gax.CallOption{},
|
||||||
CreateBucket: []gax.CallOption{
|
CreateHmacKey: []gax.CallOption{},
|
||||||
gax.WithRetry(func() gax.Retryer {
|
DeleteHmacKey: []gax.CallOption{},
|
||||||
return gax.OnCodes([]codes.Code{
|
GetHmacKey: []gax.CallOption{},
|
||||||
codes.DeadlineExceeded,
|
ListHmacKeys: []gax.CallOption{},
|
||||||
codes.Unavailable,
|
UpdateHmacKey: []gax.CallOption{},
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
ListBuckets: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
LockBucketRetentionPolicy: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
GetIamPolicy: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
SetIamPolicy: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
TestIamPermissions: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
UpdateBucket: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
DeleteNotification: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
GetNotification: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
CreateNotification: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
ListNotifications: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
ComposeObject: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
DeleteObject: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
GetObject: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
ReadObject: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
UpdateObject: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
WriteObject: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
ListObjects: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
RewriteObject: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
StartResumableWrite: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
QueryWriteStatus: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
GetServiceAccount: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
CreateHmacKey: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
DeleteHmacKey: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
GetHmacKey: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
ListHmacKeys: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
UpdateHmacKey: []gax.CallOption{
|
|
||||||
gax.WithRetry(func() gax.Retryer {
|
|
||||||
return gax.OnCodes([]codes.Code{
|
|
||||||
codes.DeadlineExceeded,
|
|
||||||
codes.Unavailable,
|
|
||||||
}, gax.Backoff{
|
|
||||||
Initial: 1000 * time.Millisecond,
|
|
||||||
Max: 60000 * time.Millisecond,
|
|
||||||
Multiplier: 2.00,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -807,7 +486,7 @@ func (c *gRPCClient) Connection() *grpc.ClientConn {
|
||||||
// use by Google-written clients.
|
// use by Google-written clients.
|
||||||
func (c *gRPCClient) setGoogleClientInfo(keyval ...string) {
|
func (c *gRPCClient) setGoogleClientInfo(keyval ...string) {
|
||||||
kv := append([]string{"gl-go", versionGo()}, keyval...)
|
kv := append([]string{"gl-go", versionGo()}, keyval...)
|
||||||
kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
|
kv = append(kv, "gapic", getVersionClient(), "gax", gax.Version, "grpc", grpc.Version)
|
||||||
c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
|
c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -818,11 +497,6 @@ func (c *gRPCClient) Close() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) DeleteBucket(ctx context.Context, req *storagepb.DeleteBucketRequest, opts ...gax.CallOption) error {
|
func (c *gRPCClient) DeleteBucket(ctx context.Context, req *storagepb.DeleteBucketRequest, opts ...gax.CallOption) error {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).DeleteBucket[0:len((*c.CallOptions).DeleteBucket):len((*c.CallOptions).DeleteBucket)], opts...)
|
opts = append((*c.CallOptions).DeleteBucket[0:len((*c.CallOptions).DeleteBucket):len((*c.CallOptions).DeleteBucket)], opts...)
|
||||||
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
|
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
|
||||||
|
|
@ -834,11 +508,6 @@ func (c *gRPCClient) DeleteBucket(ctx context.Context, req *storagepb.DeleteBuck
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) GetBucket(ctx context.Context, req *storagepb.GetBucketRequest, opts ...gax.CallOption) (*storagepb.Bucket, error) {
|
func (c *gRPCClient) GetBucket(ctx context.Context, req *storagepb.GetBucketRequest, opts ...gax.CallOption) (*storagepb.Bucket, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).GetBucket[0:len((*c.CallOptions).GetBucket):len((*c.CallOptions).GetBucket)], opts...)
|
opts = append((*c.CallOptions).GetBucket[0:len((*c.CallOptions).GetBucket):len((*c.CallOptions).GetBucket)], opts...)
|
||||||
var resp *storagepb.Bucket
|
var resp *storagepb.Bucket
|
||||||
|
|
@ -854,11 +523,6 @@ func (c *gRPCClient) GetBucket(ctx context.Context, req *storagepb.GetBucketRequ
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) CreateBucket(ctx context.Context, req *storagepb.CreateBucketRequest, opts ...gax.CallOption) (*storagepb.Bucket, error) {
|
func (c *gRPCClient) CreateBucket(ctx context.Context, req *storagepb.CreateBucketRequest, opts ...gax.CallOption) (*storagepb.Bucket, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).CreateBucket[0:len((*c.CallOptions).CreateBucket):len((*c.CallOptions).CreateBucket)], opts...)
|
opts = append((*c.CallOptions).CreateBucket[0:len((*c.CallOptions).CreateBucket):len((*c.CallOptions).CreateBucket)], opts...)
|
||||||
var resp *storagepb.Bucket
|
var resp *storagepb.Bucket
|
||||||
|
|
@ -917,11 +581,6 @@ func (c *gRPCClient) ListBuckets(ctx context.Context, req *storagepb.ListBuckets
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) LockBucketRetentionPolicy(ctx context.Context, req *storagepb.LockBucketRetentionPolicyRequest, opts ...gax.CallOption) (*storagepb.Bucket, error) {
|
func (c *gRPCClient) LockBucketRetentionPolicy(ctx context.Context, req *storagepb.LockBucketRetentionPolicyRequest, opts ...gax.CallOption) (*storagepb.Bucket, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).LockBucketRetentionPolicy[0:len((*c.CallOptions).LockBucketRetentionPolicy):len((*c.CallOptions).LockBucketRetentionPolicy)], opts...)
|
opts = append((*c.CallOptions).LockBucketRetentionPolicy[0:len((*c.CallOptions).LockBucketRetentionPolicy):len((*c.CallOptions).LockBucketRetentionPolicy)], opts...)
|
||||||
var resp *storagepb.Bucket
|
var resp *storagepb.Bucket
|
||||||
|
|
@ -937,11 +596,6 @@ func (c *gRPCClient) LockBucketRetentionPolicy(ctx context.Context, req *storage
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
|
func (c *gRPCClient) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).GetIamPolicy[0:len((*c.CallOptions).GetIamPolicy):len((*c.CallOptions).GetIamPolicy)], opts...)
|
opts = append((*c.CallOptions).GetIamPolicy[0:len((*c.CallOptions).GetIamPolicy):len((*c.CallOptions).GetIamPolicy)], opts...)
|
||||||
var resp *iampb.Policy
|
var resp *iampb.Policy
|
||||||
|
|
@ -957,11 +611,6 @@ func (c *gRPCClient) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRe
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
|
func (c *gRPCClient) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).SetIamPolicy[0:len((*c.CallOptions).SetIamPolicy):len((*c.CallOptions).SetIamPolicy)], opts...)
|
opts = append((*c.CallOptions).SetIamPolicy[0:len((*c.CallOptions).SetIamPolicy):len((*c.CallOptions).SetIamPolicy)], opts...)
|
||||||
var resp *iampb.Policy
|
var resp *iampb.Policy
|
||||||
|
|
@ -977,11 +626,6 @@ func (c *gRPCClient) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRe
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
|
func (c *gRPCClient) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).TestIamPermissions[0:len((*c.CallOptions).TestIamPermissions):len((*c.CallOptions).TestIamPermissions)], opts...)
|
opts = append((*c.CallOptions).TestIamPermissions[0:len((*c.CallOptions).TestIamPermissions):len((*c.CallOptions).TestIamPermissions)], opts...)
|
||||||
var resp *iampb.TestIamPermissionsResponse
|
var resp *iampb.TestIamPermissionsResponse
|
||||||
|
|
@ -997,11 +641,6 @@ func (c *gRPCClient) TestIamPermissions(ctx context.Context, req *iampb.TestIamP
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) UpdateBucket(ctx context.Context, req *storagepb.UpdateBucketRequest, opts ...gax.CallOption) (*storagepb.Bucket, error) {
|
func (c *gRPCClient) UpdateBucket(ctx context.Context, req *storagepb.UpdateBucketRequest, opts ...gax.CallOption) (*storagepb.Bucket, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).UpdateBucket[0:len((*c.CallOptions).UpdateBucket):len((*c.CallOptions).UpdateBucket)], opts...)
|
opts = append((*c.CallOptions).UpdateBucket[0:len((*c.CallOptions).UpdateBucket):len((*c.CallOptions).UpdateBucket)], opts...)
|
||||||
var resp *storagepb.Bucket
|
var resp *storagepb.Bucket
|
||||||
|
|
@ -1017,11 +656,6 @@ func (c *gRPCClient) UpdateBucket(ctx context.Context, req *storagepb.UpdateBuck
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) DeleteNotification(ctx context.Context, req *storagepb.DeleteNotificationRequest, opts ...gax.CallOption) error {
|
func (c *gRPCClient) DeleteNotification(ctx context.Context, req *storagepb.DeleteNotificationRequest, opts ...gax.CallOption) error {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).DeleteNotification[0:len((*c.CallOptions).DeleteNotification):len((*c.CallOptions).DeleteNotification)], opts...)
|
opts = append((*c.CallOptions).DeleteNotification[0:len((*c.CallOptions).DeleteNotification):len((*c.CallOptions).DeleteNotification)], opts...)
|
||||||
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
|
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
|
||||||
|
|
@ -1033,11 +667,6 @@ func (c *gRPCClient) DeleteNotification(ctx context.Context, req *storagepb.Dele
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) GetNotification(ctx context.Context, req *storagepb.GetNotificationRequest, opts ...gax.CallOption) (*storagepb.Notification, error) {
|
func (c *gRPCClient) GetNotification(ctx context.Context, req *storagepb.GetNotificationRequest, opts ...gax.CallOption) (*storagepb.Notification, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).GetNotification[0:len((*c.CallOptions).GetNotification):len((*c.CallOptions).GetNotification)], opts...)
|
opts = append((*c.CallOptions).GetNotification[0:len((*c.CallOptions).GetNotification):len((*c.CallOptions).GetNotification)], opts...)
|
||||||
var resp *storagepb.Notification
|
var resp *storagepb.Notification
|
||||||
|
|
@ -1053,11 +682,6 @@ func (c *gRPCClient) GetNotification(ctx context.Context, req *storagepb.GetNoti
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) CreateNotification(ctx context.Context, req *storagepb.CreateNotificationRequest, opts ...gax.CallOption) (*storagepb.Notification, error) {
|
func (c *gRPCClient) CreateNotification(ctx context.Context, req *storagepb.CreateNotificationRequest, opts ...gax.CallOption) (*storagepb.Notification, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).CreateNotification[0:len((*c.CallOptions).CreateNotification):len((*c.CallOptions).CreateNotification)], opts...)
|
opts = append((*c.CallOptions).CreateNotification[0:len((*c.CallOptions).CreateNotification):len((*c.CallOptions).CreateNotification)], opts...)
|
||||||
var resp *storagepb.Notification
|
var resp *storagepb.Notification
|
||||||
|
|
@ -1116,11 +740,6 @@ func (c *gRPCClient) ListNotifications(ctx context.Context, req *storagepb.ListN
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) ComposeObject(ctx context.Context, req *storagepb.ComposeObjectRequest, opts ...gax.CallOption) (*storagepb.Object, error) {
|
func (c *gRPCClient) ComposeObject(ctx context.Context, req *storagepb.ComposeObjectRequest, opts ...gax.CallOption) (*storagepb.Object, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).ComposeObject[0:len((*c.CallOptions).ComposeObject):len((*c.CallOptions).ComposeObject)], opts...)
|
opts = append((*c.CallOptions).ComposeObject[0:len((*c.CallOptions).ComposeObject):len((*c.CallOptions).ComposeObject)], opts...)
|
||||||
var resp *storagepb.Object
|
var resp *storagepb.Object
|
||||||
|
|
@ -1136,11 +755,6 @@ func (c *gRPCClient) ComposeObject(ctx context.Context, req *storagepb.ComposeOb
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) DeleteObject(ctx context.Context, req *storagepb.DeleteObjectRequest, opts ...gax.CallOption) error {
|
func (c *gRPCClient) DeleteObject(ctx context.Context, req *storagepb.DeleteObjectRequest, opts ...gax.CallOption) error {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).DeleteObject[0:len((*c.CallOptions).DeleteObject):len((*c.CallOptions).DeleteObject)], opts...)
|
opts = append((*c.CallOptions).DeleteObject[0:len((*c.CallOptions).DeleteObject):len((*c.CallOptions).DeleteObject)], opts...)
|
||||||
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
|
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
|
||||||
|
|
@ -1152,11 +766,6 @@ func (c *gRPCClient) DeleteObject(ctx context.Context, req *storagepb.DeleteObje
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) GetObject(ctx context.Context, req *storagepb.GetObjectRequest, opts ...gax.CallOption) (*storagepb.Object, error) {
|
func (c *gRPCClient) GetObject(ctx context.Context, req *storagepb.GetObjectRequest, opts ...gax.CallOption) (*storagepb.Object, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).GetObject[0:len((*c.CallOptions).GetObject):len((*c.CallOptions).GetObject)], opts...)
|
opts = append((*c.CallOptions).GetObject[0:len((*c.CallOptions).GetObject):len((*c.CallOptions).GetObject)], opts...)
|
||||||
var resp *storagepb.Object
|
var resp *storagepb.Object
|
||||||
|
|
@ -1186,11 +795,6 @@ func (c *gRPCClient) ReadObject(ctx context.Context, req *storagepb.ReadObjectRe
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) UpdateObject(ctx context.Context, req *storagepb.UpdateObjectRequest, opts ...gax.CallOption) (*storagepb.Object, error) {
|
func (c *gRPCClient) UpdateObject(ctx context.Context, req *storagepb.UpdateObjectRequest, opts ...gax.CallOption) (*storagepb.Object, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).UpdateObject[0:len((*c.CallOptions).UpdateObject):len((*c.CallOptions).UpdateObject)], opts...)
|
opts = append((*c.CallOptions).UpdateObject[0:len((*c.CallOptions).UpdateObject):len((*c.CallOptions).UpdateObject)], opts...)
|
||||||
var resp *storagepb.Object
|
var resp *storagepb.Object
|
||||||
|
|
@ -1264,11 +868,6 @@ func (c *gRPCClient) ListObjects(ctx context.Context, req *storagepb.ListObjects
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) RewriteObject(ctx context.Context, req *storagepb.RewriteObjectRequest, opts ...gax.CallOption) (*storagepb.RewriteResponse, error) {
|
func (c *gRPCClient) RewriteObject(ctx context.Context, req *storagepb.RewriteObjectRequest, opts ...gax.CallOption) (*storagepb.RewriteResponse, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).RewriteObject[0:len((*c.CallOptions).RewriteObject):len((*c.CallOptions).RewriteObject)], opts...)
|
opts = append((*c.CallOptions).RewriteObject[0:len((*c.CallOptions).RewriteObject):len((*c.CallOptions).RewriteObject)], opts...)
|
||||||
var resp *storagepb.RewriteResponse
|
var resp *storagepb.RewriteResponse
|
||||||
|
|
@ -1284,11 +883,6 @@ func (c *gRPCClient) RewriteObject(ctx context.Context, req *storagepb.RewriteOb
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) StartResumableWrite(ctx context.Context, req *storagepb.StartResumableWriteRequest, opts ...gax.CallOption) (*storagepb.StartResumableWriteResponse, error) {
|
func (c *gRPCClient) StartResumableWrite(ctx context.Context, req *storagepb.StartResumableWriteRequest, opts ...gax.CallOption) (*storagepb.StartResumableWriteResponse, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).StartResumableWrite[0:len((*c.CallOptions).StartResumableWrite):len((*c.CallOptions).StartResumableWrite)], opts...)
|
opts = append((*c.CallOptions).StartResumableWrite[0:len((*c.CallOptions).StartResumableWrite):len((*c.CallOptions).StartResumableWrite)], opts...)
|
||||||
var resp *storagepb.StartResumableWriteResponse
|
var resp *storagepb.StartResumableWriteResponse
|
||||||
|
|
@ -1304,11 +898,6 @@ func (c *gRPCClient) StartResumableWrite(ctx context.Context, req *storagepb.Sta
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) QueryWriteStatus(ctx context.Context, req *storagepb.QueryWriteStatusRequest, opts ...gax.CallOption) (*storagepb.QueryWriteStatusResponse, error) {
|
func (c *gRPCClient) QueryWriteStatus(ctx context.Context, req *storagepb.QueryWriteStatusRequest, opts ...gax.CallOption) (*storagepb.QueryWriteStatusResponse, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).QueryWriteStatus[0:len((*c.CallOptions).QueryWriteStatus):len((*c.CallOptions).QueryWriteStatus)], opts...)
|
opts = append((*c.CallOptions).QueryWriteStatus[0:len((*c.CallOptions).QueryWriteStatus):len((*c.CallOptions).QueryWriteStatus)], opts...)
|
||||||
var resp *storagepb.QueryWriteStatusResponse
|
var resp *storagepb.QueryWriteStatusResponse
|
||||||
|
|
@ -1324,11 +913,6 @@ func (c *gRPCClient) QueryWriteStatus(ctx context.Context, req *storagepb.QueryW
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) GetServiceAccount(ctx context.Context, req *storagepb.GetServiceAccountRequest, opts ...gax.CallOption) (*storagepb.ServiceAccount, error) {
|
func (c *gRPCClient) GetServiceAccount(ctx context.Context, req *storagepb.GetServiceAccountRequest, opts ...gax.CallOption) (*storagepb.ServiceAccount, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).GetServiceAccount[0:len((*c.CallOptions).GetServiceAccount):len((*c.CallOptions).GetServiceAccount)], opts...)
|
opts = append((*c.CallOptions).GetServiceAccount[0:len((*c.CallOptions).GetServiceAccount):len((*c.CallOptions).GetServiceAccount)], opts...)
|
||||||
var resp *storagepb.ServiceAccount
|
var resp *storagepb.ServiceAccount
|
||||||
|
|
@ -1344,11 +928,6 @@ func (c *gRPCClient) GetServiceAccount(ctx context.Context, req *storagepb.GetSe
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) CreateHmacKey(ctx context.Context, req *storagepb.CreateHmacKeyRequest, opts ...gax.CallOption) (*storagepb.CreateHmacKeyResponse, error) {
|
func (c *gRPCClient) CreateHmacKey(ctx context.Context, req *storagepb.CreateHmacKeyRequest, opts ...gax.CallOption) (*storagepb.CreateHmacKeyResponse, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).CreateHmacKey[0:len((*c.CallOptions).CreateHmacKey):len((*c.CallOptions).CreateHmacKey)], opts...)
|
opts = append((*c.CallOptions).CreateHmacKey[0:len((*c.CallOptions).CreateHmacKey):len((*c.CallOptions).CreateHmacKey)], opts...)
|
||||||
var resp *storagepb.CreateHmacKeyResponse
|
var resp *storagepb.CreateHmacKeyResponse
|
||||||
|
|
@ -1364,11 +943,6 @@ func (c *gRPCClient) CreateHmacKey(ctx context.Context, req *storagepb.CreateHma
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) DeleteHmacKey(ctx context.Context, req *storagepb.DeleteHmacKeyRequest, opts ...gax.CallOption) error {
|
func (c *gRPCClient) DeleteHmacKey(ctx context.Context, req *storagepb.DeleteHmacKeyRequest, opts ...gax.CallOption) error {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).DeleteHmacKey[0:len((*c.CallOptions).DeleteHmacKey):len((*c.CallOptions).DeleteHmacKey)], opts...)
|
opts = append((*c.CallOptions).DeleteHmacKey[0:len((*c.CallOptions).DeleteHmacKey):len((*c.CallOptions).DeleteHmacKey)], opts...)
|
||||||
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
|
err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
|
||||||
|
|
@ -1380,11 +954,6 @@ func (c *gRPCClient) DeleteHmacKey(ctx context.Context, req *storagepb.DeleteHma
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) GetHmacKey(ctx context.Context, req *storagepb.GetHmacKeyRequest, opts ...gax.CallOption) (*storagepb.HmacKeyMetadata, error) {
|
func (c *gRPCClient) GetHmacKey(ctx context.Context, req *storagepb.GetHmacKeyRequest, opts ...gax.CallOption) (*storagepb.HmacKeyMetadata, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).GetHmacKey[0:len((*c.CallOptions).GetHmacKey):len((*c.CallOptions).GetHmacKey)], opts...)
|
opts = append((*c.CallOptions).GetHmacKey[0:len((*c.CallOptions).GetHmacKey):len((*c.CallOptions).GetHmacKey)], opts...)
|
||||||
var resp *storagepb.HmacKeyMetadata
|
var resp *storagepb.HmacKeyMetadata
|
||||||
|
|
@ -1443,11 +1012,6 @@ func (c *gRPCClient) ListHmacKeys(ctx context.Context, req *storagepb.ListHmacKe
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *gRPCClient) UpdateHmacKey(ctx context.Context, req *storagepb.UpdateHmacKeyRequest, opts ...gax.CallOption) (*storagepb.HmacKeyMetadata, error) {
|
func (c *gRPCClient) UpdateHmacKey(ctx context.Context, req *storagepb.UpdateHmacKeyRequest, opts ...gax.CallOption) (*storagepb.HmacKeyMetadata, error) {
|
||||||
if _, ok := ctx.Deadline(); !ok && !c.disableDeadlines {
|
|
||||||
cctx, cancel := context.WithTimeout(ctx, 60000*time.Millisecond)
|
|
||||||
defer cancel()
|
|
||||||
ctx = cctx
|
|
||||||
}
|
|
||||||
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
ctx = insertMetadata(ctx, c.xGoogMetadata)
|
||||||
opts = append((*c.CallOptions).UpdateHmacKey[0:len((*c.CallOptions).UpdateHmacKey):len((*c.CallOptions).UpdateHmacKey)], opts...)
|
opts = append((*c.CallOptions).UpdateHmacKey[0:len((*c.CallOptions).UpdateHmacKey):len((*c.CallOptions).UpdateHmacKey)], opts...)
|
||||||
var resp *storagepb.HmacKeyMetadata
|
var resp *storagepb.HmacKeyMetadata
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
// Copyright 2022 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// Code generated by gapicgen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package storage
|
||||||
|
|
||||||
|
import "cloud.google.com/go/storage/internal"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
versionClient = internal.Version
|
||||||
|
}
|
||||||
|
|
@ -15,4 +15,4 @@
|
||||||
package internal
|
package internal
|
||||||
|
|
||||||
// Version is the current tagged release of the library.
|
// Version is the current tagged release of the library.
|
||||||
const Version = "1.21.0"
|
const Version = "1.22.0"
|
||||||
|
|
|
||||||
|
|
@ -239,6 +239,8 @@ func conditionStatusCodeOnSuccess(statusCode int) PostPolicyV4Condition {
|
||||||
|
|
||||||
// GenerateSignedPostPolicyV4 generates a PostPolicyV4 value from bucket, object and opts.
|
// GenerateSignedPostPolicyV4 generates a PostPolicyV4 value from bucket, object and opts.
|
||||||
// The generated URL and fields will then allow an unauthenticated client to perform multipart uploads.
|
// The generated URL and fields will then allow an unauthenticated client to perform multipart uploads.
|
||||||
|
// If initializing a Storage Client, instead use the Bucket.GenerateSignedPostPolicyV4
|
||||||
|
// method which uses the Client's credentials to handle authentication.
|
||||||
func GenerateSignedPostPolicyV4(bucket, object string, opts *PostPolicyV4Options) (*PostPolicyV4, error) {
|
func GenerateSignedPostPolicyV4(bucket, object string, opts *PostPolicyV4Options) (*PostPolicyV4, error) {
|
||||||
if bucket == "" {
|
if bucket == "" {
|
||||||
return nil, errors.New("storage: bucket must be non-empty")
|
return nil, errors.New("storage: bucket must be non-empty")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"release-type": "go-yoshi",
|
||||||
|
"separate-pull-requests": true,
|
||||||
|
"include-component-in-tag": true,
|
||||||
|
"tag-separator": "/",
|
||||||
|
"packages": {
|
||||||
|
"storage": {
|
||||||
|
"component": "storage"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -52,7 +52,6 @@ import (
|
||||||
"google.golang.org/api/transport"
|
"google.golang.org/api/transport"
|
||||||
htransport "google.golang.org/api/transport/http"
|
htransport "google.golang.org/api/transport/http"
|
||||||
storagepb "google.golang.org/genproto/googleapis/storage/v2"
|
storagepb "google.golang.org/genproto/googleapis/storage/v2"
|
||||||
"google.golang.org/grpc"
|
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
"google.golang.org/protobuf/types/known/timestamppb"
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
|
|
@ -66,6 +65,9 @@ var (
|
||||||
ErrBucketNotExist = errors.New("storage: bucket doesn't exist")
|
ErrBucketNotExist = errors.New("storage: bucket doesn't exist")
|
||||||
// ErrObjectNotExist indicates that the object does not exist.
|
// ErrObjectNotExist indicates that the object does not exist.
|
||||||
ErrObjectNotExist = errors.New("storage: object doesn't exist")
|
ErrObjectNotExist = errors.New("storage: object doesn't exist")
|
||||||
|
// errMethodNotSupported indicates that the method called is not currently supported by the client.
|
||||||
|
// TODO: Export this error when launching the transport-agnostic client.
|
||||||
|
errMethodNotSupported = errors.New("storage: method is not currently supported")
|
||||||
// errMethodNotValid indicates that given HTTP method is not valid.
|
// errMethodNotValid indicates that given HTTP method is not valid.
|
||||||
errMethodNotValid = fmt.Errorf("storage: HTTP method should be one of %v", reflect.ValueOf(signedURLMethods).MapKeys())
|
errMethodNotValid = fmt.Errorf("storage: HTTP method should be one of %v", reflect.ValueOf(signedURLMethods).MapKeys())
|
||||||
)
|
)
|
||||||
|
|
@ -84,12 +86,6 @@ const (
|
||||||
// ScopeReadWrite grants permissions to manage your
|
// ScopeReadWrite grants permissions to manage your
|
||||||
// data in Google Cloud Storage.
|
// data in Google Cloud Storage.
|
||||||
ScopeReadWrite = raw.DevstorageReadWriteScope
|
ScopeReadWrite = raw.DevstorageReadWriteScope
|
||||||
|
|
||||||
// defaultConnPoolSize is the default number of connections
|
|
||||||
// to initialize in the GAPIC gRPC connection pool. A larger
|
|
||||||
// connection pool may be necessary for jobs that require
|
|
||||||
// high throughput and/or leverage many concurrent streams.
|
|
||||||
defaultConnPoolSize = 4
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var xGoogHeader = fmt.Sprintf("gl-go/%s gccl/%s", version.Go(), internal.Version)
|
var xGoogHeader = fmt.Sprintf("gl-go/%s gccl/%s", version.Go(), internal.Version)
|
||||||
|
|
@ -220,27 +216,6 @@ func newHybridClient(ctx context.Context, opts *hybridClientOptions) (*Client, e
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set emulator options for gRPC if an emulator was specified. Note that in a
|
|
||||||
// hybrid client, STORAGE_EMULATOR_HOST will set the host to use for HTTP and
|
|
||||||
// STORAGE_EMULATOR_HOST_GRPC will set the host to use for gRPC (when using a
|
|
||||||
// local emulator, HTTP and gRPC must use different ports, so this is
|
|
||||||
// necessary).
|
|
||||||
// TODO: when full gRPC client is available, remove STORAGE_EMULATOR_HOST_GRPC
|
|
||||||
// and use STORAGE_EMULATOR_HOST for both the HTTP and gRPC based clients.
|
|
||||||
if host := os.Getenv("STORAGE_EMULATOR_HOST_GRPC"); host != "" {
|
|
||||||
// Strip the scheme from the emulator host. WithEndpoint does not take a
|
|
||||||
// scheme for gRPC.
|
|
||||||
if strings.Contains(host, "://") {
|
|
||||||
host = strings.SplitN(host, "://", 2)[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
opts.GRPCOpts = append(opts.GRPCOpts,
|
|
||||||
option.WithEndpoint(host),
|
|
||||||
option.WithGRPCDialOption(grpc.WithInsecure()),
|
|
||||||
option.WithoutAuthentication(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
g, err := gapic.NewClient(ctx, opts.GRPCOpts...)
|
g, err := gapic.NewClient(ctx, opts.GRPCOpts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -250,14 +225,6 @@ func newHybridClient(ctx context.Context, opts *hybridClientOptions) (*Client, e
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// defaultGRPCOptions returns a set of the default client options
|
|
||||||
// for gRPC client initialization.
|
|
||||||
func defaultGRPCOptions() []option.ClientOption {
|
|
||||||
return []option.ClientOption{
|
|
||||||
option.WithGRPCConnectionPool(defaultConnPoolSize),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close closes the Client.
|
// Close closes the Client.
|
||||||
//
|
//
|
||||||
// Close need not be called at program exit.
|
// Close need not be called at program exit.
|
||||||
|
|
@ -309,10 +276,18 @@ type bucketBoundHostname struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s pathStyle) host(bucket string) string {
|
func (s pathStyle) host(bucket string) string {
|
||||||
|
if host := os.Getenv("STORAGE_EMULATOR_HOST"); host != "" {
|
||||||
|
return stripScheme(host)
|
||||||
|
}
|
||||||
|
|
||||||
return "storage.googleapis.com"
|
return "storage.googleapis.com"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s virtualHostedStyle) host(bucket string) string {
|
func (s virtualHostedStyle) host(bucket string) string {
|
||||||
|
if host := os.Getenv("STORAGE_EMULATOR_HOST"); host != "" {
|
||||||
|
return bucket + "." + stripScheme(host)
|
||||||
|
}
|
||||||
|
|
||||||
return bucket + ".storage.googleapis.com"
|
return bucket + ".storage.googleapis.com"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -360,6 +335,14 @@ func BucketBoundHostname(hostname string) URLStyle {
|
||||||
return bucketBoundHostname{hostname: hostname}
|
return bucketBoundHostname{hostname: hostname}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Strips the scheme from a host if it contains it
|
||||||
|
func stripScheme(host string) string {
|
||||||
|
if strings.Contains(host, "://") {
|
||||||
|
host = strings.SplitN(host, "://", 2)[1]
|
||||||
|
}
|
||||||
|
return host
|
||||||
|
}
|
||||||
|
|
||||||
// SignedURLOptions allows you to restrict the access to the signed URL.
|
// SignedURLOptions allows you to restrict the access to the signed URL.
|
||||||
type SignedURLOptions struct {
|
type SignedURLOptions struct {
|
||||||
// GoogleAccessID represents the authorizer of the signed URL generation.
|
// GoogleAccessID represents the authorizer of the signed URL generation.
|
||||||
|
|
@ -586,6 +569,8 @@ func v4SanitizeHeaders(hdrs []string) []string {
|
||||||
// access to a restricted resource for a limited time without needing a
|
// access to a restricted resource for a limited time without needing a
|
||||||
// Google account or signing in. For more information about signed URLs, see
|
// Google account or signing in. For more information about signed URLs, see
|
||||||
// https://cloud.google.com/storage/docs/accesscontrol#signed_urls_query_string_authentication
|
// https://cloud.google.com/storage/docs/accesscontrol#signed_urls_query_string_authentication
|
||||||
|
// If initializing a Storage Client, instead use the Bucket.SignedURL method
|
||||||
|
// which uses the Client's credentials to handle authentication.
|
||||||
func SignedURL(bucket, object string, opts *SignedURLOptions) (string, error) {
|
func SignedURL(bucket, object string, opts *SignedURLOptions) (string, error) {
|
||||||
now := utcNow()
|
now := utcNow()
|
||||||
if err := validateOptions(opts, now); err != nil {
|
if err := validateOptions(opts, now); err != nil {
|
||||||
|
|
@ -856,7 +841,7 @@ func signedURLV2(bucket, name string, opts *SignedURLOptions) (string, error) {
|
||||||
}
|
}
|
||||||
encoded := base64.StdEncoding.EncodeToString(b)
|
encoded := base64.StdEncoding.EncodeToString(b)
|
||||||
u.Scheme = "https"
|
u.Scheme = "https"
|
||||||
u.Host = "storage.googleapis.com"
|
u.Host = PathStyle().host(bucket)
|
||||||
q := u.Query()
|
q := u.Query()
|
||||||
q.Set("GoogleAccessId", opts.GoogleAccessID)
|
q.Set("GoogleAccessId", opts.GoogleAccessID)
|
||||||
q.Set("Expires", fmt.Sprintf("%d", opts.Expires.Unix()))
|
q.Set("Expires", fmt.Sprintf("%d", opts.Expires.Unix()))
|
||||||
|
|
@ -1326,6 +1311,9 @@ type ObjectAttrs struct {
|
||||||
// Composer. In those cases, if the SendCRC32C field in the Writer or Composer
|
// Composer. In those cases, if the SendCRC32C field in the Writer or Composer
|
||||||
// is set to is true, the uploaded data is rejected if its CRC32C hash does
|
// is set to is true, the uploaded data is rejected if its CRC32C hash does
|
||||||
// not match this field.
|
// not match this field.
|
||||||
|
//
|
||||||
|
// Note: For a Writer, SendCRC32C must be set to true BEFORE the first call to
|
||||||
|
// Writer.Write() in order to send the checksum.
|
||||||
CRC32C uint32
|
CRC32C uint32
|
||||||
|
|
||||||
// MediaLink is an URL to the object's content. This field is read-only.
|
// MediaLink is an URL to the object's content. This field is read-only.
|
||||||
|
|
@ -1485,7 +1473,7 @@ func newObjectFromProto(o *storagepb.Object) *ObjectAttrs {
|
||||||
EventBasedHold: o.GetEventBasedHold(),
|
EventBasedHold: o.GetEventBasedHold(),
|
||||||
TemporaryHold: o.TemporaryHold,
|
TemporaryHold: o.TemporaryHold,
|
||||||
RetentionExpirationTime: convertProtoTime(o.GetRetentionExpireTime()),
|
RetentionExpirationTime: convertProtoTime(o.GetRetentionExpireTime()),
|
||||||
ACL: fromProtoToObjectACLRules(o.GetAcl()),
|
ACL: toObjectACLRulesFromProto(o.GetAcl()),
|
||||||
Owner: o.GetOwner().GetEntity(),
|
Owner: o.GetOwner().GetEntity(),
|
||||||
ContentEncoding: o.ContentEncoding,
|
ContentEncoding: o.ContentEncoding,
|
||||||
ContentDisposition: o.ContentDisposition,
|
ContentDisposition: o.ContentDisposition,
|
||||||
|
|
@ -1588,6 +1576,14 @@ type Query struct {
|
||||||
// which returns all properties. Passing ProjectionNoACL will omit Owner and ACL,
|
// which returns all properties. Passing ProjectionNoACL will omit Owner and ACL,
|
||||||
// which may improve performance when listing many objects.
|
// which may improve performance when listing many objects.
|
||||||
Projection Projection
|
Projection Projection
|
||||||
|
|
||||||
|
// IncludeTrailingDelimiter controls how objects which end in a single
|
||||||
|
// instance of Delimiter (for example, if Query.Delimiter = "/" and the
|
||||||
|
// object name is "foo/bar/") are included in the results. By default, these
|
||||||
|
// objects only show up as prefixes. If IncludeTrailingDelimiter is set to
|
||||||
|
// true, they will also be included as objects and their metadata will be
|
||||||
|
// populated in the returned ObjectAttrs.
|
||||||
|
IncludeTrailingDelimiter bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// attrToFieldMap maps the field names of ObjectAttrs to the underlying field
|
// attrToFieldMap maps the field names of ObjectAttrs to the underlying field
|
||||||
|
|
@ -2037,7 +2033,14 @@ func bucketResourceName(p, b string) string {
|
||||||
// parseBucketName strips the leading resource path segment and returns the
|
// parseBucketName strips the leading resource path segment and returns the
|
||||||
// bucket ID, which is the simple Bucket name typical of the v1 API.
|
// bucket ID, which is the simple Bucket name typical of the v1 API.
|
||||||
func parseBucketName(b string) string {
|
func parseBucketName(b string) string {
|
||||||
return strings.TrimPrefix(b, "projects/_/buckets/")
|
sep := strings.LastIndex(b, "/")
|
||||||
|
return b[sep+1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// toProjectResource accepts a project ID and formats it as a Project resource
|
||||||
|
// name.
|
||||||
|
func toProjectResource(project string) string {
|
||||||
|
return fmt.Sprintf("projects/%s", project)
|
||||||
}
|
}
|
||||||
|
|
||||||
// setConditionProtoField uses protobuf reflection to set named condition field
|
// setConditionProtoField uses protobuf reflection to set named condition field
|
||||||
|
|
|
||||||
|
|
@ -48,11 +48,15 @@ type Writer struct {
|
||||||
// attributes are ignored.
|
// attributes are ignored.
|
||||||
ObjectAttrs
|
ObjectAttrs
|
||||||
|
|
||||||
// SendCRC specifies whether to transmit a CRC32C field. It should be set
|
// SendCRC32C specifies whether to transmit a CRC32C field. It should be set
|
||||||
// to true in addition to setting the Writer's CRC32C field, because zero
|
// to true in addition to setting the Writer's CRC32C field, because zero
|
||||||
// is a valid CRC and normally a zero would not be transmitted.
|
// is a valid CRC and normally a zero would not be transmitted.
|
||||||
// If a CRC32C is sent, and the data written does not match the checksum,
|
// If a CRC32C is sent, and the data written does not match the checksum,
|
||||||
// the write will be rejected.
|
// the write will be rejected.
|
||||||
|
//
|
||||||
|
// Note: SendCRC32C must be set to true BEFORE the first call to
|
||||||
|
// Writer.Write() in order to send the checksum. If it is set after that
|
||||||
|
// point, the checksum will be ignored.
|
||||||
SendCRC32C bool
|
SendCRC32C bool
|
||||||
|
|
||||||
// ChunkSize controls the maximum number of bytes of the object that the
|
// ChunkSize controls the maximum number of bytes of the object that the
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
// Package apierror implements a wrapper error for parsing error details from
|
// Package apierror implements a wrapper error for parsing error details from
|
||||||
// API calls. Currently, only errors representing a gRPC status are supported.
|
// API calls. Both HTTP & gRPC status errors are supported.
|
||||||
package apierror
|
package apierror
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
||||||
|
|
@ -36,4 +36,4 @@
|
||||||
package gax
|
package gax
|
||||||
|
|
||||||
// Version specifies the gax-go version being used.
|
// Version specifies the gax-go version being used.
|
||||||
const Version = "2.1.1"
|
const Version = "2.2.0"
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,126 @@
|
||||||
|
// Copyright 2022, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package gax
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"google.golang.org/protobuf/encoding/protojson"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
arrayOpen = json.Delim('[')
|
||||||
|
arrayClose = json.Delim(']')
|
||||||
|
errBadOpening = errors.New("unexpected opening token, expected '['")
|
||||||
|
)
|
||||||
|
|
||||||
|
// ProtoJSONStream represents a wrapper for consuming a stream of protobuf
|
||||||
|
// messages encoded using protobuf-JSON format. More information on this format
|
||||||
|
// can be found at https://developers.google.com/protocol-buffers/docs/proto3#json.
|
||||||
|
// The stream must appear as a comma-delimited, JSON array of obbjects with
|
||||||
|
// opening and closing square braces.
|
||||||
|
//
|
||||||
|
// This is for internal use only.
|
||||||
|
type ProtoJSONStream struct {
|
||||||
|
first, closed bool
|
||||||
|
reader io.ReadCloser
|
||||||
|
stream *json.Decoder
|
||||||
|
typ protoreflect.MessageType
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewProtoJSONStreamReader accepts a stream of bytes via an io.ReadCloser that are
|
||||||
|
// protobuf-JSON encoded protobuf messages of the given type. The ProtoJSONStream
|
||||||
|
// must be closed when done.
|
||||||
|
//
|
||||||
|
// This is for internal use only.
|
||||||
|
func NewProtoJSONStreamReader(rc io.ReadCloser, typ protoreflect.MessageType) *ProtoJSONStream {
|
||||||
|
return &ProtoJSONStream{
|
||||||
|
first: true,
|
||||||
|
reader: rc,
|
||||||
|
stream: json.NewDecoder(rc),
|
||||||
|
typ: typ,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recv decodes the next protobuf message in the stream or returns io.EOF if
|
||||||
|
// the stream is done. It is not safe to call Recv on the same stream from
|
||||||
|
// different goroutines, just like it is not safe to do so with a single gRPC
|
||||||
|
// stream. Type-cast the protobuf message returned to the type provided at
|
||||||
|
// ProtoJSONStream creation.
|
||||||
|
// Calls to Recv after calling Close will produce io.EOF.
|
||||||
|
func (s *ProtoJSONStream) Recv() (proto.Message, error) {
|
||||||
|
if s.closed {
|
||||||
|
return nil, io.EOF
|
||||||
|
}
|
||||||
|
if s.first {
|
||||||
|
s.first = false
|
||||||
|
|
||||||
|
// Consume the opening '[' so Decode gets one object at a time.
|
||||||
|
if t, err := s.stream.Token(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
} else if t != arrayOpen {
|
||||||
|
return nil, errBadOpening
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Capture the next block of data for the item (a JSON object) in the stream.
|
||||||
|
var raw json.RawMessage
|
||||||
|
if err := s.stream.Decode(&raw); err != nil {
|
||||||
|
e := err
|
||||||
|
// To avoid checking the first token of each stream, just attempt to
|
||||||
|
// Decode the next blob and if that fails, double check if it is just
|
||||||
|
// the closing token ']'. If it is the closing, return io.EOF. If it
|
||||||
|
// isn't, return the original error.
|
||||||
|
if t, _ := s.stream.Token(); t == arrayClose {
|
||||||
|
e = io.EOF
|
||||||
|
}
|
||||||
|
return nil, e
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize a new instance of the protobuf message to unmarshal the
|
||||||
|
// raw data into.
|
||||||
|
m := s.typ.New().Interface()
|
||||||
|
err := protojson.Unmarshal(raw, m)
|
||||||
|
|
||||||
|
return m, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close closes the stream so that resources are cleaned up.
|
||||||
|
func (s *ProtoJSONStream) Close() error {
|
||||||
|
// Dereference the *json.Decoder so that the memory is gc'd.
|
||||||
|
s.stream = nil
|
||||||
|
s.closed = true
|
||||||
|
|
||||||
|
return s.reader.Close()
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,202 @@
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
// Copyright 2021 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package adapters
|
||||||
|
|
||||||
|
import (
|
||||||
|
"image/color"
|
||||||
|
"math"
|
||||||
|
|
||||||
|
cpb "google.golang.org/genproto/googleapis/type/color"
|
||||||
|
wpb "google.golang.org/protobuf/types/known/wrapperspb"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ProtoColorToRGBA returns an RGBA based on the provided google.type.Color.
|
||||||
|
// If alpha is not set in the proto, full opacity is assumed.
|
||||||
|
//
|
||||||
|
// Note: Converting between a float using [0, 1] to an int using [0, 256)
|
||||||
|
// causes some cognitive dissonance between accuracy and user expectations.
|
||||||
|
// For example, most people writing CSS use 0x80 (decimal 128) to mean "half",
|
||||||
|
// but it is not actually half (it is slightly over). There is actually no
|
||||||
|
// way to precisely specify the 0.5 float value in a [0, 256) range of
|
||||||
|
// integers.
|
||||||
|
//
|
||||||
|
// This function uses math.Round to address this, meaning that 0.5 will be
|
||||||
|
// rounded up to 128 rather than rounded down to 127.
|
||||||
|
//
|
||||||
|
// Because of this fuzziness and precision loss, it is NOT guaranteed that
|
||||||
|
// ProtoColorToRGBA and RGBAToProtoColor are exact inverses, and both functions
|
||||||
|
// will lose precision.
|
||||||
|
func ProtoColorToRGBA(c *cpb.Color) *color.RGBA {
|
||||||
|
// Determine the appropriate alpha value.
|
||||||
|
// If alpha is unset, full opacity is the proper default.
|
||||||
|
alpha := uint8(255)
|
||||||
|
if c.Alpha != nil {
|
||||||
|
alpha = uint8(math.Round(float64(c.GetAlpha().GetValue() * 255)))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the RGBA.
|
||||||
|
return &color.RGBA{
|
||||||
|
R: uint8(math.Round(float64(c.GetRed()) * 255)),
|
||||||
|
G: uint8(math.Round(float64(c.GetGreen()) * 255)),
|
||||||
|
B: uint8(math.Round(float64(c.GetBlue()) * 255)),
|
||||||
|
A: alpha,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RGBAToProtoColor returns a google.type.Color based on the provided RGBA.
|
||||||
|
//
|
||||||
|
// Note: Converting between ints using [0, 256) and a float using [0, 1]
|
||||||
|
// causes some cognitive dissonance between accuracy and user expectations.
|
||||||
|
// For example, most people using CSS use 0x80 (decimal 128) to mean "half",
|
||||||
|
// but it is not actually half (it is slightly over). These is actually no
|
||||||
|
// way to precisely specify the 0.5 float value in a [0, 256) range of
|
||||||
|
// integers.
|
||||||
|
//
|
||||||
|
// This function addresses this by limiting decimal precision to 0.01, on
|
||||||
|
// the rationale that most precision beyond this point is probably
|
||||||
|
// unintentional.
|
||||||
|
//
|
||||||
|
// Because of this fuzziness and precision loss, it is NOT guaranteed that
|
||||||
|
// ProtoColorToRGBA and RGBAToProtoColor are exact inverses, and both functions
|
||||||
|
// will lose precision.
|
||||||
|
func RGBAToProtoColor(rgba *color.RGBA) *cpb.Color {
|
||||||
|
return &cpb.Color{
|
||||||
|
Red: float32(int(rgba.R)*100/255) / 100,
|
||||||
|
Green: float32(int(rgba.G)*100/255) / 100,
|
||||||
|
Blue: float32(int(rgba.B)*100/255) / 100,
|
||||||
|
Alpha: &wpb.FloatValue{Value: float32(int(rgba.A)*100/255) / 100},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
// Copyright 2021 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package adapters
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
dpb "google.golang.org/genproto/googleapis/type/date"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ProtoDateToLocalTime returns a new Time based on the google.type.Date, in
|
||||||
|
// the system's time zone.
|
||||||
|
//
|
||||||
|
// Hours, minues, seconds, and nanoseconds are set to 0.
|
||||||
|
func ProtoDateToLocalTime(d *dpb.Date) time.Time {
|
||||||
|
return ProtoDateToTime(d, time.Local)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProtoDateToUTCTime returns a new Time based on the google.type.Date, in UTC.
|
||||||
|
//
|
||||||
|
// Hours, minutes, seconds, and nanoseconds are set to 0.
|
||||||
|
func ProtoDateToUTCTime(d *dpb.Date) time.Time {
|
||||||
|
return ProtoDateToTime(d, time.UTC)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProtoDateToTime returns a new Time based on the google.type.Date and provided
|
||||||
|
// *time.Location.
|
||||||
|
//
|
||||||
|
// Hours, minutes, seconds, and nanoseconds are set to 0.
|
||||||
|
func ProtoDateToTime(d *dpb.Date, l *time.Location) time.Time {
|
||||||
|
return time.Date(int(d.GetYear()), time.Month(d.GetMonth()), int(d.GetDay()), 0, 0, 0, 0, l)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TimeToProtoDate returns a new google.type.Date based on the provided time.Time.
|
||||||
|
// The location is ignored, as is anything more precise than the day.
|
||||||
|
func TimeToProtoDate(t time.Time) *dpb.Date {
|
||||||
|
return &dpb.Date{
|
||||||
|
Year: int32(t.Year()),
|
||||||
|
Month: int32(t.Month()),
|
||||||
|
Day: int32(t.Day()),
|
||||||
|
}
|
||||||
|
}
|
||||||
93
vendor/github.com/googleapis/go-type-adapters/adapters/datetime.go
generated
vendored
Normal file
93
vendor/github.com/googleapis/go-type-adapters/adapters/datetime.go
generated
vendored
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
// Copyright 2021 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package adapters
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"regexp"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
dtpb "google.golang.org/genproto/googleapis/type/datetime"
|
||||||
|
durpb "google.golang.org/protobuf/types/known/durationpb"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ProtoDateTimeToTime returns a new Time based on the google.type.DateTime.
|
||||||
|
//
|
||||||
|
// It errors if it gets invalid time zone information.
|
||||||
|
func ProtoDateTimeToTime(d *dtpb.DateTime) (time.Time, error) {
|
||||||
|
var err error
|
||||||
|
|
||||||
|
// Determine the location.
|
||||||
|
loc := time.UTC
|
||||||
|
if tz := d.GetTimeZone(); tz != nil {
|
||||||
|
loc, err = time.LoadLocation(tz.GetId())
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if offset := d.GetUtcOffset(); offset != nil {
|
||||||
|
hours := int(offset.GetSeconds()) / 3600
|
||||||
|
loc = time.FixedZone(fmt.Sprintf("UTC%+d", hours), hours)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the Time.
|
||||||
|
return time.Date(
|
||||||
|
int(d.GetYear()),
|
||||||
|
time.Month(d.GetMonth()),
|
||||||
|
int(d.GetDay()),
|
||||||
|
int(d.GetHours()),
|
||||||
|
int(d.GetMinutes()),
|
||||||
|
int(d.GetSeconds()),
|
||||||
|
int(d.GetNanos()),
|
||||||
|
loc,
|
||||||
|
), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// TimeToProtoDateTime returns a new google.type.DateTime based on the
|
||||||
|
// provided time.Time.
|
||||||
|
//
|
||||||
|
// It errors if it gets invalid time zone information.
|
||||||
|
func TimeToProtoDateTime(t time.Time) (*dtpb.DateTime, error) {
|
||||||
|
dt := &dtpb.DateTime{
|
||||||
|
Year: int32(t.Year()),
|
||||||
|
Month: int32(t.Month()),
|
||||||
|
Day: int32(t.Day()),
|
||||||
|
Hours: int32(t.Hour()),
|
||||||
|
Minutes: int32(t.Minute()),
|
||||||
|
Seconds: int32(t.Second()),
|
||||||
|
Nanos: int32(t.Nanosecond()),
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the location is a UTC offset, encode it as such in the proto.
|
||||||
|
loc := t.Location().String()
|
||||||
|
if match := offsetRegexp.FindStringSubmatch(loc); len(match) > 0 {
|
||||||
|
offsetInt, err := strconv.Atoi(match[1])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
dt.TimeOffset = &dtpb.DateTime_UtcOffset{
|
||||||
|
UtcOffset: &durpb.Duration{Seconds: int64(offsetInt) * 3600},
|
||||||
|
}
|
||||||
|
} else if loc != "" {
|
||||||
|
dt.TimeOffset = &dtpb.DateTime_TimeZone{
|
||||||
|
TimeZone: &dtpb.TimeZone{Id: loc},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dt, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var offsetRegexp = regexp.MustCompile(`^UTC([+-][\d]{1,2})$`)
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
// Copyright 2021 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package adapters
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
"math/big"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
dpb "google.golang.org/genproto/googleapis/type/decimal"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ProtoDecimalToFloat converts the provided google.type.Decimal to a big.Float.
|
||||||
|
func ProtoDecimalToFloat(d *dpb.Decimal) (*big.Float, error) {
|
||||||
|
value := strings.ToLower(d.GetValue())
|
||||||
|
|
||||||
|
// Determine the required precision.
|
||||||
|
v := value
|
||||||
|
if strings.ContainsRune(v, 'e') {
|
||||||
|
v = v[0:strings.IndexRune(v, 'e')]
|
||||||
|
}
|
||||||
|
v = nan.ReplaceAllLiteralString(v, "")
|
||||||
|
prec := uint(math.Pow(2, float64(len(v)+1)))
|
||||||
|
|
||||||
|
// Parse and return a big.Float.
|
||||||
|
f, _, err := big.ParseFloat(value, 10, prec, big.AwayFromZero)
|
||||||
|
return f, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProtoDecimalToFloat64 converts the provided google.type.Decimal to a float64.
|
||||||
|
func ProtoDecimalToFloat64(d *dpb.Decimal) (float64, big.Accuracy, error) {
|
||||||
|
f, err := ProtoDecimalToFloat(d)
|
||||||
|
if err != nil {
|
||||||
|
return 0.0, big.Exact, err
|
||||||
|
}
|
||||||
|
f64, accuracy := f.Float64()
|
||||||
|
return f64, accuracy, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float64ToProtoDecimal converts the provided float64 to a google.type.Decimal.
|
||||||
|
func Float64ToProtoDecimal(f float64) *dpb.Decimal {
|
||||||
|
return &dpb.Decimal{
|
||||||
|
Value: fmt.Sprintf("%f", f),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FloatToProtoDecimal converts the provided big.Float to a google.type.Decimal.
|
||||||
|
func FloatToProtoDecimal(f *big.Float) *dpb.Decimal {
|
||||||
|
return &dpb.Decimal{
|
||||||
|
Value: f.String(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var nan = regexp.MustCompile(`[^\d]`)
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
// Copyright 2021 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// package adapters provides helper functions for the google.type protobuf
|
||||||
|
// messages (Decimal, Fraction, etc.).
|
||||||
|
package adapters
|
||||||
35
vendor/github.com/googleapis/go-type-adapters/adapters/fraction.go
generated
vendored
Normal file
35
vendor/github.com/googleapis/go-type-adapters/adapters/fraction.go
generated
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
// Copyright 2021 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package adapters
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math/big"
|
||||||
|
|
||||||
|
fpb "google.golang.org/genproto/googleapis/type/fraction"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ProtoFractionToRat returns a math/big Rat (rational number) based on the given
|
||||||
|
// google.type.fraction.
|
||||||
|
func ProtoFractionToRat(f *fpb.Fraction) *big.Rat {
|
||||||
|
return big.NewRat(f.GetNumerator(), f.GetDenominator())
|
||||||
|
}
|
||||||
|
|
||||||
|
// RatToProtoFraction returns a google.type.Fraction from a math/big Rat.
|
||||||
|
func RatToProtoFraction(r *big.Rat) *fpb.Fraction {
|
||||||
|
return &fpb.Fraction{
|
||||||
|
Numerator: r.Num().Int64(),
|
||||||
|
Denominator: r.Denom().Int64(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
// Copyright 2021 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package adapters
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
mpb "google.golang.org/genproto/googleapis/type/month"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ToMonth converts a google.type.Month to a golang Month.
|
||||||
|
func ToMonth(m mpb.Month) time.Month {
|
||||||
|
return time.Month(m.Number())
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToProtoMonth converts a golang Month to a google.type.Month.
|
||||||
|
func ToProtoMonth(m time.Month) mpb.Month {
|
||||||
|
return mpb.Month(m)
|
||||||
|
}
|
||||||
|
|
@ -267,6 +267,9 @@ func (c *config) init() {
|
||||||
matchHost = true
|
matchHost = true
|
||||||
phost = "." + phost
|
phost = "." + phost
|
||||||
}
|
}
|
||||||
|
if v, err := idnaASCII(phost); err == nil {
|
||||||
|
phost = v
|
||||||
|
}
|
||||||
c.domainMatchers = append(c.domainMatchers, domainMatch{host: phost, port: pport, matchHost: matchHost})
|
c.domainMatchers = append(c.domainMatchers, domainMatch{host: phost, port: pport, matchHost: matchHost})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
// 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 go1.18
|
||||||
|
// +build go1.18
|
||||||
|
|
||||||
|
package http2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/tls"
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
func tlsUnderlyingConn(tc *tls.Conn) net.Conn {
|
||||||
|
return tc.NetConn()
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
// 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 !go1.18
|
||||||
|
// +build !go1.18
|
||||||
|
|
||||||
|
package http2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/tls"
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
func tlsUnderlyingConn(tc *tls.Conn) net.Conn {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
@ -735,7 +735,6 @@ func (cc *ClientConn) healthCheck() {
|
||||||
err := cc.Ping(ctx)
|
err := cc.Ping(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cc.closeForLostPing()
|
cc.closeForLostPing()
|
||||||
cc.t.connPool().MarkDead(cc)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -907,6 +906,24 @@ func (cc *ClientConn) onIdleTimeout() {
|
||||||
cc.closeIfIdle()
|
cc.closeIfIdle()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cc *ClientConn) closeConn() error {
|
||||||
|
t := time.AfterFunc(250*time.Millisecond, cc.forceCloseConn)
|
||||||
|
defer t.Stop()
|
||||||
|
return cc.tconn.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
// A tls.Conn.Close can hang for a long time if the peer is unresponsive.
|
||||||
|
// Try to shut it down more aggressively.
|
||||||
|
func (cc *ClientConn) forceCloseConn() {
|
||||||
|
tc, ok := cc.tconn.(*tls.Conn)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if nc := tlsUnderlyingConn(tc); nc != nil {
|
||||||
|
nc.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (cc *ClientConn) closeIfIdle() {
|
func (cc *ClientConn) closeIfIdle() {
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
if len(cc.streams) > 0 || cc.streamsReserved > 0 {
|
if len(cc.streams) > 0 || cc.streamsReserved > 0 {
|
||||||
|
|
@ -921,7 +938,7 @@ func (cc *ClientConn) closeIfIdle() {
|
||||||
if VerboseLogs {
|
if VerboseLogs {
|
||||||
cc.vlogf("http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)", cc, cc.singleUse, nextID-2)
|
cc.vlogf("http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)", cc, cc.singleUse, nextID-2)
|
||||||
}
|
}
|
||||||
cc.tconn.Close()
|
cc.closeConn()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cc *ClientConn) isDoNotReuseAndIdle() bool {
|
func (cc *ClientConn) isDoNotReuseAndIdle() bool {
|
||||||
|
|
@ -938,7 +955,7 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// Wait for all in-flight streams to complete or connection to close
|
// Wait for all in-flight streams to complete or connection to close
|
||||||
done := make(chan error, 1)
|
done := make(chan struct{})
|
||||||
cancelled := false // guarded by cc.mu
|
cancelled := false // guarded by cc.mu
|
||||||
go func() {
|
go func() {
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
|
|
@ -946,7 +963,7 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error {
|
||||||
for {
|
for {
|
||||||
if len(cc.streams) == 0 || cc.closed {
|
if len(cc.streams) == 0 || cc.closed {
|
||||||
cc.closed = true
|
cc.closed = true
|
||||||
done <- cc.tconn.Close()
|
close(done)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if cancelled {
|
if cancelled {
|
||||||
|
|
@ -957,8 +974,8 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error {
|
||||||
}()
|
}()
|
||||||
shutdownEnterWaitStateHook()
|
shutdownEnterWaitStateHook()
|
||||||
select {
|
select {
|
||||||
case err := <-done:
|
case <-done:
|
||||||
return err
|
return cc.closeConn()
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
cc.mu.Lock()
|
cc.mu.Lock()
|
||||||
// Free the goroutine above
|
// Free the goroutine above
|
||||||
|
|
@ -1001,9 +1018,9 @@ func (cc *ClientConn) closeForError(err error) error {
|
||||||
for _, cs := range cc.streams {
|
for _, cs := range cc.streams {
|
||||||
cs.abortStreamLocked(err)
|
cs.abortStreamLocked(err)
|
||||||
}
|
}
|
||||||
defer cc.cond.Broadcast()
|
cc.cond.Broadcast()
|
||||||
defer cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
return cc.tconn.Close()
|
return cc.closeConn()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close closes the client connection immediately.
|
// Close closes the client connection immediately.
|
||||||
|
|
@ -1978,7 +1995,7 @@ func (cc *ClientConn) forgetStreamID(id uint32) {
|
||||||
cc.vlogf("http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)", cc, cc.singleUse, cc.nextStreamID-2)
|
cc.vlogf("http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)", cc, cc.singleUse, cc.nextStreamID-2)
|
||||||
}
|
}
|
||||||
cc.closed = true
|
cc.closed = true
|
||||||
defer cc.tconn.Close()
|
defer cc.closeConn()
|
||||||
}
|
}
|
||||||
|
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
|
|
@ -2025,8 +2042,8 @@ func isEOFOrNetReadError(err error) bool {
|
||||||
|
|
||||||
func (rl *clientConnReadLoop) cleanup() {
|
func (rl *clientConnReadLoop) cleanup() {
|
||||||
cc := rl.cc
|
cc := rl.cc
|
||||||
defer cc.tconn.Close()
|
cc.t.connPool().MarkDead(cc)
|
||||||
defer cc.t.connPool().MarkDead(cc)
|
defer cc.closeConn()
|
||||||
defer close(cc.readerDone)
|
defer close(cc.readerDone)
|
||||||
|
|
||||||
if cc.idleTimer != nil {
|
if cc.idleTimer != nil {
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,13 @@ const (
|
||||||
// The AWS authorization header name for the security session token if available.
|
// The AWS authorization header name for the security session token if available.
|
||||||
awsSecurityTokenHeader = "x-amz-security-token"
|
awsSecurityTokenHeader = "x-amz-security-token"
|
||||||
|
|
||||||
|
// The name of the header containing the session token for metadata endpoint calls
|
||||||
|
awsIMDSv2SessionTokenHeader = "X-aws-ec2-metadata-token"
|
||||||
|
|
||||||
|
awsIMDSv2SessionTtlHeader = "X-aws-ec2-metadata-token-ttl-seconds"
|
||||||
|
|
||||||
|
awsIMDSv2SessionTtl = "300"
|
||||||
|
|
||||||
// The AWS authorization header name for the auto-generated date.
|
// The AWS authorization header name for the auto-generated date.
|
||||||
awsDateHeader = "x-amz-date"
|
awsDateHeader = "x-amz-date"
|
||||||
|
|
||||||
|
|
@ -241,6 +248,7 @@ type awsCredentialSource struct {
|
||||||
RegionURL string
|
RegionURL string
|
||||||
RegionalCredVerificationURL string
|
RegionalCredVerificationURL string
|
||||||
CredVerificationURL string
|
CredVerificationURL string
|
||||||
|
IMDSv2SessionTokenURL string
|
||||||
TargetResource string
|
TargetResource string
|
||||||
requestSigner *awsRequestSigner
|
requestSigner *awsRequestSigner
|
||||||
region string
|
region string
|
||||||
|
|
@ -268,12 +276,22 @@ func (cs awsCredentialSource) doRequest(req *http.Request) (*http.Response, erro
|
||||||
|
|
||||||
func (cs awsCredentialSource) subjectToken() (string, error) {
|
func (cs awsCredentialSource) subjectToken() (string, error) {
|
||||||
if cs.requestSigner == nil {
|
if cs.requestSigner == nil {
|
||||||
awsSecurityCredentials, err := cs.getSecurityCredentials()
|
awsSessionToken, err := cs.getAWSSessionToken()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
if cs.region, err = cs.getRegion(); err != nil {
|
headers := make(map[string]string)
|
||||||
|
if awsSessionToken != "" {
|
||||||
|
headers[awsIMDSv2SessionTokenHeader] = awsSessionToken
|
||||||
|
}
|
||||||
|
|
||||||
|
awsSecurityCredentials, err := cs.getSecurityCredentials(headers)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if cs.region, err = cs.getRegion(headers); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -340,7 +358,37 @@ func (cs awsCredentialSource) subjectToken() (string, error) {
|
||||||
return url.QueryEscape(string(result)), nil
|
return url.QueryEscape(string(result)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cs *awsCredentialSource) getRegion() (string, error) {
|
func (cs *awsCredentialSource) getAWSSessionToken() (string, error) {
|
||||||
|
if cs.IMDSv2SessionTokenURL == "" {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := http.NewRequest("PUT", cs.IMDSv2SessionTokenURL, nil)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Add(awsIMDSv2SessionTtlHeader, awsIMDSv2SessionTtl)
|
||||||
|
|
||||||
|
resp, err := cs.doRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
respBody, err := ioutil.ReadAll(io.LimitReader(resp.Body, 1<<20))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != 200 {
|
||||||
|
return "", fmt.Errorf("oauth2/google: unable to retrieve AWS session token - %s", string(respBody))
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(respBody), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cs *awsCredentialSource) getRegion(headers map[string]string) (string, error) {
|
||||||
if envAwsRegion := getenv("AWS_REGION"); envAwsRegion != "" {
|
if envAwsRegion := getenv("AWS_REGION"); envAwsRegion != "" {
|
||||||
return envAwsRegion, nil
|
return envAwsRegion, nil
|
||||||
}
|
}
|
||||||
|
|
@ -357,6 +405,10 @@ func (cs *awsCredentialSource) getRegion() (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for name, value := range headers {
|
||||||
|
req.Header.Add(name, value)
|
||||||
|
}
|
||||||
|
|
||||||
resp, err := cs.doRequest(req)
|
resp, err := cs.doRequest(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
|
@ -381,7 +433,7 @@ func (cs *awsCredentialSource) getRegion() (string, error) {
|
||||||
return string(respBody[:respBodyEnd]), nil
|
return string(respBody[:respBodyEnd]), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cs *awsCredentialSource) getSecurityCredentials() (result awsSecurityCredentials, err error) {
|
func (cs *awsCredentialSource) getSecurityCredentials(headers map[string]string) (result awsSecurityCredentials, err error) {
|
||||||
if accessKeyID := getenv("AWS_ACCESS_KEY_ID"); accessKeyID != "" {
|
if accessKeyID := getenv("AWS_ACCESS_KEY_ID"); accessKeyID != "" {
|
||||||
if secretAccessKey := getenv("AWS_SECRET_ACCESS_KEY"); secretAccessKey != "" {
|
if secretAccessKey := getenv("AWS_SECRET_ACCESS_KEY"); secretAccessKey != "" {
|
||||||
return awsSecurityCredentials{
|
return awsSecurityCredentials{
|
||||||
|
|
@ -392,12 +444,12 @@ func (cs *awsCredentialSource) getSecurityCredentials() (result awsSecurityCrede
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
roleName, err := cs.getMetadataRoleName()
|
roleName, err := cs.getMetadataRoleName(headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
credentials, err := cs.getMetadataSecurityCredentials(roleName)
|
credentials, err := cs.getMetadataSecurityCredentials(roleName, headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -413,7 +465,7 @@ func (cs *awsCredentialSource) getSecurityCredentials() (result awsSecurityCrede
|
||||||
return credentials, nil
|
return credentials, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cs *awsCredentialSource) getMetadataSecurityCredentials(roleName string) (awsSecurityCredentials, error) {
|
func (cs *awsCredentialSource) getMetadataSecurityCredentials(roleName string, headers map[string]string) (awsSecurityCredentials, error) {
|
||||||
var result awsSecurityCredentials
|
var result awsSecurityCredentials
|
||||||
|
|
||||||
req, err := http.NewRequest("GET", fmt.Sprintf("%s/%s", cs.CredVerificationURL, roleName), nil)
|
req, err := http.NewRequest("GET", fmt.Sprintf("%s/%s", cs.CredVerificationURL, roleName), nil)
|
||||||
|
|
@ -422,6 +474,10 @@ func (cs *awsCredentialSource) getMetadataSecurityCredentials(roleName string) (
|
||||||
}
|
}
|
||||||
req.Header.Add("Content-Type", "application/json")
|
req.Header.Add("Content-Type", "application/json")
|
||||||
|
|
||||||
|
for name, value := range headers {
|
||||||
|
req.Header.Add(name, value)
|
||||||
|
}
|
||||||
|
|
||||||
resp, err := cs.doRequest(req)
|
resp, err := cs.doRequest(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, err
|
return result, err
|
||||||
|
|
@ -441,7 +497,7 @@ func (cs *awsCredentialSource) getMetadataSecurityCredentials(roleName string) (
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cs *awsCredentialSource) getMetadataRoleName() (string, error) {
|
func (cs *awsCredentialSource) getMetadataRoleName(headers map[string]string) (string, error) {
|
||||||
if cs.CredVerificationURL == "" {
|
if cs.CredVerificationURL == "" {
|
||||||
return "", errors.New("oauth2/google: unable to determine the AWS metadata server security credentials endpoint")
|
return "", errors.New("oauth2/google: unable to determine the AWS metadata server security credentials endpoint")
|
||||||
}
|
}
|
||||||
|
|
@ -451,6 +507,10 @@ func (cs *awsCredentialSource) getMetadataRoleName() (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for name, value := range headers {
|
||||||
|
req.Header.Add(name, value)
|
||||||
|
}
|
||||||
|
|
||||||
resp, err := cs.doRequest(req)
|
resp, err := cs.doRequest(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
|
|
||||||
|
|
@ -175,6 +175,7 @@ type CredentialSource struct {
|
||||||
RegionURL string `json:"region_url"`
|
RegionURL string `json:"region_url"`
|
||||||
RegionalCredVerificationURL string `json:"regional_cred_verification_url"`
|
RegionalCredVerificationURL string `json:"regional_cred_verification_url"`
|
||||||
CredVerificationURL string `json:"cred_verification_url"`
|
CredVerificationURL string `json:"cred_verification_url"`
|
||||||
|
IMDSv2SessionTokenURL string `json:"imdsv2_session_token_url"`
|
||||||
Format format `json:"format"`
|
Format format `json:"format"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -185,14 +186,20 @@ func (c *Config) parse(ctx context.Context) (baseCredentialSource, error) {
|
||||||
if awsVersion != 1 {
|
if awsVersion != 1 {
|
||||||
return nil, fmt.Errorf("oauth2/google: aws version '%d' is not supported in the current build", awsVersion)
|
return nil, fmt.Errorf("oauth2/google: aws version '%d' is not supported in the current build", awsVersion)
|
||||||
}
|
}
|
||||||
return awsCredentialSource{
|
|
||||||
|
awsCredSource := awsCredentialSource{
|
||||||
EnvironmentID: c.CredentialSource.EnvironmentID,
|
EnvironmentID: c.CredentialSource.EnvironmentID,
|
||||||
RegionURL: c.CredentialSource.RegionURL,
|
RegionURL: c.CredentialSource.RegionURL,
|
||||||
RegionalCredVerificationURL: c.CredentialSource.RegionalCredVerificationURL,
|
RegionalCredVerificationURL: c.CredentialSource.RegionalCredVerificationURL,
|
||||||
CredVerificationURL: c.CredentialSource.URL,
|
CredVerificationURL: c.CredentialSource.URL,
|
||||||
TargetResource: c.Audience,
|
TargetResource: c.Audience,
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
}, nil
|
}
|
||||||
|
if c.CredentialSource.IMDSv2SessionTokenURL != "" {
|
||||||
|
awsCredSource.IMDSv2SessionTokenURL = c.CredentialSource.IMDSv2SessionTokenURL
|
||||||
|
}
|
||||||
|
|
||||||
|
return awsCredSource, nil
|
||||||
}
|
}
|
||||||
} else if c.CredentialSource.File != "" {
|
} else if c.CredentialSource.File != "" {
|
||||||
return fileCredentialSource{File: c.CredentialSource.File, Format: c.CredentialSource.Format}, nil
|
return fileCredentialSource{File: c.CredentialSource.File, Format: c.CredentialSource.Format}, nil
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
// Recreate a getsystemcfg syscall handler instead of
|
// Recreate a getsystemcfg syscall handler instead of
|
||||||
// using the one provided by x/sys/unix to avoid having
|
// using the one provided by x/sys/unix to avoid having
|
||||||
// the dependency between them. (See golang.org/issue/32102)
|
// the dependency between them. (See golang.org/issue/32102)
|
||||||
// Morever, this file will be used during the building of
|
// Moreover, this file will be used during the building of
|
||||||
// gccgo's libgo and thus must not used a CGo method.
|
// gccgo's libgo and thus must not used a CGo method.
|
||||||
|
|
||||||
//go:build aix && gccgo
|
//go:build aix && gccgo
|
||||||
|
|
|
||||||
|
|
@ -603,6 +603,7 @@ ccflags="$@"
|
||||||
$2 ~ /^ITIMER_/ ||
|
$2 ~ /^ITIMER_/ ||
|
||||||
$2 !~ "WMESGLEN" &&
|
$2 !~ "WMESGLEN" &&
|
||||||
$2 ~ /^W[A-Z0-9]+$/ ||
|
$2 ~ /^W[A-Z0-9]+$/ ||
|
||||||
|
$2 ~ /^P_/ ||
|
||||||
$2 ~/^PPPIOC/ ||
|
$2 ~/^PPPIOC/ ||
|
||||||
$2 ~ /^FAN_|FANOTIFY_/ ||
|
$2 ~ /^FAN_|FANOTIFY_/ ||
|
||||||
$2 == "HID_MAX_DESCRIPTOR_SIZE" ||
|
$2 == "HID_MAX_DESCRIPTOR_SIZE" ||
|
||||||
|
|
|
||||||
|
|
@ -215,18 +215,12 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
|
||||||
// Recvmsg not implemented on AIX
|
// Recvmsg not implemented on AIX
|
||||||
sa := new(SockaddrUnix)
|
return -1, -1, -1, ENOSYS
|
||||||
return -1, -1, -1, sa, ENOSYS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
|
func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
|
||||||
_, err = SendmsgN(fd, p, oob, to, flags)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
|
|
||||||
// SendmsgN not implemented on AIX
|
// SendmsgN not implemented on AIX
|
||||||
return -1, ENOSYS
|
return -1, ENOSYS
|
||||||
}
|
}
|
||||||
|
|
@ -458,8 +452,8 @@ func Fsync(fd int) error {
|
||||||
//sys Listen(s int, n int) (err error)
|
//sys Listen(s int, n int) (err error)
|
||||||
//sys lstat(path string, stat *Stat_t) (err error)
|
//sys lstat(path string, stat *Stat_t) (err error)
|
||||||
//sys Pause() (err error)
|
//sys Pause() (err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = pread64
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = pread64
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64
|
||||||
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
|
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
|
||||||
//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
|
//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
|
||||||
//sysnb Setregid(rgid int, egid int) (err error)
|
//sysnb Setregid(rgid int, egid int) (err error)
|
||||||
|
|
|
||||||
|
|
@ -325,10 +325,9 @@ func GetsockoptString(fd, level, opt int) (string, error) {
|
||||||
//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
|
//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
|
//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
|
||||||
|
|
||||||
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
|
||||||
var msg Msghdr
|
var msg Msghdr
|
||||||
var rsa RawSockaddrAny
|
msg.Name = (*byte)(unsafe.Pointer(rsa))
|
||||||
msg.Name = (*byte)(unsafe.Pointer(&rsa))
|
|
||||||
msg.Namelen = uint32(SizeofSockaddrAny)
|
msg.Namelen = uint32(SizeofSockaddrAny)
|
||||||
var iov Iovec
|
var iov Iovec
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
|
|
@ -352,29 +351,12 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
|
||||||
}
|
}
|
||||||
oobn = int(msg.Controllen)
|
oobn = int(msg.Controllen)
|
||||||
recvflags = int(msg.Flags)
|
recvflags = int(msg.Flags)
|
||||||
// source address is only specified if the socket is unconnected
|
|
||||||
if rsa.Addr.Family != AF_UNSPEC {
|
|
||||||
from, err = anyToSockaddr(fd, &rsa)
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
|
//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
|
||||||
|
|
||||||
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
|
func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
|
||||||
_, err = SendmsgN(fd, p, oob, to, flags)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
|
|
||||||
var ptr unsafe.Pointer
|
|
||||||
var salen _Socklen
|
|
||||||
if to != nil {
|
|
||||||
ptr, salen, err = to.sockaddr()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var msg Msghdr
|
var msg Msghdr
|
||||||
msg.Name = (*byte)(unsafe.Pointer(ptr))
|
msg.Name = (*byte)(unsafe.Pointer(ptr))
|
||||||
msg.Namelen = uint32(salen)
|
msg.Namelen = uint32(salen)
|
||||||
|
|
@ -571,12 +553,7 @@ func UtimesNano(path string, ts []Timespec) error {
|
||||||
if len(ts) != 2 {
|
if len(ts) != 2 {
|
||||||
return EINVAL
|
return EINVAL
|
||||||
}
|
}
|
||||||
// Darwin setattrlist can set nanosecond timestamps
|
err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
|
||||||
err := setattrlistTimes(path, ts, 0)
|
|
||||||
if err != ENOSYS {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
err = utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
|
|
||||||
if err != ENOSYS {
|
if err != ENOSYS {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -596,10 +573,6 @@ func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
|
||||||
if len(ts) != 2 {
|
if len(ts) != 2 {
|
||||||
return EINVAL
|
return EINVAL
|
||||||
}
|
}
|
||||||
err := setattrlistTimes(path, ts, flags)
|
|
||||||
if err != ENOSYS {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
|
return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,16 +141,6 @@ func direntNamlen(buf []byte) (uint64, bool) {
|
||||||
func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }
|
func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }
|
||||||
func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }
|
func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }
|
||||||
|
|
||||||
type attrList struct {
|
|
||||||
bitmapCount uint16
|
|
||||||
_ uint16
|
|
||||||
CommonAttr uint32
|
|
||||||
VolAttr uint32
|
|
||||||
DirAttr uint32
|
|
||||||
FileAttr uint32
|
|
||||||
Forkattr uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
//sysnb pipe(p *[2]int32) (err error)
|
//sysnb pipe(p *[2]int32) (err error)
|
||||||
|
|
||||||
func Pipe(p []int) (err error) {
|
func Pipe(p []int) (err error) {
|
||||||
|
|
@ -282,36 +272,7 @@ func Flistxattr(fd int, dest []byte) (sz int, err error) {
|
||||||
return flistxattr(fd, xattrPointer(dest), len(dest), 0)
|
return flistxattr(fd, xattrPointer(dest), len(dest), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func setattrlistTimes(path string, times []Timespec, flags int) error {
|
//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)
|
||||||
_p0, err := BytePtrFromString(path)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
var attrList attrList
|
|
||||||
attrList.bitmapCount = ATTR_BIT_MAP_COUNT
|
|
||||||
attrList.CommonAttr = ATTR_CMN_MODTIME | ATTR_CMN_ACCTIME
|
|
||||||
|
|
||||||
// order is mtime, atime: the opposite of Chtimes
|
|
||||||
attributes := [2]Timespec{times[1], times[0]}
|
|
||||||
options := 0
|
|
||||||
if flags&AT_SYMLINK_NOFOLLOW != 0 {
|
|
||||||
options |= FSOPT_NOFOLLOW
|
|
||||||
}
|
|
||||||
return setattrlist(
|
|
||||||
_p0,
|
|
||||||
unsafe.Pointer(&attrList),
|
|
||||||
unsafe.Pointer(&attributes),
|
|
||||||
unsafe.Sizeof(attributes),
|
|
||||||
options)
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)
|
|
||||||
|
|
||||||
func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error {
|
|
||||||
// Darwin doesn't support SYS_UTIMENSAT
|
|
||||||
return ENOSYS
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wrapped
|
* Wrapped
|
||||||
|
|
@ -546,8 +507,8 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) {
|
||||||
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
||||||
//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
|
//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
|
||||||
//sys Pathconf(path string, name int) (val int, err error)
|
//sys Pathconf(path string, name int) (val int, err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error)
|
//sys pread(fd int, p []byte, offset int64) (n int, err error)
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error)
|
||||||
//sys read(fd int, p []byte) (n int, err error)
|
//sys read(fd int, p []byte) (n int, err error)
|
||||||
//sys Readlink(path string, buf []byte) (n int, err error)
|
//sys Readlink(path string, buf []byte) (n int, err error)
|
||||||
//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
|
//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
|
||||||
|
|
|
||||||
|
|
@ -125,12 +125,12 @@ func Pipe2(p []int, flags int) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error)
|
//sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error)
|
||||||
func Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
return extpread(fd, p, 0, offset)
|
return extpread(fd, p, 0, offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error)
|
//sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error)
|
||||||
func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
return extpwrite(fd, p, 0, offset)
|
return extpwrite(fd, p, 0, offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -169,11 +169,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func setattrlistTimes(path string, times []Timespec, flags int) error {
|
|
||||||
// used on Darwin for UtimesNano
|
|
||||||
return ENOSYS
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
||||||
|
|
||||||
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
||||||
|
|
|
||||||
|
|
@ -194,11 +194,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func setattrlistTimes(path string, times []Timespec, flags int) error {
|
|
||||||
// used on Darwin for UtimesNano
|
|
||||||
return ENOSYS
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
||||||
|
|
||||||
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
||||||
|
|
@ -638,8 +633,8 @@ func PtraceSingleStep(pid int) (err error) {
|
||||||
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
||||||
//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error)
|
//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error)
|
||||||
//sys Pathconf(path string, name int) (val int, err error)
|
//sys Pathconf(path string, name int) (val int, err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error)
|
//sys pread(fd int, p []byte, offset int64) (n int, err error)
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error)
|
||||||
//sys read(fd int, p []byte) (n int, err error)
|
//sys read(fd int, p []byte) (n int, err error)
|
||||||
//sys Readlink(path string, buf []byte) (n int, err error)
|
//sys Readlink(path string, buf []byte) (n int, err error)
|
||||||
//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
|
//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
|
||||||
|
|
|
||||||
|
|
@ -366,6 +366,8 @@ func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int,
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//sys Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error)
|
||||||
|
|
||||||
func Mkfifo(path string, mode uint32) error {
|
func Mkfifo(path string, mode uint32) error {
|
||||||
return Mknod(path, mode|S_IFIFO, 0)
|
return Mknod(path, mode|S_IFIFO, 0)
|
||||||
}
|
}
|
||||||
|
|
@ -1497,10 +1499,9 @@ func KeyctlRestrictKeyring(ringid int, keyType string, restriction string) error
|
||||||
//sys keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL
|
//sys keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL
|
||||||
//sys keyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL
|
//sys keyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL
|
||||||
|
|
||||||
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
|
||||||
var msg Msghdr
|
var msg Msghdr
|
||||||
var rsa RawSockaddrAny
|
msg.Name = (*byte)(unsafe.Pointer(rsa))
|
||||||
msg.Name = (*byte)(unsafe.Pointer(&rsa))
|
|
||||||
msg.Namelen = uint32(SizeofSockaddrAny)
|
msg.Namelen = uint32(SizeofSockaddrAny)
|
||||||
var iov Iovec
|
var iov Iovec
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
|
|
@ -1531,28 +1532,10 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
|
||||||
}
|
}
|
||||||
oobn = int(msg.Controllen)
|
oobn = int(msg.Controllen)
|
||||||
recvflags = int(msg.Flags)
|
recvflags = int(msg.Flags)
|
||||||
// source address is only specified if the socket is unconnected
|
|
||||||
if rsa.Addr.Family != AF_UNSPEC {
|
|
||||||
from, err = anyToSockaddr(fd, &rsa)
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
|
func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
|
||||||
_, err = SendmsgN(fd, p, oob, to, flags)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
|
|
||||||
var ptr unsafe.Pointer
|
|
||||||
var salen _Socklen
|
|
||||||
if to != nil {
|
|
||||||
var err error
|
|
||||||
ptr, salen, err = to.sockaddr()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var msg Msghdr
|
var msg Msghdr
|
||||||
msg.Name = (*byte)(ptr)
|
msg.Name = (*byte)(ptr)
|
||||||
msg.Namelen = uint32(salen)
|
msg.Namelen = uint32(salen)
|
||||||
|
|
@ -2316,6 +2299,7 @@ type RemoteIovec struct {
|
||||||
|
|
||||||
//sys PidfdOpen(pid int, flags int) (fd int, err error) = SYS_PIDFD_OPEN
|
//sys PidfdOpen(pid int, flags int) (fd int, err error) = SYS_PIDFD_OPEN
|
||||||
//sys PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) = SYS_PIDFD_GETFD
|
//sys PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) = SYS_PIDFD_GETFD
|
||||||
|
//sys PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) = SYS_PIDFD_SEND_SIGNAL
|
||||||
|
|
||||||
//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error)
|
//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error)
|
||||||
//sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error)
|
//sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error)
|
||||||
|
|
@ -2464,5 +2448,4 @@ func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) {
|
||||||
// Vfork
|
// Vfork
|
||||||
// Vhangup
|
// Vhangup
|
||||||
// Vserver
|
// Vserver
|
||||||
// Waitid
|
|
||||||
// _Sysctl
|
// _Sysctl
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,8 @@ func setTimeval(sec, usec int64) Timeval {
|
||||||
//sys Iopl(level int) (err error)
|
//sys Iopl(level int) (err error)
|
||||||
//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32
|
//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
|
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
||||||
//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
|
//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ func Lstat(path string, stat *Stat_t) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys Pause() (err error)
|
//sys Pause() (err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,8 +96,8 @@ func Utime(path string, buf *Utimbuf) error {
|
||||||
|
|
||||||
//sys utimes(path string, times *[2]Timeval) (err error)
|
//sys utimes(path string, times *[2]Timeval) (err error)
|
||||||
|
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
|
//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
|
||||||
//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
|
//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ import "unsafe"
|
||||||
//sysnb getrlimit(resource int, rlim *Rlimit) (err error)
|
//sysnb getrlimit(resource int, rlim *Rlimit) (err error)
|
||||||
//sysnb Getuid() (uid int)
|
//sysnb Getuid() (uid int)
|
||||||
//sys Listen(s int, n int) (err error)
|
//sys Listen(s int, n int) (err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,8 @@ package unix
|
||||||
//sys Lchown(path string, uid int, gid int) (err error)
|
//sys Lchown(path string, uid int, gid int) (err error)
|
||||||
//sys Listen(s int, n int) (err error)
|
//sys Listen(s int, n int) (err error)
|
||||||
//sys Pause() (err error)
|
//sys Pause() (err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,8 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
|
||||||
//sysnb Getuid() (uid int)
|
//sysnb Getuid() (uid int)
|
||||||
//sys Lchown(path string, uid int, gid int) (err error)
|
//sys Lchown(path string, uid int, gid int) (err error)
|
||||||
//sys Listen(s int, n int) (err error)
|
//sys Listen(s int, n int) (err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,8 @@ import (
|
||||||
//sys Listen(s int, n int) (err error)
|
//sys Listen(s int, n int) (err error)
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
|
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
|
||||||
//sys Pause() (err error)
|
//sys Pause() (err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
||||||
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,8 @@ package unix
|
||||||
//sys Listen(s int, n int) (err error)
|
//sys Listen(s int, n int) (err error)
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error)
|
//sys Lstat(path string, stat *Stat_t) (err error)
|
||||||
//sys Pause() (err error)
|
//sys Pause() (err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
||||||
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ import "unsafe"
|
||||||
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
|
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
|
||||||
//sysnb Getuid() (uid int)
|
//sysnb Getuid() (uid int)
|
||||||
//sys Listen(s int, n int) (err error)
|
//sys Listen(s int, n int) (err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
||||||
|
|
||||||
func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
|
func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,8 @@ import (
|
||||||
//sys Lchown(path string, uid int, gid int) (err error)
|
//sys Lchown(path string, uid int, gid int) (err error)
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error)
|
//sys Lstat(path string, stat *Stat_t) (err error)
|
||||||
//sys Pause() (err error)
|
//sys Pause() (err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
||||||
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
|
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,8 @@ package unix
|
||||||
//sys Listen(s int, n int) (err error)
|
//sys Listen(s int, n int) (err error)
|
||||||
//sys Lstat(path string, stat *Stat_t) (err error)
|
//sys Lstat(path string, stat *Stat_t) (err error)
|
||||||
//sys Pause() (err error)
|
//sys Pause() (err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
|
||||||
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
||||||
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
|
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
|
||||||
|
|
|
||||||
|
|
@ -163,11 +163,6 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
||||||
return -1, ENOSYS
|
return -1, ENOSYS
|
||||||
}
|
}
|
||||||
|
|
||||||
func setattrlistTimes(path string, times []Timespec, flags int) error {
|
|
||||||
// used on Darwin for UtimesNano
|
|
||||||
return ENOSYS
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
||||||
|
|
||||||
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
||||||
|
|
@ -313,8 +308,8 @@ func Statvfs(path string, buf *Statvfs_t) (err error) {
|
||||||
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
||||||
//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
|
//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
|
||||||
//sys Pathconf(path string, name int) (val int, err error)
|
//sys Pathconf(path string, name int) (val int, err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error)
|
//sys pread(fd int, p []byte, offset int64) (n int, err error)
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error)
|
||||||
//sys read(fd int, p []byte) (n int, err error)
|
//sys read(fd int, p []byte) (n int, err error)
|
||||||
//sys Readlink(path string, buf []byte) (n int, err error)
|
//sys Readlink(path string, buf []byte) (n int, err error)
|
||||||
//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
|
//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
|
||||||
|
|
|
||||||
|
|
@ -149,11 +149,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func setattrlistTimes(path string, times []Timespec, flags int) error {
|
|
||||||
// used on Darwin for UtimesNano
|
|
||||||
return ENOSYS
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
||||||
|
|
||||||
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
||||||
|
|
@ -274,8 +269,8 @@ func Uname(uname *Utsname) error {
|
||||||
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
||||||
//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
|
//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
|
||||||
//sys Pathconf(path string, name int) (val int, err error)
|
//sys Pathconf(path string, name int) (val int, err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error)
|
//sys pread(fd int, p []byte, offset int64) (n int, err error)
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error)
|
||||||
//sys read(fd int, p []byte) (n int, err error)
|
//sys read(fd int, p []byte) (n int, err error)
|
||||||
//sys Readlink(path string, buf []byte) (n int, err error)
|
//sys Readlink(path string, buf []byte) (n int, err error)
|
||||||
//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
|
//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
|
||||||
|
|
|
||||||
|
|
@ -451,10 +451,9 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
|
||||||
|
|
||||||
//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg
|
//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg
|
||||||
|
|
||||||
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
|
||||||
var msg Msghdr
|
var msg Msghdr
|
||||||
var rsa RawSockaddrAny
|
msg.Name = (*byte)(unsafe.Pointer(rsa))
|
||||||
msg.Name = (*byte)(unsafe.Pointer(&rsa))
|
|
||||||
msg.Namelen = uint32(SizeofSockaddrAny)
|
msg.Namelen = uint32(SizeofSockaddrAny)
|
||||||
var iov Iovec
|
var iov Iovec
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
|
|
@ -476,29 +475,12 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
oobn = int(msg.Accrightslen)
|
oobn = int(msg.Accrightslen)
|
||||||
// source address is only specified if the socket is unconnected
|
|
||||||
if rsa.Addr.Family != AF_UNSPEC {
|
|
||||||
from, err = anyToSockaddr(fd, &rsa)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
|
|
||||||
_, err = SendmsgN(fd, p, oob, to, flags)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg
|
//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg
|
||||||
|
|
||||||
func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
|
func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
|
||||||
var ptr unsafe.Pointer
|
|
||||||
var salen _Socklen
|
|
||||||
if to != nil {
|
|
||||||
ptr, salen, err = to.sockaddr()
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var msg Msghdr
|
var msg Msghdr
|
||||||
msg.Name = (*byte)(unsafe.Pointer(ptr))
|
msg.Name = (*byte)(unsafe.Pointer(ptr))
|
||||||
msg.Namelen = uint32(salen)
|
msg.Namelen = uint32(salen)
|
||||||
|
|
@ -661,8 +643,8 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
||||||
//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
|
//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
|
||||||
//sys Pathconf(path string, name int) (val int, err error)
|
//sys Pathconf(path string, name int) (val int, err error)
|
||||||
//sys Pause() (err error)
|
//sys Pause() (err error)
|
||||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error)
|
//sys pread(fd int, p []byte, offset int64) (n int, err error)
|
||||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error)
|
||||||
//sys read(fd int, p []byte) (n int, err error)
|
//sys read(fd int, p []byte) (n int, err error)
|
||||||
//sys Readlink(path string, buf []byte) (n int, err error)
|
//sys Readlink(path string, buf []byte) (n int, err error)
|
||||||
//sys Rename(from string, to string) (err error)
|
//sys Rename(from string, to string) (err error)
|
||||||
|
|
@ -755,8 +737,20 @@ type fileObjCookie struct {
|
||||||
type EventPort struct {
|
type EventPort struct {
|
||||||
port int
|
port int
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
fds map[uintptr]interface{}
|
fds map[uintptr]*fileObjCookie
|
||||||
paths map[string]*fileObjCookie
|
paths map[string]*fileObjCookie
|
||||||
|
// The user cookie presents an interesting challenge from a memory management perspective.
|
||||||
|
// There are two paths by which we can discover that it is no longer in use:
|
||||||
|
// 1. The user calls port_dissociate before any events fire
|
||||||
|
// 2. An event fires and we return it to the user
|
||||||
|
// The tricky situation is if the event has fired in the kernel but
|
||||||
|
// the user hasn't requested/received it yet.
|
||||||
|
// If the user wants to port_dissociate before the event has been processed,
|
||||||
|
// we should handle things gracefully. To do so, we need to keep an extra
|
||||||
|
// reference to the cookie around until the event is processed
|
||||||
|
// thus the otherwise seemingly extraneous "cookies" map
|
||||||
|
// The key of this map is a pointer to the corresponding &fCookie.cookie
|
||||||
|
cookies map[*interface{}]*fileObjCookie
|
||||||
}
|
}
|
||||||
|
|
||||||
// PortEvent is an abstraction of the port_event C struct.
|
// PortEvent is an abstraction of the port_event C struct.
|
||||||
|
|
@ -780,9 +774,10 @@ func NewEventPort() (*EventPort, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
e := &EventPort{
|
e := &EventPort{
|
||||||
port: port,
|
port: port,
|
||||||
fds: make(map[uintptr]interface{}),
|
fds: make(map[uintptr]*fileObjCookie),
|
||||||
paths: make(map[string]*fileObjCookie),
|
paths: make(map[string]*fileObjCookie),
|
||||||
|
cookies: make(map[*interface{}]*fileObjCookie),
|
||||||
}
|
}
|
||||||
return e, nil
|
return e, nil
|
||||||
}
|
}
|
||||||
|
|
@ -797,9 +792,13 @@ func NewEventPort() (*EventPort, error) {
|
||||||
func (e *EventPort) Close() error {
|
func (e *EventPort) Close() error {
|
||||||
e.mu.Lock()
|
e.mu.Lock()
|
||||||
defer e.mu.Unlock()
|
defer e.mu.Unlock()
|
||||||
|
err := Close(e.port)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
e.fds = nil
|
e.fds = nil
|
||||||
e.paths = nil
|
e.paths = nil
|
||||||
return Close(e.port)
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// PathIsWatched checks to see if path is associated with this EventPort.
|
// PathIsWatched checks to see if path is associated with this EventPort.
|
||||||
|
|
@ -836,6 +835,7 @@ func (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, coo
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
e.paths[path] = fCookie
|
e.paths[path] = fCookie
|
||||||
|
e.cookies[&fCookie.cookie] = fCookie
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -848,11 +848,19 @@ func (e *EventPort) DissociatePath(path string) error {
|
||||||
return fmt.Errorf("%v is not associated with this Event Port", path)
|
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)))
|
_, err := port_dissociate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(f.fobj)))
|
||||||
if err != nil {
|
// If the path is no longer associated with this event port (ENOENT)
|
||||||
|
// we should delete it from our map. We can still return ENOENT to the caller.
|
||||||
|
// But we need to save the cookie
|
||||||
|
if err != nil && err != ENOENT {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err == nil {
|
||||||
|
// dissociate was successful, safe to delete the cookie
|
||||||
|
fCookie := e.paths[path]
|
||||||
|
delete(e.cookies, &fCookie.cookie)
|
||||||
|
}
|
||||||
delete(e.paths, path)
|
delete(e.paths, path)
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// AssociateFd wraps calls to port_associate(3c) on file descriptors.
|
// AssociateFd wraps calls to port_associate(3c) on file descriptors.
|
||||||
|
|
@ -862,12 +870,13 @@ func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) erro
|
||||||
if _, found := e.fds[fd]; found {
|
if _, found := e.fds[fd]; found {
|
||||||
return fmt.Errorf("%v is already associated with this Event Port", fd)
|
return fmt.Errorf("%v is already associated with this Event Port", fd)
|
||||||
}
|
}
|
||||||
pcookie := &cookie
|
fCookie := &fileObjCookie{nil, cookie}
|
||||||
_, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(pcookie)))
|
_, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(&fCookie.cookie)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
e.fds[fd] = pcookie
|
e.fds[fd] = fCookie
|
||||||
|
e.cookies[&fCookie.cookie] = fCookie
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -880,11 +889,16 @@ func (e *EventPort) DissociateFd(fd uintptr) error {
|
||||||
return fmt.Errorf("%v is not associated with this Event Port", fd)
|
return fmt.Errorf("%v is not associated with this Event Port", fd)
|
||||||
}
|
}
|
||||||
_, err := port_dissociate(e.port, PORT_SOURCE_FD, fd)
|
_, err := port_dissociate(e.port, PORT_SOURCE_FD, fd)
|
||||||
if err != nil {
|
if err != nil && err != ENOENT {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err == nil {
|
||||||
|
// dissociate was successful, safe to delete the cookie
|
||||||
|
fCookie := e.fds[fd]
|
||||||
|
delete(e.cookies, &fCookie.cookie)
|
||||||
|
}
|
||||||
delete(e.fds, fd)
|
delete(e.fds, fd)
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func createFileObj(name string, stat os.FileInfo) (*fileObj, error) {
|
func createFileObj(name string, stat os.FileInfo) (*fileObj, error) {
|
||||||
|
|
@ -912,26 +926,48 @@ func (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
p := new(PortEvent)
|
p := new(PortEvent)
|
||||||
p.Events = pe.Events
|
|
||||||
p.Source = pe.Source
|
|
||||||
e.mu.Lock()
|
e.mu.Lock()
|
||||||
defer e.mu.Unlock()
|
defer e.mu.Unlock()
|
||||||
switch pe.Source {
|
e.peIntToExt(pe, p)
|
||||||
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
|
return p, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// peIntToExt converts a cgo portEvent struct into the friendlier PortEvent
|
||||||
|
// NOTE: Always call this function while holding the e.mu mutex
|
||||||
|
func (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) {
|
||||||
|
peExt.Events = peInt.Events
|
||||||
|
peExt.Source = peInt.Source
|
||||||
|
cookie := (*interface{})(unsafe.Pointer(peInt.User))
|
||||||
|
peExt.Cookie = *cookie
|
||||||
|
switch peInt.Source {
|
||||||
|
case PORT_SOURCE_FD:
|
||||||
|
delete(e.cookies, cookie)
|
||||||
|
peExt.Fd = uintptr(peInt.Object)
|
||||||
|
// Only remove the fds entry if it exists and this cookie matches
|
||||||
|
if fobj, ok := e.fds[peExt.Fd]; ok {
|
||||||
|
if &fobj.cookie == cookie {
|
||||||
|
delete(e.fds, peExt.Fd)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case PORT_SOURCE_FILE:
|
||||||
|
if fCookie, ok := e.cookies[cookie]; ok && uintptr(unsafe.Pointer(fCookie.fobj)) == uintptr(peInt.Object) {
|
||||||
|
// Use our stashed reference rather than using unsafe on what we got back
|
||||||
|
// the unsafe version would be (*fileObj)(unsafe.Pointer(uintptr(peInt.Object)))
|
||||||
|
peExt.fobj = fCookie.fobj
|
||||||
|
} else {
|
||||||
|
panic("mismanaged memory")
|
||||||
|
}
|
||||||
|
delete(e.cookies, cookie)
|
||||||
|
peExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name)))
|
||||||
|
// Only remove the paths entry if it exists and this cookie matches
|
||||||
|
if fobj, ok := e.paths[peExt.Path]; ok {
|
||||||
|
if &fobj.cookie == cookie {
|
||||||
|
delete(e.paths, peExt.Path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Pending wraps port_getn(3c) and returns how many events are pending.
|
// Pending wraps port_getn(3c) and returns how many events are pending.
|
||||||
func (e *EventPort) Pending() (int, error) {
|
func (e *EventPort) Pending() (int, error) {
|
||||||
var n uint32 = 0
|
var n uint32 = 0
|
||||||
|
|
@ -962,21 +998,7 @@ func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error)
|
||||||
e.mu.Lock()
|
e.mu.Lock()
|
||||||
defer e.mu.Unlock()
|
defer e.mu.Unlock()
|
||||||
for i := 0; i < int(got); i++ {
|
for i := 0; i < int(got); i++ {
|
||||||
s[i].Events = ps[i].Events
|
e.peIntToExt(&ps[i], &s[i])
|
||||||
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
|
return int(got), err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -177,6 +177,30 @@ func Write(fd int, p []byte) (n int, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
|
n, err = pread(fd, p, offset)
|
||||||
|
if raceenabled {
|
||||||
|
if n > 0 {
|
||||||
|
raceWriteRange(unsafe.Pointer(&p[0]), n)
|
||||||
|
}
|
||||||
|
if err == nil {
|
||||||
|
raceAcquire(unsafe.Pointer(&ioSync))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
|
if raceenabled {
|
||||||
|
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
||||||
|
}
|
||||||
|
n, err = pwrite(fd, p, offset)
|
||||||
|
if raceenabled && n > 0 {
|
||||||
|
raceReadRange(unsafe.Pointer(&p[0]), n)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// For testing: clients can set this flag to force
|
// For testing: clients can set this flag to force
|
||||||
// creation of IPv6 sockets to return EAFNOSUPPORT.
|
// creation of IPv6 sockets to return EAFNOSUPPORT.
|
||||||
var SocketDisableIPv6 bool
|
var SocketDisableIPv6 bool
|
||||||
|
|
@ -313,6 +337,33 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
|
||||||
|
var rsa RawSockaddrAny
|
||||||
|
n, oobn, recvflags, err = recvmsgRaw(fd, p, oob, flags, &rsa)
|
||||||
|
// source address is only specified if the socket is unconnected
|
||||||
|
if rsa.Addr.Family != AF_UNSPEC {
|
||||||
|
from, err = anyToSockaddr(fd, &rsa)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
|
||||||
|
_, err = SendmsgN(fd, p, oob, to, flags)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
|
||||||
|
var ptr unsafe.Pointer
|
||||||
|
var salen _Socklen
|
||||||
|
if to != nil {
|
||||||
|
ptr, salen, err = to.sockaddr()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sendmsgN(fd, p, oob, ptr, salen, flags)
|
||||||
|
}
|
||||||
|
|
||||||
func Send(s int, buf []byte, flags int) (err error) {
|
func Send(s int, buf []byte, flags int) (err error) {
|
||||||
return sendto(s, buf, flags, nil, 0)
|
return sendto(s, buf, flags, nil, 0)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2135,6 +2135,10 @@ const (
|
||||||
PTRACE_SYSCALL_INFO_NONE = 0x0
|
PTRACE_SYSCALL_INFO_NONE = 0x0
|
||||||
PTRACE_SYSCALL_INFO_SECCOMP = 0x3
|
PTRACE_SYSCALL_INFO_SECCOMP = 0x3
|
||||||
PTRACE_TRACEME = 0x0
|
PTRACE_TRACEME = 0x0
|
||||||
|
P_ALL = 0x0
|
||||||
|
P_PGID = 0x2
|
||||||
|
P_PID = 0x1
|
||||||
|
P_PIDFD = 0x3
|
||||||
QNX4_SUPER_MAGIC = 0x2f
|
QNX4_SUPER_MAGIC = 0x2f
|
||||||
QNX6_SUPER_MAGIC = 0x68191122
|
QNX6_SUPER_MAGIC = 0x68191122
|
||||||
RAMFS_MAGIC = 0x858458f6
|
RAMFS_MAGIC = 0x858458f6
|
||||||
|
|
|
||||||
|
|
@ -975,7 +975,7 @@ func Pause() (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = &p[0]
|
_p0 = &p[0]
|
||||||
|
|
@ -992,7 +992,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = &p[0]
|
_p0 = &p[0]
|
||||||
|
|
|
||||||
|
|
@ -931,7 +931,7 @@ func Pause() (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = &p[0]
|
_p0 = &p[0]
|
||||||
|
|
@ -946,7 +946,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = &p[0]
|
_p0 = &p[0]
|
||||||
|
|
|
||||||
|
|
@ -643,17 +643,22 @@ var libc_flistxattr_trampoline_addr uintptr
|
||||||
|
|
||||||
// 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 setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
|
func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
|
||||||
_, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
err = errnoErr(e1)
|
err = errnoErr(e1)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var libc_setattrlist_trampoline_addr uintptr
|
var libc_utimensat_trampoline_addr uintptr
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib"
|
//go:cgo_import_dynamic libc_utimensat utimensat "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
// 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
|
||||||
|
|
||||||
|
|
@ -1698,7 +1703,7 @@ var libc_pathconf_trampoline_addr uintptr
|
||||||
|
|
||||||
// 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1719,7 +1724,7 @@ var libc_pread_trampoline_addr uintptr
|
||||||
|
|
||||||
// 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -228,11 +228,11 @@ TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB)
|
DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_setattrlist(SB)
|
JMP libc_utimensat(SB)
|
||||||
|
|
||||||
GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB)
|
DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_fcntl(SB)
|
JMP libc_fcntl(SB)
|
||||||
|
|
|
||||||
|
|
@ -643,17 +643,22 @@ var libc_flistxattr_trampoline_addr uintptr
|
||||||
|
|
||||||
// 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 setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
|
func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
|
||||||
_, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
err = errnoErr(e1)
|
err = errnoErr(e1)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var libc_setattrlist_trampoline_addr uintptr
|
var libc_utimensat_trampoline_addr uintptr
|
||||||
|
|
||||||
//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib"
|
//go:cgo_import_dynamic libc_utimensat utimensat "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
// 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
|
||||||
|
|
||||||
|
|
@ -1698,7 +1703,7 @@ var libc_pathconf_trampoline_addr uintptr
|
||||||
|
|
||||||
// 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1719,7 +1724,7 @@ var libc_pread_trampoline_addr uintptr
|
||||||
|
|
||||||
// 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -228,11 +228,11 @@ TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB)
|
DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_setattrlist(SB)
|
JMP libc_utimensat(SB)
|
||||||
|
|
||||||
GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB)
|
DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_fcntl(SB)
|
JMP libc_fcntl(SB)
|
||||||
|
|
|
||||||
|
|
@ -1420,7 +1420,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1437,7 +1437,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -1420,7 +1420,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1437,7 +1437,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -1420,7 +1420,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1437,7 +1437,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -1420,7 +1420,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1437,7 +1437,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -231,6 +231,16 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err
|
||||||
|
|
||||||
// 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 Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) {
|
||||||
|
_, _, e1 := Syscall6(SYS_WAITID, uintptr(idType), uintptr(id), uintptr(unsafe.Pointer(info)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
|
func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
|
||||||
r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
|
r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
|
||||||
ret = int(r0)
|
ret = int(r0)
|
||||||
|
|
@ -1992,6 +2002,16 @@ func PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, 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 PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) {
|
||||||
|
_, _, e1 := Syscall6(SYS_PIDFD_SEND_SIGNAL, uintptr(pidfd), uintptr(sig), uintptr(unsafe.Pointer(info)), uintptr(flags), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {
|
func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {
|
||||||
r0, _, e1 := Syscall(SYS_SHMAT, uintptr(id), uintptr(addr), uintptr(flag))
|
r0, _, e1 := Syscall(SYS_SHMAT, uintptr(id), uintptr(addr), uintptr(flag))
|
||||||
ret = uintptr(r0)
|
ret = uintptr(r0)
|
||||||
|
|
|
||||||
|
|
@ -200,7 +200,7 @@ func Lstat(path string, stat *Stat_t) (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -217,7 +217,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -225,7 +225,7 @@ func Pause() (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -242,7 +242,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -538,7 +538,7 @@ func utimes(path string, times *[2]Timeval) (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -555,7 +555,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -180,7 +180,7 @@ func Listen(s int, n int) (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -197,7 +197,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -150,7 +150,7 @@ func Listen(s int, n int) (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -167,7 +167,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -180,7 +180,7 @@ func Pause() (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -197,7 +197,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -180,7 +180,7 @@ func Pause() (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -197,7 +197,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -150,7 +150,7 @@ func Listen(s int, n int) (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -167,7 +167,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -210,7 +210,7 @@ func Pause() (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -227,7 +227,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -240,7 +240,7 @@ func Pause() (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -257,7 +257,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -240,7 +240,7 @@ func Pause() (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -257,7 +257,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -180,7 +180,7 @@ func Listen(s int, n int) (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -197,7 +197,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -210,7 +210,7 @@ func Pause() (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -227,7 +227,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -220,7 +220,7 @@ func Pause() (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -237,7 +237,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -1330,7 +1330,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1347,7 +1347,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -1330,7 +1330,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1347,7 +1347,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -1330,7 +1330,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1347,7 +1347,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -1330,7 +1330,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1347,7 +1347,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1145,7 +1145,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1145,7 +1145,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1145,7 +1145,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1145,7 +1145,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, 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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
@ -1145,7 +1145,7 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = unsafe.Pointer(&p[0])
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
|
|
||||||
|
|
@ -227,8 +227,8 @@ import (
|
||||||
//go:linkname procOpenat libc_openat
|
//go:linkname procOpenat libc_openat
|
||||||
//go:linkname procPathconf libc_pathconf
|
//go:linkname procPathconf libc_pathconf
|
||||||
//go:linkname procPause libc_pause
|
//go:linkname procPause libc_pause
|
||||||
//go:linkname procPread libc_pread
|
//go:linkname procpread libc_pread
|
||||||
//go:linkname procPwrite libc_pwrite
|
//go:linkname procpwrite libc_pwrite
|
||||||
//go:linkname procread libc_read
|
//go:linkname procread libc_read
|
||||||
//go:linkname procReadlink libc_readlink
|
//go:linkname procReadlink libc_readlink
|
||||||
//go:linkname procRename libc_rename
|
//go:linkname procRename libc_rename
|
||||||
|
|
@ -364,8 +364,8 @@ var (
|
||||||
procOpenat,
|
procOpenat,
|
||||||
procPathconf,
|
procPathconf,
|
||||||
procPause,
|
procPause,
|
||||||
procPread,
|
procpread,
|
||||||
procPwrite,
|
procpwrite,
|
||||||
procread,
|
procread,
|
||||||
procReadlink,
|
procReadlink,
|
||||||
procRename,
|
procRename,
|
||||||
|
|
@ -1380,12 +1380,12 @@ func Pause() (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 Pread(fd int, p []byte, offset int64) (n int, err error) {
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = &p[0]
|
_p0 = &p[0]
|
||||||
}
|
}
|
||||||
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)
|
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)
|
||||||
n = int(r0)
|
n = int(r0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
err = e1
|
err = e1
|
||||||
|
|
@ -1395,12 +1395,12 @@ func Pread(fd int, p []byte, offset int64) (n int, 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 Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
_p0 = &p[0]
|
_p0 = &p[0]
|
||||||
}
|
}
|
||||||
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)
|
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)
|
||||||
n = int(r0)
|
n = int(r0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
err = e1
|
err = e1
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -250,6 +250,13 @@ type Sigset_t struct {
|
||||||
|
|
||||||
const _C__NSIG = 0x41
|
const _C__NSIG = 0x41
|
||||||
|
|
||||||
|
type Siginfo struct {
|
||||||
|
Signo int32
|
||||||
|
Errno int32
|
||||||
|
Code int32
|
||||||
|
_ [116]byte
|
||||||
|
}
|
||||||
|
|
||||||
type Termios struct {
|
type Termios struct {
|
||||||
Iflag uint32
|
Iflag uint32
|
||||||
Oflag uint32
|
Oflag uint32
|
||||||
|
|
|
||||||
|
|
@ -265,6 +265,14 @@ type Sigset_t struct {
|
||||||
|
|
||||||
const _C__NSIG = 0x41
|
const _C__NSIG = 0x41
|
||||||
|
|
||||||
|
type Siginfo struct {
|
||||||
|
Signo int32
|
||||||
|
Errno int32
|
||||||
|
Code int32
|
||||||
|
_ int32
|
||||||
|
_ [112]byte
|
||||||
|
}
|
||||||
|
|
||||||
type Termios struct {
|
type Termios struct {
|
||||||
Iflag uint32
|
Iflag uint32
|
||||||
Oflag uint32
|
Oflag uint32
|
||||||
|
|
|
||||||
|
|
@ -241,6 +241,13 @@ type Sigset_t struct {
|
||||||
|
|
||||||
const _C__NSIG = 0x41
|
const _C__NSIG = 0x41
|
||||||
|
|
||||||
|
type Siginfo struct {
|
||||||
|
Signo int32
|
||||||
|
Errno int32
|
||||||
|
Code int32
|
||||||
|
_ [116]byte
|
||||||
|
}
|
||||||
|
|
||||||
type Termios struct {
|
type Termios struct {
|
||||||
Iflag uint32
|
Iflag uint32
|
||||||
Oflag uint32
|
Oflag uint32
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue