From 18d207ef1777d9c713192f39f671ae1902f8c94a Mon Sep 17 00:00:00 2001
From: Joe <rbo@gmx.us>
Date: Tue, 23 Jan 2024 20:20:20 +0100
Subject: segv

---
 src/c_hardflip.go |  2 +-
 src/c_utils.go    | 28 ++++++++++++++++++----------
 src/i_events.go   |  2 +-
 src/i_ui.go       |  4 +++-
 4 files changed, 23 insertions(+), 13 deletions(-)

(limited to 'src')

diff --git a/src/c_hardflip.go b/src/c_hardflip.go
index 8ffdaba..fa6dfb4 100644
--- a/src/c_hardflip.go
+++ b/src/c_hardflip.go
@@ -63,7 +63,7 @@ type HardData struct {
 }
 
 func main() {
-	data_dir := c_get_data_dir()
+	data_dir := c_get_data_dir(nil)
 	opts := HardOpts{true, true, false, ""}
 	i_ui(data_dir, opts)
 }
diff --git a/src/c_utils.go b/src/c_utils.go
index 72761d8..84479ce 100644
--- a/src/c_utils.go
+++ b/src/c_utils.go
@@ -60,8 +60,8 @@ import (
 // not exist
 // the first path being checked is $XDG_DATA_HOME then $HOME/.local/share
 // it returns the full data directory path
-func c_get_data_dir() string {
-	var ptr *string
+func c_get_data_dir(ui *HardUI) string {
+	var ptr string
 	var home string
 	if home = os.Getenv("HOME"); len(home) == 0 {
 		c_die("env variable HOME not defined", nil)
@@ -69,18 +69,26 @@ func c_get_data_dir() string {
 	xdg_home := os.Getenv("XDG_DATA_HOME")
 
 	if len(xdg_home) > 0 {
-		ptr = &xdg_home
+		ptr = xdg_home + "/qwe"
 	} else {
-		ptr = &home
-		*ptr += "/.local/share"
+		ptr = home + "/.local/share"
 	}
-	*ptr += "/" + DATA_DIR_NAME
-	if _, err := os.Stat(*ptr); os.IsNotExist(err) {
-	    if err := os.MkdirAll(*ptr, os.ModePerm); err != nil {
-	        c_die("could not create path " + *ptr, err)
+	ptr += "/" + DATA_DIR_NAME
+	if _, err := os.Stat(ptr); os.IsNotExist(err) {
+	    if err := os.MkdirAll(ptr, os.ModePerm); err != nil {
+			if ui == nil {
+				c_die("could not create path " + ptr, err)
+			}
+			c_error_mode("could not create path" + ptr, err, ui)
 	    }
+	} else if err != nil {
+		if ui == nil {
+			c_die("could read path " + ptr, err)
+		}
+		c_error_mode("could read path" + ptr, err, ui)
+		// FIX: segv
 	}
-	return *ptr
+	return ptr
 }
 
 // c_die displays an error string to the stderr fd and exits the program
diff --git a/src/i_events.go b/src/i_events.go
index f0ee03b..11703da 100644
--- a/src/i_events.go
+++ b/src/i_events.go
@@ -166,7 +166,7 @@ func i_fold_dir(data *HardData, item *ItemsNode) {
 }
 
 func i_reload_data(data *HardData) {
-	data.data_dir = c_get_data_dir()
+	data.data_dir = c_get_data_dir(&data.ui)
 	g_load_count = -1
 	data.ldirs, data.litems, data.load_err = i_load_ui(data.data_dir, data.opts,
 		&data.ui)
diff --git a/src/i_ui.go b/src/i_ui.go
index ea2a593..83cdf4d 100644
--- a/src/i_ui.go
+++ b/src/i_ui.go
@@ -328,7 +328,9 @@ func i_load_ui(data_dir string,
 	ui.mode = LOAD_MODE
 	ldirs, load_err := c_load_data_dir(data_dir, opts, ui)
 	litems := c_load_litems(ldirs)
-	ui.mode = NORMAL_MODE
+	if ui.mode != ERROR_MODE {
+		ui.mode = NORMAL_MODE
+	}
 	if len(load_err) == 0 {
 		load_err = nil
 	}
-- 
cgit v1.2.3