pw-cli: implement unload_module

Fixes #4276
This commit is contained in:
Wim Taymans 2024-09-23 15:46:33 +02:00
parent 322829cb2e
commit b5f9409c12

View file

@ -164,14 +164,17 @@ static void print_params(struct spa_param_info *params, uint32_t n_params, char
} }
} }
#if 0
static bool do_not_implemented(struct data *data, const char *cmd, char *args, char **error) static bool do_not_implemented(struct data *data, const char *cmd, char *args, char **error)
{ {
*error = spa_aprintf("Command \"%s\" not yet implemented", cmd); *error = spa_aprintf("Command \"%s\" not yet implemented", cmd);
return false; return false;
} }
#endif
static bool do_help(struct data *data, const char *cmd, char *args, char **error); static bool do_help(struct data *data, const char *cmd, char *args, char **error);
static bool do_load_module(struct data *data, const char *cmd, char *args, char **error); static bool do_load_module(struct data *data, const char *cmd, char *args, char **error);
static bool do_unload_module(struct data *data, const char *cmd, char *args, char **error);
static bool do_list_objects(struct data *data, const char *cmd, char *args, char **error); static bool do_list_objects(struct data *data, const char *cmd, char *args, char **error);
static bool do_connect(struct data *data, const char *cmd, char *args, char **error); static bool do_connect(struct data *data, const char *cmd, char *args, char **error);
static bool do_disconnect(struct data *data, const char *cmd, char *args, char **error); static bool do_disconnect(struct data *data, const char *cmd, char *args, char **error);
@ -195,7 +198,7 @@ static bool do_quit(struct data *data, const char *cmd, char *args, char **error
static const struct command command_list[] = { static const struct command command_list[] = {
{ "help", "h", "Show this help", do_help }, { "help", "h", "Show this help", do_help },
{ "load-module", "lm", "Load a module. <module-name> [<module-arguments>]", do_load_module }, { "load-module", "lm", "Load a module. <module-name> [<module-arguments>]", do_load_module },
{ "unload-module", "um", "Unload a module. <module-var>", do_not_implemented }, { "unload-module", "um", "Unload a module. <module-var>", do_unload_module },
{ "connect", "con", "Connect to a remote. [<remote-name>]", do_connect }, { "connect", "con", "Connect to a remote. [<remote-name>]", do_connect },
{ "disconnect", "dis", "Disconnect from a remote. [<remote-var>]", do_disconnect }, { "disconnect", "dis", "Disconnect from a remote. [<remote-var>]", do_disconnect },
{ "list-remotes", "lr", "List connected remotes.", do_list_remotes }, { "list-remotes", "lr", "List connected remotes.", do_list_remotes },
@ -264,6 +267,29 @@ static bool do_load_module(struct data *data, const char *cmd, char *args, char
return true; return true;
} }
static bool do_unload_module(struct data *data, const char *cmd, char *args, char **error)
{
char *a[1];
int n;
struct pw_impl_module *module;
uint32_t idx;
n = pw_split_ip(args, WHITESPACE, 1, a);
if (n < 1) {
*error = spa_aprintf("%s <module-var>", cmd);
return false;
}
idx = atoi(a[0]);
module = pw_map_lookup(&data->vars, idx);
if (module == NULL) {
*error = spa_aprintf("%s: unknown module '%s'", cmd, a[0]);
return false;
}
pw_map_remove(&data->vars, idx);
pw_impl_module_destroy(module);
return true;
}
static void on_core_info(void *_data, const struct pw_core_info *info) static void on_core_info(void *_data, const struct pw_core_info *info)
{ {
struct remote_data *rd = _data; struct remote_data *rd = _data;