mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	command: clean up a little
This commit is contained in:
		
							parent
							
								
									d26d7a8040
								
							
						
					
					
						commit
						4bef583b75
					
				
					 3 changed files with 68 additions and 36 deletions
				
			
		| 
						 | 
					@ -29,58 +29,58 @@
 | 
				
			||||||
#include "private.h"
 | 
					#include "private.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** \cond */
 | 
					/** \cond */
 | 
				
			||||||
typedef bool(*pw_command_func_t) (struct pw_command *command, struct pw_core *core, char **err);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static bool execute_command_module_load(struct pw_command *command,
 | 
					 | 
				
			||||||
					struct pw_core *core, char **err);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef struct pw_command *(*pw_command_parse_func_t) (const char *line, char **err);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct pw_command *parse_command_help(const char *line, char **err);
 | 
				
			||||||
static struct pw_command *parse_command_module_load(const char *line, char **err);
 | 
					static struct pw_command *parse_command_module_load(const char *line, char **err);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct impl {
 | 
					struct impl {
 | 
				
			||||||
	struct pw_command this;
 | 
						struct pw_command this;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	pw_command_func_t func;
 | 
					 | 
				
			||||||
	char **args;
 | 
					 | 
				
			||||||
	int n_args;
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct pw_command *(*pw_command_parse_func_t) (const char *line, char **err);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct command_parse {
 | 
					struct command_parse {
 | 
				
			||||||
	const char *name;
 | 
						const char *name;
 | 
				
			||||||
 | 
						const char *description;
 | 
				
			||||||
	pw_command_parse_func_t func;
 | 
						pw_command_parse_func_t func;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct command_parse parsers[] = {
 | 
					static const struct command_parse parsers[] = {
 | 
				
			||||||
	{"load-module", parse_command_module_load},
 | 
						{"help", "Show this help", parse_command_help},
 | 
				
			||||||
	{NULL, NULL}
 | 
						{"load-module", "Load a module", parse_command_module_load},
 | 
				
			||||||
 | 
						{NULL, NULL, NULL }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char whitespace[] = " \t";
 | 
					static const char whitespace[] = " \t";
 | 
				
			||||||
/** \endcond */
 | 
					/** \endcond */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct pw_command *parse_command_module_load(const char *line, char **err)
 | 
					static bool
 | 
				
			||||||
 | 
					execute_command_help(struct pw_command *command, struct pw_core *core, char **err)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fputs("Available commands:\n", stdout);
 | 
				
			||||||
 | 
						for (i = 0; parsers[i].name; i++)
 | 
				
			||||||
 | 
							fprintf(stdout, "    %20.20s\t%s\n", parsers[i].name, parsers[i].description);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct pw_command *parse_command_help(const char *line, char **err)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct impl *impl;
 | 
						struct impl *impl;
 | 
				
			||||||
 | 
						struct pw_command *this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	impl = calloc(1, sizeof(struct impl));
 | 
						impl = calloc(1, sizeof(struct impl));
 | 
				
			||||||
	if (impl == NULL)
 | 
						if (impl == NULL)
 | 
				
			||||||
		goto no_mem;
 | 
							goto no_mem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	impl->func = execute_command_module_load;
 | 
						this = &impl->this;
 | 
				
			||||||
	impl->args = pw_split_strv(line, whitespace, 3, &impl->n_args);
 | 
						this->func = execute_command_help;
 | 
				
			||||||
 | 
						this->args = pw_split_strv(line, whitespace, 1, &this->n_args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (impl->args[1] == NULL)
 | 
						return this;
 | 
				
			||||||
		goto no_module;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	impl->this.name = impl->args[0];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return &impl->this;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      no_module:
 | 
					 | 
				
			||||||
	asprintf(err, "%s requires a module name", impl->args[0]);
 | 
					 | 
				
			||||||
	pw_free_strv(impl->args);
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
      no_mem:
 | 
					      no_mem:
 | 
				
			||||||
	asprintf(err, "no memory");
 | 
						asprintf(err, "no memory");
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
| 
						 | 
					@ -89,15 +89,43 @@ static struct pw_command *parse_command_module_load(const char *line, char **err
 | 
				
			||||||
static bool
 | 
					static bool
 | 
				
			||||||
execute_command_module_load(struct pw_command *command, struct pw_core *core, char **err)
 | 
					execute_command_module_load(struct pw_command *command, struct pw_core *core, char **err)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct impl *impl = SPA_CONTAINER_OF(command, struct impl, this);
 | 
						struct pw_module *module;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (pw_module_load(core, impl->args[1], impl->args[2]) == NULL) {
 | 
						module = pw_module_load(core, command->args[1], command->args[2]);
 | 
				
			||||||
		asprintf(err, "could not load module \"%s\"", impl->args[1]);
 | 
						if (module == NULL) {
 | 
				
			||||||
 | 
							asprintf(err, "could not load module \"%s\"", command->args[1]);
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct pw_command *parse_command_module_load(const char *line, char **err)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct impl *impl;
 | 
				
			||||||
 | 
						struct pw_command *this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						impl = calloc(1, sizeof(struct impl));
 | 
				
			||||||
 | 
						if (impl == NULL)
 | 
				
			||||||
 | 
							goto no_mem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						this = &impl->this;
 | 
				
			||||||
 | 
						this->func = execute_command_module_load;
 | 
				
			||||||
 | 
						this->args = pw_split_strv(line, whitespace, 3, &this->n_args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (this->n_args < 2)
 | 
				
			||||||
 | 
							goto no_module;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      no_module:
 | 
				
			||||||
 | 
						asprintf(err, "%s requires a module name", this->args[0]);
 | 
				
			||||||
 | 
						pw_free_strv(this->args);
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					      no_mem:
 | 
				
			||||||
 | 
						asprintf(err, "no memory");
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** Free command
 | 
					/** Free command
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * \param command a command to free
 | 
					 * \param command a command to free
 | 
				
			||||||
| 
						 | 
					@ -111,7 +139,7 @@ void pw_command_free(struct pw_command *command)
 | 
				
			||||||
	struct impl *impl = SPA_CONTAINER_OF(command, struct impl, this);
 | 
						struct impl *impl = SPA_CONTAINER_OF(command, struct impl, this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spa_list_remove(&command->link);
 | 
						spa_list_remove(&command->link);
 | 
				
			||||||
	pw_free_strv(impl->args);
 | 
						pw_free_strv(command->args);
 | 
				
			||||||
	free(impl);
 | 
						free(impl);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -154,13 +182,11 @@ struct pw_command *pw_command_parse(const char *line, char **err)
 | 
				
			||||||
 * \param command: A \ref pw_command
 | 
					 * \param command: A \ref pw_command
 | 
				
			||||||
 * \param core: A \ref pw_core
 | 
					 * \param core: A \ref pw_core
 | 
				
			||||||
 * \param err: Return location for an error string, or NULL
 | 
					 * \param err: Return location for an error string, or NULL
 | 
				
			||||||
 * \return true if \a command was executed successfully, false otherwise.
 | 
					 * \return a result object or NULL when there was an error
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * \memberof pw_command
 | 
					 * \memberof pw_command
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
bool pw_command_run(struct pw_command *command, struct pw_core *core, char **err)
 | 
					bool pw_command_run(struct pw_command *command, struct pw_core *core, char **err)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct impl *impl = SPA_CONTAINER_OF(command, struct impl, this);
 | 
						return command->func(command, core, err);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	return impl->func(command, core, err);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,8 +40,7 @@ pw_command_parse(const char *line, char **err);
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
pw_command_free(struct pw_command *command);
 | 
					pw_command_free(struct pw_command *command);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool
 | 
					bool pw_command_run(struct pw_command *command, struct pw_core *core, char **err);
 | 
				
			||||||
pw_command_run(struct pw_command *command, struct pw_core *core, char **err);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,10 +32,17 @@ extern "C" {
 | 
				
			||||||
#include "pipewire/pipewire.h"
 | 
					#include "pipewire/pipewire.h"
 | 
				
			||||||
#include "pipewire/introspect.h"
 | 
					#include "pipewire/introspect.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct pw_command;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef bool (*pw_command_func_t) (struct pw_command *command, struct pw_core *core, char **err);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** \cond */
 | 
					/** \cond */
 | 
				
			||||||
struct pw_command {
 | 
					struct pw_command {
 | 
				
			||||||
 | 
						uint32_t id;		/**< id of command */
 | 
				
			||||||
	struct spa_list link;	/**< link in list of commands */
 | 
						struct spa_list link;	/**< link in list of commands */
 | 
				
			||||||
	const char *name;	/**< command name */
 | 
					        pw_command_func_t func;
 | 
				
			||||||
 | 
					        char **args;
 | 
				
			||||||
 | 
					        int n_args;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct pw_protocol {
 | 
					struct pw_protocol {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue