From 2e26cdb33d743526bd6d6e1bf3590ce93003b8f5 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Fri, 24 Sep 2021 23:03:53 +0900 Subject: [PATCH] Eval symlinks --- main.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index 110b083..8233c78 100644 --- a/main.go +++ b/main.go @@ -935,6 +935,11 @@ func doMain() int { } if root == "" { path, _ := filepath.Abs(arg) + path, err = filepath.EvalSymlinks(path) + if err != nil { + errorLine(fmt.Sprintf("jvgrep: %s: No such file or directory", arg)) + os.Exit(1) + } fi, err := os.Lstat(path) if err != nil { errorLine(fmt.Sprintf("jvgrep: %s: No such file or directory", arg)) @@ -1030,24 +1035,30 @@ func doMain() int { println("root:", root) } - walker.Walk(root, func(path string, mode os.FileInfo) error { + walker.Walk(root, func(path string, fi os.FileInfo) error { path = filepath.ToSlash(path) + if fi.Mode()&os.ModeSymlink != 0 { + path, err = filepath.EvalSymlinks(path) + if err != nil { + return err + } + } if ere != nil && ere.MatchString(path) { - if mode.IsDir() { + if fi.IsDir() { return filepath.SkipDir } return nil } - if mode.IsDir() { + if fi.IsDir() { if path == "." || recursive || len(path) <= len(root) || dre.MatchString(path+"/") { return nil } return filepath.SkipDir } - if fre.MatchString(path) && mode.Mode().IsRegular() { + if fre.MatchString(path) && fi.Mode().IsRegular() { if verbose { println("search:", path) }