| package archive // import "github.com/docker/docker/pkg/archive" | |
| import ( | |
| "archive/tar" | |
| "os" | |
| "path/filepath" | |
| "github.com/docker/docker/pkg/idtools" | |
| "github.com/docker/docker/pkg/longpath" | |
| ) | |
| // fixVolumePathPrefix does platform specific processing to ensure that if | |
| // the path being passed in is not in a volume path format, convert it to one. | |
| func fixVolumePathPrefix(srcPath string) string { | |
| return longpath.AddPrefix(srcPath) | |
| } | |
| // getWalkRoot calculates the root path when performing a TarWithOptions. | |
| // We use a separate function as this is platform specific. | |
| func getWalkRoot(srcPath string, include string) string { | |
| return filepath.Join(srcPath, include) | |
| } | |
| // chmodTarEntry is used to adjust the file permissions used in tar header based | |
| // on the platform the archival is done. | |
| func chmodTarEntry(perm os.FileMode) os.FileMode { | |
| // Remove group- and world-writable bits. | |
| perm &= 0o755 | |
| // Add the x bit: make everything +x on Windows | |
| return perm | 0o111 | |
| } | |
| func setHeaderForSpecialDevice(hdr *tar.Header, name string, stat interface{}) (err error) { | |
| // do nothing. no notion of Rdev, Nlink in stat on Windows | |
| return | |
| } | |
| func getInodeFromStat(stat interface{}) (inode uint64, err error) { | |
| // do nothing. no notion of Inode in stat on Windows | |
| return | |
| } | |
| // handleTarTypeBlockCharFifo is an OS-specific helper function used by | |
| // createTarFile to handle the following types of header: Block; Char; Fifo | |
| func handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error { | |
| return nil | |
| } | |
| func handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo) error { | |
| return nil | |
| } | |
| func getFileUIDGID(stat interface{}) (idtools.Identity, error) { | |
| // no notion of file ownership mapping yet on Windows | |
| return idtools.Identity{UID: 0, GID: 0}, nil | |
| } |