From: Tobias Klauser Date: Wed, 13 Sep 2017 07:11:49 +0000 (+0200) Subject: archive/tar: populate Devmajor and Devminor in FileInfoHeader on *BSD X-Git-Tag: go1.10beta1~1109 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3098cf01754a2cda60ff2953f5c09c010d7683bf;p=gostls13.git archive/tar: populate Devmajor and Devminor in FileInfoHeader on *BSD Extract device major/minor number on all the BSDs and set Devmajor and Devminor in FileInfoHeader. Code based on the corresponding Major/Minor implementations in golang.org/x/sys/unix. Change-Id: Ieffa7ce0cdbe6481950de666b2f5f88407a32382 Reviewed-on: https://go-review.googlesource.com/63470 Reviewed-by: Joe Tsai --- diff --git a/src/archive/tar/stat_unix.go b/src/archive/tar/stat_unix.go index ba7d83d24f..868105f338 100644 --- a/src/archive/tar/stat_unix.go +++ b/src/archive/tar/stat_unix.go @@ -66,8 +66,30 @@ func statUnix(fi os.FileInfo, h *Header) error { major := uint32((dev >> 24) & 0xff) minor := uint32(dev & 0xffffff) h.Devmajor, h.Devminor = int64(major), int64(minor) + case "dragonfly": + // Copied from golang.org/x/sys/unix/dev_dragonfly.go. + major := uint32((dev >> 8) & 0xff) + minor := uint32(dev & 0xffff00ff) + h.Devmajor, h.Devminor = int64(major), int64(minor) + case "freebsd": + // Copied from golang.org/x/sys/unix/dev_freebsd.go. + major := uint32((dev >> 8) & 0xff) + minor := uint32(dev & 0xffff00ff) + h.Devmajor, h.Devminor = int64(major), int64(minor) + case "netbsd": + // Copied from golang.org/x/sys/unix/dev_netbsd.go. + major := uint32((dev & 0x000fff00) >> 8) + minor := uint32((dev & 0x000000ff) >> 0) + minor |= uint32((dev & 0xfff00000) >> 12) + h.Devmajor, h.Devminor = int64(major), int64(minor) + case "openbsd": + // Copied from golang.org/x/sys/unix/dev_openbsd.go. + major := uint32((dev & 0x0000ff00) >> 8) + minor := uint32((dev & 0x000000ff) >> 0) + minor |= uint32((dev & 0xffff0000) >> 8) + h.Devmajor, h.Devminor = int64(major), int64(minor) default: - // TODO: Implement others (see https://golang.org/issue/8106) + // TODO: Implement solaris (see https://golang.org/issue/8106) } } return nil