summaryrefslogtreecommitdiff
path: root/vendor/go.etcd.io/bbolt/unsafe.go
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2020-06-18 08:31:16 -0400
committerGitHub <noreply@github.com>2020-06-18 08:31:16 -0400
commitad33b23634d8bb9902094f8b93ea335179c487b4 (patch)
treed6eeec014e1c68bee9955736ee436b6c82484e83 /vendor/go.etcd.io/bbolt/unsafe.go
parentb5f7afd04a75c055c1626e67a067fef02af94fa9 (diff)
parent16dbc160c5f465ca1535bc13c07293f2b0dd89e5 (diff)
downloadpodman-ad33b23634d8bb9902094f8b93ea335179c487b4.tar.gz
podman-ad33b23634d8bb9902094f8b93ea335179c487b4.tar.bz2
podman-ad33b23634d8bb9902094f8b93ea335179c487b4.zip
Merge pull request #6661 from containers/dependabot/go_modules/go.etcd.io/bbolt-1.3.5
Bump go.etcd.io/bbolt from 1.3.4 to 1.3.5
Diffstat (limited to 'vendor/go.etcd.io/bbolt/unsafe.go')
-rw-r--r--vendor/go.etcd.io/bbolt/unsafe.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/vendor/go.etcd.io/bbolt/unsafe.go b/vendor/go.etcd.io/bbolt/unsafe.go
new file mode 100644
index 000000000..c0e503750
--- /dev/null
+++ b/vendor/go.etcd.io/bbolt/unsafe.go
@@ -0,0 +1,39 @@
+package bbolt
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+func unsafeAdd(base unsafe.Pointer, offset uintptr) unsafe.Pointer {
+ return unsafe.Pointer(uintptr(base) + offset)
+}
+
+func unsafeIndex(base unsafe.Pointer, offset uintptr, elemsz uintptr, n int) unsafe.Pointer {
+ return unsafe.Pointer(uintptr(base) + offset + uintptr(n)*elemsz)
+}
+
+func unsafeByteSlice(base unsafe.Pointer, offset uintptr, i, j int) []byte {
+ // See: https://github.com/golang/go/wiki/cgo#turning-c-arrays-into-go-slices
+ //
+ // This memory is not allocated from C, but it is unmanaged by Go's
+ // garbage collector and should behave similarly, and the compiler
+ // should produce similar code. Note that this conversion allows a
+ // subslice to begin after the base address, with an optional offset,
+ // while the URL above does not cover this case and only slices from
+ // index 0. However, the wiki never says that the address must be to
+ // the beginning of a C allocation (or even that malloc was used at
+ // all), so this is believed to be correct.
+ return (*[maxAllocSize]byte)(unsafeAdd(base, offset))[i:j:j]
+}
+
+// unsafeSlice modifies the data, len, and cap of a slice variable pointed to by
+// the slice parameter. This helper should be used over other direct
+// manipulation of reflect.SliceHeader to prevent misuse, namely, converting
+// from reflect.SliceHeader to a Go slice type.
+func unsafeSlice(slice, data unsafe.Pointer, len int) {
+ s := (*reflect.SliceHeader)(slice)
+ s.Data = uintptr(data)
+ s.Cap = len
+ s.Len = len
+}