937 lines
29 KiB
Diff
937 lines
29 KiB
Diff
From 78212445de4c8e07873cbc7dff2abcacd031f151 Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Tue, 1 Jun 2021 17:47:42 +0200
|
|
Subject: [PATCH 01/16] alsactl: fix the nested iteration
|
|
|
|
There may be nested iterations for hw: card names.
|
|
Handle this card name in snd_card_iterator_sinit().
|
|
|
|
BugLink: https://github.com/alsa-project/alsa-lib/issues/142
|
|
Fixes: eefc2c6 ("alsactl: use card iterator functions for all card loops")
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
alsactl/utils.c | 2 ++
|
|
1 file changed, 2 insertions(+)
|
|
|
|
diff --git a/alsactl/utils.c b/alsactl/utils.c
|
|
index c79fd95..881b505 100644
|
|
--- a/alsactl/utils.c
|
|
+++ b/alsactl/utils.c
|
|
@@ -247,6 +247,8 @@ int snd_card_iterator_sinit(struct snd_card_iterator *iter, const char *cardname
|
|
int cardno = -1;
|
|
|
|
if (cardname) {
|
|
+ if (strncmp(cardname, "hw:", 3) == 0)
|
|
+ cardname += 3;
|
|
cardno = snd_card_get_index(cardname);
|
|
if (cardno < 0) {
|
|
error("Cannot find soundcard '%s'...", cardname);
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From 3d7a6facd9e1f962eef6c4ba3aa4cdc22477a6ac Mon Sep 17 00:00:00 2001
|
|
From: Chao Song <chao.song@linux.intel.com>
|
|
Date: Mon, 31 May 2021 10:29:57 +0800
|
|
Subject: [PATCH 02/16] topology: fix potential null pointer from strchr
|
|
|
|
This patch adds check to the return pointer from strchr,
|
|
because it may be null and cause segment fault, if component
|
|
is not properly constructed.
|
|
|
|
Fixes: https://github.com/alsa-project/alsa-utils/pull/91
|
|
Signed-off-by: Chao Song <chao.song@linux.intel.com>
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
topology/pre-process-dapm.c | 5 +++++
|
|
topology/pre-process-object.c | 5 +++++
|
|
2 files changed, 10 insertions(+)
|
|
|
|
diff --git a/topology/pre-process-dapm.c b/topology/pre-process-dapm.c
|
|
index 450ca71..dbaf2f1 100644
|
|
--- a/topology/pre-process-dapm.c
|
|
+++ b/topology/pre-process-dapm.c
|
|
@@ -146,6 +146,11 @@ static int tplg_pp_get_widget_name(struct tplg_pre_processor *tplg_pp,
|
|
|
|
/* get class name */
|
|
args = strchr(string, '.');
|
|
+ if (!args) {
|
|
+ SNDERR("Error getting class name for %s\n", string);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
class_name = calloc(1, strlen(string) - strlen(args) + 1);
|
|
if (!class_name)
|
|
return -ENOMEM;
|
|
diff --git a/topology/pre-process-object.c b/topology/pre-process-object.c
|
|
index 09aa375..ac8caec 100644
|
|
--- a/topology/pre-process-object.c
|
|
+++ b/topology/pre-process-object.c
|
|
@@ -492,6 +492,11 @@ static int tplg_pp_add_object_tuple_section(struct tplg_pre_processor *tplg_pp,
|
|
}
|
|
|
|
type = strchr(token_ref, '.');
|
|
+ if(!type) {
|
|
+ SNDERR("Error getting type for %s\n", token_ref);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
token = calloc(1, strlen(token_ref) - strlen(type) + 1);
|
|
if (!token)
|
|
return -ENOMEM;
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From d6d566a9eebb63dd9d1351b07d385d39cdc33beb Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Fri, 4 Jun 2021 09:53:56 +0200
|
|
Subject: [PATCH 03/16] alsactl: return error value in dump_config_tree()
|
|
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
alsactl/alsactl.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/alsactl/alsactl.c b/alsactl/alsactl.c
|
|
index a011284..05738fb 100644
|
|
--- a/alsactl/alsactl.c
|
|
+++ b/alsactl/alsactl.c
|
|
@@ -170,7 +170,7 @@ static int dump_config_tree(snd_config_t *top)
|
|
return err;
|
|
err = snd_config_save(top, out);
|
|
snd_output_close(out);
|
|
- return 0;
|
|
+ return err;
|
|
}
|
|
|
|
static int dump_state(const char *file)
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From 511dd7a597735048f3883ef7883adf853ac2de4a Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Fri, 4 Jun 2021 09:56:20 +0200
|
|
Subject: [PATCH 04/16] alsactl: init() - return error value from
|
|
snd_card_iterator_sinit() call
|
|
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
alsactl/init_parse.c | 2 ++
|
|
1 file changed, 2 insertions(+)
|
|
|
|
diff --git a/alsactl/init_parse.c b/alsactl/init_parse.c
|
|
index 9d0f473..e439de7 100644
|
|
--- a/alsactl/init_parse.c
|
|
+++ b/alsactl/init_parse.c
|
|
@@ -1751,6 +1751,8 @@ int init(const char *cfgdir, const char *filename, int flags, const char *cardna
|
|
|
|
sysfs_init();
|
|
err = snd_card_iterator_sinit(&iter, cardname);
|
|
+ if (err < 0)
|
|
+ goto out;
|
|
while (snd_card_iterator_next(&iter)) {
|
|
err = snd_card_clean_cfgdir(cfgdir, iter.card);
|
|
if (err < 0) {
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From 2bc595e7bd9a9b8f8605104cfdb8f40a07c2655b Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Fri, 4 Jun 2021 09:58:46 +0200
|
|
Subject: [PATCH 05/16] alsactl: check for error values from
|
|
snd_config_get...()
|
|
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
alsactl/state.c | 41 ++++++++++++++++++++++++++++-------------
|
|
1 file changed, 28 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/alsactl/state.c b/alsactl/state.c
|
|
index 44fda3f..b3a3f4d 100644
|
|
--- a/alsactl/state.c
|
|
+++ b/alsactl/state.c
|
|
@@ -655,13 +655,16 @@ static long config_iface(snd_config_t *n)
|
|
const char *str;
|
|
switch (snd_config_get_type(n)) {
|
|
case SND_CONFIG_TYPE_INTEGER:
|
|
- snd_config_get_integer(n, &i);
|
|
+ if (snd_config_get_integer(n, &i) < 0)
|
|
+ return -1;
|
|
return i;
|
|
case SND_CONFIG_TYPE_INTEGER64:
|
|
- snd_config_get_integer64(n, &li);
|
|
+ if (snd_config_get_integer64(n, &li) < 0)
|
|
+ return -1;
|
|
return li;
|
|
case SND_CONFIG_TYPE_STRING:
|
|
- snd_config_get_string(n, &str);
|
|
+ if (snd_config_get_string(n, &str) < 0)
|
|
+ return -1;
|
|
break;
|
|
default:
|
|
return -1;
|
|
@@ -681,17 +684,20 @@ static int config_bool(snd_config_t *n, int doit)
|
|
|
|
switch (snd_config_get_type(n)) {
|
|
case SND_CONFIG_TYPE_INTEGER:
|
|
- snd_config_get_integer(n, &val);
|
|
+ if (snd_config_get_integer(n, &val) < 0)
|
|
+ return -1;
|
|
if (val < 0 || val > 1)
|
|
return -1;
|
|
return val;
|
|
case SND_CONFIG_TYPE_INTEGER64:
|
|
- snd_config_get_integer64(n, &lval);
|
|
+ if (snd_config_get_integer64(n, &lval) < 0)
|
|
+ return -1;
|
|
if (lval < 0 || lval > 1)
|
|
return -1;
|
|
return (int) lval;
|
|
case SND_CONFIG_TYPE_STRING:
|
|
- snd_config_get_string(n, &str);
|
|
+ if (snd_config_get_string(n, &str) < 0)
|
|
+ return -1;
|
|
break;
|
|
case SND_CONFIG_TYPE_COMPOUND:
|
|
if (!force_restore || !doit)
|
|
@@ -718,13 +724,16 @@ static int config_enumerated(snd_config_t *n, snd_ctl_t *handle,
|
|
|
|
switch (snd_config_get_type(n)) {
|
|
case SND_CONFIG_TYPE_INTEGER:
|
|
- snd_config_get_integer(n, &val);
|
|
+ if (snd_config_get_integer(n, &val) < 0)
|
|
+ return -1;
|
|
return val;
|
|
case SND_CONFIG_TYPE_INTEGER64:
|
|
- snd_config_get_integer64(n, &lval);
|
|
+ if (snd_config_get_integer64(n, &lval) < 0)
|
|
+ return -1;
|
|
return (int) lval;
|
|
case SND_CONFIG_TYPE_STRING:
|
|
- snd_config_get_string(n, &str);
|
|
+ if (snd_config_get_string(n, &str) < 0)
|
|
+ return -1;
|
|
break;
|
|
case SND_CONFIG_TYPE_COMPOUND:
|
|
if (!force_restore || !doit)
|
|
@@ -1247,6 +1256,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control,
|
|
}
|
|
if (strcmp(fld, "iface") == 0) {
|
|
iface = (snd_ctl_elem_iface_t)config_iface(n);
|
|
+ if (iface < 0)
|
|
+ return -EINVAL;
|
|
continue;
|
|
}
|
|
if (strcmp(fld, "device") == 0) {
|
|
@@ -1254,7 +1265,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control,
|
|
cerror(doit, "control.%d.%s is invalid", numid, fld);
|
|
return -EINVAL;
|
|
}
|
|
- snd_config_get_integer(n, &device);
|
|
+ if (snd_config_get_integer(n, &device) < 0)
|
|
+ return -EINVAL;
|
|
continue;
|
|
}
|
|
if (strcmp(fld, "subdevice") == 0) {
|
|
@@ -1262,7 +1274,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control,
|
|
cerror(doit, "control.%d.%s is invalid", numid, fld);
|
|
return -EINVAL;
|
|
}
|
|
- snd_config_get_integer(n, &subdevice);
|
|
+ if (snd_config_get_integer(n, &subdevice) < 0)
|
|
+ return -EINVAL;
|
|
continue;
|
|
}
|
|
if (strcmp(fld, "name") == 0) {
|
|
@@ -1270,7 +1283,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control,
|
|
cerror(doit, "control.%d.%s is invalid", numid, fld);
|
|
return -EINVAL;
|
|
}
|
|
- snd_config_get_string(n, &name);
|
|
+ if (snd_config_get_string(n, &name) < 0)
|
|
+ return -EINVAL;
|
|
continue;
|
|
}
|
|
if (strcmp(fld, "index") == 0) {
|
|
@@ -1278,7 +1292,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control,
|
|
cerror(doit, "control.%d.%s is invalid", numid, fld);
|
|
return -EINVAL;
|
|
}
|
|
- snd_config_get_integer(n, &index);
|
|
+ if (snd_config_get_integer(n, &index) < 0)
|
|
+ return -EINVAL;
|
|
continue;
|
|
}
|
|
if (strcmp(fld, "value") == 0) {
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From 646d6ff094a82153db49af176cba3aacbde46cf6 Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Fri, 4 Jun 2021 10:04:50 +0200
|
|
Subject: [PATCH 06/16] =?UTF-8?q?alsactl:=20state=20-=20fix=20=E2=80=98ite?=
|
|
=?UTF-8?q?m=E2=80=99=20may=20be=20used=20uninitialized=20gcc=20warning?=
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
alsactl/state.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/alsactl/state.c b/alsactl/state.c
|
|
index b3a3f4d..9c75688 100644
|
|
--- a/alsactl/state.c
|
|
+++ b/alsactl/state.c
|
|
@@ -229,7 +229,7 @@ static int get_control(snd_ctl_t *handle, snd_ctl_elem_id_t *id, snd_config_t *t
|
|
{
|
|
snd_ctl_elem_value_t *ctl;
|
|
snd_ctl_elem_info_t *info;
|
|
- snd_config_t *control, *comment, *item, *value;
|
|
+ snd_config_t *control, *comment, *item = NULL, *value;
|
|
const char *s;
|
|
char buf[256];
|
|
unsigned int idx;
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From cd2f779b8d6439479b9802e9fd2c8af86f8702fb Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Fri, 4 Jun 2021 10:08:18 +0200
|
|
Subject: [PATCH 07/16] alsactl: fix lock_fd unlock in load_configuration() -
|
|
error path
|
|
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
alsactl/utils.c | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/alsactl/utils.c b/alsactl/utils.c
|
|
index 881b505..fd4a108 100644
|
|
--- a/alsactl/utils.c
|
|
+++ b/alsactl/utils.c
|
|
@@ -220,15 +220,17 @@ int load_configuration(const char *file, snd_config_t **top, int *open_failed)
|
|
}
|
|
err = snd_config_load(config, in);
|
|
snd_input_close(in);
|
|
- if (lock_fd >= 0)
|
|
- state_unlock(lock_fd, file);
|
|
if (err < 0) {
|
|
error("snd_config_load error: %s", snd_strerror(err));
|
|
out:
|
|
+ if (lock_fd >= 0)
|
|
+ state_unlock(lock_fd, file);
|
|
snd_config_delete(config);
|
|
snd_config_update_free_global();
|
|
return err;
|
|
} else {
|
|
+ if (lock_fd >= 0)
|
|
+ state_unlock(lock_fd, file);
|
|
*top = config;
|
|
return 0;
|
|
}
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From 74ad91245f8257e242cf5b5b6b809f94321f197a Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Fri, 4 Jun 2021 10:12:06 +0200
|
|
Subject: [PATCH 08/16] axfer: fix wrong calloc() item size in
|
|
allocate_containers()
|
|
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
axfer/subcmd-transfer.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/axfer/subcmd-transfer.c b/axfer/subcmd-transfer.c
|
|
index 27d2cc5..839215a 100644
|
|
--- a/axfer/subcmd-transfer.c
|
|
+++ b/axfer/subcmd-transfer.c
|
|
@@ -155,7 +155,7 @@ static int allocate_containers(struct context *ctx, unsigned int count)
|
|
return -ENOMEM;
|
|
ctx->cntr_count = count;
|
|
|
|
- ctx->cntr_fds = calloc(count, sizeof(*ctx->cntrs));
|
|
+ ctx->cntr_fds = calloc(count, sizeof(*ctx->cntr_fds));
|
|
if (ctx->cntr_fds == NULL)
|
|
return -ENOMEM;
|
|
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From c58f981e1530557835461b17b92eac6c475e5f68 Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Fri, 4 Jun 2021 10:19:22 +0200
|
|
Subject: [PATCH 09/16] topology: fix few coverity detected defects
|
|
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
topology/pre-process-dapm.c | 3 ++-
|
|
topology/pre-process-object.c | 15 ++++++++++-----
|
|
topology/pre-processor.c | 2 +-
|
|
3 files changed, 13 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/topology/pre-process-dapm.c b/topology/pre-process-dapm.c
|
|
index dbaf2f1..dc510e1 100644
|
|
--- a/topology/pre-process-dapm.c
|
|
+++ b/topology/pre-process-dapm.c
|
|
@@ -203,7 +203,8 @@ static int tplg_pp_get_widget_name(struct tplg_pre_processor *tplg_pp,
|
|
|
|
if (!args) {
|
|
SNDERR("insufficient arugments for widget %s\n", string);
|
|
- return -EINVAL;
|
|
+ ret = -EINVAL;
|
|
+ goto err;
|
|
}
|
|
|
|
remaining = strchr(args + 1, '.');
|
|
diff --git a/topology/pre-process-object.c b/topology/pre-process-object.c
|
|
index ac8caec..7565091 100644
|
|
--- a/topology/pre-process-object.c
|
|
+++ b/topology/pre-process-object.c
|
|
@@ -463,7 +463,8 @@ static snd_config_t *tplg_object_lookup_in_config(struct tplg_pre_processor *tpl
|
|
if (!config_id)
|
|
return NULL;
|
|
|
|
- snd_config_search(class, config_id, &obj_cfg);
|
|
+ if (snd_config_search(class, config_id, &obj_cfg) < 0)
|
|
+ return NULL;
|
|
free(config_id);
|
|
return obj_cfg;
|
|
}
|
|
@@ -704,11 +705,12 @@ static int tplg_add_object_data(struct tplg_pre_processor *tplg_pp, snd_config_t
|
|
|
|
ret = tplg_pp_add_object_tuple_section(tplg_pp, class_cfg, n, data_cfg_name,
|
|
token);
|
|
- free(data_cfg_name);
|
|
if (ret < 0) {
|
|
SNDERR("Failed to add data section %s\n", data_cfg_name);
|
|
+ free(data_cfg_name);
|
|
return ret;
|
|
}
|
|
+ free(data_cfg_name);
|
|
}
|
|
|
|
return 0;
|
|
@@ -1215,8 +1217,10 @@ static int tplg_construct_object_name(struct tplg_pre_processor *tplg_pp, snd_co
|
|
return 0;
|
|
|
|
/* set class name as the name prefix for the object */
|
|
- snd_config_get_id(obj, &obj_id);
|
|
- snd_config_get_id(class_cfg, &class_id);
|
|
+ if (snd_config_get_id(obj, &obj_id) < 0)
|
|
+ return -EINVAL;
|
|
+ if (snd_config_get_id(class_cfg, &class_id) < 0)
|
|
+ return -EINVAL;
|
|
new_name = strdup(class_id);
|
|
if (!new_name)
|
|
return -ENOMEM;
|
|
@@ -1280,7 +1284,8 @@ static int tplg_construct_object_name(struct tplg_pre_processor *tplg_pp, snd_co
|
|
default:
|
|
SNDERR("Argument '%s' in object '%s.%s' is not an integer or a string\n",
|
|
s, class_id, obj_id);
|
|
- return -EINVAL;
|
|
+ ret = -EINVAL;
|
|
+ goto err;
|
|
}
|
|
|
|
/* alloc and concat arg value to the name */
|
|
diff --git a/topology/pre-processor.c b/topology/pre-processor.c
|
|
index 0458c3c..442dcc4 100644
|
|
--- a/topology/pre-processor.c
|
|
+++ b/topology/pre-processor.c
|
|
@@ -183,7 +183,7 @@ int init_pre_precessor(struct tplg_pre_processor **tplg_pp, snd_output_type_t ty
|
|
|
|
_tplg_pp = calloc(1, sizeof(struct tplg_pre_processor));
|
|
if (!_tplg_pp)
|
|
- ret = -ENOMEM;
|
|
+ return -ENOMEM;
|
|
|
|
*tplg_pp = _tplg_pp;
|
|
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From f138117a457944ca73776bd752693d64ec207e55 Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Mon, 7 Jun 2021 17:21:56 +0200
|
|
Subject: [PATCH 10/16] alsactl: load_state() - initialize config variable for
|
|
the open_failed case
|
|
|
|
Fixes: https://github.com/alsa-project/alsa-utils/issues/93
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
alsactl/state.c | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
diff --git a/alsactl/state.c b/alsactl/state.c
|
|
index 9c75688..439e1f8 100644
|
|
--- a/alsactl/state.c
|
|
+++ b/alsactl/state.c
|
|
@@ -1642,6 +1642,7 @@ int load_state(const char *cfgdir, const char *file,
|
|
snd_config_t *config;
|
|
const char *cardname1;
|
|
|
|
+ config = NULL;
|
|
err = load_configuration(file, &config, &open_failed);
|
|
if (err < 0 && !open_failed)
|
|
return err;
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From 6018c2014ac24877b2aa58c2c57f2fd901e6c7b1 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
|
|
Date: Sun, 6 Jun 2021 03:14:19 +0200
|
|
Subject: [PATCH 11/16] alsactl: load_state: Only delete config if one was
|
|
loaded
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
If load_configuration fails with open_failed == true, load_state will
|
|
jump to the out label without config being initialized and pass this
|
|
uninitialized config value to snd_config_delete. This commit fixes this
|
|
issue by initializing config with NULL and checking if it is non-null
|
|
before invoking snd_config_delete.
|
|
|
|
Fixes: https://github.com/alsa-project/alsa-utils/pull/94
|
|
Fixes: f138117 ("alsactl: load_state() - initialize config variable for the open_failed case")
|
|
BugLink: https://github.com/alsa-project/alsa-utils/issues/93
|
|
Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net>
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
alsactl/state.c | 3 ++-
|
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/alsactl/state.c b/alsactl/state.c
|
|
index 439e1f8..adbd13f 100644
|
|
--- a/alsactl/state.c
|
|
+++ b/alsactl/state.c
|
|
@@ -1692,7 +1692,8 @@ int load_state(const char *cfgdir, const char *file,
|
|
}
|
|
err = finalerr ? finalerr : snd_card_iterator_error(&iter);
|
|
out:
|
|
- snd_config_delete(config);
|
|
+ if (config)
|
|
+ snd_config_delete(config);
|
|
snd_config_update_free_global();
|
|
return err;
|
|
}
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From 6a0d13ddb2b2afb450f3404d3cbaa56253bdcab2 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
|
|
Date: Thu, 3 Jun 2021 16:07:10 +0200
|
|
Subject: [PATCH 12/16] utils.c: Include limits.h explicitly to fix build on
|
|
musl
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Fixes:
|
|
| ../../alsa-utils-1.2.5/alsactl/utils.c: In function 'snd_card_clean_cfgdir':
|
|
| ../../alsa-utils-1.2.5/alsactl/utils.c:309:19: error: 'PATH_MAX' undeclared (first use in this function)
|
|
| 309 | char path[PATH_MAX];
|
|
| | ^~~~~~~~
|
|
| ../../alsa-utils-1.2.5/alsactl/utils.c:309:19: note: each undeclared identifier is reported only once for each function it appears in
|
|
|
|
Fixes: https://github.com/alsa-project/alsa-utils/pull/92
|
|
Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
alsactl/utils.c | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
diff --git a/alsactl/utils.c b/alsactl/utils.c
|
|
index fd4a108..a507972 100644
|
|
--- a/alsactl/utils.c
|
|
+++ b/alsactl/utils.c
|
|
@@ -30,6 +30,7 @@
|
|
#include <syslog.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/mman.h>
|
|
+#include <limits.h>
|
|
#include "alsactl.h"
|
|
|
|
int file_map(const char *filename, char **buf, size_t *bufsize)
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From 0e21f4d8643db547dcca1375a4265fce1edc4d51 Mon Sep 17 00:00:00 2001
|
|
From: Andrea Piras <andrea.piras.85@gmail.com>
|
|
Date: Fri, 29 Nov 2019 03:13:21 +0100
|
|
Subject: [PATCH 13/16] added an option to aseqnet to optionally set the midi
|
|
process name
|
|
|
|
This option allows to run multiple instances of aseqnet without having
|
|
to double check the assigned port number, since each one can get spawned
|
|
with a unique name.
|
|
|
|
Fixes: https://github.com/alsa-project/alsa-utils/pull/95
|
|
Signed-off-by: Andrea Piras <andrea.piras.85@gmail.com>
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
seq/aseqnet/README.aseqnet | 2 ++
|
|
seq/aseqnet/aseqnet.1 | 3 +++
|
|
seq/aseqnet/aseqnet.c | 26 ++++++++++++++++++--------
|
|
3 files changed, 23 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/seq/aseqnet/README.aseqnet b/seq/aseqnet/README.aseqnet
|
|
index bd0b68e..6a627f4 100644
|
|
--- a/seq/aseqnet/README.aseqnet
|
|
+++ b/seq/aseqnet/README.aseqnet
|
|
@@ -50,4 +50,6 @@ The available options are:
|
|
-s addr : explicit read-subscription to the given address
|
|
(client:addr).
|
|
-d addr : explicit write-subscription to the given address.
|
|
+ -n name : specify the midi name of the process.
|
|
+ Default value is either 'Net Client' or 'Net Server'.
|
|
-v : verbose mode.
|
|
diff --git a/seq/aseqnet/aseqnet.1 b/seq/aseqnet/aseqnet.1
|
|
index 2cb6eb7..6ed3911 100644
|
|
--- a/seq/aseqnet/aseqnet.1
|
|
+++ b/seq/aseqnet/aseqnet.1
|
|
@@ -70,6 +70,9 @@ Subscribe to the given address for read automatically.
|
|
.B \-d addr
|
|
Subscribe to the given address for write automatically.
|
|
.TP
|
|
+.B \-n name
|
|
+Specify the midi name of the process.
|
|
+.TP
|
|
.B \-v
|
|
Verbose mode.
|
|
|
|
diff --git a/seq/aseqnet/aseqnet.c b/seq/aseqnet/aseqnet.c
|
|
index ebdea0b..e756e82 100644
|
|
--- a/seq/aseqnet/aseqnet.c
|
|
+++ b/seq/aseqnet/aseqnet.c
|
|
@@ -37,7 +37,7 @@ static void usage(void);
|
|
static void init_buf(void);
|
|
static void init_pollfds(void);
|
|
static void close_files(void);
|
|
-static void init_seq(char *source, char *dest);
|
|
+static void init_seq(char *source, char *dest, char *name);
|
|
static int get_port(char *service);
|
|
static void sigterm_exit(int sig);
|
|
static void init_server(int port);
|
|
@@ -87,6 +87,7 @@ static const struct option long_option[] = {
|
|
{"port", 1, NULL, 'p'},
|
|
{"source", 1, NULL, 's'},
|
|
{"dest", 1, NULL, 'd'},
|
|
+ {"name", 1, NULL, 'n'},
|
|
{"help", 0, NULL, 'h'},
|
|
{"verbose", 0, NULL, 'v'},
|
|
{"info", 0, NULL, 'i'},
|
|
@@ -98,13 +99,14 @@ int main(int argc, char **argv)
|
|
int c;
|
|
int port = DEFAULT_PORT;
|
|
char *source = NULL, *dest = NULL;
|
|
+ char *name = NULL;
|
|
|
|
#ifdef ENABLE_NLS
|
|
setlocale(LC_ALL, "");
|
|
textdomain(PACKAGE);
|
|
#endif
|
|
|
|
- while ((c = getopt_long(argc, argv, "p:s:d:vi", long_option, NULL)) != -1) {
|
|
+ while ((c = getopt_long(argc, argv, "p:s:d:n:,vi", long_option, NULL)) != -1) {
|
|
switch (c) {
|
|
case 'p':
|
|
if (isdigit(*optarg))
|
|
@@ -118,6 +120,9 @@ int main(int argc, char **argv)
|
|
case 'd':
|
|
dest = optarg;
|
|
break;
|
|
+ case 'n':
|
|
+ name = optarg;
|
|
+ break;
|
|
case 'v':
|
|
verbose++;
|
|
break;
|
|
@@ -134,7 +139,7 @@ int main(int argc, char **argv)
|
|
signal(SIGTERM, sigterm_exit);
|
|
|
|
init_buf();
|
|
- init_seq(source, dest);
|
|
+ init_seq(source, dest, name);
|
|
|
|
if (optind >= argc) {
|
|
server_mode = 1;
|
|
@@ -170,6 +175,7 @@ static void usage(void)
|
|
printf(_(" -p,--port # : specify TCP port (digit or service name)\n"));
|
|
printf(_(" -s,--source addr : read from given addr (client:port)\n"));
|
|
printf(_(" -d,--dest addr : write to given addr (client:port)\n"));
|
|
+ printf(_(" -n,--name value : use a specific midi process name\n"));
|
|
printf(_(" -v, --verbose : print verbose messages\n"));
|
|
printf(_(" -i, --info : print certain received events\n"));
|
|
}
|
|
@@ -223,7 +229,7 @@ static void close_files(void)
|
|
/*
|
|
* initialize sequencer
|
|
*/
|
|
-static void init_seq(char *source, char *dest)
|
|
+static void init_seq(char *source, char *dest, char* name)
|
|
{
|
|
snd_seq_addr_t addr;
|
|
int err, counti, counto;
|
|
@@ -252,10 +258,14 @@ static void init_seq(char *source, char *dest)
|
|
snd_seq_nonblock(handle, 1);
|
|
|
|
/* set client info */
|
|
- if (server_mode)
|
|
- snd_seq_set_client_name(handle, "Net Server");
|
|
- else
|
|
- snd_seq_set_client_name(handle, "Net Client");
|
|
+ if (name)
|
|
+ snd_seq_set_client_name(handle, name);
|
|
+ else {
|
|
+ if (server_mode)
|
|
+ snd_seq_set_client_name(handle, "Net Server");
|
|
+ else
|
|
+ snd_seq_set_client_name(handle, "Net Client");
|
|
+ }
|
|
|
|
/* create a port */
|
|
seq_port = snd_seq_create_simple_port(handle, "Network",
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From f35b66d8f1c5e3c551981723ed242e48c62ad97f Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Mon, 14 Jun 2021 12:02:35 +0200
|
|
Subject: [PATCH 14/16] Revert "aplay: try to use 16-bit format to increase
|
|
capture quality"
|
|
|
|
This reverts commit 0c5948e98a6a8535c89b7bcab13017d7732181c6.
|
|
|
|
Link: https://github.com/alsa-project/alsa-utils/issues/96
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
aplay/aplay.c | 43 +++++++++----------------------------------
|
|
1 file changed, 9 insertions(+), 34 deletions(-)
|
|
|
|
diff --git a/aplay/aplay.c b/aplay/aplay.c
|
|
index 0b7884e..d89b7df 100644
|
|
--- a/aplay/aplay.c
|
|
+++ b/aplay/aplay.c
|
|
@@ -32,7 +32,6 @@
|
|
#include <malloc.h>
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
-#include <stdbool.h>
|
|
#include <string.h>
|
|
#include <getopt.h>
|
|
#include <fcntl.h>
|
|
@@ -95,7 +94,6 @@ enum {
|
|
VUMETER_STEREO
|
|
};
|
|
|
|
-static snd_pcm_format_t default_format = DEFAULT_FORMAT;
|
|
static char *command;
|
|
static snd_pcm_t *handle;
|
|
static struct {
|
|
@@ -470,24 +468,6 @@ static long parse_long(const char *str, int *err)
|
|
return val;
|
|
}
|
|
|
|
-static void try_to_adjust_default_format_16bit(void)
|
|
-{
|
|
- snd_pcm_hw_params_t *params;
|
|
- int err;
|
|
-
|
|
- snd_pcm_hw_params_alloca(¶ms);
|
|
- err = snd_pcm_hw_params_any(handle, params);
|
|
- if (err < 0) {
|
|
- error(_("Broken configuration for this PCM: no configurations available"));
|
|
- prg_exit(EXIT_FAILURE);
|
|
- }
|
|
-
|
|
- if (file_type != FORMAT_AU && snd_pcm_hw_params_test_format(handle, params, SND_PCM_FORMAT_S16_LE) == 0)
|
|
- rhwparams.format = default_format = SND_PCM_FORMAT_S16_LE;
|
|
- else if (file_type == FORMAT_AU && snd_pcm_hw_params_test_format(handle, params, SND_PCM_FORMAT_S16_BE) == 0)
|
|
- rhwparams.format = default_format = SND_PCM_FORMAT_S16_BE;
|
|
-}
|
|
-
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int duration_or_sample = 0;
|
|
@@ -548,7 +528,6 @@ int main(int argc, char *argv[])
|
|
int do_device_list = 0, do_pcm_list = 0;
|
|
snd_pcm_info_t *info;
|
|
FILE *direction;
|
|
- bool user_set_fmt = false;
|
|
|
|
#ifdef ENABLE_NLS
|
|
setlocale(LC_ALL, "");
|
|
@@ -583,7 +562,7 @@ int main(int argc, char *argv[])
|
|
}
|
|
|
|
chunk_size = -1;
|
|
- rhwparams.format = default_format;
|
|
+ rhwparams.format = DEFAULT_FORMAT;
|
|
rhwparams.rate = DEFAULT_SPEED;
|
|
rhwparams.channels = 1;
|
|
|
|
@@ -633,7 +612,6 @@ int main(int argc, char *argv[])
|
|
}
|
|
break;
|
|
case 'f':
|
|
- user_set_fmt = true;
|
|
if (strcasecmp(optarg, "cd") == 0 || strcasecmp(optarg, "cdr") == 0) {
|
|
if (strcasecmp(optarg, "cdr") == 0)
|
|
rhwparams.format = SND_PCM_FORMAT_S16_BE;
|
|
@@ -866,9 +844,6 @@ int main(int argc, char *argv[])
|
|
}
|
|
}
|
|
|
|
- if (!user_set_fmt)
|
|
- try_to_adjust_default_format_16bit();
|
|
-
|
|
chunk_size = 1024;
|
|
hwparams = rhwparams;
|
|
|
|
@@ -1089,7 +1064,7 @@ static ssize_t test_wavefile(int fd, u_char *_buffer, size_t size)
|
|
hwparams.channels = channels;
|
|
switch (TO_CPU_SHORT(f->bit_p_spl, big_endian)) {
|
|
case 8:
|
|
- if (hwparams.format != default_format &&
|
|
+ if (hwparams.format != DEFAULT_FORMAT &&
|
|
hwparams.format != SND_PCM_FORMAT_U8)
|
|
fprintf(stderr, _("Warning: format is changed to U8\n"));
|
|
hwparams.format = SND_PCM_FORMAT_U8;
|
|
@@ -1099,7 +1074,7 @@ static ssize_t test_wavefile(int fd, u_char *_buffer, size_t size)
|
|
native_format = SND_PCM_FORMAT_S16_BE;
|
|
else
|
|
native_format = SND_PCM_FORMAT_S16_LE;
|
|
- if (hwparams.format != default_format &&
|
|
+ if (hwparams.format != DEFAULT_FORMAT &&
|
|
hwparams.format != native_format)
|
|
fprintf(stderr, _("Warning: format is changed to %s\n"),
|
|
snd_pcm_format_name(native_format));
|
|
@@ -1112,7 +1087,7 @@ static ssize_t test_wavefile(int fd, u_char *_buffer, size_t size)
|
|
native_format = SND_PCM_FORMAT_S24_3BE;
|
|
else
|
|
native_format = SND_PCM_FORMAT_S24_3LE;
|
|
- if (hwparams.format != default_format &&
|
|
+ if (hwparams.format != DEFAULT_FORMAT &&
|
|
hwparams.format != native_format)
|
|
fprintf(stderr, _("Warning: format is changed to %s\n"),
|
|
snd_pcm_format_name(native_format));
|
|
@@ -1123,7 +1098,7 @@ static ssize_t test_wavefile(int fd, u_char *_buffer, size_t size)
|
|
native_format = SND_PCM_FORMAT_S24_BE;
|
|
else
|
|
native_format = SND_PCM_FORMAT_S24_LE;
|
|
- if (hwparams.format != default_format &&
|
|
+ if (hwparams.format != DEFAULT_FORMAT &&
|
|
hwparams.format != native_format)
|
|
fprintf(stderr, _("Warning: format is changed to %s\n"),
|
|
snd_pcm_format_name(native_format));
|
|
@@ -1209,19 +1184,19 @@ static int test_au(int fd, void *buffer)
|
|
pbrec_count = BE_INT(ap->data_size);
|
|
switch (BE_INT(ap->encoding)) {
|
|
case AU_FMT_ULAW:
|
|
- if (hwparams.format != default_format &&
|
|
+ if (hwparams.format != DEFAULT_FORMAT &&
|
|
hwparams.format != SND_PCM_FORMAT_MU_LAW)
|
|
fprintf(stderr, _("Warning: format is changed to MU_LAW\n"));
|
|
hwparams.format = SND_PCM_FORMAT_MU_LAW;
|
|
break;
|
|
case AU_FMT_LIN8:
|
|
- if (hwparams.format != default_format &&
|
|
+ if (hwparams.format != DEFAULT_FORMAT &&
|
|
hwparams.format != SND_PCM_FORMAT_U8)
|
|
fprintf(stderr, _("Warning: format is changed to U8\n"));
|
|
hwparams.format = SND_PCM_FORMAT_U8;
|
|
break;
|
|
case AU_FMT_LIN16:
|
|
- if (hwparams.format != default_format &&
|
|
+ if (hwparams.format != DEFAULT_FORMAT &&
|
|
hwparams.format != SND_PCM_FORMAT_S16_BE)
|
|
fprintf(stderr, _("Warning: format is changed to S16_BE\n"));
|
|
hwparams.format = SND_PCM_FORMAT_S16_BE;
|
|
@@ -2390,7 +2365,7 @@ static void voc_play(int fd, int ofs, char *name)
|
|
prg_exit(EXIT_FAILURE);
|
|
}
|
|
}
|
|
- hwparams.format = default_format;
|
|
+ hwparams.format = DEFAULT_FORMAT;
|
|
hwparams.channels = 1;
|
|
hwparams.rate = DEFAULT_SPEED;
|
|
set_params();
|
|
--
|
|
2.30.2
|
|
|
|
|
|
From fc7500c3c7a7d6bfb975a87e23b7544a84da3186 Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Mon, 14 Jun 2021 12:22:08 +0200
|
|
Subject: [PATCH 15/16] arecord: Inform users when 8-bit sampling is used on
|
|
tty
|
|
|
|
When we reverted 0c5948e ("aplay: try to use 16-bit format to
|
|
increase capture quality"), we should also handle the original
|
|
problem somehow. This code shows a warning with a hint to
|
|
the right parameter.
|
|
|
|
Fixes: https://github.com/alsa-project/alsa-utils/issues/96
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
aplay/aplay.c | 11 ++++++++++-
|
|
1 file changed, 10 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/aplay/aplay.c b/aplay/aplay.c
|
|
index d89b7df..cc51dcb 100644
|
|
--- a/aplay/aplay.c
|
|
+++ b/aplay/aplay.c
|
|
@@ -525,7 +525,7 @@ int main(int argc, char *argv[])
|
|
};
|
|
char *pcm_name = "default";
|
|
int tmp, err, c;
|
|
- int do_device_list = 0, do_pcm_list = 0;
|
|
+ int do_device_list = 0, do_pcm_list = 0, force_sample_format = 0;
|
|
snd_pcm_info_t *info;
|
|
FILE *direction;
|
|
|
|
@@ -612,6 +612,7 @@ int main(int argc, char *argv[])
|
|
}
|
|
break;
|
|
case 'f':
|
|
+ force_sample_format = 1;
|
|
if (strcasecmp(optarg, "cd") == 0 || strcasecmp(optarg, "cdr") == 0) {
|
|
if (strcasecmp(optarg, "cdr") == 0)
|
|
rhwparams.format = SND_PCM_FORMAT_S16_BE;
|
|
@@ -844,6 +845,14 @@ int main(int argc, char *argv[])
|
|
}
|
|
}
|
|
|
|
+ if (!force_sample_format &&
|
|
+ isatty(fileno(stdin)) &&
|
|
+ stream == SND_PCM_STREAM_CAPTURE &&
|
|
+ snd_pcm_format_width(rhwparams.format) <= 8)
|
|
+ fprintf(stderr, "Warning: Some sources (like microphones) may produce inaudiable results\n"
|
|
+ " with 8-bit sampling. Use '-f' argument to increase resolution\n"
|
|
+ " e.g. '-f S16_LE'.\n");
|
|
+
|
|
chunk_size = 1024;
|
|
hwparams = rhwparams;
|
|
|
|
--
|
|
2.30.2
|
|
|
|
|