Skip to content

Commit

Permalink
Merge pull request #1371 from dfr/freebsd-refactor
Browse files Browse the repository at this point in the history
pkg/archive: Use archive_unix.go on FreeBSD
  • Loading branch information
giuseppe committed Sep 30, 2022
2 parents a2422d3 + 8cd1f5a commit d7c40ad
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 150 deletions.
19 changes: 19 additions & 0 deletions pkg/archive/archive_bsd.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
//go:build freebsd || darwin
// +build freebsd darwin

package archive

import (
"archive/tar"
"os"

"golang.org/x/sys/unix"
)

func handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo, forceMask *os.FileMode) error {
permissionsMask := hdrInfo.Mode()
if forceMask != nil {
permissionsMask = *forceMask
}
return unix.Fchmodat(unix.AT_FDCWD, path, uint32(permissionsMask), unix.AT_SYMLINK_NOFOLLOW)
}
129 changes: 0 additions & 129 deletions pkg/archive/archive_freebsd.go

This file was deleted.

19 changes: 19 additions & 0 deletions pkg/archive/archive_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,3 +189,22 @@ func GetFileOwner(path string) (uint32, uint32, uint32, error) {
}
return 0, 0, uint32(f.Mode()), nil
}

func handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo, forceMask *os.FileMode) error {
permissionsMask := hdrInfo.Mode()
if forceMask != nil {
permissionsMask = *forceMask
}
if hdr.Typeflag == tar.TypeLink {
if fi, err := os.Lstat(hdr.Linkname); err == nil && (fi.Mode()&os.ModeSymlink == 0) {
if err := os.Chmod(path, permissionsMask); err != nil {
return err
}
}
} else if hdr.Typeflag != tar.TypeSymlink {
if err := os.Chmod(path, permissionsMask); err != nil {
return err
}
}
return nil
}
23 changes: 2 additions & 21 deletions pkg/archive/archive_unix.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//go:build !windows && !freebsd
// +build !windows,!freebsd
//go:build !windows
// +build !windows

package archive

Expand Down Expand Up @@ -101,25 +101,6 @@ func handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error {
return system.Mknod(path, mode, system.Mkdev(hdr.Devmajor, hdr.Devminor))
}

func handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo, forceMask *os.FileMode) error {
permissionsMask := hdrInfo.Mode()
if forceMask != nil {
permissionsMask = *forceMask
}
if hdr.Typeflag == tar.TypeLink {
if fi, err := os.Lstat(hdr.Linkname); err == nil && (fi.Mode()&os.ModeSymlink == 0) {
if err := os.Chmod(path, permissionsMask); err != nil {
return err
}
}
} else if hdr.Typeflag != tar.TypeSymlink {
if err := os.Chmod(path, permissionsMask); err != nil {
return err
}
}
return nil
}

// Hardlink without symlinks
func handleLLink(targetPath, path string) error {
// Note: on Linux, the link syscall will not follow symlinks.
Expand Down

0 comments on commit d7c40ad

Please sign in to comment.