Browse Source

unix: convert Utsname members from {u,}int8 array to byte array

In order to make conversion to string easier, change the Utsname
members from int8 array to byte array.

Also add a test on Linux for Uname and the string conversion of the
Utsname members.

Fixes golang/go#20753

Change-Id: Iec793dfb4a6dd8f3523cf0b6284a6162074f2e9e
Reviewed-on: https://go-review.googlesource.com/74331
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Tobias Klauser 8 years ago
parent
commit
4da7545edf

+ 5 - 0
unix/mkpost.go

@@ -56,6 +56,11 @@ func main() {
 	removeFieldsRegex := regexp.MustCompile(`X__glibc\S*`)
 	removeFieldsRegex := regexp.MustCompile(`X__glibc\S*`)
 	b = removeFieldsRegex.ReplaceAll(b, []byte("_"))
 	b = removeFieldsRegex.ReplaceAll(b, []byte("_"))
 
 
+	// Convert [65]int8 to [65]byte in Utsname members to simplify
+	// conversion to string; see golang.org/issue/20753
+	convertUtsnameRegex := regexp.MustCompile(`((Sys|Node|Domain)name|Release|Version|Machine)(\s+)\[(\d+)\]u?int8`)
+	b = convertUtsnameRegex.ReplaceAll(b, []byte("$1$3[$4]byte"))
+
 	// We refuse to export private fields on s390x
 	// We refuse to export private fields on s390x
 	if goarch == "s390x" && goos == "linux" {
 	if goarch == "s390x" && goos == "linux" {
 		// Remove cgo padding fields
 		// Remove cgo padding fields

+ 11 - 0
unix/syscall_linux_test.go

@@ -231,6 +231,17 @@ func TestSelect(t *testing.T) {
 	}
 	}
 }
 }
 
 
