From: Ian Lance Taylor Date: Wed, 17 Jan 2018 18:33:50 +0000 (+0000) Subject: archive/tar: support stat and device numbers on AIX X-Git-Tag: upstream/12.2.0~33990 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c1fa27707a4542803c1c04fba57eeee46c214f09;p=platform%2Fupstream%2Fgcc.git archive/tar: support stat and device numbers on AIX Reviewed-on: https://go-review.googlesource.com/87198 From-SVN: r256810 --- diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index b6f59a6..fb7da45e 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 cf9cc79..1bdd1c9 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 868105f..c37a57a 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)