diff options
| author | Tobias Klauser <tklauser@distanz.ch> | 2017-09-13 09:11:49 +0200 |
|---|---|---|
| committer | Joe Tsai <thebrokentoaster@gmail.com> | 2017-09-13 21:02:11 +0000 |
| commit | 3098cf01754a2cda60ff2953f5c09c010d7683bf (patch) | |
| tree | d9f546033cda906255eb173c57d373922ad1bb93 /src/archive | |
| parent | 577967799c22e5a443ec49f494039f80e08202fe (diff) | |
| download | go-3098cf01754a2cda60ff2953f5c09c010d7683bf.tar.xz | |
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 <joetsai@google.com>
Diffstat (limited to 'src/archive')
| -rw-r--r-- | src/archive/tar/stat_unix.go | 24 |
1 files changed, 23 insertions, 1 deletions
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 |
