]> code.delx.au - pulseaudio/commitdiff
pacmd: Add unloading modules by name.
authorpoljar <poljarinho@gmail.com>
Wed, 30 May 2012 12:27:26 +0000 (14:27 +0200)
committerTanu Kaskinen <tanuk@iki.fi>
Mon, 4 Jun 2012 16:02:53 +0000 (19:02 +0300)
pacmd should allow unloading modules by name.
The command_unload() function was expanded to handle names while
unloading modules.

If there are multiple modules with the same name all
of them will be unloaded.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=48289
src/pulsecore/cli-command.c
src/utils/pacmd.c

index 23f79ee0d381ad2d3f9b880dc5fdb83eb39cab79..fc9465bce274342e5fc6f7323da5df1d3934c476 100644 (file)
@@ -34,6 +34,7 @@
 #include <dirent.h>
 #include <time.h>
 #include <fcntl.h>
+#include <ctype.h>
 
 #include <pulse/xmalloc.h>
 #include <pulse/error.h>
@@ -152,7 +153,7 @@ static const struct command commands[] = {
     { "ls",                      pa_cli_command_info,               NULL,                           1 },
     { "list",                    pa_cli_command_info,               NULL,                           1 },
     { "load-module",             pa_cli_command_load,               "Load a module (args: name, arguments)", 3},
-    { "unload-module",           pa_cli_command_unload,             "Unload a module (args: index)", 2},
+    { "unload-module",           pa_cli_command_unload,             "Unload a module (args: index|name)", 2},
     { "describe-module",         pa_cli_command_describe,           "Describe a module (arg: name)", 2},
     { "set-sink-volume",         pa_cli_command_sink_volume,        "Set the volume of a sink (args: index|name, volume)", 3},
     { "set-source-volume",       pa_cli_command_source_volume,      "Set the volume of a source (args: index|name, volume)", 3},
@@ -447,7 +448,7 @@ static int pa_cli_command_unload(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa
     pa_module *m;
     uint32_t idx;
     const char *i;
-    char *e;
+    pa_bool_t unloaded = FALSE;
 
     pa_core_assert_ref(c);
     pa_assert(t);
@@ -455,17 +456,31 @@ static int pa_cli_command_unload(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa
     pa_assert(fail);
 
     if (!(i = pa_tokenizer_get(t, 1))) {
-        pa_strbuf_puts(buf, "You need to specify the module index.\n");
+        pa_strbuf_puts(buf, "You need to specify the module index or name.\n");
         return -1;
     }
 
-    idx = (uint32_t) strtoul(i, &e, 10);
-    if (*e || !(m = pa_idxset_get_by_index(c->modules, idx))) {
-        pa_strbuf_puts(buf, "Invalid module index.\n");
-        return -1;
+    if (pa_atou(i, &idx) >= 0) {
+        if (!(m = pa_idxset_get_by_index(c->modules, idx))) {
+            pa_strbuf_puts(buf, "Invalid module index.\n");
+            return -1;
+        }
+
+        pa_module_unload_request(m, FALSE);
+
+    } else {
+        PA_IDXSET_FOREACH(m, c->modules, idx)
+            if (pa_streq(i, m->name)) {
+                unloaded = TRUE;
+                pa_module_unload_request(m, FALSE);
+            }
+
+        if (unloaded == FALSE) {
+            pa_strbuf_printf(buf, "Module %s not loaded.\n", i);
+            return -1;
+        }
     }
 
-    pa_module_unload_request(m, FALSE);
     return 0;
 }
 
index 7e1f33b863e565b6fc6c1a3d209b925a90a906fa..c7c693b139c0cffcb55474f4fb581929c6e75813 100644 (file)
@@ -51,7 +51,7 @@ static void help(const char *argv0) {
     printf("%s %s\n",    argv0, "stat");
     printf("%s %s\n",    argv0, "info");
     printf("%s %s %s\n", argv0, "load-module", _("NAME [ARGS ...]"));
-    printf("%s %s %s\n", argv0, "unload-module", _("#N"));
+    printf("%s %s %s\n", argv0, "unload-module", _("NAME|#N"));
     printf("%s %s %s\n", argv0, "describe-module", _("NAME"));
     printf("%s %s %s\n", argv0, "set-(sink|source)-volume", _("NAME|#N VOLUME"));
     printf("%s %s %s\n", argv0, "set-(sink-input|source-output)-volume", _("#N VOLUME"));