|
@@ -0,0 +1,98 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "errors"
|
|
|
+ "fmt"
|
|
|
+ "io"
|
|
|
+ "os"
|
|
|
+ "path/filepath"
|
|
|
+ "runtime"
|
|
|
+)
|
|
|
+
|
|
|
+//Auto detect and execute the correct binary
|
|
|
+func autoDetectExecutable() string {
|
|
|
+ if runtime.GOOS == "windows" {
|
|
|
+ if fileExists("arozos.exe") {
|
|
|
+ return "arozos.exe"
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if fileExists("arozos") {
|
|
|
+ return "arozos"
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //Not build from source. Look for release binary names
|
|
|
+ binaryExecPath := "arozos_" + runtime.GOOS + "_" + runtime.GOARCH
|
|
|
+ if runtime.GOOS == "windows" {
|
|
|
+ binaryExecPath += ".exe"
|
|
|
+ }
|
|
|
+
|
|
|
+ if fileExists(binaryExecPath) {
|
|
|
+ return binaryExecPath
|
|
|
+ } else {
|
|
|
+ fmt.Println("[LAUNCHER] Unable to detect ArozOS start binary")
|
|
|
+ os.Exit(1)
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func getUpdateBinaryFilename() (string, error) {
|
|
|
+ updateFiles, err := filepath.Glob("./updates/*")
|
|
|
+ if err != nil {
|
|
|
+ return "", err
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, thisFile := range updateFiles {
|
|
|
+ if !isDir(thisFile) && filepath.Ext(thisFile) != ".gz" {
|
|
|
+ //This might be the file
|
|
|
+ return thisFile, nil
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return "", errors.New("file not found")
|
|
|
+}
|
|
|
+
|
|
|
+func copy(src, dst string) (int64, error) {
|
|
|
+ sourceFileStat, err := os.Stat(src)
|
|
|
+ if err != nil {
|
|
|
+ return 0, err
|
|
|
+ }
|
|
|
+
|
|
|
+ if !sourceFileStat.Mode().IsRegular() {
|
|
|
+ return 0, errors.New("invalid file")
|
|
|
+ }
|
|
|
+
|
|
|
+ source, err := os.Open(src)
|
|
|
+ if err != nil {
|
|
|
+ return 0, err
|
|
|
+ }
|
|
|
+ defer source.Close()
|
|
|
+
|
|
|
+ destination, err := os.Create(dst)
|
|
|
+ if err != nil {
|
|
|
+ return 0, err
|
|
|
+ }
|
|
|
+ defer destination.Close()
|
|
|
+ nBytes, err := io.Copy(destination, source)
|
|
|
+ return nBytes, err
|
|
|
+}
|
|
|
+
|
|
|
+func isDir(path string) bool {
|
|
|
+ fileInfo, err := os.Stat(path)
|
|
|
+ if err != nil {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ return fileInfo.IsDir()
|
|
|
+}
|
|
|
+
|
|
|
+func fileExists(name string) bool {
|
|
|
+ _, err := os.Stat(name)
|
|
|
+ if err == nil {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ if errors.Is(err, os.ErrNotExist) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ return false
|
|
|
+}
|