github.com/sagernet/sing-box@v1.9.0-rc.20/constant/path.go (about) 1 package constant 2 3 import ( 4 "os" 5 "path/filepath" 6 7 "github.com/sagernet/sing/common/rw" 8 ) 9 10 const dirName = "sing-box" 11 12 var resourcePaths []string 13 14 func FindPath(name string) (string, bool) { 15 name = os.ExpandEnv(name) 16 if rw.FileExists(name) { 17 return name, true 18 } 19 for _, dir := range resourcePaths { 20 if path := filepath.Join(dir, dirName, name); rw.FileExists(path) { 21 return path, true 22 } 23 if path := filepath.Join(dir, name); rw.FileExists(path) { 24 return path, true 25 } 26 } 27 return name, false 28 } 29 30 func init() { 31 resourcePaths = append(resourcePaths, ".") 32 if home := os.Getenv("HOME"); home != "" { 33 resourcePaths = append(resourcePaths, home) 34 } 35 if userConfigDir, err := os.UserConfigDir(); err == nil { 36 resourcePaths = append(resourcePaths, userConfigDir) 37 } 38 if userCacheDir, err := os.UserCacheDir(); err == nil { 39 resourcePaths = append(resourcePaths, userCacheDir) 40 } 41 }