+func TestUname(t *testing.T) {
+	var utsname unix.Utsname
+	err := unix.Uname(&utsname)
+	if err != nil {
+		t.Fatalf("Uname: %v", err)
+	}
+
+	// conversion from []byte to string, golang.org/issue/20753
+	t.Logf("OS: %s/%s %s", string(utsname.Sysname[:]), string(utsname.Machine[:]), string(utsname.Release[:]))
+}
+
 // utilities taken from os/os_test.go
 // utilities taken from os/os_test.go
 
 
 func touch(t *testing.T, name string) {
 func touch(t *testing.T, name string) {

+ 6 - 6
unix/ztypes_linux_386.go

@@ -621,12 +621,12 @@ type Sysinfo_t struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname    [65]int8
-	Nodename   [65]int8
-	Release    [65]int8
-	Version    [65]int8
-	Machine    [65]int8
-	Domainname [65]int8
+	Sysname    [65]byte
+	Nodename   [65]byte
+	Release    [65]byte
+	Version    [65]byte
+	Machine    [65]byte
+	Domainname [65]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {

+ 6 - 6
unix/ztypes_linux_amd64.go

@@ -637,12 +637,12 @@ type Sysinfo_t struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname    [65]int8
-	Nodename   [65]int8
-	Release    [65]int8
-	Version    [65]int8
-	Machine    [65]int8
-	Domainname [65]int8
+	Sysname    [65]byte
+	Nodename   [65]byte
+	Release    [65]byte
+	Version    [65]byte
+	Machine    [65]byte
+	Domainname [65]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {

+ 6 - 6
unix/ztypes_linux_arm.go

@@ -609,12 +609,12 @@ type Sysinfo_t struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname    [65]uint8
-	Nodename   [65]uint8
-	Release    [65]uint8
-	Version    [65]uint8
-	Machine    [65]uint8
-	Domainname [65]uint8
+	Sysname    [65]byte
+	Nodename   [65]byte
+	Release    [65]byte
+	Version    [65]byte
+	Machine    [65]byte
+	Domainname [65]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {

+ 6 - 6
unix/ztypes_linux_arm64.go

@@ -615,12 +615,12 @@ type Sysinfo_t struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname    [65]int8
-	Nodename   [65]int8
-	Release    [65]int8
-	Version    [65]int8
-	Machine    [65]int8
-	Domainname [65]int8
+	Sysname    [65]byte
+	Nodename   [65]byte
+	Release    [65]byte
+	Version    [65]byte
+	Machine    [65]byte
+	Domainname [65]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {

+ 6 - 6
unix/ztypes_linux_mips.go

@@ -614,12 +614,12 @@ type Sysinfo_t struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname    [65]int8
-	Nodename   [65]int8
-	Release    [65]int8
-	Version    [65]int8
-	Machine    [65]int8
-	Domainname [65]int8
+	Sysname    [65]byte
+	Nodename   [65]byte
+	Release    [65]byte
+	Version    [65]byte
+	Machine    [65]byte
+	Domainname [65]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {

+ 6 - 6
unix/ztypes_linux_mips64.go

@@ -618,12 +618,12 @@ type Sysinfo_t struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname    [65]int8
-	Nodename   [65]int8
-	Release    [65]int8
-	Version    [65]int8
-	Machine    [65]int8
-	Domainname [65]int8
+	Sysname    [65]byte
+	Nodename   [65]byte
+	Release    [65]byte
+	Version    [65]byte
+	Machine    [65]byte
+	Domainname [65]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {

+ 6 - 6
unix/ztypes_linux_mips64le.go

@@ -618,12 +618,12 @@ type Sysinfo_t struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname    [65]int8
-	Nodename   [65]int8
-	Release    [65]int8
-	Version    [65]int8
-	Machine    [65]int8
-	Domainname [65]int8
+	Sysname    [65]byte
+	Nodename   [65]byte
+	Release    [65]byte
+	Version    [65]byte
+	Machine    [65]byte
+	Domainname [65]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {

+ 6 - 6
unix/ztypes_linux_mipsle.go

@@ -614,12 +614,12 @@ type Sysinfo_t struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname    [65]int8
-	Nodename   [65]int8
-	Release    [65]int8
-	Version    [65]int8
-	Machine    [65]int8
-	Domainname [65]int8
+	Sysname    [65]byte
+	Nodename   [65]byte
+	Release    [65]byte
+	Version    [65]byte
+	Machine    [65]byte
+	Domainname [65]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {

+ 6 - 6
unix/ztypes_linux_ppc64.go

@@ -625,12 +625,12 @@ type Sysinfo_t struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname    [65]uint8
-	Nodename   [65]uint8
-	Release    [65]uint8
-	Version    [65]uint8
-	Machine    [65]uint8
-	Domainname [65]uint8
+	Sysname    [65]byte
+	Nodename   [65]byte
+	Release    [65]byte
+	Version    [65]byte
+	Machine    [65]byte
+	Domainname [65]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {

+ 6 - 6
unix/ztypes_linux_ppc64le.go

@@ -625,12 +625,12 @@ type Sysinfo_t struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname    [65]uint8
-	Nodename   [65]uint8
-	Release    [65]uint8
-	Version    [65]uint8
-	Machine    [65]uint8
-	Domainname [65]uint8
+	Sysname    [65]byte
+	Nodename   [65]byte
+	Release    [65]byte
+	Version    [65]byte
+	Machine    [65]byte
+	Domainname [65]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {

+ 6 - 6
unix/ztypes_linux_s390x.go

@@ -642,12 +642,12 @@ type Sysinfo_t struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname    [65]int8
-	Nodename   [65]int8
-	Release    [65]int8
-	Version    [65]int8
-	Machine    [65]int8
-	Domainname [65]int8
+	Sysname    [65]byte
+	Nodename   [65]byte
+	Release    [65]byte
+	Version    [65]byte
+	Machine    [65]byte
+	Domainname [65]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {

+ 6 - 6
unix/ztypes_linux_sparc64.go

@@ -601,12 +601,12 @@ type Sysinfo_t struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname    [65]int8
-	Nodename   [65]int8
-	Release    [65]int8
-	Version    [65]int8
-	Machine    [65]int8
-	Domainname [65]int8
+	Sysname    [65]byte
+	Nodename   [65]byte
+	Release    [65]byte
+	Version    [65]byte
+	Machine    [65]byte
+	Domainname [65]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {

+ 5 - 5
unix/ztypes_solaris_amd64.go

@@ -263,11 +263,11 @@ type FdSet struct {
 }
 }
 
 
 type Utsname struct {
 type Utsname struct {
-	Sysname  [257]int8
-	Nodename [257]int8
-	Release  [257]int8
-	Version  [257]int8
-	Machine  [257]int8
+	Sysname  [257]byte
+	Nodename [257]byte
+	Release  [257]byte
+	Version  [257]byte
+	Machine  [257]byte
 }
 }
 
 
 type Ustat_t struct {
 type Ustat_t struct {