summaryrefslogtreecommitdiff
path: root/vendor/github.com/mrunalp/fileutils/fileutils.go
diff options
context:
space:
mode:
authorGiuseppe Scrivano <gscrivan@redhat.com>2021-03-17 14:43:10 +0100
committerGiuseppe Scrivano <gscrivan@redhat.com>2021-03-18 20:27:25 +0100
commitec1651fbf11c4d3d1c792e7f46139ebd96f7ffb2 (patch)
tree61606abbce5e8efbf0c1f0c0ff6fe1c785c8a203 /vendor/github.com/mrunalp/fileutils/fileutils.go
parent77b3a2df645f2548f7bd2da85bbdb17e4de98310 (diff)
downloadpodman-ec1651fbf11c4d3d1c792e7f46139ebd96f7ffb2.tar.gz
podman-ec1651fbf11c4d3d1c792e7f46139ebd96f7ffb2.tar.bz2
podman-ec1651fbf11c4d3d1c792e7f46139ebd96f7ffb2.zip
Bump github.com/containers/storage from 1.25.0 to 1.28.0
Bumps [github.com/containers/storage](https://github.com/containers/storage) from 1.25.0 to 1.28.0. - [Release notes](https://github.com/containers/storage/releases) - [Changelog](https://github.com/containers/storage/blob/master/docs/containers-storage-changes.md) - [Commits](https://github.com/containers/storage/compare/v1.25.0...v1.28.0) Signed-off-by: dependabot-preview[bot] <support@dependabot.com> Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Diffstat (limited to 'vendor/github.com/mrunalp/fileutils/fileutils.go')
-rw-r--r--vendor/github.com/mrunalp/fileutils/fileutils.go52
1 files changed, 31 insertions, 21 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.