diff --git a/config.go b/config.go index 297a9400..822cd592 100644 --- a/config.go +++ b/config.go @@ -149,6 +149,11 @@ func saveConfigToFile() { } s := hashEncode(base64.StdEncoding.EncodeToString(b)) + dir := filepath.Dir(confname) + if err := os.MkdirAll(dir, 0700); err != nil { + PrintErrorAndExit("create config directory: %v", err) + } + fd, err := os.Create(confname) if err != nil { PrintErrorAndExit("save config: %v", err) @@ -165,6 +170,11 @@ func getConfigName() string { if runtime.GOOS == "windows" { return filepath.Join(os.Getenv("USERPROFILE"), ".upx.cfg") } + + if xdgConfigHome := os.Getenv("XDG_CONFIG_HOME"); xdgConfigHome != "" { + return filepath.Join(xdgConfigHome, "upx", "config") + } + return filepath.Join(os.Getenv("HOME"), ".upx.cfg") } diff --git a/db.go b/db.go index 8ac51b52..4e6a608c 100644 --- a/db.go +++ b/db.go @@ -35,6 +35,11 @@ func getDBName() string { if runtime.GOOS == "windows" { return filepath.Join(os.Getenv("USERPROFILE"), ".upx.db") } + + if xdgDataHome := os.Getenv("XDG_DATA_HOME"); xdgDataHome != "" { + return filepath.Join(xdgDataHome, "upx", "upx.db") + } + return filepath.Join(os.Getenv("HOME"), ".upx.db") } @@ -182,7 +187,13 @@ func diffFileMetas(src []*fileMeta, dst []*fileMeta) []*fileMeta { } func initDB() (err error) { - db, err = leveldb.OpenFile(getDBName(), nil) + dbName := getDBName() + dir := filepath.Dir(dbName) + if err := os.MkdirAll(dir, 0700); err != nil { + PrintErrorAndExit("create db directory: %v", err) + } + + db, err = leveldb.OpenFile(dbName, nil) if err != nil { Print("db %v %s", err, getDBName()) }