diff options
Diffstat (limited to 'libgo/go/net/cgo_unix.go')
-rw-r--r-- | libgo/go/net/cgo_unix.go | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/libgo/go/net/cgo_unix.go b/libgo/go/net/cgo_unix.go index 525c63c18d2..a90aaa904ed 100644 --- a/libgo/go/net/cgo_unix.go +++ b/libgo/go/net/cgo_unix.go @@ -114,7 +114,15 @@ func cgoLookupPort(ctx context.Context, network, service string) (port int, err } func cgoLookupServicePort(hints *syscall.Addrinfo, network, service string) (port int, err error) { - s := syscall.StringBytePtr(service) + s, err := syscall.BytePtrFromString(service) + if err != nil { + return 0, err + } + // Lowercase the service name in the memory passed to C. + for i := 0; i < len(service); i++ { + bp := (*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(s)) + uintptr(i))) + *bp = lowerASCII(*bp) + } var res *syscall.Addrinfo syscall.Entersyscall() gerrno := libc_getaddrinfo(nil, s, hints, &res) |