From c1e37c09b531b14ae12a501eb6fd529b31cecdaa Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Mon, 12 Dec 2022 19:16:15 -0800 Subject: [PATCH] native: add IsBigEndian bool const Per https://github.com/golang/go/issues/57237#issuecomment-1347539315 Updates golang/go#57237 --- endian_big.go | 6 ++++++ endian_generic.go | 4 ++++ endian_little.go | 6 ++++++ endian_test.go | 9 +++++++++ 4 files changed, 25 insertions(+) diff --git a/endian_big.go b/endian_big.go index 9912716..77744fd 100644 --- a/endian_big.go +++ b/endian_big.go @@ -5,4 +5,10 @@ package native import "encoding/binary" +// Endian is the encoding/binary.ByteOrder implementation for the +// current CPU's native byte order. var Endian = binary.BigEndian + +// IsBigEndian is whether the current CPU's native byte order is big +// endian. +const IsBigEndian = true diff --git a/endian_generic.go b/endian_generic.go index 7961edd..c15228f 100644 --- a/endian_generic.go +++ b/endian_generic.go @@ -16,12 +16,16 @@ import ( var Endian binary.ByteOrder +var IsBigEndian bool + func init() { b := uint16(0xff) // one byte if *(*byte)(unsafe.Pointer(&b)) == 0 { Endian = binary.BigEndian + IsBigEndian = true } else { Endian = binary.LittleEndian + IsBigEndian = false } log.Printf("github.com/josharian/native: unrecognized arch %v (%v), please file an issue", runtime.GOARCH, Endian) } diff --git a/endian_little.go b/endian_little.go index bfbf127..5098fec 100644 --- a/endian_little.go +++ b/endian_little.go @@ -5,4 +5,10 @@ package native import "encoding/binary" +// Endian is the encoding/binary.ByteOrder implementation for the +// current CPU's native byte order. var Endian = binary.LittleEndian + +// IsBigEndian is whether the current CPU's native byte order is big +// endian. +const IsBigEndian = false diff --git a/endian_test.go b/endian_test.go index 39a854d..7540bef 100644 --- a/endian_test.go +++ b/endian_test.go @@ -1,6 +1,7 @@ package native_test import ( + "encoding/binary" "testing" "github.com/josharian/native" @@ -8,4 +9,12 @@ import ( func TestPrintEndianness(t *testing.T) { t.Logf("native endianness is %v", native.Endian) + + var want binary.ByteOrder = binary.BigEndian + if !native.IsBigEndian { + want = binary.LittleEndian + } + if native.Endian != want { + t.Errorf("IsBigEndian = %v not consistent with native.Endian = %T", native.IsBigEndian, want) + } }