[tracker] Fix inconsistency in determining XDG directories



commit 6c6f60d22ee0b7a77c9771b9c85bf6ccef525254
Author: Florent Viard <fviard lacie com>
Date:   Thu Jan 28 17:47:57 2010 +0100

    Fix inconsistency in determining XDG directories

 src/libtracker-common/tracker-file-utils.c |   16 +++++++++++-----
 src/libtracker-common/tracker-file-utils.h |    1 +
 src/tracker-control/tracker-control.c      |   20 +++++++++++++++-----
 3 files changed, 27 insertions(+), 10 deletions(-)
---
diff --git a/src/libtracker-common/tracker-file-utils.c b/src/libtracker-common/tracker-file-utils.c
index 7096618..843ac5e 100644
--- a/src/libtracker-common/tracker-file-utils.c
+++ b/src/libtracker-common/tracker-file-utils.c
@@ -623,8 +623,8 @@ path_has_write_access (const gchar *path,
 	return writable;
 }
 
-static gboolean
-path_has_write_access_or_was_created (const gchar *path)
+gboolean
+tracker_path_has_write_access_or_was_created (const gchar *path)
 {
 	gboolean writable;
 	gboolean exists = FALSE;
@@ -669,19 +669,25 @@ tracker_env_check_xdg_dirs (void)
 	/* Check the default XDG_DATA_HOME location */
 	g_message ("  XDG_DATA_HOME is '%s'", user_data_dir);
 
-	if (user_data_dir && path_has_write_access_or_was_created (user_data_dir)) {
+	if (user_data_dir && tracker_path_has_write_access_or_was_created (user_data_dir)) {
 		return TRUE;
 	}
 
+	user_data_dir = g_getenv ("HOME");
+
+	if (!user_data_dir || !tracker_path_has_write_access_or_was_created (user_data_dir)) {
+		user_data_dir = g_get_home_dir ();
+	}
+
 	/* Change environment, this is actually what we have on Ubuntu. */
-	new_dir = g_build_path (G_DIR_SEPARATOR_S, g_get_home_dir (), ".local", "share", NULL);
+	new_dir = g_build_path (G_DIR_SEPARATOR_S, user_data_dir, ".local", "share", NULL);
 
 	/* Check the new XDG_DATA_HOME location */
 	success = g_setenv ("XDG_DATA_HOME", new_dir, TRUE);
 
 	if (success) {
 		g_message ("  XDG_DATA_HOME set to '%s'", new_dir);
-		success = path_has_write_access_or_was_created (new_dir);
+		success = tracker_path_has_write_access_or_was_created (new_dir);
 	} else {
 		g_message ("  XDG_DATA_HOME could not be set");
 	}
diff --git a/src/libtracker-common/tracker-file-utils.h b/src/libtracker-common/tracker-file-utils.h
index 5f313dd..d5e4962 100644
--- a/src/libtracker-common/tracker-file-utils.h
+++ b/src/libtracker-common/tracker-file-utils.h
@@ -49,6 +49,7 @@ GSList * tracker_path_list_filter_duplicates       (GSList       *roots,
                                                     const gchar  *basename_exception_prefix);
 gchar *  tracker_path_evaluate_name                (const gchar  *uri);
 
+gboolean tracker_path_has_write_access_or_was_created (const gchar *path);
 gboolean tracker_env_check_xdg_dirs                (void);
 
 gboolean tracker_file_lock                         (GFile *file);
diff --git a/src/tracker-control/tracker-control.c b/src/tracker-control/tracker-control.c
index 362231d..fca74ea 100644
--- a/src/tracker-control/tracker-control.c
+++ b/src/tracker-control/tracker-control.c
@@ -372,7 +372,7 @@ main (int argc, char **argv)
 		GFile *file;
 		TrackerCrawler *crawler;
 		const gchar *suffix = ".cfg";
-		const gchar *home_dir;
+		const gchar *home_conf_dir;
 		gchar *path;
 
 		crawler = tracker_crawler_new ();
@@ -386,13 +386,23 @@ main (int argc, char **argv)
 		                  main_loop);
 
 		/* Go through service files */
-		home_dir = g_getenv ("HOME");
 
-		if (!home_dir) {
-			home_dir = g_get_home_dir ();
+
+		/* Check the default XDG_DATA_HOME location */
+		home_conf_dir = g_getenv ("XDG_CONFIG_HOME");
+
+		if (home_conf_dir && tracker_path_has_write_access_or_was_created (home_conf_dir)) {
+			path = g_build_path (G_DIR_SEPARATOR_S, home_conf_dir, "tracker", NULL);
+		} else {
+			home_conf_dir = g_getenv ("HOME");
+
+			if (!home_conf_dir || !tracker_path_has_write_access_or_was_created (home_conf_dir)) {
+				home_conf_dir = g_get_home_dir ();
+			}
+			path = g_build_path (G_DIR_SEPARATOR_S, home_conf_dir, ".config", "tracker", NULL);
 		}
 
-		path = g_build_path (G_DIR_SEPARATOR_S, home_dir, ".config", "tracker", NULL);
+
 		file = g_file_new_for_path (path);
 		g_free (path);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]