Blame SOURCES/alsa-git.patch

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