aboutsummaryrefslogtreecommitdiff
path: root/filesystem/path.go
diff options
context:
space:
mode:
Diffstat (limited to 'filesystem/path.go')
-rw-r--r--filesystem/path.go17
1 files changed, 17 insertions, 0 deletions
diff --git a/filesystem/path.go b/filesystem/path.go
index 274dc0a..fa38701 100644
--- a/filesystem/path.go
+++ b/filesystem/path.go
@@ -23,6 +23,7 @@ import (
"fmt"
"log"
"os"
+ "path/filepath"
"golang.org/x/sys/unix"
@@ -40,6 +41,22 @@ func OpenFileOverridingUmask(name string, flag int, perm os.FileMode) (*os.File,
// We only check the unix permissions and the sticky bit
const permMask = os.ModeSticky | os.ModePerm
+// canonicalizePath turns path into an absolute path without symlinks.
+func canonicalizePath(path string) (string, error) {
+ path, err := filepath.Abs(path)
+ if err != nil {
+ return "", err
+ }
+ path, err = filepath.EvalSymlinks(path)
+
+ // Get a better error if we have an invalid path
+ if pathErr, ok := err.(*os.PathError); ok {
+ err = errors.Wrap(pathErr.Err, pathErr.Path)
+ }
+
+ return path, err
+}
+
// loggedStat runs os.Stat, but it logs the error if stat returns any error
// other than nil or IsNotExist.
func loggedStat(name string) (os.FileInfo, error) {