summaryrefslogtreecommitdiff
path: root/vendor/github.com/mrunalp/fileutils
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/mrunalp/fileutils')
-rw-r--r--vendor/github.com/mrunalp/fileutils/fileutils.go52
-rw-r--r--vendor/github.com/mrunalp/fileutils/go.mod3
-rw-r--r--vendor/github.com/mrunalp/fileutils/idtools.go9
3 files changed, 41 insertions, 23 deletions
diff --git a/vendor/github.com/mrunalp/fileutils/fileutils.go b/vendor/github.com/mrunalp/fileutils/fileutils.go
index 5a9818a24..7421e6207 100644
--- a/vendor/github.com/mrunalp/fileutils/fileutils.go
+++ b/vendor/github.com/mrunalp/fileutils/fileutils.go
@@ -22,9 +22,10 @@ func CopyFile(source string, dest string) error {
uid := int(st.Uid)
gid := int(st.Gid)
+ modeType := si.Mode() & os.ModeType
// Handle symlinks
- if si.Mode()&os.ModeSymlink != 0 {
+ if modeType == os.ModeSymlink {
target, err := os.Readlink(source)
if err != nil {
return err
@@ -35,15 +36,14 @@ func CopyFile(source string, dest string) error {
}
// Handle device files
- if st.Mode&syscall.S_IFMT == syscall.S_IFBLK || st.Mode&syscall.S_IFMT == syscall.S_IFCHR {
+ if modeType == os.ModeDevice {
devMajor := int64(major(uint64(st.Rdev)))
devMinor := int64(minor(uint64(st.Rdev)))
- mode := uint32(si.Mode() & 07777)
- if st.Mode&syscall.S_IFMT == syscall.S_IFBLK {
- mode |= syscall.S_IFBLK
- }
- if st.Mode&syscall.S_IFMT == syscall.S_IFCHR {
+ mode := uint32(si.Mode() & os.ModePerm)
+ if si.Mode()&os.ModeCharDevice != 0 {
mode |= syscall.S_IFCHR
+ } else {
+ mode |= syscall.S_IFBLK
}
if err := syscall.Mknod(dest, mode, int(mkdev(devMajor, devMinor))); err != nil {
return err
@@ -52,19 +52,7 @@ func CopyFile(source string, dest string) error {
// Handle regular files
if si.Mode().IsRegular() {
- sf, err := os.Open(source)
- if err != nil {
- return err
- }
- defer sf.Close()
-
- df, err := os.Create(dest)
- if err != nil {
- return err
- }
- defer df.Close()
-
- _, err = io.Copy(df, sf)
+ err = copyInternal(source, dest)
if err != nil {
return err
}
@@ -76,7 +64,7 @@ func CopyFile(source string, dest string) error {
}
// Chmod the file
- if !(si.Mode()&os.ModeSymlink == os.ModeSymlink) {
+ if !(modeType == os.ModeSymlink) {
if err := os.Chmod(dest, si.Mode()); err != nil {
return err
}
@@ -85,6 +73,28 @@ func CopyFile(source string, dest string) error {
return nil
}
+func copyInternal(source, dest string) (retErr error) {
+ sf, err := os.Open(source)
+ if err != nil {
+ return err
+ }
+ defer sf.Close()
+
+ df, err := os.Create(dest)
+ if err != nil {
+ return err
+ }
+ defer func() {
+ err := df.Close()
+ if retErr == nil {
+ retErr = err
+ }
+ }()
+
+ _, err = io.Copy(df, sf)
+ return err
+}
+
// CopyDirectory copies the files under the source directory
// to dest directory. The dest directory is created if it
// does not exist.
diff --git a/vendor/github.com/mrunalp/fileutils/go.mod b/vendor/github.com/mrunalp/fileutils/go.mod
new file mode 100644
index 000000000..d8971cabc
--- /dev/null
+++ b/vendor/github.com/mrunalp/fileutils/go.mod
@@ -0,0 +1,3 @@
+module github.com/mrunalp/fileutils
+
+go 1.13
diff --git a/vendor/github.com/mrunalp/fileutils/idtools.go b/vendor/github.com/mrunalp/fileutils/idtools.go
index 161aec8f5..bad6539df 100644
--- a/vendor/github.com/mrunalp/fileutils/idtools.go
+++ b/vendor/github.com/mrunalp/fileutils/idtools.go
@@ -3,6 +3,7 @@ package fileutils
import (
"os"
"path/filepath"
+ "syscall"
)
// MkdirAllNewAs creates a directory (include any along the path) and then modifies
@@ -14,9 +15,13 @@ func MkdirAllNewAs(path string, mode os.FileMode, ownerUID, ownerGID int) error
// so that we can chown all of them properly at the end. If chownExisting is false, we won't
// chown the full directory path if it exists
var paths []string
- if _, err := os.Stat(path); err != nil && os.IsNotExist(err) {
+ st, err := os.Stat(path)
+ if err != nil && os.IsNotExist(err) {
paths = []string{path}
} else if err == nil {
+ if !st.IsDir() {
+ return &os.PathError{Op: "mkdir", Path: path, Err: syscall.ENOTDIR}
+ }
// nothing to do; directory path fully exists already
return nil
}
@@ -34,7 +39,7 @@ func MkdirAllNewAs(path string, mode os.FileMode, ownerUID, ownerGID int) error
}
}
- if err := os.MkdirAll(path, mode); err != nil && !os.IsExist(err) {
+ if err := os.MkdirAll(path, mode); err != nil {
return err
}