forked from pool/alsa-utils
Accepting request 774839 from home:tiwai:branches:multimedia:libs
- Backport upstream fixes: alsatplg fixes, misc cleanups: 0027-alsatplg-rewrite-to-use-the-new-libatopology-functio.patch 0028-alsatplg-add-V-version-option.patch 0029-alsatplg-add-decode-command.patch 0030-alsatplg-add-documentation-for-z-dapm-nosort-h.patch 0031-configure-fix-new-libatopology-check.patch 0032-Use-__func__-instead-of-__FUNCTION__.patch 0033-Avoid-pointer-arithmetic-on-void.patch 0034-Use-lli-for-long-long-in-printf.patch 0035-Avoid-empty-initializer-list.patch - Fix build on SLE12-* target OBS-URL: https://build.opensuse.org/request/show/774839 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa-utils?expand=0&rev=167
This commit is contained in:
parent
7200ea9d85
commit
3a62bf6334
452
0027-alsatplg-rewrite-to-use-the-new-libatopology-functio.patch
Normal file
452
0027-alsatplg-rewrite-to-use-the-new-libatopology-functio.patch
Normal file
@ -0,0 +1,452 @@
|
|||||||
|
From cbabe7a3f0cc84ecd352d4cbf85148946fa6c0d5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
Date: Thu, 19 Dec 2019 15:36:05 +0100
|
||||||
|
Subject: [PATCH 27/35] alsatplg: rewrite to use the new libatopology functions
|
||||||
|
|
||||||
|
Add '-u,--dump' operation.
|
||||||
|
Add '-g,--group' and '-x,--nocheck' modifiers.
|
||||||
|
Add '-z,--dapm-nosort' modifier.
|
||||||
|
Allow to operate with stdin/stdout for the file input/output.
|
||||||
|
|
||||||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
---
|
||||||
|
topology/alsatplg.rst | 17 ++-
|
||||||
|
topology/topology.c | 304 ++++++++++++++++++++++++++++++--------------------
|
||||||
|
2 files changed, 199 insertions(+), 122 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/topology/alsatplg.rst b/topology/alsatplg.rst
|
||||||
|
index 855edff67ecf..e09c865cc9b2 100644
|
||||||
|
--- a/topology/alsatplg.rst
|
||||||
|
+++ b/topology/alsatplg.rst
|
||||||
|
@@ -50,12 +50,27 @@ Available options:
|
||||||
|
**-c**, **--compile** `FILE`
|
||||||
|
source configuration file for the compilation
|
||||||
|
|
||||||
|
+ **-n**, **--normalize** `FILE`
|
||||||
|
+ parse and save the configuration file in the normalized format
|
||||||
|
+
|
||||||
|
+ **-u**, **--dump** `FILE`
|
||||||
|
+ parse and save the configuration file in the specified format
|
||||||
|
+
|
||||||
|
**-o**, **--output** `FILE`
|
||||||
|
- output binary file
|
||||||
|
+ output file
|
||||||
|
|
||||||
|
**-v**, **--verbose** `LEVEL`
|
||||||
|
set verbose level
|
||||||
|
|
||||||
|
+ **-s**, **--sort**
|
||||||
|
+ sort the configuration identifiers (set for normalization)
|
||||||
|
+
|
||||||
|
+ **-x**, **--nocheck**
|
||||||
|
+ save the configuration without additional integrity check
|
||||||
|
+
|
||||||
|
+ **-z**, **--dapm-nosort**
|
||||||
|
+ do not sort DAPM graph items (like in version 1.2.1-)
|
||||||
|
+
|
||||||
|
|
||||||
|
FILES
|
||||||
|
=====
|
||||||
|
diff --git a/topology/topology.c b/topology/topology.c
|
||||||
|
index bc5797c5f14f..a94941ae762e 100644
|
||||||
|
--- a/topology/topology.c
|
||||||
|
+++ b/topology/topology.c
|
||||||
|
@@ -1,4 +1,5 @@
|
||||||
|
/*
|
||||||
|
+ Copyright(c) 2019 Red Hat Inc.
|
||||||
|
Copyright(c) 2014-2015 Intel Corporation
|
||||||
|
Copyright(c) 2010-2011 Texas Instruments Incorporated,
|
||||||
|
All rights reserved.
|
||||||
|
@@ -44,165 +45,205 @@ _("Usage: %s [OPTIONS]...\n"
|
||||||
|
"-h, --help help\n"
|
||||||
|
"-c, --compile=FILE compile file\n"
|
||||||
|
"-n, --normalize=FILE normalize file\n"
|
||||||
|
+"-u, --dump=FILE dump (reparse) file\n"
|
||||||
|
"-v, --verbose=LEVEL set verbosity level (0...1)\n"
|
||||||
|
"-o, --output=FILE set output file\n"
|
||||||
|
"-s, --sort sort the identifiers in the normalized output\n"
|
||||||
|
+"-g, --group save configuration by group indexes\n"
|
||||||
|
+"-x, --nocheck save configuration without additional integrity checks\n"
|
||||||
|
), name);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int _compar(const void *a, const void *b)
|
||||||
|
+static int load(snd_tplg_t **tplg, const char *source_file, int cflags)
|
||||||
|
{
|
||||||
|
- const snd_config_t *c1 = *(snd_config_t **)a;
|
||||||
|
- const snd_config_t *c2 = *(snd_config_t **)b;
|
||||||
|
- const char *id1, *id2;
|
||||||
|
- if (snd_config_get_id(c1, &id1)) return 0;
|
||||||
|
- if (snd_config_get_id(c2, &id2)) return 0;
|
||||||
|
- return strcmp(id1, id2);
|
||||||
|
-}
|
||||||
|
+ int fd, err;
|
||||||
|
+ char *buf, *buf2;
|
||||||
|
+ size_t size, pos;
|
||||||
|
+ ssize_t r;
|
||||||
|
|
||||||
|
-static snd_config_t *normalize_config(const char *id, snd_config_t *src, int sort)
|
||||||
|
-{
|
||||||
|
- snd_config_t *dst, **a;
|
||||||
|
- snd_config_iterator_t i, next;
|
||||||
|
- int index, count;
|
||||||
|
-
|
||||||
|
- if (snd_config_get_type(src) != SND_CONFIG_TYPE_COMPOUND) {
|
||||||
|
- if (snd_config_copy(&dst, src) >= 0)
|
||||||
|
- return dst;
|
||||||
|
- return NULL;
|
||||||
|
- }
|
||||||
|
- count = 0;
|
||||||
|
- snd_config_for_each(i, next, src)
|
||||||
|
- count++;
|
||||||
|
- a = malloc(sizeof(dst) * count);
|
||||||
|
- if (a == NULL)
|
||||||
|
- return NULL;
|
||||||
|
- index = 0;
|
||||||
|
- snd_config_for_each(i, next, src) {
|
||||||
|
- snd_config_t *s = snd_config_iterator_entry(i);
|
||||||
|
- a[index++] = s;
|
||||||
|
- }
|
||||||
|
- if (sort)
|
||||||
|
- qsort(a, count, sizeof(a[0]), _compar);
|
||||||
|
- if (snd_config_make_compound(&dst, id, count == 1)) {
|
||||||
|
- free(a);
|
||||||
|
- return NULL;
|
||||||
|
- }
|
||||||
|
- for (index = 0; index < count; index++) {
|
||||||
|
- snd_config_t *s = a[index];
|
||||||
|
- const char *id2;
|
||||||
|
- if (snd_config_get_id(s, &id2)) {
|
||||||
|
- snd_config_delete(dst);
|
||||||
|
- free(a);
|
||||||
|
- return NULL;
|
||||||
|
- }
|
||||||
|
- s = normalize_config(id2, s, sort);
|
||||||
|
- if (s == NULL || snd_config_add(dst, s)) {
|
||||||
|
- if (s)
|
||||||
|
- snd_config_delete(s);
|
||||||
|
- snd_config_delete(dst);
|
||||||
|
- free(a);
|
||||||
|
- return NULL;
|
||||||
|
+ if (strcmp(source_file, "-") == 0) {
|
||||||
|
+ fd = fileno(stdin);
|
||||||
|
+ } else {
|
||||||
|
+ fd = open(source_file, O_RDONLY);
|
||||||
|
+ if (fd < 0) {
|
||||||
|
+ fprintf(stderr, _("Unable to open input file '%s': %s\n"),
|
||||||
|
+ source_file, strerror(-errno));
|
||||||
|
+ return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- free(a);
|
||||||
|
- return dst;
|
||||||
|
-}
|
||||||
|
|
||||||
|
-static int compile(const char *source_file, const char *output_file, int verbose)
|
||||||
|
-{
|
||||||
|
- snd_tplg_t *snd_tplg;
|
||||||
|
- int err;
|
||||||
|
+ size = 16*1024;
|
||||||
|
+ pos = 0;
|
||||||
|
+ buf = malloc(size);
|
||||||
|
+ if (buf == NULL)
|
||||||
|
+ goto _nomem;
|
||||||
|
+ while (1) {
|
||||||
|
+ r = read(fd, buf + pos, size - pos);
|
||||||
|
+ if (r < 0 && (errno == EAGAIN || errno == EINTR))
|
||||||
|
+ continue;
|
||||||
|
+ if (r <= 0)
|
||||||
|
+ break;
|
||||||
|
+ pos += r;
|
||||||
|
+ size += 8*1024;
|
||||||
|
+ buf2 = realloc(buf, size);
|
||||||
|
+ if (buf2 == NULL) {
|
||||||
|
+ free(buf);
|
||||||
|
+ goto _nomem;
|
||||||
|
+ }
|
||||||
|
+ buf = buf2;
|
||||||
|
+ }
|
||||||
|
+ if (fd != fileno(stdin))
|
||||||
|
+ close(fd);
|
||||||
|
+ if (r < 0) {
|
||||||
|
+ fprintf(stderr, _("Read error: %s\n"), strerror(-errno));
|
||||||
|
+ free(buf);
|
||||||
|
+ goto _err;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- snd_tplg = snd_tplg_new();
|
||||||
|
- if (snd_tplg == NULL) {
|
||||||
|
+ *tplg = snd_tplg_create(cflags);
|
||||||
|
+ if (*tplg == NULL) {
|
||||||
|
fprintf(stderr, _("failed to create new topology context\n"));
|
||||||
|
+ free(buf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- snd_tplg_verbose(snd_tplg, verbose);
|
||||||
|
-
|
||||||
|
- err = snd_tplg_build_file(snd_tplg, source_file, output_file);
|
||||||
|
+ err = snd_tplg_load(*tplg, buf, pos);
|
||||||
|
+ free(buf);
|
||||||
|
if (err < 0) {
|
||||||
|
- fprintf(stderr, _("failed to compile context %s\n"), source_file);
|
||||||
|
- snd_tplg_free(snd_tplg);
|
||||||
|
- unlink(output_file);
|
||||||
|
+ fprintf(stderr, _("Unable to load configuration: %s\n"),
|
||||||
|
+ snd_strerror(-err));
|
||||||
|
+ snd_tplg_free(*tplg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- snd_tplg_free(snd_tplg);
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+_nomem:
|
||||||
|
+ fprintf(stderr, _("No enough memory\n"));
|
||||||
|
+_err:
|
||||||
|
+ if (fd != fileno(stdin))
|
||||||
|
+ close(fd);
|
||||||
|
+ free(buf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int normalize(const char *source_file, const char *output_file, int sort)
|
||||||
|
+static int save(const char *output_file, void *buf, size_t size)
|
||||||
|
{
|
||||||
|
- snd_input_t *input;
|
||||||
|
- snd_output_t *output;
|
||||||
|
- snd_config_t *top, *norm;
|
||||||
|
- int err;
|
||||||
|
+ char *fname = NULL;
|
||||||
|
+ int fd;
|
||||||
|
+ ssize_t r;
|
||||||
|
|
||||||
|
- err = snd_input_stdio_open(&input, source_file, "r");
|
||||||
|
- if (err < 0) {
|
||||||
|
- fprintf(stderr, "Unable to open source file '%s': %s\n", source_file, snd_strerror(-err));
|
||||||
|
- return 0;
|
||||||
|
+ if (strcmp(output_file, "-") == 0) {
|
||||||
|
+ fd = fileno(stdout);
|
||||||
|
+ } else {
|
||||||
|
+ fname = alloca(strlen(output_file) + 5);
|
||||||
|
+ strcpy(fname, output_file);
|
||||||
|
+ strcat(fname, ".new");
|
||||||
|
+ fd = open(fname, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
|
||||||
|
+ if (fd < 0) {
|
||||||
|
+ fprintf(stderr, _("Unable to open output file '%s': %s\n"),
|
||||||
|
+ fname, strerror(-errno));
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
- err = snd_config_top(&top);
|
||||||
|
- if (err < 0) {
|
||||||
|
- snd_input_close(input);
|
||||||
|
- return 1;
|
||||||
|
+ r = 0;
|
||||||
|
+ while (size > 0) {
|
||||||
|
+ r = write(fd, buf, size);
|
||||||
|
+ if (r < 0 && (errno == EAGAIN || errno == EINTR))
|
||||||
|
+ continue;
|
||||||
|
+ if (r < 0)
|
||||||
|
+ break;
|
||||||
|
+ size -= r;
|
||||||
|
+ buf += r;
|
||||||
|
}
|
||||||
|
|
||||||
|
- err = snd_config_load(top, input);
|
||||||
|
- snd_input_close(input);
|
||||||
|
- if (err < 0) {
|
||||||
|
- snd_config_delete(top);
|
||||||
|
- fprintf(stderr, "Unable to parse source file '%s': %s\n", source_file, snd_strerror(-err));
|
||||||
|
- snd_config_delete(top);
|
||||||
|
+ if (r < 0) {
|
||||||
|
+ fprintf(stderr, _("Write error: %s\n"), strerror(-errno));
|
||||||
|
+ if (fd != fileno(stdout)) {
|
||||||
|
+ remove(fname);
|
||||||
|
+ close(fd);
|
||||||
|
+ }
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- err = snd_output_stdio_open(&output, output_file, "w+");
|
||||||
|
- if (err < 0) {
|
||||||
|
- fprintf(stderr, "Unable to open output file '%s': %s\n", output_file, snd_strerror(-err));
|
||||||
|
- snd_config_delete(top);
|
||||||
|
- return 1;
|
||||||
|
- }
|
||||||
|
+ if (fd != fileno(stdout))
|
||||||
|
+ close(fd);
|
||||||
|
|
||||||
|
- norm = normalize_config(NULL, top, sort);
|
||||||
|
- if (norm == NULL) {
|
||||||
|
- fprintf(stderr, "Unable to normalize configuration (out of memory?)\n");
|
||||||
|
- snd_output_close(output);
|
||||||
|
- snd_config_delete(top);
|
||||||
|
+ if (fname && rename(fname, output_file)) {
|
||||||
|
+ fprintf(stderr, _("Unable to rename file '%s' to '%s': %s\n"),
|
||||||
|
+ fname, output_file, strerror(-errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- err = snd_config_save(norm, output);
|
||||||
|
- snd_output_close(output);
|
||||||
|
- snd_config_delete(norm);
|
||||||
|
- snd_config_delete(top);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int dump(const char *source_file, const char *output_file, int cflags, int sflags)
|
||||||
|
+{
|
||||||
|
+ snd_tplg_t *tplg;
|
||||||
|
+ char *text;
|
||||||
|
+ int err;
|
||||||
|
+
|
||||||
|
+ err = load(&tplg, source_file, cflags);
|
||||||
|
+ if (err)
|
||||||
|
+ return err;
|
||||||
|
+ err = snd_tplg_save(tplg, &text, sflags);
|
||||||
|
+ snd_tplg_free(tplg);
|
||||||
|
if (err < 0) {
|
||||||
|
- fprintf(stderr, "Unable to save normalized contents: %s\n", snd_strerror(-err));
|
||||||
|
+ fprintf(stderr, _("Unable to save parsed configuration: %s\n"),
|
||||||
|
+ snd_strerror(-err));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
+ err = save(output_file, text, strlen(text));
|
||||||
|
+ free(text);
|
||||||
|
+ return err;
|
||||||
|
+}
|
||||||
|
|
||||||
|
- return 0;
|
||||||
|
+static int compile(const char *source_file, const char *output_file, int cflags)
|
||||||
|
+{
|
||||||
|
+ snd_tplg_t *tplg;
|
||||||
|
+ void *bin;
|
||||||
|
+ size_t size;
|
||||||
|
+ int err;
|
||||||
|
+
|
||||||
|
+ err = load(&tplg, source_file, cflags);
|
||||||
|
+ if (err)
|
||||||
|
+ return err;
|
||||||
|
+ err = snd_tplg_build_bin(tplg, &bin, &size);
|
||||||
|
+ snd_tplg_free(tplg);
|
||||||
|
+ if (err < 0 || size == 0) {
|
||||||
|
+ fprintf(stderr, _("failed to compile context %s\n"), source_file);
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ err = save(output_file, bin, size);
|
||||||
|
+ free(bin);
|
||||||
|
+ return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#define OP_COMPILE 1
|
||||||
|
+#define OP_NORMALIZE 2
|
||||||
|
+#define OP_DUMP 3
|
||||||
|
+
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
- static const char short_options[] = "hc:n:v:o:s";
|
||||||
|
+ static const char short_options[] = "hc:n:u:v:o:sgxz";
|
||||||
|
static const struct option long_options[] = {
|
||||||
|
{"help", 0, NULL, 'h'},
|
||||||
|
{"verbose", 1, NULL, 'v'},
|
||||||
|
{"compile", 1, NULL, 'c'},
|
||||||
|
{"normalize", 1, NULL, 'n'},
|
||||||
|
+ {"dump", 1, NULL, 'u'},
|
||||||
|
{"output", 1, NULL, 'o'},
|
||||||
|
{"sort", 0, NULL, 's'},
|
||||||
|
+ {"group", 0, NULL, 'g'},
|
||||||
|
+ {"nocheck", 0, NULL, 'x'},
|
||||||
|
+ {"dapm-nosort", 0, NULL, 'z'},
|
||||||
|
{0, 0, 0, 0},
|
||||||
|
};
|
||||||
|
- char *source_file = NULL, *normalize_file = NULL, *output_file = NULL;
|
||||||
|
- int c, err, verbose = 0, sort = 0, option_index;
|
||||||
|
+ char *source_file = NULL;
|
||||||
|
+ char *output_file = NULL;
|
||||||
|
+ int c, err, op = 'c', cflags = 0, sflags = 0, option_index;
|
||||||
|
|
||||||
|
#ifdef ENABLE_NLS
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
@@ -218,19 +259,32 @@ int main(int argc, char *argv[])
|
||||||
|
usage(argv[0]);
|
||||||
|
return 0;
|
||||||
|
case 'v':
|
||||||
|
- verbose = atoi(optarg);
|
||||||
|
+ cflags |= SND_TPLG_CREATE_VERBOSE;
|
||||||
|
break;
|
||||||
|
- case 'c':
|
||||||
|
- source_file = optarg;
|
||||||
|
+ case 'z':
|
||||||
|
+ cflags |= SND_TPLG_CREATE_DAPM_NOSORT;
|
||||||
|
break;
|
||||||
|
+ case 'c':
|
||||||
|
case 'n':
|
||||||
|
- normalize_file = optarg;
|
||||||
|
+ case 'u':
|
||||||
|
+ if (source_file) {
|
||||||
|
+ fprintf(stderr, _("Cannot combine operations (compile, normalize, dump)\n"));
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ source_file = optarg;
|
||||||
|
+ op = c;
|
||||||
|
break;
|
||||||
|
case 'o':
|
||||||
|
output_file = optarg;
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
- sort = 1;
|
||||||
|
+ sflags |= SND_TPLG_SAVE_SORT;
|
||||||
|
+ break;
|
||||||
|
+ case 'g':
|
||||||
|
+ sflags |= SND_TPLG_SAVE_GROUPS;
|
||||||
|
+ break;
|
||||||
|
+ case 'x':
|
||||||
|
+ sflags |= SND_TPLG_SAVE_NOCHECK;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf(stderr, _("Try `%s --help' for more information.\n"), argv[0]);
|
||||||
|
@@ -238,21 +292,29 @@ int main(int argc, char *argv[])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (source_file && normalize_file) {
|
||||||
|
- fprintf(stderr, "Cannot normalize and compile at a time!\n");
|
||||||
|
+ if (source_file == NULL || output_file == NULL) {
|
||||||
|
+ usage(argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if ((source_file == NULL && normalize_file == NULL) || output_file == NULL) {
|
||||||
|
- usage(argv[0]);
|
||||||
|
- return 1;
|
||||||
|
+ if (op == 'n') {
|
||||||
|
+ if (sflags != 0 && sflags != SND_TPLG_SAVE_SORT) {
|
||||||
|
+ fprintf(stderr, _("Wrong parameters for the normalize operation!\n"));
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ /* normalize has predefined output */
|
||||||
|
+ sflags = SND_TPLG_SAVE_SORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (source_file)
|
||||||
|
- err = compile(source_file, output_file, verbose);
|
||||||
|
- else
|
||||||
|
- err = normalize(normalize_file, output_file, sort);
|
||||||
|
+ switch (op) {
|
||||||
|
+ case 'c':
|
||||||
|
+ err = compile(source_file, output_file, cflags);
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ err = dump(source_file, output_file, cflags, sflags);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
snd_output_close(log);
|
||||||
|
- return 0;
|
||||||
|
+ return err ? 1 : 0;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
93
0028-alsatplg-add-V-version-option.patch
Normal file
93
0028-alsatplg-add-V-version-option.patch
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
From 32e7016fd710f6ed9d514100c7c05453974036d0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
Date: Fri, 20 Dec 2019 15:23:27 +0100
|
||||||
|
Subject: [PATCH 28/35] alsatplg: add -V,--version option
|
||||||
|
|
||||||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
---
|
||||||
|
topology/alsatplg.rst | 3 +++
|
||||||
|
topology/topology.c | 20 ++++++++++++++++++--
|
||||||
|
2 files changed, 21 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/topology/alsatplg.rst b/topology/alsatplg.rst
|
||||||
|
index e09c865cc9b2..260454bfc526 100644
|
||||||
|
--- a/topology/alsatplg.rst
|
||||||
|
+++ b/topology/alsatplg.rst
|
||||||
|
@@ -47,6 +47,9 @@ Available options:
|
||||||
|
**-h**, **--help**
|
||||||
|
this help
|
||||||
|
|
||||||
|
+ **-V**, **--version**
|
||||||
|
+ show the utility version and versions of used libraries
|
||||||
|
+
|
||||||
|
**-c**, **--compile** `FILE`
|
||||||
|
source configuration file for the compilation
|
||||||
|
|
||||||
|
diff --git a/topology/topology.c b/topology/topology.c
|
||||||
|
index a94941ae762e..101f8ccf16ea 100644
|
||||||
|
--- a/topology/topology.c
|
||||||
|
+++ b/topology/topology.c
|
||||||
|
@@ -34,10 +34,11 @@
|
||||||
|
#include <alsa/asoundlib.h>
|
||||||
|
#include <alsa/topology.h>
|
||||||
|
#include "gettext.h"
|
||||||
|
+#include "version.h"
|
||||||
|
|
||||||
|
static snd_output_t *log;
|
||||||
|
|
||||||
|
-static void usage(char *name)
|
||||||
|
+static void usage(const char *name)
|
||||||
|
{
|
||||||
|
printf(
|
||||||
|
_("Usage: %s [OPTIONS]...\n"
|
||||||
|
@@ -51,9 +52,20 @@ _("Usage: %s [OPTIONS]...\n"
|
||||||
|
"-s, --sort sort the identifiers in the normalized output\n"
|
||||||
|
"-g, --group save configuration by group indexes\n"
|
||||||
|
"-x, --nocheck save configuration without additional integrity checks\n"
|
||||||
|
+"-V, --version print version\n"
|
||||||
|
), name);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void version(const char *name)
|
||||||
|
+{
|
||||||
|
+ printf(
|
||||||
|
+_("%s version %s\n"
|
||||||
|
+"libasound version %s\n"
|
||||||
|
+"libatopology version %s\n"
|
||||||
|
+), name, SND_UTIL_VERSION_STR,
|
||||||
|
+ snd_asoundlib_version(), snd_tplg_version());
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int load(snd_tplg_t **tplg, const char *source_file, int cflags)
|
||||||
|
{
|
||||||
|
int fd, err;
|
||||||
|
@@ -227,7 +239,7 @@ static int compile(const char *source_file, const char *output_file, int cflags)
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
- static const char short_options[] = "hc:n:u:v:o:sgxz";
|
||||||
|
+ static const char short_options[] = "hc:n:u:v:o:sgxzV";
|
||||||
|
static const struct option long_options[] = {
|
||||||
|
{"help", 0, NULL, 'h'},
|
||||||
|
{"verbose", 1, NULL, 'v'},
|
||||||
|
@@ -239,6 +251,7 @@ int main(int argc, char *argv[])
|
||||||
|
{"group", 0, NULL, 'g'},
|
||||||
|
{"nocheck", 0, NULL, 'x'},
|
||||||
|
{"dapm-nosort", 0, NULL, 'z'},
|
||||||
|
+ {"version", 0, NULL, 'V'},
|
||||||
|
{0, 0, 0, 0},
|
||||||
|
};
|
||||||
|
char *source_file = NULL;
|
||||||
|
@@ -286,6 +299,9 @@ int main(int argc, char *argv[])
|
||||||
|
case 'x':
|
||||||
|
sflags |= SND_TPLG_SAVE_NOCHECK;
|
||||||
|
break;
|
||||||
|
+ case 'V':
|
||||||
|
+ version(argv[0]);
|
||||||
|
+ return 0;
|
||||||
|
default:
|
||||||
|
fprintf(stderr, _("Try `%s --help' for more information.\n"), argv[0]);
|
||||||
|
return 1;
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
237
0029-alsatplg-add-decode-command.patch
Normal file
237
0029-alsatplg-add-decode-command.patch
Normal file
@ -0,0 +1,237 @@
|
|||||||
|
From 786c3ee8144893dfb56b35c46542d3ded78d746c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
Date: Sun, 22 Dec 2019 15:44:56 +0100
|
||||||
|
Subject: [PATCH 29/35] alsatplg: add decode command
|
||||||
|
|
||||||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
---
|
||||||
|
topology/alsatplg.rst | 3 ++
|
||||||
|
topology/topology.c | 111 ++++++++++++++++++++++++++++++++++++++------------
|
||||||
|
2 files changed, 87 insertions(+), 27 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/topology/alsatplg.rst b/topology/alsatplg.rst
|
||||||
|
index 260454bfc526..56324d52f883 100644
|
||||||
|
--- a/topology/alsatplg.rst
|
||||||
|
+++ b/topology/alsatplg.rst
|
||||||
|
@@ -53,6 +53,9 @@ Available options:
|
||||||
|
**-c**, **--compile** `FILE`
|
||||||
|
source configuration file for the compilation
|
||||||
|
|
||||||
|
+ **-d**, **--decode** `FILE`
|
||||||
|
+ source binary topology file for the decode
|
||||||
|
+
|
||||||
|
**-n**, **--normalize** `FILE`
|
||||||
|
parse and save the configuration file in the normalized format
|
||||||
|
|
||||||
|
diff --git a/topology/topology.c b/topology/topology.c
|
||||||
|
index 101f8ccf16ea..91d2fce655fe 100644
|
||||||
|
--- a/topology/topology.c
|
||||||
|
+++ b/topology/topology.c
|
||||||
|
@@ -44,9 +44,10 @@ static void usage(const char *name)
|
||||||
|
_("Usage: %s [OPTIONS]...\n"
|
||||||
|
"\n"
|
||||||
|
"-h, --help help\n"
|
||||||
|
-"-c, --compile=FILE compile file\n"
|
||||||
|
-"-n, --normalize=FILE normalize file\n"
|
||||||
|
-"-u, --dump=FILE dump (reparse) file\n"
|
||||||
|
+"-c, --compile=FILE compile configuration file\n"
|
||||||
|
+"-d, --decode=FILE decode binary topology file\n"
|
||||||
|
+"-n, --normalize=FILE normalize configuration file\n"
|
||||||
|
+"-u, --dump=FILE dump (reparse) configuration file\n"
|
||||||
|
"-v, --verbose=LEVEL set verbosity level (0...1)\n"
|
||||||
|
"-o, --output=FILE set output file\n"
|
||||||
|
"-s, --sort sort the identifiers in the normalized output\n"
|
||||||
|
@@ -66,10 +67,10 @@ _("%s version %s\n"
|
||||||
|
snd_asoundlib_version(), snd_tplg_version());
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int load(snd_tplg_t **tplg, const char *source_file, int cflags)
|
||||||
|
+static int load(const char *source_file, void **dst, size_t *dst_size)
|
||||||
|
{
|
||||||
|
- int fd, err;
|
||||||
|
- char *buf, *buf2;
|
||||||
|
+ int fd;
|
||||||
|
+ void *buf, *buf2;
|
||||||
|
size_t size, pos;
|
||||||
|
ssize_t r;
|
||||||
|
|
||||||
|
@@ -112,15 +113,31 @@ static int load(snd_tplg_t **tplg, const char *source_file, int cflags)
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ *dst = buf;
|
||||||
|
+ *dst_size = pos;
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+_nomem:
|
||||||
|
+ fprintf(stderr, _("No enough memory\n"));
|
||||||
|
+_err:
|
||||||
|
+ if (fd != fileno(stdin))
|
||||||
|
+ close(fd);
|
||||||
|
+ free(buf);
|
||||||
|
+ return 1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int load_topology(snd_tplg_t **tplg, char *config,
|
||||||
|
+ size_t config_size, int cflags)
|
||||||
|
+{
|
||||||
|
+ int err;
|
||||||
|
+
|
||||||
|
*tplg = snd_tplg_create(cflags);
|
||||||
|
if (*tplg == NULL) {
|
||||||
|
fprintf(stderr, _("failed to create new topology context\n"));
|
||||||
|
- free(buf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- err = snd_tplg_load(*tplg, buf, pos);
|
||||||
|
- free(buf);
|
||||||
|
+ err = snd_tplg_load(*tplg, config, config_size);
|
||||||
|
if (err < 0) {
|
||||||
|
fprintf(stderr, _("Unable to load configuration: %s\n"),
|
||||||
|
snd_strerror(-err));
|
||||||
|
@@ -129,14 +146,6 @@ static int load(snd_tplg_t **tplg, const char *source_file, int cflags)
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
-
|
||||||
|
-_nomem:
|
||||||
|
- fprintf(stderr, _("No enough memory\n"));
|
||||||
|
-_err:
|
||||||
|
- if (fd != fileno(stdin))
|
||||||
|
- close(fd);
|
||||||
|
- free(buf);
|
||||||
|
- return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int save(const char *output_file, void *buf, size_t size)
|
||||||
|
@@ -194,10 +203,15 @@ static int save(const char *output_file, void *buf, size_t size)
|
||||||
|
static int dump(const char *source_file, const char *output_file, int cflags, int sflags)
|
||||||
|
{
|
||||||
|
snd_tplg_t *tplg;
|
||||||
|
- char *text;
|
||||||
|
+ char *config, *text;
|
||||||
|
+ size_t size;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
- err = load(&tplg, source_file, cflags);
|
||||||
|
+ err = load(source_file, (void **)&config, &size);
|
||||||
|
+ if (err)
|
||||||
|
+ return err;
|
||||||
|
+ err = load_topology(&tplg, config, size, cflags);
|
||||||
|
+ free(config);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
err = snd_tplg_save(tplg, &text, sflags);
|
||||||
|
@@ -215,17 +229,23 @@ static int dump(const char *source_file, const char *output_file, int cflags, in
|
||||||
|
static int compile(const char *source_file, const char *output_file, int cflags)
|
||||||
|
{
|
||||||
|
snd_tplg_t *tplg;
|
||||||
|
+ char *config;
|
||||||
|
void *bin;
|
||||||
|
- size_t size;
|
||||||
|
+ size_t config_size, size;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
- err = load(&tplg, source_file, cflags);
|
||||||
|
+ err = load(source_file, (void **)&config, &config_size);
|
||||||
|
+ if (err)
|
||||||
|
+ return err;
|
||||||
|
+ err = load_topology(&tplg, config, config_size, cflags);
|
||||||
|
+ free(config);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
err = snd_tplg_build_bin(tplg, &bin, &size);
|
||||||
|
snd_tplg_free(tplg);
|
||||||
|
if (err < 0 || size == 0) {
|
||||||
|
- fprintf(stderr, _("failed to compile context %s\n"), source_file);
|
||||||
|
+ fprintf(stderr, _("failed to compile context %s: %s\n"),
|
||||||
|
+ source_file, snd_strerror(-err));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
err = save(output_file, bin, size);
|
||||||
|
@@ -233,17 +253,50 @@ static int compile(const char *source_file, const char *output_file, int cflags)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
-#define OP_COMPILE 1
|
||||||
|
-#define OP_NORMALIZE 2
|
||||||
|
-#define OP_DUMP 3
|
||||||
|
+static int decode(const char *source_file, const char *output_file,
|
||||||
|
+ int cflags, int dflags, int sflags)
|
||||||
|
+{
|
||||||
|
+ snd_tplg_t *tplg;
|
||||||
|
+ void *bin;
|
||||||
|
+ char *text;
|
||||||
|
+ size_t size;
|
||||||
|
+ int err;
|
||||||
|
+
|
||||||
|
+ if (load(source_file, &bin, &size))
|
||||||
|
+ return 1;
|
||||||
|
+ tplg = snd_tplg_create(cflags);
|
||||||
|
+ if (tplg == NULL) {
|
||||||
|
+ fprintf(stderr, _("failed to create new topology context\n"));
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ err = snd_tplg_decode(tplg, bin, size, dflags);
|
||||||
|
+ free(bin);
|
||||||
|
+ if (err < 0) {
|
||||||
|
+ snd_tplg_free(tplg);
|
||||||
|
+ fprintf(stderr, _("failed to decode context %s: %s\n"),
|
||||||
|
+ source_file, snd_strerror(-err));
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ err = snd_tplg_save(tplg, &text, sflags);
|
||||||
|
+ snd_tplg_free(tplg);
|
||||||
|
+ if (err < 0) {
|
||||||
|
+ fprintf(stderr, _("Unable to save parsed configuration: %s\n"),
|
||||||
|
+ snd_strerror(-err));
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ err = save(output_file, text, strlen(text));
|
||||||
|
+ free(text);
|
||||||
|
+ return err;
|
||||||
|
+}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
- static const char short_options[] = "hc:n:u:v:o:sgxzV";
|
||||||
|
+ static const char short_options[] = "hc:d:n:u:v:o:sgxzV";
|
||||||
|
static const struct option long_options[] = {
|
||||||
|
{"help", 0, NULL, 'h'},
|
||||||
|
{"verbose", 1, NULL, 'v'},
|
||||||
|
{"compile", 1, NULL, 'c'},
|
||||||
|
+ {"decode", 1, NULL, 'd'},
|
||||||
|
{"normalize", 1, NULL, 'n'},
|
||||||
|
{"dump", 1, NULL, 'u'},
|
||||||
|
{"output", 1, NULL, 'o'},
|
||||||
|
@@ -256,7 +309,7 @@ int main(int argc, char *argv[])
|
||||||
|
};
|
||||||
|
char *source_file = NULL;
|
||||||
|
char *output_file = NULL;
|
||||||
|
- int c, err, op = 'c', cflags = 0, sflags = 0, option_index;
|
||||||
|
+ int c, err, op = 'c', cflags = 0, dflags = 0, sflags = 0, option_index;
|
||||||
|
|
||||||
|
#ifdef ENABLE_NLS
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
@@ -278,6 +331,7 @@ int main(int argc, char *argv[])
|
||||||
|
cflags |= SND_TPLG_CREATE_DAPM_NOSORT;
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
+ case 'd':
|
||||||
|
case 'n':
|
||||||
|
case 'u':
|
||||||
|
if (source_file) {
|
||||||
|
@@ -326,6 +380,9 @@ int main(int argc, char *argv[])
|
||||||
|
case 'c':
|
||||||
|
err = compile(source_file, output_file, cflags);
|
||||||
|
break;
|
||||||
|
+ case 'd':
|
||||||
|
+ err = decode(source_file, output_file, cflags, dflags, sflags);
|
||||||
|
+ break;
|
||||||
|
default:
|
||||||
|
err = dump(source_file, output_file, cflags, sflags);
|
||||||
|
break;
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
25
0030-alsatplg-add-documentation-for-z-dapm-nosort-h.patch
Normal file
25
0030-alsatplg-add-documentation-for-z-dapm-nosort-h.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
From 56e1b879d4bccda62e7c0177b0a395d57a37931c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
Date: Wed, 1 Jan 2020 17:45:06 +0100
|
||||||
|
Subject: [PATCH 30/35] alsatplg: add documentation for -z,--dapm-nosort (-h)
|
||||||
|
|
||||||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
---
|
||||||
|
topology/topology.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/topology/topology.c b/topology/topology.c
|
||||||
|
index 91d2fce655fe..ad0d108562df 100644
|
||||||
|
--- a/topology/topology.c
|
||||||
|
+++ b/topology/topology.c
|
||||||
|
@@ -53,6 +53,7 @@ _("Usage: %s [OPTIONS]...\n"
|
||||||
|
"-s, --sort sort the identifiers in the normalized output\n"
|
||||||
|
"-g, --group save configuration by group indexes\n"
|
||||||
|
"-x, --nocheck save configuration without additional integrity checks\n"
|
||||||
|
+"-z, --dapm-nosort do not sort the DAPM widgets\n"
|
||||||
|
"-V, --version print version\n"
|
||||||
|
), name);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
36
0031-configure-fix-new-libatopology-check.patch
Normal file
36
0031-configure-fix-new-libatopology-check.patch
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
From 996a638e04766df43cb8026673f93927b1047639 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
Date: Fri, 3 Jan 2020 23:46:51 +0100
|
||||||
|
Subject: [PATCH 31/35] configure: fix new libatopology check
|
||||||
|
|
||||||
|
---
|
||||||
|
configure.ac | 6 +-----
|
||||||
|
1 file changed, 1 insertion(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 4bee49be81ba..b7ed81a0d32c 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -49,6 +49,7 @@ AC_CHECK_LIB([asound], [snd_seq_client_info_get_pid], [HAVE_SEQ_CLIENT_INFO_GET_
|
||||||
|
if test "$HAVE_SEQ_CLIENT_INFO_GET_PID" = "yes" ; then
|
||||||
|
AC_DEFINE([HAVE_SEQ_CLIENT_INFO_GET_PID], 1, [alsa-lib supports snd_seq_client_info_get_pid])
|
||||||
|
fi
|
||||||
|
+AC_CHECK_LIB([atopology], [snd_tplg_save], [have_topology="no"])
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: The library 'libffado' (at least v2.4.1) executes ctor/dtor of instances
|
||||||
|
@@ -70,11 +71,6 @@ AM_CONDITIONAL(HAVE_TOPOLOGY, test "$have_topology" = "yes")
|
||||||
|
AM_CONDITIONAL(HAVE_SAMPLERATE, test "$have_samplerate" = "yes")
|
||||||
|
AM_CONDITIONAL(HAVE_FFADO, test "$have_ffado" = "yes")
|
||||||
|
|
||||||
|
-# old libasound with the topology routines in the main library
|
||||||
|
-if test "x$have_topology" = "xyes" -a "x$ALSA_TOPOLOGY_LIBS" = "x"; then
|
||||||
|
- ALSA_TOPOLOGY_LIBS="$ALSA_LIBS"
|
||||||
|
-fi
|
||||||
|
-
|
||||||
|
dnl Use tinyalsa
|
||||||
|
alsabat_backend_tiny=
|
||||||
|
AC_ARG_ENABLE(alsabat_backend_tiny,
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
67
0032-Use-__func__-instead-of-__FUNCTION__.patch
Normal file
67
0032-Use-__func__-instead-of-__FUNCTION__.patch
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
From f80a290153f210bb80165ac8dc6b1dccaa24781d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michael Forney <mforney@mforney.org>
|
||||||
|
Date: Wed, 5 Feb 2020 00:12:18 -0800
|
||||||
|
Subject: [PATCH 32/35] Use __func__ instead of __FUNCTION__
|
||||||
|
|
||||||
|
They are equivalent, but __func__ is in C99. __FUNCTION__ exists only
|
||||||
|
for backwards compatibility with old gcc versions.
|
||||||
|
|
||||||
|
Signed-off-by: Michael Forney <mforney@mforney.org>
|
||||||
|
Reviewd-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||||||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||||
|
---
|
||||||
|
alsactl/alsactl.h | 16 ++++++++--------
|
||||||
|
aplay/aplay.c | 4 ++--
|
||||||
|
2 files changed, 10 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/alsactl/alsactl.h b/alsactl/alsactl.h
|
||||||
|
index 4f969ec2a4bc..69b539ca6be0 100644
|
||||||
|
--- a/alsactl/alsactl.h
|
||||||
|
+++ b/alsactl/alsactl.h
|
||||||
|
@@ -13,15 +13,15 @@ void cerror_(const char *fcn, long line, int cond, const char *fmt, ...);
|
||||||
|
void dbg_(const char *fcn, long line, const char *fmt, ...);
|
||||||
|
|
||||||
|
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
|
||||||
|
-#define info(...) do { info_(__FUNCTION__, __LINE__, __VA_ARGS__); } while (0)
|
||||||
|
-#define error(...) do { error_(__FUNCTION__, __LINE__, __VA_ARGS__); } while (0)
|
||||||
|
-#define cerror(cond, ...) do { cerror_(__FUNCTION__, __LINE__, (cond) != 0, __VA_ARGS__); } while (0)
|
||||||
|
-#define dbg(...) do { dbg_(__FUNCTION__, __LINE__, __VA_ARGS__); } while (0)
|
||||||
|
+#define info(...) do { info_(__func__, __LINE__, __VA_ARGS__); } while (0)
|
||||||
|
+#define error(...) do { error_(__func__, __LINE__, __VA_ARGS__); } while (0)
|
||||||
|
+#define cerror(cond, ...) do { cerror_(__func__, __LINE__, (cond) != 0, __VA_ARGS__); } while (0)
|
||||||
|
+#define dbg(...) do { dbg_(__func__, __LINE__, __VA_ARGS__); } while (0)
|
||||||
|
#else
|
||||||
|
-#define info(args...) do { info_(__FUNCTION__, __LINE__, ##args); } while (0)
|
||||||
|
-#define error(args...) do { error_(__FUNCTION__, __LINE__, ##args); } while (0)
|
||||||
|
-#define cerror(cond, ...) do { error_(__FUNCTION__, __LINE__, (cond) != 0, ##args); } while (0)
|
||||||
|
-#define dbg(args...) do { dbg_(__FUNCTION__, __LINE__, ##args); } while (0)
|
||||||
|
+#define info(args...) do { info_(__func__, __LINE__, ##args); } while (0)
|
||||||
|
+#define error(args...) do { error_(__func__, __LINE__, ##args); } while (0)
|
||||||
|
+#define cerror(cond, ...) do { error_(__func__, __LINE__, (cond) != 0, ##args); } while (0)
|
||||||
|
+#define dbg(args...) do { dbg_(__func__, __LINE__, ##args); } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int init(const char *file, const char *cardname);
|
||||||
|
diff --git a/aplay/aplay.c b/aplay/aplay.c
|
||||||
|
index 1a887e412aae..908093c45c90 100644
|
||||||
|
--- a/aplay/aplay.c
|
||||||
|
+++ b/aplay/aplay.c
|
||||||
|
@@ -186,13 +186,13 @@ static const struct fmt_capture {
|
||||||
|
|
||||||
|
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
|
||||||
|
#define error(...) do {\
|
||||||
|
- fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \
|
||||||
|
+ fprintf(stderr, "%s: %s:%d: ", command, __func__, __LINE__); \
|
||||||
|
fprintf(stderr, __VA_ARGS__); \
|
||||||
|
putc('\n', stderr); \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define error(args...) do {\
|
||||||
|
- fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \
|
||||||
|
+ fprintf(stderr, "%s: %s:%d: ", command, __func__, __LINE__); \
|
||||||
|
fprintf(stderr, ##args); \
|
||||||
|
putc('\n', stderr); \
|
||||||
|
} while (0)
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
103
0033-Avoid-pointer-arithmetic-on-void.patch
Normal file
103
0033-Avoid-pointer-arithmetic-on-void.patch
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
From 62a765087e3885a463dbf0d888c5d666da9ee7b3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michael Forney <mforney@mforney.org>
|
||||||
|
Date: Wed, 5 Feb 2020 00:12:19 -0800
|
||||||
|
Subject: [PATCH 33/35] Avoid pointer arithmetic on `void *`
|
||||||
|
|
||||||
|
The pointer operand to the binary `+` operator must be to a complete
|
||||||
|
object type.
|
||||||
|
|
||||||
|
Signed-off-by: Michael Forney <mforney@mforney.org>
|
||||||
|
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||||||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||||
|
---
|
||||||
|
aplay/aplay.c | 4 ++--
|
||||||
|
axfer/xfer-libasound-irq-mmap.c | 7 ++++---
|
||||||
|
axfer/xfer-libasound-timer-mmap.c | 4 ++--
|
||||||
|
bat/common.c | 2 +-
|
||||||
|
seq/aplaymidi/aplaymidi.c | 2 +-
|
||||||
|
5 files changed, 10 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/aplay/aplay.c b/aplay/aplay.c
|
||||||
|
index 908093c45c90..08395f695287 100644
|
||||||
|
--- a/aplay/aplay.c
|
||||||
|
+++ b/aplay/aplay.c
|
||||||
|
@@ -442,7 +442,7 @@ static ssize_t xwrite(int fd, const void *buf, size_t count)
|
||||||
|
size_t offset = 0;
|
||||||
|
|
||||||
|
while (offset < count) {
|
||||||
|
- written = write(fd, buf + offset, count - offset);
|
||||||
|
+ written = write(fd, (char *)buf + offset, count - offset);
|
||||||
|
if (written <= 0)
|
||||||
|
return written;
|
||||||
|
|
||||||
|
@@ -1210,7 +1210,7 @@ static int test_au(int fd, void *buffer)
|
||||||
|
hwparams.channels = BE_INT(ap->channels);
|
||||||
|
if (hwparams.channels < 1 || hwparams.channels > 256)
|
||||||
|
return -1;
|
||||||
|
- if ((size_t)safe_read(fd, buffer + sizeof(AuHeader), BE_INT(ap->hdr_size) - sizeof(AuHeader)) != BE_INT(ap->hdr_size) - sizeof(AuHeader)) {
|
||||||
|
+ if ((size_t)safe_read(fd, (char *)buffer + sizeof(AuHeader), BE_INT(ap->hdr_size) - sizeof(AuHeader)) != BE_INT(ap->hdr_size) - sizeof(AuHeader)) {
|
||||||
|
error(_("read error"));
|
||||||
|
prg_exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
diff --git a/axfer/xfer-libasound-irq-mmap.c b/axfer/xfer-libasound-irq-mmap.c
|
||||||
|
index a13b3c300354..386e741de733 100644
|
||||||
|
--- a/axfer/xfer-libasound-irq-mmap.c
|
||||||
|
+++ b/axfer/xfer-libasound-irq-mmap.c
|
||||||
|
@@ -146,9 +146,10 @@ static int irq_mmap_process_frames(struct libasound_state *state,
|
||||||
|
// TODO: Perhaps, the complex layout can be supported as a variation of
|
||||||
|
// vector type. However, there's no driver with this layout.
|
||||||
|
if (layout->vector == NULL) {
|
||||||
|
- frame_buf = areas[0].addr;
|
||||||
|
- frame_buf += snd_pcm_frames_to_bytes(state->handle,
|
||||||
|
- frame_offset);
|
||||||
|
+ char *buf;
|
||||||
|
+ buf = areas[0].addr;
|
||||||
|
+ buf += snd_pcm_frames_to_bytes(state->handle, frame_offset);
|
||||||
|
+ frame_buf = buf;
|
||||||
|
} else {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < layout->samples_per_frame; ++i) {
|
||||||
|
diff --git a/axfer/xfer-libasound-timer-mmap.c b/axfer/xfer-libasound-timer-mmap.c
|
||||||
|
index 1c642fe58b28..ba26e2995f5f 100644
|
||||||
|
--- a/axfer/xfer-libasound-timer-mmap.c
|
||||||
|
+++ b/axfer/xfer-libasound-timer-mmap.c
|
||||||
|
@@ -100,8 +100,8 @@ static void *get_buffer(struct libasound_state *state,
|
||||||
|
|
||||||
|
if (layout->vector == NULL) {
|
||||||
|
char *buf;
|
||||||
|
- buf = areas[0].addr + snd_pcm_frames_to_bytes(state->handle,
|
||||||
|
- frame_offset);
|
||||||
|
+ buf = areas[0].addr;
|
||||||
|
+ buf += snd_pcm_frames_to_bytes(state->handle, frame_offset);
|
||||||
|
frame_buf = buf;
|
||||||
|
} else {
|
||||||
|
int i;
|
||||||
|
diff --git a/bat/common.c b/bat/common.c
|
||||||
|
index d3d1f285449c..339e749fd74a 100644
|
||||||
|
--- a/bat/common.c
|
||||||
|
+++ b/bat/common.c
|
||||||
|
@@ -231,7 +231,7 @@ int generate_input_data(struct bat *bat, void *buffer, int bytes, int frames)
|
||||||
|
load = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
- err = fread(buffer + load, 1, bytes - load, bat->fp);
|
||||||
|
+ err = fread((char *)buffer + load, 1, bytes - load, bat->fp);
|
||||||
|
if (0 == err) {
|
||||||
|
if (feof(bat->fp)) {
|
||||||
|
fprintf(bat->log,
|
||||||
|
diff --git a/seq/aplaymidi/aplaymidi.c b/seq/aplaymidi/aplaymidi.c
|
||||||
|
index 12d6fac3b0dc..b086e7015aa2 100644
|
||||||
|
--- a/seq/aplaymidi/aplaymidi.c
|
||||||
|
+++ b/seq/aplaymidi/aplaymidi.c
|
||||||
|
@@ -633,7 +633,7 @@ static void handle_big_sysex(snd_seq_event_t *ev)
|
||||||
|
check_snd("sync output", err);
|
||||||
|
if (sleep(1))
|
||||||
|
fatal("aborted");
|
||||||
|
- ev->data.ext.ptr += MIDI_BYTES_PER_SEC;
|
||||||
|
+ ev->data.ext.ptr = (char *)ev->data.ext.ptr + MIDI_BYTES_PER_SEC;
|
||||||
|
length -= MIDI_BYTES_PER_SEC;
|
||||||
|
}
|
||||||
|
ev->data.ext.len = length;
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
59
0034-Use-lli-for-long-long-in-printf.patch
Normal file
59
0034-Use-lli-for-long-long-in-printf.patch
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
From 646b3b1c0badbfd1b2ea7b82eb59d43a460c531c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michael Forney <mforney@mforney.org>
|
||||||
|
Date: Wed, 5 Feb 2020 00:12:20 -0800
|
||||||
|
Subject: [PATCH 34/35] Use %lli for long long in printf
|
||||||
|
|
||||||
|
The `L` length modifier only applies to floating-point conversion
|
||||||
|
specifiers, and `ll` is used for `long long` integers.
|
||||||
|
|
||||||
|
Although glibc accepts %Li, musl does not and returns EINVAL.
|
||||||
|
|
||||||
|
Signed-off-by: Michael Forney <mforney@mforney.org>
|
||||||
|
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||||||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||||
|
---
|
||||||
|
alsactl/state.c | 4 ++--
|
||||||
|
amixer/amixer.c | 4 ++--
|
||||||
|
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/alsactl/state.c b/alsactl/state.c
|
||||||
|
index 38e85c06c0b0..22e0269fd30a 100644
|
||||||
|
--- a/alsactl/state.c
|
||||||
|
+++ b/alsactl/state.c
|
||||||
|
@@ -336,9 +336,9 @@ static int get_control(snd_ctl_t *handle, snd_ctl_elem_id_t *id, snd_config_t *t
|
||||||
|
long long max = snd_ctl_elem_info_get_max64(info);
|
||||||
|
long long step = snd_ctl_elem_info_get_step64(info);
|
||||||
|
if (step)
|
||||||
|
- sprintf(buf, "%Li - %Li (step %Li)", min, max, step);
|
||||||
|
+ sprintf(buf, "%lli - %lli (step %lli)", min, max, step);
|
||||||
|
else
|
||||||
|
- sprintf(buf, "%Li - %Li", min, max);
|
||||||
|
+ sprintf(buf, "%lli - %lli", min, max);
|
||||||
|
err = snd_config_string_add(comment, "range", buf);
|
||||||
|
if (err < 0) {
|
||||||
|
error("snd_config_string_add: %s", snd_strerror(err));
|
||||||
|
diff --git a/amixer/amixer.c b/amixer/amixer.c
|
||||||
|
index 928f7c5d6482..4c19a583e5b1 100644
|
||||||
|
--- a/amixer/amixer.c
|
||||||
|
+++ b/amixer/amixer.c
|
||||||
|
@@ -620,7 +620,7 @@ static int show_control(const char *space, snd_hctl_elem_t *elem,
|
||||||
|
snd_ctl_elem_info_get_step(info));
|
||||||
|
break;
|
||||||
|
case SND_CTL_ELEM_TYPE_INTEGER64:
|
||||||
|
- printf(",min=%Li,max=%Li,step=%Li\n",
|
||||||
|
+ printf(",min=%lli,max=%lli,step=%lli\n",
|
||||||
|
snd_ctl_elem_info_get_min64(info),
|
||||||
|
snd_ctl_elem_info_get_max64(info),
|
||||||
|
snd_ctl_elem_info_get_step64(info));
|
||||||
|
@@ -662,7 +662,7 @@ static int show_control(const char *space, snd_hctl_elem_t *elem,
|
||||||
|
printf("%li", snd_ctl_elem_value_get_integer(control, idx));
|
||||||
|
break;
|
||||||
|
case SND_CTL_ELEM_TYPE_INTEGER64:
|
||||||
|
- printf("%Li", snd_ctl_elem_value_get_integer64(control, idx));
|
||||||
|
+ printf("%lli", snd_ctl_elem_value_get_integer64(control, idx));
|
||||||
|
break;
|
||||||
|
case SND_CTL_ELEM_TYPE_ENUMERATED:
|
||||||
|
printf("%u", snd_ctl_elem_value_get_enumerated(control, idx));
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
86
0035-Avoid-empty-initializer-list.patch
Normal file
86
0035-Avoid-empty-initializer-list.patch
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
From cb47f6dcf4200c64559ed2f008cabf8cc5f9d9a3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michael Forney <mforney@mforney.org>
|
||||||
|
Date: Wed, 5 Feb 2020 00:12:21 -0800
|
||||||
|
Subject: [PATCH 35/35] Avoid empty initializer list
|
||||||
|
|
||||||
|
To zero-initialize an object, use `{0}` instead.
|
||||||
|
|
||||||
|
Signed-off-by: Michael Forney <mforney@mforney.org>
|
||||||
|
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||||||
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||||
|
---
|
||||||
|
alsamixer/cli.c | 2 +-
|
||||||
|
amidi/amidi.c | 2 +-
|
||||||
|
seq/aplaymidi/aplaymidi.c | 2 +-
|
||||||
|
seq/aplaymidi/arecordmidi.c | 2 +-
|
||||||
|
seq/aseqdump/aseqdump.c | 2 +-
|
||||||
|
5 files changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/alsamixer/cli.c b/alsamixer/cli.c
|
||||||
|
index 3f8f52f03d4d..74683255a30a 100644
|
||||||
|
--- a/alsamixer/cli.c
|
||||||
|
+++ b/alsamixer/cli.c
|
||||||
|
@@ -58,7 +58,7 @@ static void parse_options(int argc, char *argv[])
|
||||||
|
{ .name = "view", .has_arg = 1, .val = 'V' },
|
||||||
|
{ .name = "no-color", .val = 'g' },
|
||||||
|
{ .name = "abstraction", .has_arg = 1, .val = 'a' },
|
||||||
|
- { }
|
||||||
|
+ { 0 }
|
||||||
|
};
|
||||||
|
int option;
|
||||||
|
int card_index;
|
||||||
|
diff --git a/amidi/amidi.c b/amidi/amidi.c
|
||||||
|
index c6268e4c2ccd..cde4697c7e30 100644
|
||||||
|
--- a/amidi/amidi.c
|
||||||
|
+++ b/amidi/amidi.c
|
||||||
|
@@ -469,7 +469,7 @@ int main(int argc, char *argv[])
|
||||||
|
{"active-sensing", 0, NULL, 'a'},
|
||||||
|
{"clock", 0, NULL, 'c'},
|
||||||
|
{"sysex-interval", 1, NULL, 'i'},
|
||||||
|
- { }
|
||||||
|
+ {0}
|
||||||
|
};
|
||||||
|
int c, err, ok = 0;
|
||||||
|
int ignore_active_sensing = 1;
|
||||||
|
diff --git a/seq/aplaymidi/aplaymidi.c b/seq/aplaymidi/aplaymidi.c
|
||||||
|
index b086e7015aa2..e8491e13148d 100644
|
||||||
|
--- a/seq/aplaymidi/aplaymidi.c
|
||||||
|
+++ b/seq/aplaymidi/aplaymidi.c
|
||||||
|
@@ -869,7 +869,7 @@ int main(int argc, char *argv[])
|
||||||
|
{"list", 0, NULL, 'l'},
|
||||||
|
{"port", 1, NULL, 'p'},
|
||||||
|
{"delay", 1, NULL, 'd'},
|
||||||
|
- {}
|
||||||
|
+ {0}
|
||||||
|
};
|
||||||
|
int c;
|
||||||
|
int do_list = 0;
|
||||||
|
diff --git a/seq/aplaymidi/arecordmidi.c b/seq/aplaymidi/arecordmidi.c
|
||||||
|
index 604cd0d29722..2034df76b679 100644
|
||||||
|
--- a/seq/aplaymidi/arecordmidi.c
|
||||||
|
+++ b/seq/aplaymidi/arecordmidi.c
|
||||||
|
@@ -740,7 +740,7 @@ int main(int argc, char *argv[])
|
||||||
|
{"metronome", 1, NULL, 'm'},
|
||||||
|
{"timesig", 1, NULL, 'i'},
|
||||||
|
{"num-events", 1, NULL, 'n'},
|
||||||
|
- { }
|
||||||
|
+ {0}
|
||||||
|
};
|
||||||
|
|
||||||
|
char *filename = NULL;
|
||||||
|
diff --git a/seq/aseqdump/aseqdump.c b/seq/aseqdump/aseqdump.c
|
||||||
|
index 578e06fbcb22..44ae3bbc5654 100644
|
||||||
|
--- a/seq/aseqdump/aseqdump.c
|
||||||
|
+++ b/seq/aseqdump/aseqdump.c
|
||||||
|
@@ -357,7 +357,7 @@ int main(int argc, char *argv[])
|
||||||
|
{"version", 0, NULL, 'V'},
|
||||||
|
{"list", 0, NULL, 'l'},
|
||||||
|
{"port", 1, NULL, 'p'},
|
||||||
|
- { }
|
||||||
|
+ {0}
|
||||||
|
};
|
||||||
|
|
||||||
|
int do_list = 0;
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@ -1,3 +1,19 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 12 20:57:05 CET 2020 - tiwai@suse.de
|
||||||
|
|
||||||
|
- Backport upstream fixes:
|
||||||
|
alsatplg fixes, misc cleanups:
|
||||||
|
0027-alsatplg-rewrite-to-use-the-new-libatopology-functio.patch
|
||||||
|
0028-alsatplg-add-V-version-option.patch
|
||||||
|
0029-alsatplg-add-decode-command.patch
|
||||||
|
0030-alsatplg-add-documentation-for-z-dapm-nosort-h.patch
|
||||||
|
0031-configure-fix-new-libatopology-check.patch
|
||||||
|
0032-Use-__func__-instead-of-__FUNCTION__.patch
|
||||||
|
0033-Avoid-pointer-arithmetic-on-void.patch
|
||||||
|
0034-Use-lli-for-long-long-in-printf.patch
|
||||||
|
0035-Avoid-empty-initializer-list.patch
|
||||||
|
- Fix build on SLE12-* target
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Jan 21 15:57:03 CET 2020 - tiwai@suse.de
|
Tue Jan 21 15:57:03 CET 2020 - tiwai@suse.de
|
||||||
|
|
||||||
|
@ -55,6 +55,15 @@ Patch23: 0023-alsa-info.sh-Condense-nested-commands-for-file-uploa.patch
|
|||||||
Patch24: 0024-alsa-info.sh-Condense-nested-commands-for-formatting.patch
|
Patch24: 0024-alsa-info.sh-Condense-nested-commands-for-formatting.patch
|
||||||
Patch25: 0025-alsa-info.sh-Perform-test-for-wget-earlier.patch
|
Patch25: 0025-alsa-info.sh-Perform-test-for-wget-earlier.patch
|
||||||
Patch26: 0026-alsa-info.sh-Warn-after-actual-upload-failure-do-not.patch
|
Patch26: 0026-alsa-info.sh-Warn-after-actual-upload-failure-do-not.patch
|
||||||
|
Patch27: 0027-alsatplg-rewrite-to-use-the-new-libatopology-functio.patch
|
||||||
|
Patch28: 0028-alsatplg-add-V-version-option.patch
|
||||||
|
Patch29: 0029-alsatplg-add-decode-command.patch
|
||||||
|
Patch30: 0030-alsatplg-add-documentation-for-z-dapm-nosort-h.patch
|
||||||
|
Patch31: 0031-configure-fix-new-libatopology-check.patch
|
||||||
|
Patch32: 0032-Use-__func__-instead-of-__FUNCTION__.patch
|
||||||
|
Patch33: 0033-Avoid-pointer-arithmetic-on-void.patch
|
||||||
|
Patch34: 0034-Use-lli-for-long-long-in-printf.patch
|
||||||
|
Patch35: 0035-Avoid-empty-initializer-list.patch
|
||||||
Patch101: alsa-utils-configure-version-revert.patch
|
Patch101: alsa-utils-configure-version-revert.patch
|
||||||
BuildRequires: alsa-devel
|
BuildRequires: alsa-devel
|
||||||
BuildRequires: alsa-topology-devel
|
BuildRequires: alsa-topology-devel
|
||||||
@ -62,7 +71,11 @@ BuildRequires: fftw3-devel
|
|||||||
BuildRequires: libsamplerate-devel
|
BuildRequires: libsamplerate-devel
|
||||||
BuildRequires: ncurses-devel
|
BuildRequires: ncurses-devel
|
||||||
BuildRequires: pkgconfig
|
BuildRequires: pkgconfig
|
||||||
|
%if 0%{?suse_version} < 1500
|
||||||
|
BuildRequires: python-docutils
|
||||||
|
%else
|
||||||
BuildRequires: python3-docutils
|
BuildRequires: python3-docutils
|
||||||
|
%endif
|
||||||
BuildRequires: xmlto
|
BuildRequires: xmlto
|
||||||
BuildRequires: pkgconfig(systemd)
|
BuildRequires: pkgconfig(systemd)
|
||||||
BuildRequires: pkgconfig(udev)
|
BuildRequires: pkgconfig(udev)
|
||||||
@ -117,6 +130,15 @@ and test audio before and after PM state changes.
|
|||||||
%patch24 -p1
|
%patch24 -p1
|
||||||
%patch25 -p1
|
%patch25 -p1
|
||||||
%patch26 -p1
|
%patch26 -p1
|
||||||
|
%patch27 -p1
|
||||||
|
%patch28 -p1
|
||||||
|
%patch29 -p1
|
||||||
|
%patch30 -p1
|
||||||
|
%patch31 -p1
|
||||||
|
%patch32 -p1
|
||||||
|
%patch33 -p1
|
||||||
|
%patch34 -p1
|
||||||
|
%patch35 -p1
|
||||||
%if 0%{?do_autoreconf}
|
%if 0%{?do_autoreconf}
|
||||||
%patch101 -p1
|
%patch101 -p1
|
||||||
# fix stupid automake's automatic action
|
# fix stupid automake's automatic action
|
||||||
|
Loading…
x
Reference in New Issue
Block a user