mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-27 08:40:23 +00:00
15 lines
562 B
Go
15 lines
562 B
Go
|
package cutil
|
||
|
|
||
|
import "unsafe"
|
||
|
|
||
|
// VoidPtr casts a uintptr value to an unsafe.Pointer value in order to use it
|
||
|
// directly as a void* argument in a C function call.
|
||
|
// CAUTION: NEVER store the result in a variable, or the Go GC could panic.
|
||
|
func VoidPtr(i uintptr) unsafe.Pointer {
|
||
|
var nullPtr unsafe.Pointer
|
||
|
// It's not possible to cast uintptr directly to unsafe.Pointer. Therefore we
|
||
|
// cast a null pointer to uintptr and apply pointer arithmetic on it, which
|
||
|
// allows us to cast it back to unsafe.Pointer.
|
||
|
return unsafe.Pointer(uintptr(nullPtr) + i)
|
||
|
}
|