From 4b3726e99bec62e4a8b8e9cecc478b51ce0d4636 Mon Sep 17 00:00:00 2001
From: cuiweixie <cuiweixie@gmail.com>
Date: Wed, 25 Jan 2023 11:22:29 +0800
Subject: [PATCH] encoding/binary: add var NativeEndian

Updates #57237

Change-Id: I149c8b7eeac91b87b5810250f96d48ca87135807
Reviewed-on: https://go-review.googlesource.com/c/go/+/463218
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Run-TryBot: xie cui <523516579@qq.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
---
 api/next/57237.txt                          |  1 +
 src/encoding/binary/binary_test.go          | 10 ++++++++++
 src/encoding/binary/native_endian_big.go    | 14 ++++++++++++++
 src/encoding/binary/native_endian_little.go | 14 ++++++++++++++
 4 files changed, 39 insertions(+)
 create mode 100644 api/next/57237.txt
 create mode 100644 src/encoding/binary/native_endian_big.go
 create mode 100644 src/encoding/binary/native_endian_little.go

diff --git a/api/next/57237.txt b/api/next/57237.txt
new file mode 100644
index 00000000000..141dfe02f75
--- /dev/null
+++ b/api/next/57237.txt
@@ -0,0 +1 @@
+pkg encoding/binary, var NativeEndian nativeEndian #57237
diff --git a/src/encoding/binary/binary_test.go b/src/encoding/binary/binary_test.go
index 09d08f5ee3a..341cd86766e 100644
--- a/src/encoding/binary/binary_test.go
+++ b/src/encoding/binary/binary_test.go
@@ -13,6 +13,7 @@ import (
 	"strings"
 	"sync"
 	"testing"
+	"unsafe"
 )
 
 type Struct struct {
@@ -831,3 +832,12 @@ func BenchmarkWriteSlice1000Uint8s(b *testing.B) {
 		Write(w, BigEndian, slice)
 	}
 }
+
+func TestNativeEndian(t *testing.T) {
+	const val = 0x12345678
+	i := uint32(val)
+	s := unsafe.Slice((*byte)(unsafe.Pointer(&i)), unsafe.Sizeof(i))
+	if v := NativeEndian.Uint32(s); v != val {
+		t.Errorf("NativeEndian.Uint32 returned %#x, expected %#x", v, val)
+	}
+}
diff --git a/src/encoding/binary/native_endian_big.go b/src/encoding/binary/native_endian_big.go
new file mode 100644
index 00000000000..1a24354f4b5
--- /dev/null
+++ b/src/encoding/binary/native_endian_big.go
@@ -0,0 +1,14 @@
+// Copyright 2023 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build armbe || arm64be || m68k || mips || mips64 || mips64p32 || ppc || ppc64 || s390 || s390x || shbe || sparc || sparc64
+
+package binary
+
+type nativeEndian struct {
+	bigEndian
+}
+
+// NativeEndian is the native-endian implementation of ByteOrder and AppendByteOrder.
+var NativeEndian nativeEndian
diff --git a/src/encoding/binary/native_endian_little.go b/src/encoding/binary/native_endian_little.go
new file mode 100644
index 00000000000..67b41ae0a2e
--- /dev/null
+++ b/src/encoding/binary/native_endian_little.go
@@ -0,0 +1,14 @@
+// Copyright 2023 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh || wasm
+
+package binary
+
+type nativeEndian struct {
+	littleEndian
+}
+
+// NativeEndian is the native-endian implementation of ByteOrder and AppendByteOrder.
+var NativeEndian nativeEndian
-- 
GitLab