mirror of
https://github.com/rwinkhart/sys.git
synced 2026-08-31 22:36:44 -04:00
unix: evaluate cmsg alignment in cmsgAlignOf at compile time
runtime.GOOS and runtime.GOARCH are constants, thus all comparisons are evaluated at compile time. Follow-up for CL 153619 to make the code consistent with the syscall package, cf. CL 153837 Change-Id: I0520d88c1636c6ed2acad69fce85a28042eafe56 Reviewed-on: https://go-review.googlesource.com/c/153937 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Joel Sing <joel@sing.id.au> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
committed by
Tobias Klauser
parent
b05ddf5780
commit
73d4af5aa0
@@ -13,28 +13,26 @@ import (
|
|||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cmsgAlign = SizeofPtr
|
// Round the length of a raw sockaddr up to align it properly.
|
||||||
|
func cmsgAlignOf(salen int) int {
|
||||||
|
salign := SizeofPtr
|
||||||
|
|
||||||
func init() {
|
|
||||||
switch runtime.GOOS {
|
switch runtime.GOOS {
|
||||||
case "darwin", "dragonfly", "solaris":
|
case "darwin", "dragonfly", "solaris":
|
||||||
// NOTE: It seems like 64-bit Darwin, DragonFly BSD and
|
// NOTE: It seems like 64-bit Darwin, DragonFly BSD and
|
||||||
// Solaris kernels still require 32-bit aligned access to
|
// Solaris kernels still require 32-bit aligned access to
|
||||||
// network subsystem.
|
// network subsystem.
|
||||||
if SizeofPtr == 8 {
|
if SizeofPtr == 8 {
|
||||||
cmsgAlign = 4
|
salign = 4
|
||||||
}
|
}
|
||||||
case "openbsd":
|
case "openbsd":
|
||||||
// OpenBSD armv7 requires 64-bit alignment.
|
// OpenBSD armv7 requires 64-bit alignment.
|
||||||
if runtime.GOARCH == "arm" {
|
if runtime.GOARCH == "arm" {
|
||||||
cmsgAlign = 8
|
salign = 8
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Round the length of a raw sockaddr up to align it properly.
|
return (salen + salign - 1) & ^(salign - 1)
|
||||||
func cmsgAlignOf(salen int) int {
|
|
||||||
return (salen + cmsgAlign - 1) & ^(cmsgAlign - 1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CmsgLen returns the value to store in the Len field of the Cmsghdr
|
// CmsgLen returns the value to store in the Len field of the Cmsghdr
|
||||||
|
|||||||
Reference in New Issue
Block a user