diff --git a/updates/get.go b/updates/get.go index 6ce99c63..d6e0be9f 100644 --- a/updates/get.go +++ b/updates/get.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "os" + "path" "path/filepath" "runtime" @@ -16,7 +17,7 @@ var ( // GetPlatformFile returns the latest platform specific file identified by the given identifier. func GetPlatformFile(identifier string) (*File, error) { - identifier = filepath.Join(fmt.Sprintf("%s_%s", runtime.GOOS, runtime.GOARCH), identifier) + identifier = path.Join(fmt.Sprintf("%s_%s", runtime.GOOS, runtime.GOARCH), identifier) // From https://golang.org/pkg/runtime/#GOARCH // GOOS is the running program's operating system target: one of darwin, freebsd, linux, and so on. // GOARCH is the running program's architecture target: one of 386, amd64, arm, s390x, and so on. @@ -25,7 +26,7 @@ func GetPlatformFile(identifier string) (*File, error) { // GetFile returns the latest generic file identified by the given identifier. func GetFile(identifier string) (*File, error) { - identifier = filepath.Join("all", identifier) + identifier = path.Join("all", identifier) return loadOrFetchFile(identifier) } diff --git a/updates/latest.go b/updates/latest.go index 615cda9f..5c90b73f 100644 --- a/updates/latest.go +++ b/updates/latest.go @@ -8,7 +8,6 @@ import ( "os" "path/filepath" "runtime" - "strings" "sync" "github.com/Safing/portbase/log" @@ -29,14 +28,14 @@ func LoadLatest() error { prefix := "all" new, err1 := ScanForLatest(filepath.Join(updateStoragePath, prefix), false) for key, val := range new { - newLocalUpdates[filepath.Join(prefix, key)] = val + newLocalUpdates[filepath.ToSlash(filepath.Join(prefix, key))] = val } // os_platform prefix = fmt.Sprintf("%s_%s", runtime.GOOS, runtime.GOARCH) new, err2 := ScanForLatest(filepath.Join(updateStoragePath, prefix), false) for key, val := range new { - newLocalUpdates[filepath.Join(prefix, key)] = val + newLocalUpdates[filepath.ToSlash(filepath.Join(prefix, key))] = val } if err1 != nil && err2 != nil { @@ -82,7 +81,11 @@ func ScanForLatest(baseDir string, hardFail bool) (latest map[string]string, las added++ } - relativePath := strings.TrimLeft(strings.TrimPrefix(path, baseDir), "/") + relativePath, err := filepath.Rel(baseDir, path) + if err != nil { + return err + } + relativePath = filepath.ToSlash(relativePath) identifierPath, version, ok := GetIdentifierAndVersion(relativePath) if !ok { return nil