summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2015-07-01 00:26:14 +0200
committerJens Georg <mail@jensge.org>2015-07-01 00:50:47 +0200
commit7b174a5ba264af10f4910cf26b76f00d3cf850cc (patch)
tree4fe9f7833f963d40f1f1bd437a6c1dbb291beece
parentcd67b9b2c771623fae793675beacdfe721b11d7a (diff)
downloadgupnp-dlna-7b174a5ba264af10f4910cf26b76f00d3cf850cc.tar.gz
Make it possible to override data dir
Using GUPNP_DLNA_PROFILE_DIR environment variable. This needs to be an absolute path. Signed-off-by: Jens Georg <mail@jensge.org>
-rw-r--r--libgupnp-dlna/gupnp-dlna-profile-loader.c37
1 files changed, 31 insertions, 6 deletions
diff --git a/libgupnp-dlna/gupnp-dlna-profile-loader.c b/libgupnp-dlna/gupnp-dlna-profile-loader.c
index 8b0e3e5..6c93cfb 100644
--- a/libgupnp-dlna/gupnp-dlna-profile-loader.c
+++ b/libgupnp-dlna/gupnp-dlna-profile-loader.c
@@ -99,6 +99,7 @@ struct _GUPnPDLNAProfileLoaderPrivate {
GList *tags_stack;
GList *dlna_profile_data_stack;
GList *restriction_data_stack;
+ char *dlna_profile_dir;
};
static GUPnPDLNANameValueListPair *
@@ -816,6 +817,7 @@ gupnp_dlna_profile_loader_dispose (GObject *object)
gupnp_dlna_profile_data_stack_free);
g_clear_pointer (&priv->restriction_data_stack,
gupnp_dlna_restriction_data_stack_free);
+ g_clear_pointer (&priv->dlna_profile_dir, g_free);
G_OBJECT_CLASS (gupnp_dlna_profile_loader_parent_class)->dispose
(object);
@@ -1369,7 +1371,7 @@ process_include (GUPnPDLNAProfileLoader *loader,
xmlFree (path);
if (!g_path_is_absolute (g_path)) {
- gchar *tmp = g_build_filename (DLNA_DATA_DIR,
+ gchar *tmp = g_build_filename (loader->priv->dlna_profile_dir,
g_path,
NULL);
g_free (g_path);
@@ -1433,6 +1435,7 @@ gupnp_dlna_profile_loader_get_from_file (GUPnPDLNAProfileLoader *loader,
xmlRelaxNGParserCtxtPtr rngp = NULL;
xmlRelaxNGPtr rngs = NULL;
GUPnPDLNAProfileLoaderPrivate *priv = loader->priv;
+ char *rng_path = NULL;
if (g_hash_table_contains (priv->files_hash, path))
goto out;
@@ -1444,9 +1447,12 @@ gupnp_dlna_profile_loader_get_from_file (GUPnPDLNAProfileLoader *loader,
goto out;
/* Load the schema for validation */
- rngp = xmlRelaxNGNewParserCtxt (DLNA_DATA_DIR
- G_DIR_SEPARATOR_S
- "dlna-profiles.rng");
+ rng_path = g_build_filename (loader->priv->dlna_profile_dir,
+ "dlna-profiles.rng",
+ NULL);
+ rngp = xmlRelaxNGNewParserCtxt (rng_path);
+ g_free (rng_path);
+
if (!rngp)
goto out;
rngs = xmlRelaxNGParse (rngp);
@@ -1506,6 +1512,8 @@ gupnp_dlna_profile_loader_get_from_dir (GUPnPDLNAProfileLoader *loader,
GDir *dir;
GList *profiles = NULL;
+ g_debug ("Loading DLNA profiles from %s", profile_dir);
+
if ((dir = g_dir_open (profile_dir, 0, NULL))) {
const gchar *entry;
@@ -1549,8 +1557,25 @@ gupnp_dlna_profile_loader_get_from_disk (GUPnPDLNAProfileLoader *loader)
g_return_val_if_fail (GUPNP_IS_DLNA_PROFILE_LOADER (loader), NULL);
- profiles = gupnp_dlna_profile_loader_get_from_dir (loader,
- DLNA_DATA_DIR);
+ if (loader->priv->dlna_profile_dir == NULL) {
+ char **env = NULL;
+ const char *profile_dir = NULL;
+
+ env = g_get_environ ();
+ profile_dir = g_environ_getenv (env, "GUPNP_DLNA_PROFILE_DIR");
+ if (profile_dir != NULL && g_path_is_absolute (profile_dir)) {
+ loader->priv->dlna_profile_dir = g_strdup (profile_dir);
+ } else {
+ loader->priv->dlna_profile_dir = g_strdup (DLNA_DATA_DIR);
+ }
+
+
+ g_strfreev (env);
+ }
+
+ profiles = gupnp_dlna_profile_loader_get_from_dir
+ (loader,
+ loader->priv->dlna_profile_dir);
profiles = g_list_reverse (profiles);