data_dir = get_special_folder (CSIDL_PERSONAL);
#else
data_dir = (gchar *) g_getenv ("XDG_DATA_HOME");
-#endif
if (data_dir && data_dir[0])
data_dir = g_strdup (data_dir);
- else
+#endif
+ if (!data_dir || !data_dir[0])
{
if (!g_tmp_dir)
g_get_any_init ();
- data_dir = g_build_filename (g_home_dir, ".local",
- "share", NULL);
+ if (g_home_dir)
+ data_dir = g_build_filename (g_home_dir, ".local",
+ "share", NULL);
+ else
+ data_dir = g_build_filename (g_tmp_dir, g_user_name, ".local",
+ "share", NULL);
}
g_user_data_dir = data_dir;
config_dir = get_special_folder (CSIDL_APPDATA);
#else
config_dir = (gchar *) g_getenv ("XDG_CONFIG_HOME");
-#endif
if (config_dir && config_dir[0])
config_dir = g_strdup (config_dir);
- else
+#endif
+ if (!config_dir || !config_dir[0])
{
if (!g_tmp_dir)
g_get_any_init ();
- config_dir = g_build_filename (g_home_dir, ".config", NULL);
+ if (g_home_dir)
+ config_dir = g_build_filename (g_home_dir, ".config", NULL);
+ else
+ config_dir = g_build_filename (g_tmp_dir, g_user_name, ".config", NULL);
}
g_user_config_dir = config_dir;
}
cache_dir = get_special_folder (CSIDL_INTERNET_CACHE); /* XXX correct? */
#else
cache_dir = (gchar *) g_getenv ("XDG_CACHE_HOME");
-#endif
+
if (cache_dir && cache_dir[0])
cache_dir = g_strdup (cache_dir);
- else
+#endif
+ if (!cache_dir || !cache_dir[0])
{
if (!g_tmp_dir)
g_get_any_init ();
- cache_dir = g_build_filename (g_home_dir, ".cache", NULL);
+ if (g_home_dir)
+ cache_dir = g_build_filename (g_home_dir, ".cache", NULL);
+ else
+ cache_dir = g_build_filename (g_tmp_dir, g_user_name, ".cache", NULL);
}
g_user_cache_dir = cache_dir;
}
if (!g_system_data_dirs)
{
#ifdef G_OS_WIN32
- data_dirs = g_strconcat (get_special_folder (CSIDL_COMMON_APPDATA),
- G_SEARCHPATH_SEPARATOR_S,
- get_special_folder (CSIDL_COMMON_DOCUMENTS),
- NULL);
+ char *appdata = get_special_folder (CSIDL_COMMON_APPDATA);
+ char *docs = get_special_folder (CSIDL_COMMON_DOCUMENTS);
+
+ if (appdata && docs)
+ {
+ data_dirs = g_strconcat (appdata,
+ G_SEARCHPATH_SEPARATOR_S,
+ docs,
+ NULL);
+ g_free (appdata);
+ g_free (docs);
+ }
+ else if (appdata)
+ data_dirs = appdata;
+ else if (docs)
+ data_dirs = docs;
+ else
+ data_dirs = NULL;
+
+ if (data_dirs)
+ {
+ data_dir_vector = g_strsplit (data_dirs, G_SEARCHPATH_SEPARATOR_S, 0);
+ g_free (data_dirs);
+ }
+ else
+ {
+ /* Punt, return empty list */
+ data_dir_vector = g_strsplit ("", G_SEARCHPATH_SEPARATOR_S, 0);
+ }
#else
data_dirs = (gchar *) g_getenv ("XDG_DATA_DIRS");
if (!data_dirs || !data_dirs[0])
data_dirs = "/usr/local/share/:/usr/share/";
-#endif
+
data_dir_vector = g_strsplit (data_dirs, G_SEARCHPATH_SEPARATOR_S, 0);
+#endif
g_system_data_dirs = data_dir_vector;
}
{
#ifdef G_OS_WIN32
conf_dirs = get_special_folder (CSIDL_COMMON_APPDATA);
+ if (conf_dirs)
+ {
+ conf_dir_vector = g_strsplit (conf_dirs, G_SEARCHPATH_SEPARATOR_S, 0);
+ g_free (conf_dirs);
+ }
+ else
+ {
+ /* Return empty list */
+ conf_dir_vector = g_strsplit ("", G_SEARCHPATH_SEPARATOR_S, 0);
+ }
#else
conf_dirs = (gchar *) g_getenv ("XDG_CONFIG_DIRS");
if (!conf_dirs || !conf_dirs[0])
conf_dirs = "/etc/xdg";
-#endif
+
conf_dir_vector = g_strsplit (conf_dirs, G_SEARCHPATH_SEPARATOR_S, 0);
+#endif
g_system_config_dirs = conf_dir_vector;
}