From c1fa27707a4542803c1c04fba57eeee46c214f09 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 17 Jan 2018 18:33:50 +0000 Subject: [PATCH] archive/tar: support stat and device numbers on AIX Reviewed-on: https://go-review.googlesource.com/87198 From-SVN: r256810 --- gcc/go/gofrontend/MERGE | 2 +- libgo/go/archive/tar/stat_actime1.go | 2 +- libgo/go/archive/tar/stat_unix.go | 12 +++++++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index b6f59a63860..fb7da45eda0 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -ca805b704fc141d7ad61f8fcd3badbaa04b7e363 +3ea7fc3b918210e7248dbc51d90af20639dc4167 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/go/archive/tar/stat_actime1.go b/libgo/go/archive/tar/stat_actime1.go index cf9cc79c591..1bdd1c9dcb2 100644 --- a/libgo/go/archive/tar/stat_actime1.go +++ b/libgo/go/archive/tar/stat_actime1.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build linux dragonfly openbsd solaris +// +build aix linux dragonfly openbsd solaris package tar diff --git a/libgo/go/archive/tar/stat_unix.go b/libgo/go/archive/tar/stat_unix.go index 868105f338e..c37a57a84c0 100644 --- a/libgo/go/archive/tar/stat_unix.go +++ b/libgo/go/archive/tar/stat_unix.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build linux darwin dragonfly freebsd openbsd netbsd solaris +// +build aix linux darwin dragonfly freebsd openbsd netbsd solaris package tar @@ -54,6 +54,16 @@ func statUnix(fi os.FileInfo, h *Header) error { if h.Typeflag == TypeChar || h.Typeflag == TypeBlock { dev := uint64(sys.Rdev) // May be int32 or uint32 switch runtime.GOOS { + case "aix": + var major, minor uint32 + if runtime.GOARCH == "ppc64" { + major = uint32((dev & 0x3fffffff00000000) >> 32) + minor = uint32((dev & 0x00000000ffffffff) >> 0) + } else { + major = uint32((dev >> 16) & 0xffff) + minor = uint32(dev & 0xffff) + } + h.Devmajor, h.Devminor = int64(major), int64(minor) case "linux": // Copied from golang.org/x/sys/unix/dev_linux.go. major := uint32((dev & 0x00000000000fff00) >> 8) -- 2.30.2