Commit 4da7545e authored by Tobias Klauser's avatar Tobias Klauser Committed by Tobias Klauser

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: 's avatarIan Lance Taylor <iant@golang.org>
parent 661970f6
...@@ -56,6 +56,11 @@ func main() { ...@@ -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
......
...@@ -231,6 +231,17 @@ func TestSelect(t *testing.T) { ...@@ -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) {
......
...@@ -621,12 +621,12 @@ type Sysinfo_t struct { ...@@ -621,12 +621,12 @@ type Sysinfo_t struct {
} }
type Utsname struct { type Utsname struct {
Sysname [65]int8 Sysname [65]byte
Nodename [65]int8 Nodename [65]byte
Release [65]int8 Release [65]byte
Version [65]int8 Version [65]byte
Machine [65]int8 Machine [65]byte
Domainname [65]int8 Domainname [65]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
...@@ -637,12 +637,12 @@ type Sysinfo_t struct { ...@@ -637,12 +637,12 @@ type Sysinfo_t struct {
} }
type Utsname struct { type Utsname struct {
Sysname [65]int8 Sysname [65]byte
Nodename [65]int8 Nodename [65]byte
Release [65]int8 Release [65]byte
Version [65]int8 Version [65]byte
Machine [65]int8 Machine [65]byte
Domainname [65]int8 Domainname [65]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
...@@ -609,12 +609,12 @@ type Sysinfo_t struct { ...@@ -609,12 +609,12 @@ type Sysinfo_t struct {
} }
type Utsname struct { type Utsname struct {
Sysname [65]uint8 Sysname [65]byte
Nodename [65]uint8 Nodename [65]byte
Release [65]uint8 Release [65]byte
Version [65]uint8 Version [65]byte
Machine [65]uint8 Machine [65]byte
Domainname [65]uint8 Domainname [65]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
...@@ -615,12 +615,12 @@ type Sysinfo_t struct { ...@@ -615,12 +615,12 @@ type Sysinfo_t struct {
} }
type Utsname struct { type Utsname struct {
Sysname [65]int8 Sysname [65]byte
Nodename [65]int8 Nodename [65]byte
Release [65]int8 Release [65]byte
Version [65]int8 Version [65]byte
Machine [65]int8 Machine [65]byte
Domainname [65]int8 Domainname [65]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
...@@ -614,12 +614,12 @@ type Sysinfo_t struct { ...@@ -614,12 +614,12 @@ type Sysinfo_t struct {
} }
type Utsname struct { type Utsname struct {
Sysname [65]int8 Sysname [65]byte
Nodename [65]int8 Nodename [65]byte
Release [65]int8 Release [65]byte
Version [65]int8 Version [65]byte
Machine [65]int8 Machine [65]byte
Domainname [65]int8 Domainname [65]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
...@@ -618,12 +618,12 @@ type Sysinfo_t struct { ...@@ -618,12 +618,12 @@ type Sysinfo_t struct {
} }
type Utsname struct { type Utsname struct {
Sysname [65]int8 Sysname [65]byte
Nodename [65]int8 Nodename [65]byte
Release [65]int8 Release [65]byte
Version [65]int8 Version [65]byte
Machine [65]int8 Machine [65]byte
Domainname [65]int8 Domainname [65]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
...@@ -618,12 +618,12 @@ type Sysinfo_t struct { ...@@ -618,12 +618,12 @@ type Sysinfo_t struct {
} }
type Utsname struct { type Utsname struct {
Sysname [65]int8 Sysname [65]byte
Nodename [65]int8 Nodename [65]byte
Release [65]int8 Release [65]byte
Version [65]int8 Version [65]byte
Machine [65]int8 Machine [65]byte
Domainname [65]int8 Domainname [65]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
...@@ -614,12 +614,12 @@ type Sysinfo_t struct { ...@@ -614,12 +614,12 @@ type Sysinfo_t struct {
} }
type Utsname struct { type Utsname struct {
Sysname [65]int8 Sysname [65]byte
Nodename [65]int8 Nodename [65]byte
Release [65]int8 Release [65]byte
Version [65]int8 Version [65]byte
Machine [65]int8 Machine [65]byte
Domainname [65]int8 Domainname [65]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
...@@ -625,12 +625,12 @@ type Sysinfo_t struct { ...@@ -625,12 +625,12 @@ type Sysinfo_t struct {
} }
type Utsname struct { type Utsname struct {
Sysname [65]uint8 Sysname [65]byte
Nodename [65]uint8 Nodename [65]byte
Release [65]uint8 Release [65]byte
Version [65]uint8 Version [65]byte
Machine [65]uint8 Machine [65]byte
Domainname [65]uint8 Domainname [65]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
...@@ -625,12 +625,12 @@ type Sysinfo_t struct { ...@@ -625,12 +625,12 @@ type Sysinfo_t struct {
} }
type Utsname struct { type Utsname struct {
Sysname [65]uint8 Sysname [65]byte
Nodename [65]uint8 Nodename [65]byte
Release [65]uint8 Release [65]byte
Version [65]uint8 Version [65]byte
Machine [65]uint8 Machine [65]byte
Domainname [65]uint8 Domainname [65]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
...@@ -642,12 +642,12 @@ type Sysinfo_t struct { ...@@ -642,12 +642,12 @@ type Sysinfo_t struct {
} }
type Utsname struct { type Utsname struct {
Sysname [65]int8 Sysname [65]byte
Nodename [65]int8 Nodename [65]byte
Release [65]int8 Release [65]byte
Version [65]int8 Version [65]byte
Machine [65]int8 Machine [65]byte
Domainname [65]int8 Domainname [65]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
...@@ -601,12 +601,12 @@ type Sysinfo_t struct { ...@@ -601,12 +601,12 @@ type Sysinfo_t struct {
} }
type Utsname struct { type Utsname struct {
Sysname [65]int8 Sysname [65]byte
Nodename [65]int8 Nodename [65]byte
Release [65]int8 Release [65]byte
Version [65]int8 Version [65]byte
Machine [65]int8 Machine [65]byte
Domainname [65]int8 Domainname [65]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
...@@ -263,11 +263,11 @@ type FdSet struct { ...@@ -263,11 +263,11 @@ type FdSet struct {
} }
type Utsname struct { type Utsname struct {
Sysname [257]int8 Sysname [257]byte
Nodename [257]int8 Nodename [257]byte
Release [257]int8 Release [257]byte
Version [257]int8 Version [257]byte
Machine [257]int8 Machine [257]byte
} }
type Ustat_t struct { type Ustat_t struct {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment