aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2019-06-24 16:52:02 +0200
committerGitHub <noreply@github.com>2019-06-24 16:52:02 +0200
commit72260a296c534950d9c899ee907e73b5dd0162f0 (patch)
treed9b33042a70c2d1e600c75855a29b3aa594aaab6 /vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
parentcf244d87cdb9b2cb0d8510b2ea392d928c1eb269 (diff)
parentd697456dc90adbaf68224ed7c115b38d5855e582 (diff)
downloadpodman-72260a296c534950d9c899ee907e73b5dd0162f0.tar.gz
podman-72260a296c534950d9c899ee907e73b5dd0162f0.tar.bz2
podman-72260a296c534950d9c899ee907e73b5dd0162f0.zip
Merge pull request #3414 from vrothberg/go-modules
Go modules
Diffstat (limited to 'vendor/github.com/golang/protobuf/proto/pointer_unsafe.go')
-rw-r--r--vendor/github.com/golang/protobuf/proto/pointer_unsafe.go15
1 files changed, 10 insertions, 5 deletions
diff --git a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
index d55a335d9..dbfffe071 100644
--- a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
+++ b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
@@ -85,16 +85,21 @@ func toPointer(i *Message) pointer {
// toAddrPointer converts an interface to a pointer that points to
// the interface data.
-func toAddrPointer(i *interface{}, isptr bool) pointer {
+func toAddrPointer(i *interface{}, isptr, deref bool) (p pointer) {
// Super-tricky - read or get the address of data word of interface value.
if isptr {
// The interface is of pointer type, thus it is a direct interface.
// The data word is the pointer data itself. We take its address.
- return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)}
+ p = pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)}
+ } else {
+ // The interface is not of pointer type. The data word is the pointer
+ // to the data.
+ p = pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
}
- // The interface is not of pointer type. The data word is the pointer
- // to the data.
- return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
+ if deref {
+ p.p = *(*unsafe.Pointer)(p.p)
+ }
+ return p
}
// valToPointer converts v to a pointer. v must be of pointer type.