[tracker] Fix inconsistency in determining XDG directories
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker] Fix inconsistency in determining XDG directories
- Date: Thu, 28 Jan 2010 17:24:05 +0000 (UTC)
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]