Commit c1fa2770 by Ian Lance Taylor

archive/tar: support stat and device numbers on AIX

    
    Reviewed-on: https://go-review.googlesource.com/87198

From-SVN: r256810
parent 4436a3ce
ca805b704fc141d7ad61f8fcd3badbaa04b7e363 3ea7fc3b918210e7248dbc51d90af20639dc4167
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// +build linux dragonfly openbsd solaris // +build aix linux dragonfly openbsd solaris
package tar package tar
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 package tar
...@@ -54,6 +54,16 @@ func statUnix(fi os.FileInfo, h *Header) error { ...@@ -54,6 +54,16 @@ func statUnix(fi os.FileInfo, h *Header) error {
if h.Typeflag == TypeChar || h.Typeflag == TypeBlock { if h.Typeflag == TypeChar || h.Typeflag == TypeBlock {
dev := uint64(sys.Rdev) // May be int32 or uint32 dev := uint64(sys.Rdev) // May be int32 or uint32
switch runtime.GOOS { 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": case "linux":
// Copied from golang.org/x/sys/unix/dev_linux.go. // Copied from golang.org/x/sys/unix/dev_linux.go.
major := uint32((dev & 0x00000000000fff00) >> 8) major := uint32((dev & 0x00000000000fff00) >> 8)
......
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