[PATCH 3/6] linux.c: update the default path retriaval

Lubomir I. Ivanov neolit123 at gmail.com
Tue Oct 6 03:10:18 PDT 2015


From: "Lubomir I. Ivanov" <neolit123 at gmail.com>

- added system_default_directory()
- both system_default_directory() and system_default_filename()
now use the helper system_default_path_append()
- less safer compared to windows.c, assuming the OS
is stricter on which environment variables exist!

Signed-off-by: Lubomir I. Ivanov <neolit123 at gmail.com>
---

NOTE: only tested within a generic test.c file!
---
 linux.c | 51 +++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 39 insertions(+), 12 deletions(-)

diff --git a/linux.c b/linux.c
index 8f8ec60..f517733 100644
--- a/linux.c
+++ b/linux.c
@@ -48,24 +48,51 @@ void subsurface_user_info(struct user_info *user)
 	}
 }
 
-const char *system_default_filename(void)
+static const char *system_default_path_append(const char *append)
 {
-	const char *home, *user;
-	char *buffer;
-	int len;
-
-	home = getenv("HOME");
+	const char *home = getenv("HOME");
 	if (!home)
 		home = "~";
-	user = getenv("LOGNAME");
-	if (!user)
-		user = "default";
-	len = strlen(home) + strlen(user) + 17;
-	buffer = malloc(len);
-	snprintf(buffer, len, "%s/subsurface/%s.xml", home, user);
+	const char *path = "/subsurface";
+
+	int len = strlen(home) + strlen(path) + 1;
+	if (append)
+		len += strlen(append) + 1;
+
+	char *buffer = (char *)malloc(len);
+	memset(buffer, 0, len);
+	strcat(buffer, home);
+	strcat(buffer, path);
+	if (append) {
+		strcat(buffer, "/");
+		strcat(buffer, append);
+	}
+
 	return buffer;
 }
 
+const char *system_default_directory(void)
+{
+	static const char *path = NULL;
+	if (!path)
+		path = system_default_path_append(NULL);
+	return path;
+}
+
+const char *system_default_filename(void)
+{
+	static char filename[128] = { 0 };
+	if (!*filename) {
+		const char *user = getenv("LOGNAME");
+		strcat(filename, user);
+		strcat(filename, ".xml");
+	}
+	static const char *path = NULL;
+	if (!path)
+		path = system_default_path_append(filename);
+	return path;
+}
+
 int enumerate_devices(device_callback_t callback, void *userdata, int dc_type)
 {
 	int index = -1, entries = 0;
-- 
1.7.11.msysgit.0



More information about the subsurface mailing list