mirror of
				https://github.com/containers/podman.git
				synced 2025-11-01 02:42:11 +08:00 
			
		
		
		
	vendor: update everything
* If possible, update each dependency to the latest available version. * Use releases over commit IDs and avoid vendoring branches. Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
This commit is contained in:
		
							
								
								
									
										72
									
								
								vendor/github.com/vbatts/tar-split/archive/tar/stat_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										72
									
								
								vendor/github.com/vbatts/tar-split/archive/tar/stat_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -8,6 +8,10 @@ package tar | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"os/user" | ||||
| 	"runtime" | ||||
| 	"strconv" | ||||
| 	"sync" | ||||
| 	"syscall" | ||||
| ) | ||||
|  | ||||
| @ -15,6 +19,10 @@ func init() { | ||||
| 	sysStat = statUnix | ||||
| } | ||||
|  | ||||
| // userMap and groupMap caches UID and GID lookups for performance reasons. | ||||
| // The downside is that renaming uname or gname by the OS never takes effect. | ||||
| var userMap, groupMap sync.Map // map[int]string | ||||
|  | ||||
| func statUnix(fi os.FileInfo, h *Header) error { | ||||
| 	sys, ok := fi.Sys().(*syscall.Stat_t) | ||||
| 	if !ok { | ||||
| @ -22,11 +30,67 @@ func statUnix(fi os.FileInfo, h *Header) error { | ||||
| 	} | ||||
| 	h.Uid = int(sys.Uid) | ||||
| 	h.Gid = int(sys.Gid) | ||||
| 	// TODO(bradfitz): populate username & group.  os/user | ||||
| 	// doesn't cache LookupId lookups, and lacks group | ||||
| 	// lookup functions. | ||||
|  | ||||
| 	// Best effort at populating Uname and Gname. | ||||
| 	// The os/user functions may fail for any number of reasons | ||||
| 	// (not implemented on that platform, cgo not enabled, etc). | ||||
| 	if u, ok := userMap.Load(h.Uid); ok { | ||||
| 		h.Uname = u.(string) | ||||
| 	} else if u, err := user.LookupId(strconv.Itoa(h.Uid)); err == nil { | ||||
| 		h.Uname = u.Username | ||||
| 		userMap.Store(h.Uid, h.Uname) | ||||
| 	} | ||||
| 	if g, ok := groupMap.Load(h.Gid); ok { | ||||
| 		h.Gname = g.(string) | ||||
| 	} else if g, err := user.LookupGroupId(strconv.Itoa(h.Gid)); err == nil { | ||||
| 		h.Gname = g.Name | ||||
| 		groupMap.Store(h.Gid, h.Gname) | ||||
| 	} | ||||
|  | ||||
| 	h.AccessTime = statAtime(sys) | ||||
| 	h.ChangeTime = statCtime(sys) | ||||
| 	// TODO(bradfitz): major/minor device numbers? | ||||
|  | ||||
| 	// Best effort at populating Devmajor and Devminor. | ||||
| 	if h.Typeflag == TypeChar || h.Typeflag == TypeBlock { | ||||
| 		dev := uint64(sys.Rdev) // May be int32 or uint32 | ||||
| 		switch runtime.GOOS { | ||||
| 		case "linux": | ||||
| 			// Copied from golang.org/x/sys/unix/dev_linux.go. | ||||
| 			major := uint32((dev & 0x00000000000fff00) >> 8) | ||||
| 			major |= uint32((dev & 0xfffff00000000000) >> 32) | ||||
| 			minor := uint32((dev & 0x00000000000000ff) >> 0) | ||||
| 			minor |= uint32((dev & 0x00000ffffff00000) >> 12) | ||||
| 			h.Devmajor, h.Devminor = int64(major), int64(minor) | ||||
| 		case "darwin": | ||||
| 			// Copied from golang.org/x/sys/unix/dev_darwin.go. | ||||
| 			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 solaris (see https://golang.org/issue/8106) | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Valentin Rothberg
					Valentin Rothberg