mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
media-session: accept multiple -p, -e, and -d command-line arguments
Combine arguments together if given multiple times, instead of using the last one. Useful, since pipewire.conf appears to not do quotes. Fixes !348
This commit is contained in:
parent
7f3a878dd3
commit
09265e116e
1 changed files with 41 additions and 7 deletions
|
|
@ -2206,6 +2206,26 @@ static bool is_opt_enabled(struct impl *impl, const char *val)
|
|||
!opt_contains(impl->opt_disabled, val);
|
||||
}
|
||||
|
||||
static int append_opt_str(char **p, char *sep, char *str)
|
||||
{
|
||||
char *buf;
|
||||
size_t size = strlen(*p) + strlen(sep) + strlen(str) + 1;
|
||||
|
||||
if (**p == '\0') {
|
||||
free(*p);
|
||||
*p = strdup(str);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((buf = malloc(size)) == NULL)
|
||||
return -1;
|
||||
|
||||
snprintf(buf, size, "%s%s%s", *p, sep, str);
|
||||
free(*p);
|
||||
*p = buf;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void show_help(const char *name, struct impl *impl)
|
||||
{
|
||||
size_t i;
|
||||
|
|
@ -2233,7 +2253,9 @@ int main(int argc, char *argv[])
|
|||
const struct spa_support *support;
|
||||
uint32_t n_support;
|
||||
int res = 0, c;
|
||||
const char *opt_properties = NULL;
|
||||
char *opt_enabled;
|
||||
char *opt_disabled;
|
||||
char *opt_properties;
|
||||
static const struct option long_options[] = {
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{ "version", no_argument, NULL, 'V' },
|
||||
|
|
@ -2248,8 +2270,10 @@ int main(int argc, char *argv[])
|
|||
pw_init(&argc, &argv);
|
||||
|
||||
check_default_enabled(&impl);
|
||||
impl.opt_enabled = EXTRA_ENABLED;
|
||||
impl.opt_disabled = EXTRA_DISABLED;
|
||||
|
||||
opt_enabled = strdup(EXTRA_ENABLED);
|
||||
opt_disabled = strdup(EXTRA_DISABLED);
|
||||
opt_properties = strdup("");
|
||||
|
||||
while ((c = getopt_long(argc, argv, "hVe:d:p:", long_options, NULL)) != -1) {
|
||||
switch (c) {
|
||||
|
|
@ -2265,13 +2289,16 @@ int main(int argc, char *argv[])
|
|||
pw_get_library_version());
|
||||
return 0;
|
||||
case 'e':
|
||||
impl.opt_enabled = optarg;
|
||||
if (append_opt_str(&opt_enabled, ",", optarg))
|
||||
return -1;
|
||||
break;
|
||||
case 'd':
|
||||
impl.opt_disabled = optarg;
|
||||
if (append_opt_str(&opt_disabled, ",", optarg))
|
||||
return -1;
|
||||
break;
|
||||
case 'p':
|
||||
opt_properties = optarg;
|
||||
if (append_opt_str(&opt_properties, " ", optarg))
|
||||
return -1;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
|
|
@ -2280,7 +2307,11 @@ int main(int argc, char *argv[])
|
|||
|
||||
impl.state_dir_fd = -1;
|
||||
|
||||
impl.this.props = pw_properties_new_string(opt_properties ? opt_properties : "");
|
||||
impl.opt_enabled = opt_enabled;
|
||||
impl.opt_disabled = opt_disabled;
|
||||
|
||||
impl.this.props = pw_properties_new_string(opt_properties);
|
||||
free(opt_properties);
|
||||
if (impl.this.props == NULL)
|
||||
return -1;
|
||||
|
||||
|
|
@ -2369,5 +2400,8 @@ exit:
|
|||
|
||||
pw_deinit();
|
||||
|
||||
free(opt_enabled);
|
||||
free(opt_disabled);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue