What is the best way to get an unsafe.Pointer to a []byte's underlying
array?
I have added this function to syscall/syscall_linux.go to support some of
our experiments. One of the new getsockopt calls returns a variable length
amount of data into the buffer, which has no real set size. As such,
userspace programs will have to retry with a larger buffer if the previous
try was not large enough.
func GetsockoptString(fd, level, opt, max_size int) (string, error) {
var arr []byte = make([]byte, max_size, max_size)
vallen := _Socklen(max_size)
// This is really gross and bad, but first entry in a slice is a pointer
into the array
t := (**byte)(unsafe.Pointer(&arr))
err := getsockopt(fd, level, opt, unsafe.Pointer(*t), &vallen)
return string(arr[:vallen]), err
}
This function works fine, but seems gross to me. Am I safe to always assume
that the first entry in a slice is always a pointer into the array for all
of Go1.x on Linux?
I need an unsafe.Pointer into a variable sized array. What is a better way
to do this?
Thank you!
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.