// +build external package main import ( "io/fs" "log" "os" "path/filepath" "strings" ) const binaryType = "external" var localFS dirFS var langFS dirFS // When using os.DirFS, even on Windows the separator seems to be '/'. // func FSJoin(elem ...string) string { return filepath.Join(elem...) } func FSJoin(elem ...string) string { sep := "/" if strings.Contains(elem[0], "\\") { sep = "\\" } path := "" for _, el := range elem { path += el + sep } return strings.TrimSuffix(path, sep) } type dirFS string func (dir dirFS) Open(name string) (fs.File, error) { return os.Open(string(dir) + "/" + name) } func (dir dirFS) ReadFile(name string) ([]byte, error) { return os.ReadFile(string(dir) + "/" + name) } func (dir dirFS) ReadDir(name string) ([]fs.DirEntry, error) { return os.ReadDir(string(dir) + "/" + name) } func loadFilesystems() { log.Println("Using external storage") executable, _ := os.Executable() localFS = dirFS(filepath.Join(filepath.Dir(executable), "data")) langFS = dirFS(filepath.Join(filepath.Dir(executable), "data", "lang")) }