Blame SOURCES/alsa-git.patch

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