]> code.delx.au - pulseaudio/commitdiff
make PULSE_PROP env vars non-overriding but introduce PULSE_PROP_OVERRIDE for allowin...
authorLennart Poettering <lennart@poettering.net>
Fri, 13 Feb 2009 17:06:30 +0000 (18:06 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 13 Feb 2009 17:06:30 +0000 (18:06 +0100)
src/pulsecore/proplist-util.c

index 8a447cf7ca2f7a97216b6c534fadb15a07e8afec..ae8e08023d9cc47df08e8c760b6e523c1dc082c7 100644 (file)
@@ -58,18 +58,27 @@ void pa_init_proplist(pa_proplist *p) {
         for (e = environ; *e; e++) {
 
             if (pa_startswith(*e, "PULSE_PROP_")) {
-                size_t kl = strcspn(*e+11, "=");
+                size_t kl, skip;
                 char *k;
+                pa_bool_t override;
 
-                if ((*e)[11+kl] != '=')
-                    continue;
+                if (pa_startswith(*e, "PULSE_PROP_OVERRIDE_")) {
+                    skip = 20;
+                    override = TRUE;
+                } else {
+                    skip = 11;
+                    override = FALSE;
+                }
+
+                kl = strcspn(*e+skip, "=");
 
-                if (!pa_utf8_valid(*e+11+kl+1))
+                if ((*e)[skip+kl] != '=')
                     continue;
 
-                k = pa_xstrndup(*e+11, kl);
+                k = pa_xstrndup(*e+skip, kl);
 
-                pa_proplist_sets(p, k, *e+11+kl+1);
+                if (override || !pa_proplist_contains(p, k))
+                    pa_proplist_sets(p, k, *e+skip+kl+1);
                 pa_xfree(k);
             }
         }
@@ -78,6 +87,15 @@ void pa_init_proplist(pa_proplist *p) {
     if ((pp = getenv("PULSE_PROP"))) {
         pa_proplist *t;
 
+        if ((t = pa_proplist_from_string(pp))) {
+            pa_proplist_update(p, PA_UPDATE_MERGE, t);
+            pa_proplist_free(t);
+        }
+    }
+
+    if ((pp = getenv("PULSE_PROP_OVERRIDE"))) {
+        pa_proplist *t;
+
         if ((t = pa_proplist_from_string(pp))) {
             pa_proplist_update(p, PA_UPDATE_REPLACE, t);
             pa_proplist_free(t);