]> code.delx.au - pulseaudio/commitdiff
device-manager: Some efficiency and safety tweaks
authorColin Guthrie <cguthrie@mandriva.org>
Sun, 20 Sep 2009 17:39:50 +0000 (18:39 +0100)
committerColin Guthrie <cguthrie@mandriva.org>
Thu, 1 Oct 2009 08:08:31 +0000 (09:08 +0100)
src/modules/module-device-manager.c

index fba4ebe6c5c51070f721054d007da3f730e88710..5abcc75e3fb4f1cb365f3856cc409d38a9757c72 100644 (file)
@@ -431,7 +431,7 @@ static uint32_t get_role_index(const char* role) {
 static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, const char *prefix) {
     role_indexes_t *indexes, highest_priority_available;
     pa_datum key;
-    pa_bool_t done;
+    pa_bool_t done, sink_mode;
 
     pa_assert(u);
     pa_assert(prefix);
@@ -442,6 +442,8 @@ static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, c
     }
     pa_zero(highest_priority_available);
 
+    sink_mode = (strcmp(prefix, "sink:") == 0);
+
     done = !pa_database_first(u->database, &key, NULL);
 
     /* Find all existing devices with the same prefix so we find the highest priority device for each role */
@@ -465,7 +467,7 @@ static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, c
                         pa_bool_t found = FALSE;
                         char *device_name = get_name(name, prefix);
 
-                        if (strcmp(prefix, "sink:") == 0) {
+                        if (sink_mode) {
                             pa_sink *sink;
 
                             PA_IDXSET_FOREACH(sink, u->core->sinks, idx) {
@@ -944,15 +946,18 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
         if ((e = read_entry(u, device)) && ENTRY_VERSION == e->version) {
             pa_datum key, data;
             pa_bool_t done;
-            char* prefix;
+            char* prefix = NULL;
             uint32_t priority;
             pa_bool_t haschanged = FALSE;
 
             if (strncmp(device, "sink:", 5) == 0)
                 prefix = pa_xstrdup("sink:");
-            else
+            else if (strncmp(device, "source:", 7) == 0)
                 prefix = pa_xstrdup("source:");
 
+            if (!prefix)
+                goto fail;
+
             priority = e->priority[role_index];
 
             /* Now we need to load up all the other entries of this type and shuffle the priroities around */