aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2011-01-18 08:10:22 -0800
committerIan Lance Taylor <iant@golang.org>2011-01-18 08:10:22 -0800
commit2862d003cb052a672f34cca5125ff12628909fc2 (patch)
treecedf1554f436f3ce73c893e9181e4603eb563115
parentfa9befd777e6f2f96f69280392725533caef509c (diff)
downloadgo-2862d003cb052a672f34cca5125ff12628909fc2.tar.gz
go-2862d003cb052a672f34cca5125ff12628909fc2.zip
syscall: Correct length of GNU/Linux abstract Unix domain sockaddr.
R=rsc, iant2 CC=golang-dev https://golang.org/cl/3974044
-rw-r--r--src/pkg/syscall/syscall_linux.go7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/pkg/syscall/syscall_linux.go b/src/pkg/syscall/syscall_linux.go
index f7551c1056..d0f314c88b 100644
--- a/src/pkg/syscall/syscall_linux.go
+++ b/src/pkg/syscall/syscall_linux.go
@@ -253,12 +253,15 @@ func (sa *SockaddrUnix) sockaddr() (uintptr, _Socklen, int) {
for i := 0; i < n; i++ {
sa.raw.Path[i] = int8(name[i])
}
+ // length is family (uint16), name, NUL.
+ sl := 2 + _Socklen(n) + 1
if sa.raw.Path[0] == '@' {
sa.raw.Path[0] = 0
+ // Don't count trailing NUL for abstract address.
+ sl--
}
- // length is family (uint16), name, NUL.
- return uintptr(unsafe.Pointer(&sa.raw)), 2 + _Socklen(n) + 1, 0
+ return uintptr(unsafe.Pointer(&sa.raw)), sl, 0
}
type SockaddrLinklayer struct {