From 73d4af5aa059c8c2dfcf25aad4efd6ce7bc9adc1 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Thu, 13 Dec 2018 08:28:57 +0100 Subject: [PATCH] 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 Reviewed-by: Joel Sing TryBot-Result: Gobot Gobot --- unix/sockcmsg_unix.go | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/unix/sockcmsg_unix.go b/unix/sockcmsg_unix.go index 52b6e225..5f9ae233 100644 --- a/unix/sockcmsg_unix.go +++ b/unix/sockcmsg_unix.go @@ -13,28 +13,26 @@ import ( "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 { case "darwin", "dragonfly", "solaris": // NOTE: It seems like 64-bit Darwin, DragonFly BSD and // Solaris kernels still require 32-bit aligned access to // network subsystem. if SizeofPtr == 8 { - cmsgAlign = 4 + salign = 4 } case "openbsd": // OpenBSD armv7 requires 64-bit alignment. if runtime.GOARCH == "arm" { - cmsgAlign = 8 + salign = 8 } } -} -// Round the length of a raw sockaddr up to align it properly. -func cmsgAlignOf(salen int) int { - return (salen + cmsgAlign - 1) & ^(cmsgAlign - 1) + return (salen + salign - 1) & ^(salign - 1) } // CmsgLen returns the value to store in the Len field of the Cmsghdr