diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2020-06-18 08:31:16 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-18 08:31:16 -0400 |
commit | ad33b23634d8bb9902094f8b93ea335179c487b4 (patch) | |
tree | d6eeec014e1c68bee9955736ee436b6c82484e83 /vendor/go.etcd.io/bbolt/unsafe.go | |
parent | b5f7afd04a75c055c1626e67a067fef02af94fa9 (diff) | |
parent | 16dbc160c5f465ca1535bc13c07293f2b0dd89e5 (diff) | |
download | podman-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.go | 39 |
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 +} |