[gupnp-dlna] Make it possible to override data dir



commit 7b174a5ba264af10f4910cf26b76f00d3cf850cc
Author: Jens Georg <mail jensge org>
Date:   Wed Jul 1 00:26:14 2015 +0200

    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>

 libgupnp-dlna/gupnp-dlna-profile-loader.c |   37 ++++++++++++++++++++++++----
 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);
 


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