- Backport upstream fixes: more topology fixes, a memory leak fix in mixer API, alsactl string handling fix, UCM config fixes: 0032-Update-the-attributes.m4-macro-file-from-xine.patch 0033-topology-avoid-to-use-the-atoi-directly-when-expecte.patch 0034-topology-use-snd_config_get_bool-instead-own-impleme.patch 0035-topology-fix-tplg_get_integer-handle-errno-ERANGE.patch 0036-topology-add-tplg_get_unsigned-function.patch 0037-topology-convert-builder-to-use-the-mallocated-memor.patch 0038-topology-add-binary-output-from-the-builder.patch 0039-topology-parser-recode-tplg_parse_config.patch 0040-topology-add-snd_tplg_load-remove-snd_tplg_build_bin.patch 0041-topology-move-the-topology-element-table-from-builde.patch 0042-topology-add-parser-to-the-tplg_table.patch 0043-topology-add-snd_tplg_save.patch 0044-topology-add-snd_tplg_create-with-flags.patch 0045-topology-add-snd_tplg_version-function.patch 0046-topology-cleanup-the-SNDERR-calls.patch 0047-topology-dapm-fix-the-SNDERR-Undefined.patch 0048-topology-fix-the-unitialized-tuples.patch 0049-topology-implement-shorter-hexa-uuid-00-00-parser.patch 0050-topology-fix-the-TPLG_DEBUG-compilation.patch 0051-topology-fix-the-ops-parser-accept-integer-hexa-valu.patch 0052-topology-fix-the-wrong-memory-access-object-realloc.patch 0053-topology-implement-snd_tplg_decode.patch 0054-topology-move-the-elem-list-delete-to-tplg_elem_free.patch 0055-topology-unify-the-log-mechanism.patch 0056-topology-tplg_dbg-cleanups.patch 0057-topology-cosmetic-changes-functions.patch 0058-mixer-Fix-memory-leak-for-more-than-16-file-descript.patch OBS-URL: https://build.opensuse.org/request/show/766329 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa?expand=0&rev=265
97 lines
2.3 KiB
Diff
97 lines
2.3 KiB
Diff
From 2947d83c1322bcdb31c1da180acb0f779a63dcdd Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Sat, 28 Dec 2019 21:44:03 +0100
|
|
Subject: [PATCH 49/63] topology: implement shorter hexa uuid 00:00 parser
|
|
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
src/topology/data.c | 37 +++++++++++++++++++++++++++++++------
|
|
1 file changed, 31 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/src/topology/data.c b/src/topology/data.c
|
|
index 4e43fcc9d5a7..1ddd3c509e64 100644
|
|
--- a/src/topology/data.c
|
|
+++ b/src/topology/data.c
|
|
@@ -22,8 +22,8 @@
|
|
#include <ctype.h>
|
|
|
|
#define UUID_FORMAT "\
|
|
-0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, \
|
|
-0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x"
|
|
+%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:\
|
|
+%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x"
|
|
|
|
/* Get private data buffer of an element */
|
|
struct snd_soc_tplg_private *get_priv_data(struct tplg_elem *elem)
|
|
@@ -316,7 +316,6 @@ format2:
|
|
values++;
|
|
s += 2;
|
|
}
|
|
- s++;
|
|
}
|
|
|
|
s++;
|
|
@@ -341,6 +340,32 @@ static int get_uuid(const char *str, unsigned char *uuid_le)
|
|
if (tmp == NULL)
|
|
return -ENOMEM;
|
|
|
|
+ if (strchr(tmp, ':') == NULL)
|
|
+ goto data2;
|
|
+
|
|
+ s = strtok(tmp, ":");
|
|
+ while (s != NULL) {
|
|
+ errno = 0;
|
|
+ val = strtoul(s, NULL, 16);
|
|
+ if ((errno == ERANGE && val == ULONG_MAX)
|
|
+ || (errno != 0 && val == 0)
|
|
+ || (val > UCHAR_MAX)) {
|
|
+ SNDERR("invalid value for uuid");
|
|
+ ret = -EINVAL;
|
|
+ goto out;
|
|
+ }
|
|
+
|
|
+ *(uuid_le + values) = (unsigned char)val;
|
|
+
|
|
+ values++;
|
|
+ if (values >= 16)
|
|
+ break;
|
|
+
|
|
+ s = strtok(NULL, ":");
|
|
+ }
|
|
+ goto out;
|
|
+
|
|
+data2:
|
|
s = strtok(tmp, ",");
|
|
|
|
while (s != NULL) {
|
|
@@ -354,7 +379,7 @@ static int get_uuid(const char *str, unsigned char *uuid_le)
|
|
goto out;
|
|
}
|
|
|
|
- *(uuid_le + values) = (unsigned char)val;
|
|
+ *(uuid_le + values) = (unsigned char)val;
|
|
|
|
values++;
|
|
if (values >= 16)
|
|
@@ -413,7 +438,7 @@ static int copy_data_hex(char *data, int off, const char *str, int width)
|
|
return -ENOMEM;
|
|
|
|
p += off;
|
|
- s = strtok(tmp, ",");
|
|
+ s = strtok(tmp, ",:");
|
|
|
|
while (s != NULL) {
|
|
ret = write_hex(p, s, width);
|
|
@@ -422,7 +447,7 @@ static int copy_data_hex(char *data, int off, const char *str, int width)
|
|
return ret;
|
|
}
|
|
|
|
- s = strtok(NULL, ",");
|
|
+ s = strtok(NULL, ",:");
|
|
p += width;
|
|
}
|
|
|
|
--
|
|
2.16.4
|
|
|