Merge ~hui.wang/ubuntu/+source/alsa-utils:merge into ubuntu/+source/alsa-utils:ubuntu/devel

Proposed by Hui Wang
Status: Needs review
Proposed branch: ~hui.wang/ubuntu/+source/alsa-utils:merge
Merge into: ubuntu/+source/alsa-utils:ubuntu/devel
Diff against target: 26126 lines (+12680/-5063) (has conflicts)
131 files modified
ABOUT-NLS (+1/-1379)
Makefile.am (+1/-1)
Makefile.in (+24/-16)
aclocal.m4 (+38/-94)
alsa-info/Makefile.in (+6/-4)
alsa-info/alsa-info.sh (+77/-17)
alsaconf/Makefile.in (+6/-4)
alsactl/Makefile.am (+1/-1)
alsactl/Makefile.in (+27/-7)
alsactl/alsa-restore.service.in (+0/-1)
alsactl/alsactl.1 (+53/-11)
alsactl/alsactl.c (+72/-6)
alsactl/alsactl.h (+24/-3)
alsactl/clean.c (+196/-0)
alsactl/daemon.c (+1/-2)
alsactl/init/Makefile.in (+6/-4)
alsactl/init_parse.c (+36/-59)
alsactl/init_ucm.c (+18/-7)
alsactl/lock.c (+8/-4)
alsactl/monitor.c (+3/-25)
alsactl/state.c (+74/-161)
alsactl/utils.c (+147/-8)
alsaloop/Makefile.in (+6/-4)
alsaloop/alsaloop.1 (+1/-1)
alsaloop/alsaloop.c (+7/-2)
alsaloop/pcmjob.c (+3/-4)
alsamixer/Makefile.in (+6/-4)
alsamixer/alsamixer.1 (+1/-1)
alsamixer/card_select.c (+5/-1)
alsamixer/cli.c (+5/-1)
alsamixer/colors.c (+4/-4)
alsamixer/configparser.c (+2/-2)
alsamixer/mixer_display.c (+1/-1)
alsamixer/widget.c (+0/-7)
alsaucm/Makefile.in (+6/-4)
alsaucm/alsaucm.rst (+1/-1)
alsaucm/usecase.c (+14/-2)
amidi/Makefile.in (+6/-4)
amidi/amidi.c (+5/-2)
amixer/Makefile.am (+2/-2)
amixer/Makefile.in (+8/-24)
amixer/amixer.1 (+5/-4)
amixer/amixer.c (+39/-28)
amixer/volume_mapping.c (+179/-0)
amixer/volume_mapping.h (+19/-0)
aplay/Makefile.in (+6/-4)
aplay/aplay.c (+87/-22)
axfer/Makefile.in (+6/-4)
axfer/container.c (+22/-35)
axfer/container.h (+4/-6)
axfer/subcmd-transfer.c (+52/-12)
axfer/test/Makefile.in (+6/-4)
axfer/test/container-test.c (+39/-14)
axfer/test/mapper-test.c (+45/-10)
axfer/xfer-libasound-timer-mmap.c (+2/-1)
bat/Makefile.in (+6/-4)
bat/tests/Makefile.in (+6/-4)
bat/tests/asound_state/Makefile.in (+6/-4)
compile (+3/-3)
config.guess (+65/-55)
config.rpath (+1/-1)
config.sub (+1192/-1235)
configure (+750/-265)
configure.ac (+7/-2)
debian/changelog (+28/-1)
debian/control (+1/-1)
debian/patches/Don-t-run-both-systemd-services-in-paralell.patch (+5/-9)
debian/patches/alsa-info_call_home.patch (+10/-0)
debian/patches/alsactl_home.patch (+2/-2)
debian/patches/alsactl_xdg_runtime.patch (+2/-2)
debian/patches/series (+3/-0)
debian/patches/spellfixes.patch (+14/-14)
debian/patches/systemd_Documentation_key.patch (+1/-1)
debian/patches/udev_test_alsactl.patch (+7/-0)
debian/patches/unset_pulse_internal.patch (+33/-0)
debian/upstream/metadata (+5/-0)
depcomp (+1/-1)
iecset/Makefile.in (+6/-4)
include/Makefile.in (+8/-6)
include/aconfig.h.in (+6/-3)
include/version.h (+2/-2)
install-sh (+12/-1)
m4/Makefile.am (+1/-1)
m4/Makefile.in (+7/-5)
m4/gettext.m4 (+19/-53)
m4/host-cpu-c-abi.m4 (+675/-0)
m4/iconv.m4 (+37/-20)
m4/intlmacosx.m4 (+65/-0)
m4/lib-ld.m4 (+106/-57)
m4/lib-link.m4 (+96/-73)
m4/lib-prefix.m4 (+167/-71)
m4/nls.m4 (+5/-5)
m4/po.m4 (+30/-33)
m4/progtest.m4 (+4/-4)
missing (+1/-1)
po/LINGUAS (+1/-1)
po/Makefile.in.in (+80/-53)
po/Rules-quot (+5/-1)
po/alsa-utils.pot (+220/-189)
po/de.po (+242/-188)
po/en@boldquot.header (+1/-1)
po/en@quot.header (+1/-1)
po/eu.po (+1786/-0)
po/fr.po (+484/-407)
po/insert-header.sin (+5/-0)
po/ja.po (+227/-188)
po/remove-potcdate.sin (+7/-1)
po/sk.po (+1770/-0)
seq/Makefile.in (+6/-4)
seq/aconnect/Makefile.in (+6/-4)
seq/aplaymidi/Makefile.in (+6/-4)
seq/aseqdump/Makefile.in (+6/-4)
seq/aseqnet/Makefile.in (+6/-4)
seq/aseqnet/README.aseqnet (+2/-0)
seq/aseqnet/aseqnet.1 (+3/-0)
seq/aseqnet/aseqnet.c (+23/-10)
speaker-test/Makefile.in (+6/-4)
speaker-test/samples/Makefile.in (+6/-4)
speaker-test/speaker-test.c (+16/-0)
test-driver (+1/-1)
topology/Makefile.am (+4/-1)
topology/Makefile.in (+39/-11)
topology/pre-process-class.c (+303/-0)
topology/pre-process-dai.c (+140/-0)
topology/pre-process-dapm.c (+424/-0)
topology/pre-process-object.c (+1547/-0)
topology/pre-processor.c (+271/-0)
topology/pre-processor.h (+112/-0)
topology/topology.c (+76/-6)
topology/topology.h (+34/-0)
utils/Makefile.in (+6/-4)
Conflict in debian/changelog
Conflict in debian/patches/alsa-info_call_home.patch
Conflict in debian/patches/series
Conflict in debian/patches/udev_test_alsactl.patch
Conflict in debian/patches/unset_pulse_internal.patch
Reviewer Review Type Date Requested Status
Timo Aaltonen Pending
Review via email: mp+412552@code.launchpad.net

Commit message

1.2.4-1ubuntu1

Description of the change

Based on the latest debian/sid, we only need to pick the change of 1.2.4-1ubuntu1, and do some minor change on it: drop 2 patches alsa-info_call_home.patch and udev_test_alsactl.patch since latest debian/sid already has them, and refresh 1 patch unset_pulse_internal.patch

To post a comment you must log in.
Revision history for this message
Timo Aaltonen (tjaalton) wrote :

Conflict in debian/changelog
Conflict in debian/patches/alsa-info_call_home.patch
Conflict in debian/patches/series
Conflict in debian/patches/udev_test_alsactl.patch
Conflict in debian/patches/unset_pulse_internal.patch

do you not have these on your end?

Unmerged commits

951d5dc... by Sebastien Bacher

1.2.5.1-1ubuntu1 (patches unapplied)

Imported using git-ubuntu import.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/ABOUT-NLS b/ABOUT-NLS
2index 3cc8286..0a9d56d 100644
3--- a/ABOUT-NLS
4+++ b/ABOUT-NLS
5@@ -1,1379 +1 @@
6-1 Notes on the Free Translation Project
7-***************************************
8-
9-Free software is going international! The Free Translation Project is a
10-way to get maintainers of free software, translators, and users all
11-together, so that free software will gradually become able to speak many
12-languages. A few packages already provide translations for their
13-messages.
14-
15- If you found this 'ABOUT-NLS' file inside a distribution, you may
16-assume that the distributed package does use GNU 'gettext' internally,
17-itself available at your nearest GNU archive site. But you do _not_
18-need to install GNU 'gettext' prior to configuring, installing or using
19-this package with messages translated.
20-
21- Installers will find here some useful hints. These notes also
22-explain how users should proceed for getting the programs to use the
23-available translations. They tell how people wanting to contribute and
24-work on translations can contact the appropriate team.
25-
26-1.1 INSTALL Matters
27-===================
28-
29-Some packages are "localizable" when properly installed; the programs
30-they contain can be made to speak your own native language. Most such
31-packages use GNU 'gettext'. Other packages have their own ways to
32-internationalization, predating GNU 'gettext'.
33-
34- By default, this package will be installed to allow translation of
35-messages. It will automatically detect whether the system already
36-provides the GNU 'gettext' functions. Installers may use special
37-options at configuration time for changing the default behaviour. The
38-command:
39-
40- ./configure --disable-nls
41-
42-will _totally_ disable translation of messages.
43-
44- When you already have GNU 'gettext' installed on your system and run
45-configure without an option for your new package, 'configure' will
46-probably detect the previously built and installed 'libintl' library and
47-will decide to use it. If not, you may have to to use the
48-'--with-libintl-prefix' option to tell 'configure' where to look for it.
49-
50- Internationalized packages usually have many 'po/LL.po' files, where
51-LL gives an ISO 639 two-letter code identifying the language. Unless
52-translations have been forbidden at 'configure' time by using the
53-'--disable-nls' switch, all available translations are installed
54-together with the package. However, the environment variable 'LINGUAS'
55-may be set, prior to configuration, to limit the installed set.
56-'LINGUAS' should then contain a space separated list of two-letter
57-codes, stating which languages are allowed.
58-
59-1.2 Using This Package
60-======================
61-
62-As a user, if your language has been installed for this package, you
63-only have to set the 'LANG' environment variable to the appropriate
64-'LL_CC' combination. If you happen to have the 'LC_ALL' or some other
65-'LC_xxx' environment variables set, you should unset them before setting
66-'LANG', otherwise the setting of 'LANG' will not have the desired
67-effect. Here 'LL' is an ISO 639 two-letter language code, and 'CC' is
68-an ISO 3166 two-letter country code. For example, let's suppose that
69-you speak German and live in Germany. At the shell prompt, merely
70-execute 'setenv LANG de_DE' (in 'csh'), 'export LANG; LANG=de_DE' (in
71-'sh') or 'export LANG=de_DE' (in 'bash'). This can be done from your
72-'.login' or '.profile' file, once and for all.
73-
74- You might think that the country code specification is redundant.
75-But in fact, some languages have dialects in different countries. For
76-example, 'de_AT' is used for Austria, and 'pt_BR' for Brazil. The
77-country code serves to distinguish the dialects.
78-
79- The locale naming convention of 'LL_CC', with 'LL' denoting the
80-language and 'CC' denoting the country, is the one use on systems based
81-on GNU libc. On other systems, some variations of this scheme are used,
82-such as 'LL' or 'LL_CC.ENCODING'. You can get the list of locales
83-supported by your system for your language by running the command
84-'locale -a | grep '^LL''.
85-
86- Not all programs have translations for all languages. By default, an
87-English message is shown in place of a nonexistent translation. If you
88-understand other languages, you can set up a priority list of languages.
89-This is done through a different environment variable, called
90-'LANGUAGE'. GNU 'gettext' gives preference to 'LANGUAGE' over 'LANG'
91-for the purpose of message handling, but you still need to have 'LANG'
92-set to the primary language; this is required by other parts of the
93-system libraries. For example, some Swedish users who would rather read
94-translations in German than English for when Swedish is not available,
95-set 'LANGUAGE' to 'sv:de' while leaving 'LANG' to 'sv_SE'.
96-
97- Special advice for Norwegian users: The language code for Norwegian
98-bokma*l changed from 'no' to 'nb' recently (in 2003). During the
99-transition period, while some message catalogs for this language are
100-installed under 'nb' and some older ones under 'no', it's recommended
101-for Norwegian users to set 'LANGUAGE' to 'nb:no' so that both newer and
102-older translations are used.
103-
104- In the 'LANGUAGE' environment variable, but not in the 'LANG'
105-environment variable, 'LL_CC' combinations can be abbreviated as 'LL' to
106-denote the language's main dialect. For example, 'de' is equivalent to
107-'de_DE' (German as spoken in Germany), and 'pt' to 'pt_PT' (Portuguese
108-as spoken in Portugal) in this context.
109-
110-1.3 Translating Teams
111-=====================
112-
113-For the Free Translation Project to be a success, we need interested
114-people who like their own language and write it well, and who are also
115-able to synergize with other translators speaking the same language.
116-Each translation team has its own mailing list. The up-to-date list of
117-teams can be found at the Free Translation Project's homepage,
118-'http://translationproject.org/', in the "Teams" area.
119-
120- If you'd like to volunteer to _work_ at translating messages, you
121-should become a member of the translating team for your own language.
122-The subscribing address is _not_ the same as the list itself, it has
123-'-request' appended. For example, speakers of Swedish can send a
124-message to 'sv-request@li.org', having this message body:
125-
126- subscribe
127-
128- Keep in mind that team members are expected to participate _actively_
129-in translations, or at solving translational difficulties, rather than
130-merely lurking around. If your team does not exist yet and you want to
131-start one, or if you are unsure about what to do or how to get started,
132-please write to 'coordinator@translationproject.org' to reach the
133-coordinator for all translator teams.
134-
135- The English team is special. It works at improving and uniformizing
136-the terminology in use. Proven linguistic skills are praised more than
137-programming skills, here.
138-
139-1.4 Available Packages
140-======================
141-
142-Languages are not equally supported in all packages. The following
143-matrix shows the current state of internationalization, as of Jun 2014.
144-The matrix shows, in regard of each package, for which languages PO
145-files have been submitted to translation coordination, with a
146-translation percentage of at least 50%.
147-
148- Ready PO files af am an ar as ast az be bg bn bn_IN bs ca crh cs
149- +---------------------------------------------------+
150- a2ps | [] [] [] |
151- aegis | |
152- anubis | |
153- aspell | [] [] [] |
154- bash | [] [] [] |
155- bfd | |
156- binutils | [] |
157- bison | |
158- bison-runtime | [] |
159- buzztrax | [] |
160- ccd2cue | |
161- ccide | |
162- cflow | |
163- clisp | |
164- coreutils | [] [] |
165- cpio | |
166- cppi | |
167- cpplib | [] |
168- cryptsetup | [] |
169- datamash | |
170- denemo | [] [] |
171- dfarc | [] |
172- dialog | [] [] [] |
173- dico | |
174- diffutils | [] |
175- dink | [] |
176- direvent | |
177- doodle | [] |
178- dos2unix | |
179- dos2unix-man | |
180- e2fsprogs | [] [] |
181- enscript | [] |
182- exif | [] |
183- fetchmail | [] [] |
184- findutils | [] |
185- flex | [] |
186- freedink | [] [] |
187- fusionforge | |
188- gas | |
189- gawk | [] |
190- gcal | [] |
191- gcc | |
192- gdbm | |
193- gettext-examples | [] [] [] [] [] |
194- gettext-runtime | [] [] [] |
195- gettext-tools | [] [] |
196- gjay | |
197- glunarclock | [] [] [] |
198- gnubiff | [] |
199- gnubik | [] |
200- gnucash | () () [] |
201- gnuchess | |
202- gnulib | [] |
203- gnunet | |
204- gnunet-gtk | |
205- gold | |
206- gphoto2 | [] |
207- gprof | [] |
208- gramadoir | |
209- grep | [] [] [] |
210- grub | [] |
211- gsasl | |
212- gss | |
213- gst-plugins-bad | [] [] |
214- gst-plugins-base | [] [] [] |
215- gst-plugins-good | [] [] [] |
216- gst-plugins-ugly | [] [] [] |
217- gstreamer | [] [] [] [] |
218- gtick | [] |
219- gtkam | [] [] |
220- gtkspell | [] [] [] [] [] |
221- guix | |
222- guix-packages | |
223- gutenprint | [] |
224- hello | [] |
225- help2man | |
226- help2man-texi | |
227- hylafax | |
228- idutils | |
229- iso_15924 | [] |
230- iso_3166 | [] [] [] [] [] [] [] [] [] [] |
231- iso_3166_2 | |
232- iso_4217 | [] |
233- iso_639 | [] [] [] [] [] [] [] [] [] |
234- iso_639_3 | [] [] |
235- iso_639_5 | |
236- jwhois | |
237- kbd | [] |
238- klavaro | [] [] [] [] [] |
239- ld | [] |
240- leafpad | [] [] [] [] |
241- libc | [] [] [] |
242- libexif | () |
243- libextractor | |
244- libgnutls | [] |
245- libgphoto2 | [] |
246- libgphoto2_port | [] |
247- libgsasl | |
248- libiconv | [] [] |
249- libidn | [] |
250- liferea | [] [] [] [] |
251- lilypond | [] [] |
252- lordsawar | [] |
253- lprng | |
254- lynx | [] [] |
255- m4 | [] |
256- mailfromd | |
257- mailutils | |
258- make | [] |
259- man-db | [] [] |
260- man-db-manpages | |
261- midi-instruments | [] [] [] |
262- minicom | [] |
263- mkisofs | [] |
264- myserver | [] |
265- nano | [] [] [] |
266- opcodes | |
267- parted | [] |
268- pies | |
269- pnmixer | |
270- popt | [] |
271- procps-ng | |
272- procps-ng-man | |
273- psmisc | [] |
274- pspp | [] |
275- pushover | [] |
276- pwdutils | |
277- pyspread | |
278- radius | [] |
279- recode | [] [] [] |
280- recutils | |
281- rpm | |
282- rush | |
283- sarg | |
284- sed | [] [] [] [] |
285- sharutils | [] |
286- shishi | |
287- skribilo | |
288- solfege | [] [] |
289- solfege-manual | |
290- spotmachine | |
291- sudo | [] [] |
292- sudoers | [] [] |
293- sysstat | [] |
294- tar | [] [] [] |
295- texinfo | [] [] |
296- texinfo_document | [] [] |
297- tigervnc | [] |
298- tin | |
299- tin-man | |
300- tracgoogleappsa... | |
301- trader | |
302- util-linux | [] |
303- ve | |
304- vice | |
305- vmm | |
306- vorbis-tools | [] |
307- wastesedge | |
308- wcd | |
309- wcd-man | |
310- wdiff | [] [] |
311- wget | [] |
312- wyslij-po | |
313- xboard | |
314- xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] |
315- xkeyboard-config | [] [] [] |
316- +---------------------------------------------------+
317- af am an ar as ast az be bg bn bn_IN bs ca crh cs
318- 4 0 2 5 3 11 0 8 25 3 3 1 55 4 74
319-
320- da de el en en_GB en_ZA eo es et eu fa fi fr
321- +--------------------------------------------------+
322- a2ps | [] [] [] [] [] [] [] [] [] |
323- aegis | [] [] [] [] |
324- anubis | [] [] [] [] [] |
325- aspell | [] [] [] [] [] [] [] |
326- bash | [] [] [] |
327- bfd | [] [] [] [] |
328- binutils | [] [] [] |
329- bison | [] [] [] [] [] [] [] [] |
330- bison-runtime | [] [] [] [] [] [] [] [] |
331- buzztrax | [] [] [] [] |
332- ccd2cue | [] [] [] [] |
333- ccide | [] [] [] [] [] [] |
334- cflow | [] [] [] [] [] |
335- clisp | [] [] [] [] [] |
336- coreutils | [] [] [] [] [] |
337- cpio | [] [] [] [] [] |
338- cppi | [] [] [] [] [] |
339- cpplib | [] [] [] [] [] [] |
340- cryptsetup | [] [] [] [] [] |
341- datamash | [] [] [] [] |
342- denemo | [] |
343- dfarc | [] [] [] [] [] [] |
344- dialog | [] [] [] [] [] [] [] [] [] |
345- dico | [] [] [] [] |
346- diffutils | [] [] [] [] [] [] |
347- dink | [] [] [] [] [] [] |
348- direvent | [] [] [] [] |
349- doodle | [] [] [] [] |
350- dos2unix | [] [] [] [] [] |
351- dos2unix-man | [] [] [] |
352- e2fsprogs | [] [] [] [] [] |
353- enscript | [] [] [] [] [] [] |
354- exif | [] [] [] [] [] [] |
355- fetchmail | [] () [] [] [] [] [] |
356- findutils | [] [] [] [] [] [] [] [] |
357- flex | [] [] [] [] [] [] |
358- freedink | [] [] [] [] [] [] [] [] |
359- fusionforge | [] [] [] |
360- gas | [] [] [] |
361- gawk | [] [] [] [] [] |
362- gcal | [] [] [] [] |
363- gcc | [] |
364- gdbm | [] [] [] [] [] |
365- gettext-examples | [] [] [] [] [] [] [] |
366- gettext-runtime | [] [] [] [] [] [] |
367- gettext-tools | [] [] [] [] [] |
368- gjay | [] [] [] [] |
369- glunarclock | [] [] [] [] [] |
370- gnubiff | () [] [] () |
371- gnubik | [] [] [] [] [] |
372- gnucash | [] () () () () () () |
373- gnuchess | [] [] [] [] |
374- gnulib | [] [] [] [] [] [] [] |
375- gnunet | [] |
376- gnunet-gtk | [] |
377- gold | [] [] [] |
378- gphoto2 | [] () [] [] |
379- gprof | [] [] [] [] [] [] |
380- gramadoir | [] [] [] [] [] |
381- grep | [] [] [] [] [] [] [] |
382- grub | [] [] [] [] [] |
383- gsasl | [] [] [] [] [] |
384- gss | [] [] [] [] [] |
385- gst-plugins-bad | [] [] [] |
386- gst-plugins-base | [] [] [] [] [] [] |
387- gst-plugins-good | [] [] [] [] [] [] [] |
388- gst-plugins-ugly | [] [] [] [] [] [] [] [] |
389- gstreamer | [] [] [] [] [] [] [] |
390- gtick | [] () [] [] [] |
391- gtkam | [] () [] [] [] [] |
392- gtkspell | [] [] [] [] [] [] [] [] |
393- guix | [] [] |
394- guix-packages | |
395- gutenprint | [] [] [] [] |
396- hello | [] [] [] [] [] [] [] [] |
397- help2man | [] [] [] [] [] [] [] |
398- help2man-texi | [] [] [] |
399- hylafax | [] [] |
400- idutils | [] [] [] [] [] |
401- iso_15924 | [] () [] [] () [] () |
402- iso_3166 | [] () [] [] [] [] () [] () |
403- iso_3166_2 | [] () () () |
404- iso_4217 | [] () [] [] [] () [] () |
405- iso_639 | [] () [] [] () [] () |
406- iso_639_3 | () () () |
407- iso_639_5 | () () () |
408- jwhois | [] [] [] [] [] |
409- kbd | [] [] [] [] [] [] |
410- klavaro | [] [] [] [] [] [] [] |
411- ld | [] [] [] [] |
412- leafpad | [] [] [] [] [] [] [] [] |
413- libc | [] [] [] [] [] |
414- libexif | [] [] () [] [] |
415- libextractor | [] |
416- libgnutls | [] [] [] [] |
417- libgphoto2 | [] () [] |
418- libgphoto2_port | [] () [] [] [] [] |
419- libgsasl | [] [] [] [] [] |
420- libiconv | [] [] [] [] [] [] [] |
421- libidn | [] [] [] [] [] |
422- liferea | [] () [] [] [] [] [] |
423- lilypond | [] [] [] [] [] [] |
424- lordsawar | [] [] |
425- lprng | |
426- lynx | [] [] [] [] [] [] |
427- m4 | [] [] [] [] [] [] |
428- mailfromd | [] |
429- mailutils | [] [] [] [] |
430- make | [] [] [] [] [] |
431- man-db | [] [] [] [] |
432- man-db-manpages | [] [] |
433- midi-instruments | [] [] [] [] [] [] [] [] [] |
434- minicom | [] [] [] [] [] |
435- mkisofs | [] [] [] |
436- myserver | [] [] [] [] |
437- nano | [] [] [] [] [] [] [] |
438- opcodes | [] [] [] [] [] |
439- parted | [] [] [] |
440- pies | [] |
441- pnmixer | [] [] |
442- popt | [] [] [] [] [] [] |
443- procps-ng | [] [] |
444- procps-ng-man | [] [] |
445- psmisc | [] [] [] [] [] [] [] |
446- pspp | [] [] [] |
447- pushover | () [] [] [] |
448- pwdutils | [] [] [] |
449- pyspread | [] [] [] |
450- radius | [] [] |
451- recode | [] [] [] [] [] [] [] |
452- recutils | [] [] [] [] |
453- rpm | [] [] [] [] [] |
454- rush | [] [] [] |
455- sarg | [] [] |
456- sed | [] [] [] [] [] [] [] [] |
457- sharutils | [] [] [] [] |
458- shishi | [] [] [] |
459- skribilo | [] [] [] |
460- solfege | [] [] [] [] [] [] [] [] |
461- solfege-manual | [] [] [] [] [] |
462- spotmachine | [] [] [] [] [] |
463- sudo | [] [] [] [] [] [] |
464- sudoers | [] [] [] [] [] [] |
465- sysstat | [] [] [] [] [] [] |
466- tar | [] [] [] [] [] [] [] |
467- texinfo | [] [] [] [] [] |
468- texinfo_document | [] [] [] [] |
469- tigervnc | [] [] [] [] [] [] |
470- tin | [] [] [] [] |
471- tin-man | [] |
472- tracgoogleappsa... | [] [] [] [] [] |
473- trader | [] [] [] [] [] [] |
474- util-linux | [] [] [] [] |
475- ve | [] [] [] [] [] |
476- vice | () () () |
477- vmm | [] [] |
478- vorbis-tools | [] [] [] [] |
479- wastesedge | [] |
480- wcd | [] [] [] [] |
481- wcd-man | [] |
482- wdiff | [] [] [] [] [] [] [] |
483- wget | [] [] [] [] [] [] |
484- wyslij-po | [] [] [] [] |
485- xboard | [] [] [] [] |
486- xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] |
487- xkeyboard-config | [] [] [] [] [] [] [] |
488- +--------------------------------------------------+
489- da de el en en_GB en_ZA eo es et eu fa fi fr
490- 119 131 32 1 6 0 94 95 22 13 4 102 139
491-
492- ga gd gl gu he hi hr hu hy ia id is it ja ka kk
493- +-------------------------------------------------+
494- a2ps | [] [] [] [] |
495- aegis | [] |
496- anubis | [] [] [] [] |
497- aspell | [] [] [] [] [] |
498- bash | [] [] [] [] |
499- bfd | [] [] |
500- binutils | [] [] [] |
501- bison | [] |
502- bison-runtime | [] [] [] [] [] [] [] [] |
503- buzztrax | |
504- ccd2cue | [] |
505- ccide | [] [] |
506- cflow | [] [] [] |
507- clisp | |
508- coreutils | [] [] |
509- cpio | [] [] [] [] [] [] |
510- cppi | [] [] [] [] [] |
511- cpplib | [] [] |
512- cryptsetup | [] |
513- datamash | |
514- denemo | [] |
515- dfarc | [] [] [] |
516- dialog | [] [] [] [] [] [] [] [] [] [] |
517- dico | |
518- diffutils | [] [] [] [] |
519- dink | [] |
520- direvent | [] |
521- doodle | [] [] |
522- dos2unix | [] [] |
523- dos2unix-man | |
524- e2fsprogs | [] [] |
525- enscript | [] [] [] |
526- exif | [] [] [] [] [] [] |
527- fetchmail | [] [] [] |
528- findutils | [] [] [] [] [] [] [] |
529- flex | [] |
530- freedink | [] [] [] [] |
531- fusionforge | |
532- gas | [] |
533- gawk | [] () [] |
534- gcal | |
535- gcc | |
536- gdbm | |
537- gettext-examples | [] [] [] [] [] [] [] |
538- gettext-runtime | [] [] [] [] [] [] [] |
539- gettext-tools | [] [] [] |
540- gjay | [] |
541- glunarclock | [] [] [] [] [] [] |
542- gnubiff | [] [] () |
543- gnubik | [] [] [] |
544- gnucash | () () () () () |
545- gnuchess | |
546- gnulib | [] [] [] [] [] |
547- gnunet | |
548- gnunet-gtk | |
549- gold | [] [] |
550- gphoto2 | [] [] [] [] |
551- gprof | [] [] [] [] |
552- gramadoir | [] [] [] |
553- grep | [] [] [] [] [] [] [] |
554- grub | [] [] [] |
555- gsasl | [] [] [] [] [] |
556- gss | [] [] [] [] [] |
557- gst-plugins-bad | [] [] [] |
558- gst-plugins-base | [] [] [] [] |
559- gst-plugins-good | [] [] [] [] [] [] |
560- gst-plugins-ugly | [] [] [] [] [] [] |
561- gstreamer | [] [] [] [] [] |
562- gtick | [] [] [] [] [] |
563- gtkam | [] [] [] [] [] |
564- gtkspell | [] [] [] [] [] [] [] [] [] [] |
565- guix | |
566- guix-packages | |
567- gutenprint | [] [] [] |
568- hello | [] [] [] [] [] |
569- help2man | [] [] [] |
570- help2man-texi | |
571- hylafax | [] |
572- idutils | [] [] |
573- iso_15924 | [] [] [] [] [] [] |
574- iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] |
575- iso_3166_2 | [] [] |
576- iso_4217 | [] [] [] [] [] [] |
577- iso_639 | [] [] [] [] [] [] [] [] [] |
578- iso_639_3 | [] [] |
579- iso_639_5 | |
580- jwhois | [] [] [] [] |
581- kbd | [] [] [] |
582- klavaro | [] [] [] [] [] |
583- ld | [] [] [] [] |
584- leafpad | [] [] [] [] [] [] [] () |
585- libc | [] [] [] [] [] |
586- libexif | [] |
587- libextractor | |
588- libgnutls | [] |
589- libgphoto2 | [] [] |
590- libgphoto2_port | [] [] |
591- libgsasl | [] [] [] [] |
592- libiconv | [] [] [] [] [] [] [] |
593- libidn | [] [] [] [] |
594- liferea | [] [] [] [] [] |
595- lilypond | [] |
596- lordsawar | |
597- lprng | [] |
598- lynx | [] [] [] [] |
599- m4 | [] [] [] [] [] |
600- mailfromd | |
601- mailutils | |
602- make | [] [] [] [] |
603- man-db | [] [] |
604- man-db-manpages | [] [] |
605- midi-instruments | [] [] [] [] [] [] [] [] [] |
606- minicom | [] [] [] |
607- mkisofs | [] [] |
608- myserver | [] |
609- nano | [] [] [] [] [] [] |
610- opcodes | [] [] [] |
611- parted | [] [] [] [] [] |
612- pies | |
613- pnmixer | [] [] |
614- popt | [] [] [] [] [] [] [] [] [] [] |
615- procps-ng | |
616- procps-ng-man | |
617- psmisc | [] [] [] [] |
618- pspp | [] [] |
619- pushover | [] |
620- pwdutils | [] |
621- pyspread | |
622- radius | [] |
623- recode | [] [] [] [] [] [] [] |
624- recutils | |
625- rpm | [] |
626- rush | [] |
627- sarg | |
628- sed | [] [] [] [] [] [] [] |
629- sharutils | |
630- shishi | |
631- skribilo | [] |
632- solfege | [] [] |
633- solfege-manual | |
634- spotmachine | |
635- sudo | [] [] [] [] |
636- sudoers | [] [] [] |
637- sysstat | [] [] [] [] |
638- tar | [] [] [] [] [] [] |
639- texinfo | [] [] [] |
640- texinfo_document | [] [] [] |
641- tigervnc | |
642- tin | |
643- tin-man | |
644- tracgoogleappsa... | [] [] [] [] |
645- trader | [] [] |
646- util-linux | [] |
647- ve | [] |
648- vice | () () |
649- vmm | |
650- vorbis-tools | [] [] |
651- wastesedge | [] |
652- wcd | |
653- wcd-man | |
654- wdiff | [] [] [] |
655- wget | [] [] [] [] |
656- wyslij-po | [] [] [] |
657- xboard | |
658- xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] |
659- xkeyboard-config | [] [] [] [] [] [] |
660- +-------------------------------------------------+
661- ga gd gl gu he hi hr hu hy ia id is it ja ka kk
662- 35 2 47 4 8 2 60 71 2 6 81 11 87 57 0 3
663-
664- kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl
665- +--------------------------------------------------+
666- a2ps | [] [] |
667- aegis | [] |
668- anubis | [] [] [] |
669- aspell | [] [] |
670- bash | [] [] |
671- bfd | |
672- binutils | |
673- bison | [] |
674- bison-runtime | [] [] [] [] [] [] |
675- buzztrax | |
676- ccd2cue | |
677- ccide | [] [] |
678- cflow | [] |
679- clisp | [] |
680- coreutils | [] [] |
681- cpio | [] |
682- cppi | |
683- cpplib | [] |
684- cryptsetup | [] |
685- datamash | [] [] |
686- denemo | |
687- dfarc | [] [] |
688- dialog | [] [] [] [] [] [] |
689- dico | |
690- diffutils | [] [] [] |
691- dink | [] |
692- direvent | [] |
693- doodle | [] |
694- dos2unix | [] [] |
695- dos2unix-man | [] |
696- e2fsprogs | [] |
697- enscript | [] |
698- exif | [] [] [] |
699- fetchmail | [] |
700- findutils | [] [] |
701- flex | [] |
702- freedink | [] [] |
703- fusionforge | |
704- gas | |
705- gawk | [] |
706- gcal | |
707- gcc | |
708- gdbm | |
709- gettext-examples | [] [] [] [] [] [] |
710- gettext-runtime | [] [] [] |
711- gettext-tools | [] |
712- gjay | |
713- glunarclock | [] [] |
714- gnubiff | [] |
715- gnubik | [] [] |
716- gnucash | () () () () () () () [] |
717- gnuchess | [] [] |
718- gnulib | [] |
719- gnunet | |
720- gnunet-gtk | |
721- gold | |
722- gphoto2 | [] |
723- gprof | [] [] |
724- gramadoir | [] |
725- grep | [] [] |
726- grub | [] [] [] |
727- gsasl | [] |
728- gss | |
729- gst-plugins-bad | [] [] [] |
730- gst-plugins-base | [] [] [] |
731- gst-plugins-good | [] [] [] [] |
732- gst-plugins-ugly | [] [] [] [] [] |
733- gstreamer | [] [] [] |
734- gtick | [] |
735- gtkam | [] [] |
736- gtkspell | [] [] [] [] [] [] [] |
737- guix | |
738- guix-packages | |
739- gutenprint | [] |
740- hello | [] [] [] |
741- help2man | [] |
742- help2man-texi | |
743- hylafax | [] |
744- idutils | [] |
745- iso_15924 | () [] [] |
746- iso_3166 | [] [] [] () [] [] [] [] [] [] |
747- iso_3166_2 | () [] |
748- iso_4217 | () [] [] [] |
749- iso_639 | [] [] () [] [] [] [] |
750- iso_639_3 | [] () [] |
751- iso_639_5 | () |
752- jwhois | [] [] |
753- kbd | [] |
754- klavaro | [] [] |
755- ld | |
756- leafpad | [] [] [] [] [] |
757- libc | [] [] |
758- libexif | [] |
759- libextractor | [] |
760- libgnutls | [] [] |
761- libgphoto2 | [] |
762- libgphoto2_port | [] |
763- libgsasl | [] |
764- libiconv | [] [] |
765- libidn | [] |
766- liferea | [] [] [] |
767- lilypond | [] |
768- lordsawar | |
769- lprng | |
770- lynx | [] |
771- m4 | [] |
772- mailfromd | |
773- mailutils | |
774- make | [] [] |
775- man-db | [] |
776- man-db-manpages | [] |
777- midi-instruments | [] [] [] [] [] [] [] |
778- minicom | [] |
779- mkisofs | [] |
780- myserver | |
781- nano | [] [] [] |
782- opcodes | [] |
783- parted | [] [] |
784- pies | |
785- pnmixer | [] |
786- popt | [] [] [] [] [] |
787- procps-ng | |
788- procps-ng-man | |
789- psmisc | [] |
790- pspp | [] [] |
791- pushover | |
792- pwdutils | [] |
793- pyspread | |
794- radius | [] |
795- recode | [] [] |
796- recutils | [] |
797- rpm | [] |
798- rush | [] |
799- sarg | |
800- sed | [] [] |
801- sharutils | [] |
802- shishi | |
803- skribilo | |
804- solfege | [] [] |
805- solfege-manual | [] |
806- spotmachine | [] |
807- sudo | [] [] [] |
808- sudoers | [] [] [] |
809- sysstat | [] [] |
810- tar | [] [] [] |
811- texinfo | [] |
812- texinfo_document | [] |
813- tigervnc | [] |
814- tin | |
815- tin-man | |
816- tracgoogleappsa... | [] [] [] |
817- trader | [] |
818- util-linux | [] |
819- ve | [] |
820- vice | [] |
821- vmm | [] |
822- vorbis-tools | [] |
823- wastesedge | [] |
824- wcd | [] |
825- wcd-man | [] |
826- wdiff | [] |
827- wget | [] [] |
828- wyslij-po | [] |
829- xboard | [] |
830- xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] |
831- xkeyboard-config | [] [] [] |
832- +--------------------------------------------------+
833- kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl
834- 5 15 4 6 0 13 23 3 3 3 4 11 2 42 1 125
835-
836- nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr
837- +------------------------------------------------+
838- a2ps | [] [] [] [] [] [] [] |
839- aegis | [] [] |
840- anubis | [] [] [] |
841- aspell | [] [] [] [] [] [] [] |
842- bash | [] [] [] [] [] [] |
843- bfd | [] [] |
844- binutils | [] [] |
845- bison | [] [] [] |
846- bison-runtime | [] [] [] [] [] [] [] [] |
847- buzztrax | [] |
848- ccd2cue | [] [] |
849- ccide | [] [] [] |
850- cflow | [] [] [] |
851- clisp | [] |
852- coreutils | [] [] [] [] |
853- cpio | [] [] [] |
854- cppi | [] [] [] |
855- cpplib | [] [] [] |
856- cryptsetup | [] [] [] |
857- datamash | [] [] |
858- denemo | |
859- dfarc | [] [] [] |
860- dialog | [] [] [] [] [] [] [] |
861- dico | [] |
862- diffutils | [] [] [] |
863- dink | |
864- direvent | [] [] [] |
865- doodle | [] [] |
866- dos2unix | [] [] [] [] |
867- dos2unix-man | [] [] |
868- e2fsprogs | [] |
869- enscript | [] [] [] [] [] [] |
870- exif | [] [] [] [] [] [] |
871- fetchmail | [] [] [] |
872- findutils | [] [] [] [] [] [] |
873- flex | [] [] [] [] [] |
874- freedink | [] [] [] [] [] |
875- fusionforge | |
876- gas | |
877- gawk | [] |
878- gcal | |
879- gcc | |
880- gdbm | [] [] [] |
881- gettext-examples | [] [] [] [] [] [] [] [] |
882- gettext-runtime | [] [] [] [] [] [] [] [] [] |
883- gettext-tools | [] [] [] [] [] [] [] |
884- gjay | [] |
885- glunarclock | [] [] [] [] [] [] |
886- gnubiff | [] |
887- gnubik | [] [] [] [] |
888- gnucash | () () () () () [] |
889- gnuchess | [] [] |
890- gnulib | [] [] [] [] [] |
891- gnunet | |
892- gnunet-gtk | |
893- gold | |
894- gphoto2 | [] [] [] [] [] |
895- gprof | [] [] [] [] |
896- gramadoir | [] [] |
897- grep | [] [] [] [] [] [] |
898- grub | [] [] [] [] [] |
899- gsasl | [] [] [] |
900- gss | [] [] [] [] |
901- gst-plugins-bad | [] [] [] [] [] |
902- gst-plugins-base | [] [] [] [] [] [] |
903- gst-plugins-good | [] [] [] [] [] [] [] |
904- gst-plugins-ugly | [] [] [] [] [] [] [] |
905- gstreamer | [] [] [] [] [] [] [] |
906- gtick | [] [] [] [] [] |
907- gtkam | [] [] [] [] [] [] |
908- gtkspell | [] [] [] [] [] [] [] [] [] |
909- guix | |
910- guix-packages | |
911- gutenprint | [] [] |
912- hello | [] [] [] [] [] [] |
913- help2man | [] [] [] [] |
914- help2man-texi | [] |
915- hylafax | |
916- idutils | [] [] [] |
917- iso_15924 | [] () [] [] [] [] |
918- iso_3166 | [] [] [] [] () [] [] [] [] [] [] [] [] |
919- iso_3166_2 | [] () [] |
920- iso_4217 | [] [] () [] [] [] [] [] |
921- iso_639 | [] [] [] () [] [] [] [] [] [] |
922- iso_639_3 | [] () |
923- iso_639_5 | () [] |
924- jwhois | [] [] [] [] |
925- kbd | [] [] |
926- klavaro | [] [] [] [] [] |
927- ld | |
928- leafpad | [] [] [] [] [] [] [] [] |
929- libc | [] [] [] |
930- libexif | [] () [] |
931- libextractor | [] |
932- libgnutls | [] |
933- libgphoto2 | [] |
934- libgphoto2_port | [] [] [] [] [] |
935- libgsasl | [] [] [] [] |
936- libiconv | [] [] [] [] [] |
937- libidn | [] [] [] |
938- liferea | [] [] [] [] () [] [] |
939- lilypond | |
940- lordsawar | |
941- lprng | [] |
942- lynx | [] [] |
943- m4 | [] [] [] [] [] |
944- mailfromd | [] |
945- mailutils | [] |
946- make | [] [] [] |
947- man-db | [] [] [] |
948- man-db-manpages | [] [] [] |
949- midi-instruments | [] [] [] [] [] [] [] [] |
950- minicom | [] [] [] [] |
951- mkisofs | [] [] [] |
952- myserver | [] [] |
953- nano | [] [] [] [] [] [] |
954- opcodes | |
955- parted | [] [] [] [] [] [] |
956- pies | [] |
957- pnmixer | [] |
958- popt | [] [] [] [] [] [] |
959- procps-ng | [] |
960- procps-ng-man | [] |
961- psmisc | [] [] [] [] |
962- pspp | [] [] |
963- pushover | |
964- pwdutils | [] |
965- pyspread | [] [] |
966- radius | [] [] |
967- recode | [] [] [] [] [] [] [] [] |
968- recutils | [] [] |
969- rpm | [] |
970- rush | [] [] [] |
971- sarg | [] [] |
972- sed | [] [] [] [] [] [] [] [] |
973- sharutils | [] [] [] |
974- shishi | [] [] |
975- skribilo | [] |
976- solfege | [] [] [] |
977- solfege-manual | [] [] |
978- spotmachine | [] [] |
979- sudo | [] [] [] [] [] [] |
980- sudoers | [] [] [] [] |
981- sysstat | [] [] [] [] [] |
982- tar | [] [] [] [] [] |
983- texinfo | [] [] [] |
984- texinfo_document | [] [] |
985- tigervnc | [] [] [] |
986- tin | [] |
987- tin-man | |
988- tracgoogleappsa... | [] [] [] [] |
989- trader | [] [] |
990- util-linux | [] [] |
991- ve | [] [] [] |
992- vice | |
993- vmm | |
994- vorbis-tools | [] [] [] |
995- wastesedge | |
996- wcd | |
997- wcd-man | |
998- wdiff | [] [] [] [] [] |
999- wget | [] [] [] [] [] |
1000- wyslij-po | [] [] [] [] |
1001- xboard | [] [] [] |
1002- xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] |
1003- xkeyboard-config | [] [] [] [] |
1004- +------------------------------------------------+
1005- nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr
1006- 7 3 6 114 1 12 88 32 82 3 40 45 7 101
1007-
1008- sv sw ta te tg th tr uk ur vi wa wo zh_CN
1009- +----------------------------------------------+
1010- a2ps | [] [] [] [] [] |
1011- aegis | [] |
1012- anubis | [] [] [] [] |
1013- aspell | [] [] [] [] [] |
1014- bash | [] [] [] [] |
1015- bfd | [] [] [] |
1016- binutils | [] [] [] |
1017- bison | [] [] [] [] |
1018- bison-runtime | [] [] [] [] [] [] |
1019- buzztrax | [] [] [] |
1020- ccd2cue | [] [] [] |
1021- ccide | [] [] [] [] |
1022- cflow | [] [] [] [] |
1023- clisp | |
1024- coreutils | [] [] [] |
1025- cpio | [] [] [] [] [] |
1026- cppi | [] [] [] [] |
1027- cpplib | [] [] [] [] [] |
1028- cryptsetup | [] [] [] |
1029- datamash | [] [] [] |
1030- denemo | [] |
1031- dfarc | [] [] |
1032- dialog | [] [] [] [] [] [] |
1033- dico | [] |
1034- diffutils | [] [] [] [] [] |
1035- dink | [] |
1036- direvent | [] [] |
1037- doodle | [] [] |
1038- dos2unix | [] [] [] [] |
1039- dos2unix-man | [] [] [] |
1040- e2fsprogs | [] [] [] [] |
1041- enscript | [] [] [] [] |
1042- exif | [] [] [] [] [] |
1043- fetchmail | [] [] [] [] |
1044- findutils | [] [] [] [] [] |
1045- flex | [] [] [] [] |
1046- freedink | [] [] [] |
1047- fusionforge | |
1048- gas | [] |
1049- gawk | [] [] [] |
1050- gcal | [] [] [] |
1051- gcc | [] |
1052- gdbm | [] [] |
1053- gettext-examples | [] [] [] [] [] |
1054- gettext-runtime | [] [] [] [] [] |
1055- gettext-tools | [] [] [] [] [] |
1056- gjay | [] [] [] |
1057- glunarclock | [] [] [] [] |
1058- gnubiff | [] [] |
1059- gnubik | [] [] [] [] |
1060- gnucash | () () () () [] |
1061- gnuchess | [] [] [] |
1062- gnulib | [] [] [] [] |
1063- gnunet | |
1064- gnunet-gtk | |
1065- gold | [] [] |
1066- gphoto2 | [] [] [] [] |
1067- gprof | [] [] [] [] |
1068- gramadoir | [] [] [] |
1069- grep | [] [] [] [] [] |
1070- grub | [] [] [] [] |
1071- gsasl | [] [] [] [] |
1072- gss | [] [] [] |
1073- gst-plugins-bad | [] [] [] [] [] |
1074- gst-plugins-base | [] [] [] [] [] |
1075- gst-plugins-good | [] [] [] [] [] |
1076- gst-plugins-ugly | [] [] [] [] [] |
1077- gstreamer | [] [] [] [] [] |
1078- gtick | [] [] [] |
1079- gtkam | [] [] [] [] |
1080- gtkspell | [] [] [] [] [] [] [] |
1081- guix | |
1082- guix-packages | |
1083- gutenprint | [] [] [] [] |
1084- hello | [] [] [] [] [] [] |
1085- help2man | [] [] [] |
1086- help2man-texi | [] |
1087- hylafax | [] |
1088- idutils | [] [] [] |
1089- iso_15924 | [] () [] [] () [] |
1090- iso_3166 | [] [] () [] [] () [] [] |
1091- iso_3166_2 | () [] [] () [] |
1092- iso_4217 | [] () [] [] () [] |
1093- iso_639 | [] [] [] () [] [] () [] [] |
1094- iso_639_3 | [] () [] [] () |
1095- iso_639_5 | () [] () |
1096- jwhois | [] [] [] [] |
1097- kbd | [] [] [] [] |
1098- klavaro | [] [] [] [] [] [] |
1099- ld | [] [] [] [] [] |
1100- leafpad | [] [] [] [] [] [] |
1101- libc | [] [] [] [] [] |
1102- libexif | [] [] () |
1103- libextractor | [] [] |
1104- libgnutls | [] [] [] [] |
1105- libgphoto2 | [] [] [] |
1106- libgphoto2_port | [] [] [] [] |
1107- libgsasl | [] [] [] [] |
1108- libiconv | [] [] [] [] [] |
1109- libidn | () [] [] [] |
1110- liferea | [] [] [] [] [] |
1111- lilypond | [] |
1112- lordsawar | |
1113- lprng | [] |
1114- lynx | [] [] [] [] |
1115- m4 | [] [] [] |
1116- mailfromd | [] [] |
1117- mailutils | [] |
1118- make | [] [] [] [] |
1119- man-db | [] [] [] |
1120- man-db-manpages | [] [] |
1121- midi-instruments | [] [] [] [] [] [] |
1122- minicom | [] [] |
1123- mkisofs | [] [] [] |
1124- myserver | [] |
1125- nano | [] [] [] [] |
1126- opcodes | [] [] [] |
1127- parted | [] [] [] [] [] |
1128- pies | [] [] |
1129- pnmixer | [] [] [] |
1130- popt | [] [] [] [] [] [] [] |
1131- procps-ng | [] [] |
1132- procps-ng-man | [] |
1133- psmisc | [] [] [] [] |
1134- pspp | [] [] [] |
1135- pushover | [] |
1136- pwdutils | [] [] |
1137- pyspread | [] |
1138- radius | [] [] |
1139- recode | [] [] [] [] |
1140- recutils | [] [] [] |
1141- rpm | [] [] [] [] |
1142- rush | [] [] |
1143- sarg | |
1144- sed | [] [] [] [] [] |
1145- sharutils | [] [] [] [] |
1146- shishi | [] [] |
1147- skribilo | [] [] |
1148- solfege | [] [] [] [] |
1149- solfege-manual | [] |
1150- spotmachine | [] [] [] |
1151- sudo | [] [] [] [] [] |
1152- sudoers | [] [] [] [] |
1153- sysstat | [] [] [] [] [] |
1154- tar | [] [] [] [] [] |
1155- texinfo | [] [] [] |
1156- texinfo_document | [] |
1157- tigervnc | [] [] [] |
1158- tin | [] |
1159- tin-man | |
1160- tracgoogleappsa... | [] [] [] [] [] |
1161- trader | [] |
1162- util-linux | [] [] [] [] |
1163- ve | [] [] [] [] |
1164- vice | () () |
1165- vmm | |
1166- vorbis-tools | [] [] |
1167- wastesedge | |
1168- wcd | [] [] [] |
1169- wcd-man | [] |
1170- wdiff | [] [] [] [] |
1171- wget | [] [] [] |
1172- wyslij-po | [] [] |
1173- xboard | [] [] |
1174- xdg-user-dirs | [] [] [] [] [] [] [] [] |
1175- xkeyboard-config | [] [] [] [] |
1176- +----------------------------------------------+
1177- sv sw ta te tg th tr uk ur vi wa wo zh_CN
1178- 106 1 4 3 0 13 51 115 1 125 7 1 100
1179-
1180- zh_HK zh_TW
1181- +-------------+
1182- a2ps | | 30
1183- aegis | | 9
1184- anubis | | 19
1185- aspell | | 29
1186- bash | [] | 23
1187- bfd | | 11
1188- binutils | | 12
1189- bison | [] | 18
1190- bison-runtime | [] | 38
1191- buzztrax | | 9
1192- ccd2cue | | 10
1193- ccide | | 17
1194- cflow | | 16
1195- clisp | | 10
1196- coreutils | | 18
1197- cpio | | 20
1198- cppi | | 17
1199- cpplib | [] | 19
1200- cryptsetup | | 14
1201- datamash | | 11
1202- denemo | | 5
1203- dfarc | | 17
1204- dialog | [] | 42
1205- dico | | 6
1206- diffutils | | 22
1207- dink | | 10
1208- direvent | | 11
1209- doodle | | 12
1210- dos2unix | [] | 18
1211- dos2unix-man | | 9
1212- e2fsprogs | | 15
1213- enscript | | 21
1214- exif | | 27
1215- fetchmail | | 19
1216- findutils | | 29
1217- flex | [] | 19
1218- freedink | | 24
1219- fusionforge | | 3
1220- gas | | 5
1221- gawk | | 13
1222- gcal | | 8
1223- gcc | | 2
1224- gdbm | | 10
1225- gettext-examples | [] [] | 40
1226- gettext-runtime | [] [] | 35
1227- gettext-tools | [] | 24
1228- gjay | | 9
1229- glunarclock | [] | 27
1230- gnubiff | | 9
1231- gnubik | | 19
1232- gnucash | () | 6
1233- gnuchess | | 11
1234- gnulib | | 23
1235- gnunet | | 1
1236- gnunet-gtk | | 1
1237- gold | | 7
1238- gphoto2 | [] | 19
1239- gprof | | 21
1240- gramadoir | | 14
1241- grep | [] | 31
1242- grub | | 21
1243- gsasl | [] | 19
1244- gss | | 17
1245- gst-plugins-bad | | 21
1246- gst-plugins-base | | 27
1247- gst-plugins-good | | 32
1248- gst-plugins-ugly | | 34
1249- gstreamer | [] | 32
1250- gtick | | 19
1251- gtkam | | 24
1252- gtkspell | [] [] | 48
1253- guix | | 2
1254- guix-packages | | 0
1255- gutenprint | | 15
1256- hello | [] | 30
1257- help2man | | 18
1258- help2man-texi | | 5
1259- hylafax | | 5
1260- idutils | | 14
1261- iso_15924 | [] | 23
1262- iso_3166 | [] [] | 58
1263- iso_3166_2 | | 9
1264- iso_4217 | [] [] | 28
1265- iso_639 | [] [] | 46
1266- iso_639_3 | | 10
1267- iso_639_5 | | 2
1268- jwhois | [] | 20
1269- kbd | | 17
1270- klavaro | | 30
1271- ld | [] | 15
1272- leafpad | [] | 39
1273- libc | [] | 24
1274- libexif | | 10
1275- libextractor | | 5
1276- libgnutls | | 13
1277- libgphoto2 | | 10
1278- libgphoto2_port | [] | 19
1279- libgsasl | | 18
1280- libiconv | [] | 29
1281- libidn | | 17
1282- liferea | | 29
1283- lilypond | | 11
1284- lordsawar | | 3
1285- lprng | | 3
1286- lynx | | 19
1287- m4 | [] | 22
1288- mailfromd | | 4
1289- mailutils | | 6
1290- make | | 19
1291- man-db | | 15
1292- man-db-manpages | | 10
1293- midi-instruments | [] | 43
1294- minicom | [] | 17
1295- mkisofs | | 13
1296- myserver | | 9
1297- nano | [] | 30
1298- opcodes | | 12
1299- parted | [] | 23
1300- pies | | 4
1301- pnmixer | | 9
1302- popt | [] | 36
1303- procps-ng | | 5
1304- procps-ng-man | | 4
1305- psmisc | [] | 22
1306- pspp | | 13
1307- pushover | | 6
1308- pwdutils | | 8
1309- pyspread | | 6
1310- radius | | 9
1311- recode | | 31
1312- recutils | | 10
1313- rpm | [] | 13
1314- rush | | 10
1315- sarg | | 4
1316- sed | [] | 35
1317- sharutils | | 13
1318- shishi | | 7
1319- skribilo | | 7
1320- solfege | | 21
1321- solfege-manual | | 9
1322- spotmachine | | 11
1323- sudo | | 26
1324- sudoers | | 22
1325- sysstat | | 23
1326- tar | [] | 30
1327- texinfo | | 17
1328- texinfo_document | | 13
1329- tigervnc | | 14
1330- tin | [] | 7
1331- tin-man | | 1
1332- tracgoogleappsa... | [] | 22
1333- trader | | 12
1334- util-linux | | 13
1335- ve | | 14
1336- vice | | 1
1337- vmm | | 3
1338- vorbis-tools | | 13
1339- wastesedge | | 3
1340- wcd | | 8
1341- wcd-man | | 3
1342- wdiff | [] | 23
1343- wget | | 21
1344- wyslij-po | | 14
1345- xboard | | 10
1346- xdg-user-dirs | [] [] | 68
1347- xkeyboard-config | [] | 28
1348- +-------------+
1349- 89 teams zh_HK zh_TW
1350- 166 domains 7 42 2809
1351-
1352- Some counters in the preceding matrix are higher than the number of
1353-visible blocks let us expect. This is because a few extra PO files are
1354-used for implementing regional variants of languages, or language
1355-dialects.
1356-
1357- For a PO file in the matrix above to be effective, the package to
1358-which it applies should also have been internationalized and distributed
1359-as such by its maintainer. There might be an observable lag between the
1360-mere existence a PO file and its wide availability in a distribution.
1361-
1362- If Jun 2014 seems to be old, you may fetch a more recent copy of this
1363-'ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix
1364-with full percentage details can be found at
1365-'http://translationproject.org/extra/matrix.html'.
1366-
1367-1.5 Using 'gettext' in new packages
1368-===================================
1369-
1370-If you are writing a freely available program and want to
1371-internationalize it you are welcome to use GNU 'gettext' in your
1372-package. Of course you have to respect the GNU Lesser General Public
1373-License which covers the use of the GNU 'gettext' library. This means
1374-in particular that even non-free programs can use 'libintl' as a shared
1375-library, whereas only free software can use 'libintl' as a static
1376-library or use modified versions of 'libintl'.
1377-
1378- Once the sources are changed appropriately and the setup can handle
1379-the use of 'gettext' the only thing missing are the translations. The
1380-Free Translation Project is also available for packages which are not
1381-developed inside the GNU project. Therefore the information given above
1382-applies also for every other Free Software Project. Contact
1383-'coordinator@translationproject.org' to make the '.pot' files available
1384-to the translation teams.
1385+<https://www.gnu.org/software/gettext/manual/html_node/Users.html>
1386diff --git a/Makefile.am b/Makefile.am
1387index b001546..20dcfc8 100644
1388--- a/Makefile.am
1389+++ b/Makefile.am
1390@@ -32,7 +32,7 @@ if HAVE_TOPOLOGY
1391 SUBDIRS += topology
1392 endif
1393
1394-EXTRA_DIST= config.rpath README.md TODO gitcompile
1395+EXTRA_DIST= README.md TODO gitcompile
1396 AUTOMAKE_OPTIONS=foreign
1397 ACLOCAL_AMFLAGS = -I m4
1398
1399diff --git a/Makefile.in b/Makefile.in
1400index aacaf3d..79fd478 100644
1401--- a/Makefile.in
1402+++ b/Makefile.in
1403@@ -1,7 +1,7 @@
1404-# Makefile.in generated by automake 1.16.1 from Makefile.am.
1405+# Makefile.in generated by automake 1.16.2 from Makefile.am.
1406 # @configure_input@
1407
1408-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
1409+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
1410
1411 # This Makefile.in is free software; the Free Software Foundation
1412 # gives unlimited permission to copy and/or distribute it,
1413@@ -100,7 +100,8 @@ host_triplet = @host@
1414 subdir = .
1415 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
1416 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
1417- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
1418+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
1419+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
1420 $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
1421 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
1422 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
1423@@ -277,8 +278,8 @@ MAINT = @MAINT@
1424 MAKEINFO = @MAKEINFO@
1425 MKDIR_P = @MKDIR_P@
1426 MSGFMT = @MSGFMT@
1427-MSGFMT_015 = @MSGFMT_015@
1428 MSGMERGE = @MSGMERGE@
1429+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
1430 NCURSESW_CFLAGS = @NCURSESW_CFLAGS@
1431 NCURSESW_LIBS = @NCURSESW_LIBS@
1432 NCURSES_CFLAGS = @NCURSES_CFLAGS@
1433@@ -358,6 +359,7 @@ prefix = @prefix@
1434 program_transform_name = @program_transform_name@
1435 psdir = @psdir@
1436 rst2man_available = @rst2man_available@
1437+runstatedir = @runstatedir@
1438 sbindir = @sbindir@
1439 sharedstatedir = @sharedstatedir@
1440 srcdir = @srcdir@
1441@@ -374,7 +376,7 @@ SUBDIRS = include alsactl utils m4 po alsa-info $(am__append_1) \
1442 $(am__append_2) $(am__append_3) $(am__append_4) \
1443 $(am__append_5) $(am__append_6) $(am__append_7) \
1444 $(am__append_8) $(am__append_9) $(am__append_10)
1445-EXTRA_DIST = config.rpath README.md TODO gitcompile
1446+EXTRA_DIST = README.md TODO gitcompile
1447 AUTOMAKE_OPTIONS = foreign
1448 ACLOCAL_AMFLAGS = -I m4
1449 DISTCHECK_CONFIGURE_FLAGS = \
1450@@ -611,6 +613,10 @@ dist-xz: distdir
1451 tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
1452 $(am__post_remove_distdir)
1453
1454+dist-zstd: distdir
1455+ tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
1456+ $(am__post_remove_distdir)
1457+
1458 dist-tarZ: distdir
1459 @echo WARNING: "Support for distribution archives compressed with" \
1460 "legacy program 'compress' is deprecated." >&2
1461@@ -653,6 +659,8 @@ distcheck: dist
1462 eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
1463 *.zip*) \
1464 unzip $(distdir).zip ;;\
1465+ *.tar.zst*) \
1466+ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
1467 esac
1468 chmod -R a-w $(distdir)
1469 chmod u+w $(distdir)
1470@@ -831,17 +839,17 @@ uninstall-am:
1471 am--refresh check check-am clean clean-cscope clean-generic \
1472 cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
1473 dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \
1474- dist-zip distcheck distclean distclean-generic distclean-tags \
1475- distcleancheck distdir distuninstallcheck dvi dvi-am html \
1476- html-am info info-am install install-am install-data \
1477- install-data-am install-data-hook install-dvi install-dvi-am \
1478- install-exec install-exec-am install-html install-html-am \
1479- install-info install-info-am install-man install-pdf \
1480- install-pdf-am install-ps install-ps-am install-strip \
1481- installcheck installcheck-am installdirs installdirs-am \
1482- maintainer-clean maintainer-clean-generic mostlyclean \
1483- mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
1484- uninstall-am
1485+ dist-zip dist-zstd distcheck distclean distclean-generic \
1486+ distclean-tags distcleancheck distdir distuninstallcheck dvi \
1487+ dvi-am html html-am info info-am install install-am \
1488+ install-data install-data-am install-data-hook install-dvi \
1489+ install-dvi-am install-exec install-exec-am install-html \
1490+ install-html-am install-info install-info-am install-man \
1491+ install-pdf install-pdf-am install-ps install-ps-am \
1492+ install-strip installcheck installcheck-am installdirs \
1493+ installdirs-am maintainer-clean maintainer-clean-generic \
1494+ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
1495+ tags-am uninstall uninstall-am
1496
1497 .PRECIOUS: Makefile
1498
1499diff --git a/aclocal.m4 b/aclocal.m4
1500index e00b291..105a53e 100644
1501--- a/aclocal.m4
1502+++ b/aclocal.m4
1503@@ -1,6 +1,6 @@
1504-# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
1505+# generated automatically by aclocal 1.16.2 -*- Autoconf -*-
1506
1507-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
1508+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
1509
1510 # This file is free software; the Free Software Foundation
1511 # gives unlimited permission to copy and/or distribute it,
1512@@ -103,12 +103,11 @@ no_alsa=""
1513 sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
1514 AC_MSG_RESULT($alsa_min_major_version.$alsa_min_minor_version.$alsa_min_micro_version)
1515
1516-AC_LANG_SAVE
1517-AC_LANG_C
1518+AC_LANG_PUSH([C])
1519 AC_MSG_CHECKING([for libasound headers version >= $alsa_min_major_version.$alsa_min_minor_version.$alsa_min_micro_version ($min_alsa_version)])
1520-AC_TRY_COMPILE([
1521+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1522 #include <alsa/asoundlib.h>
1523-], [
1524+]], [[
1525 /* ensure backward compatibility */
1526 #if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR)
1527 #define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR
1528@@ -140,21 +139,20 @@ AC_TRY_COMPILE([
1529 # endif
1530 # endif
1531 exit(0);
1532-],
1533+]])],
1534 [AC_MSG_RESULT(found.)],
1535 [AC_MSG_RESULT(not present.)
1536 ifelse([$3], , [AC_MSG_ERROR(Sufficiently new version of libasound not found.)])
1537 alsa_found=no]
1538 )
1539-AC_LANG_RESTORE
1540+AC_LANG_POP([C])
1541
1542-AC_LANG_SAVE
1543-AC_LANG_C
1544+AC_LANG_PUSH([C])
1545 AC_MSG_CHECKING([for libatopology (sound headers version > 1.1.9)])
1546-AC_TRY_COMPILE([
1547+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1548 #include <alsa/asoundlib.h>
1549 #include <alsa/topology.h>
1550-], [
1551+]], [[
1552 /* ensure backward compatibility */
1553 #if !defined(SND_LIB_VERSION)
1554 #define SND_LIB_VERSION 0
1555@@ -165,13 +163,12 @@ AC_TRY_COMPILE([
1556 # error not present
1557 #endif
1558 exit(0);
1559-],
1560+]])],
1561 [AC_MSG_RESULT(yes)
1562 enable_atopology="yes"],
1563 [AC_MSG_RESULT(no)]
1564 )
1565-AC_LANG_RESTORE
1566-
1567+AC_LANG_POP([C])
1568 fi
1569
1570 dnl Now that we know that we have the right version, let's see if we have the library and not just the headers.
1571@@ -225,63 +222,6 @@ AC_SUBST(ALSA_LIBS)
1572 AC_SUBST(ALSA_TOPOLOGY_LIBS)
1573 ])
1574
1575-# intlmacosx.m4 serial 5 (gettext-0.18.2)
1576-dnl Copyright (C) 2004-2014, 2016 Free Software Foundation, Inc.
1577-dnl This file is free software; the Free Software Foundation
1578-dnl gives unlimited permission to copy and/or distribute it,
1579-dnl with or without modifications, as long as this notice is preserved.
1580-dnl
1581-dnl This file can be used in projects which are not available under
1582-dnl the GNU General Public License or the GNU Library General Public
1583-dnl License but which still want to provide support for the GNU gettext
1584-dnl functionality.
1585-dnl Please note that the actual code of the GNU gettext library is covered
1586-dnl by the GNU Library General Public License, and the rest of the GNU
1587-dnl gettext package is covered by the GNU General Public License.
1588-dnl They are *not* in the public domain.
1589-
1590-dnl Checks for special options needed on Mac OS X.
1591-dnl Defines INTL_MACOSX_LIBS.
1592-AC_DEFUN([gt_INTL_MACOSX],
1593-[
1594- dnl Check for API introduced in Mac OS X 10.2.
1595- AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
1596- [gt_cv_func_CFPreferencesCopyAppValue],
1597- [gt_save_LIBS="$LIBS"
1598- LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
1599- AC_LINK_IFELSE(
1600- [AC_LANG_PROGRAM(
1601- [[#include <CoreFoundation/CFPreferences.h>]],
1602- [[CFPreferencesCopyAppValue(NULL, NULL)]])],
1603- [gt_cv_func_CFPreferencesCopyAppValue=yes],
1604- [gt_cv_func_CFPreferencesCopyAppValue=no])
1605- LIBS="$gt_save_LIBS"])
1606- if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
1607- AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
1608- [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
1609- fi
1610- dnl Check for API introduced in Mac OS X 10.3.
1611- AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent],
1612- [gt_save_LIBS="$LIBS"
1613- LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
1614- AC_LINK_IFELSE(
1615- [AC_LANG_PROGRAM(
1616- [[#include <CoreFoundation/CFLocale.h>]],
1617- [[CFLocaleCopyCurrent();]])],
1618- [gt_cv_func_CFLocaleCopyCurrent=yes],
1619- [gt_cv_func_CFLocaleCopyCurrent=no])
1620- LIBS="$gt_save_LIBS"])
1621- if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
1622- AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1],
1623- [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
1624- fi
1625- INTL_MACOSX_LIBS=
1626- if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
1627- INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
1628- fi
1629- AC_SUBST([INTL_MACOSX_LIBS])
1630-])
1631-
1632 # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
1633 # serial 11 (pkg-config-0.29.1)
1634
1635@@ -626,7 +566,7 @@ AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"],
1636 [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])])
1637 ])dnl PKG_HAVE_DEFINE_WITH_MODULES
1638
1639-# Copyright (C) 2002-2018 Free Software Foundation, Inc.
1640+# Copyright (C) 2002-2020 Free Software Foundation, Inc.
1641 #
1642 # This file is free software; the Free Software Foundation
1643 # gives unlimited permission to copy and/or distribute it,
1644@@ -641,7 +581,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
1645 [am__api_version='1.16'
1646 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
1647 dnl require some minimum version. Point them to the right macro.
1648-m4_if([$1], [1.16.1], [],
1649+m4_if([$1], [1.16.2], [],
1650 [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
1651 ])
1652
1653@@ -657,14 +597,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
1654 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
1655 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
1656 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
1657-[AM_AUTOMAKE_VERSION([1.16.1])dnl
1658+[AM_AUTOMAKE_VERSION([1.16.2])dnl
1659 m4_ifndef([AC_AUTOCONF_VERSION],
1660 [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
1661 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
1662
1663 # AM_AUX_DIR_EXPAND -*- Autoconf -*-
1664
1665-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
1666+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
1667 #
1668 # This file is free software; the Free Software Foundation
1669 # gives unlimited permission to copy and/or distribute it,
1670@@ -716,7 +656,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
1671
1672 # AM_CONDITIONAL -*- Autoconf -*-
1673
1674-# Copyright (C) 1997-2018 Free Software Foundation, Inc.
1675+# Copyright (C) 1997-2020 Free Software Foundation, Inc.
1676 #
1677 # This file is free software; the Free Software Foundation
1678 # gives unlimited permission to copy and/or distribute it,
1679@@ -747,7 +687,7 @@ AC_CONFIG_COMMANDS_PRE(
1680 Usually this means the macro was only invoked conditionally.]])
1681 fi])])
1682
1683-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
1684+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
1685 #
1686 # This file is free software; the Free Software Foundation
1687 # gives unlimited permission to copy and/or distribute it,
1688@@ -938,7 +878,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
1689
1690 # Generate code to set up dependency tracking. -*- Autoconf -*-
1691
1692-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
1693+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
1694 #
1695 # This file is free software; the Free Software Foundation
1696 # gives unlimited permission to copy and/or distribute it,
1697@@ -977,7 +917,9 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
1698 done
1699 if test $am_rc -ne 0; then
1700 AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
1701- for automatic dependency tracking. Try re-running configure with the
1702+ for automatic dependency tracking. If GNU make was not used, consider
1703+ re-running the configure script with MAKE="gmake" (or whatever is
1704+ necessary). You can also try re-running configure with the
1705 '--disable-dependency-tracking' option to at least be able to build
1706 the package (albeit without support for automatic dependency tracking).])
1707 fi
1708@@ -1004,7 +946,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
1709
1710 # Do all the work for Automake. -*- Autoconf -*-
1711
1712-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
1713+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
1714 #
1715 # This file is free software; the Free Software Foundation
1716 # gives unlimited permission to copy and/or distribute it,
1717@@ -1201,7 +1143,7 @@ for _am_header in $config_headers :; do
1718 done
1719 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
1720
1721-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
1722+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
1723 #
1724 # This file is free software; the Free Software Foundation
1725 # gives unlimited permission to copy and/or distribute it,
1726@@ -1222,7 +1164,7 @@ if test x"${install_sh+set}" != xset; then
1727 fi
1728 AC_SUBST([install_sh])])
1729
1730-# Copyright (C) 2003-2018 Free Software Foundation, Inc.
1731+# Copyright (C) 2003-2020 Free Software Foundation, Inc.
1732 #
1733 # This file is free software; the Free Software Foundation
1734 # gives unlimited permission to copy and/or distribute it,
1735@@ -1244,7 +1186,7 @@ AC_SUBST([am__leading_dot])])
1736 # Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
1737 # From Jim Meyering
1738
1739-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
1740+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
1741 #
1742 # This file is free software; the Free Software Foundation
1743 # gives unlimited permission to copy and/or distribute it,
1744@@ -1279,7 +1221,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
1745
1746 # Check to see how 'make' treats includes. -*- Autoconf -*-
1747
1748-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
1749+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
1750 #
1751 # This file is free software; the Free Software Foundation
1752 # gives unlimited permission to copy and/or distribute it,
1753@@ -1322,7 +1264,7 @@ AC_SUBST([am__quote])])
1754
1755 # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
1756
1757-# Copyright (C) 1997-2018 Free Software Foundation, Inc.
1758+# Copyright (C) 1997-2020 Free Software Foundation, Inc.
1759 #
1760 # This file is free software; the Free Software Foundation
1761 # gives unlimited permission to copy and/or distribute it,
1762@@ -1361,7 +1303,7 @@ fi
1763
1764 # Helper functions for option handling. -*- Autoconf -*-
1765
1766-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
1767+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
1768 #
1769 # This file is free software; the Free Software Foundation
1770 # gives unlimited permission to copy and/or distribute it,
1771@@ -1390,7 +1332,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
1772 AC_DEFUN([_AM_IF_OPTION],
1773 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
1774
1775-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
1776+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
1777 #
1778 # This file is free software; the Free Software Foundation
1779 # gives unlimited permission to copy and/or distribute it,
1780@@ -1437,7 +1379,7 @@ AC_LANG_POP([C])])
1781 # For backward compatibility.
1782 AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
1783
1784-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
1785+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
1786 #
1787 # This file is free software; the Free Software Foundation
1788 # gives unlimited permission to copy and/or distribute it,
1789@@ -1456,7 +1398,7 @@ AC_DEFUN([AM_RUN_LOG],
1790
1791 # Check to make sure that the build environment is sane. -*- Autoconf -*-
1792
1793-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
1794+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
1795 #
1796 # This file is free software; the Free Software Foundation
1797 # gives unlimited permission to copy and/or distribute it,
1798@@ -1537,7 +1479,7 @@ AC_CONFIG_COMMANDS_PRE(
1799 rm -f conftest.file
1800 ])
1801
1802-# Copyright (C) 2009-2018 Free Software Foundation, Inc.
1803+# Copyright (C) 2009-2020 Free Software Foundation, Inc.
1804 #
1805 # This file is free software; the Free Software Foundation
1806 # gives unlimited permission to copy and/or distribute it,
1807@@ -1597,7 +1539,7 @@ AC_SUBST([AM_BACKSLASH])dnl
1808 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
1809 ])
1810
1811-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
1812+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
1813 #
1814 # This file is free software; the Free Software Foundation
1815 # gives unlimited permission to copy and/or distribute it,
1816@@ -1625,7 +1567,7 @@ fi
1817 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
1818 AC_SUBST([INSTALL_STRIP_PROGRAM])])
1819
1820-# Copyright (C) 2006-2018 Free Software Foundation, Inc.
1821+# Copyright (C) 2006-2020 Free Software Foundation, Inc.
1822 #
1823 # This file is free software; the Free Software Foundation
1824 # gives unlimited permission to copy and/or distribute it,
1825@@ -1644,7 +1586,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
1826
1827 # Check how to create a tarball. -*- Autoconf -*-
1828
1829-# Copyright (C) 2004-2018 Free Software Foundation, Inc.
1830+# Copyright (C) 2004-2020 Free Software Foundation, Inc.
1831 #
1832 # This file is free software; the Free Software Foundation
1833 # gives unlimited permission to copy and/or distribute it,
1834@@ -1776,7 +1718,9 @@ AC_SUBST([am__untar])
1835 ]) # _AM_PROG_TAR
1836
1837 m4_include([m4/gettext.m4])
1838+m4_include([m4/host-cpu-c-abi.m4])
1839 m4_include([m4/iconv.m4])
1840+m4_include([m4/intlmacosx.m4])
1841 m4_include([m4/lib-ld.m4])
1842 m4_include([m4/lib-link.m4])
1843 m4_include([m4/lib-prefix.m4])
1844diff --git a/alsa-info/Makefile.in b/alsa-info/Makefile.in
1845index 19a7b7a..8a21da4 100644
1846--- a/alsa-info/Makefile.in
1847+++ b/alsa-info/Makefile.in
1848@@ -1,7 +1,7 @@
1849-# Makefile.in generated by automake 1.16.1 from Makefile.am.
1850+# Makefile.in generated by automake 1.16.2 from Makefile.am.
1851 # @configure_input@
1852
1853-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
1854+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
1855
1856 # This Makefile.in is free software; the Free Software Foundation
1857 # gives unlimited permission to copy and/or distribute it,
1858@@ -91,7 +91,8 @@ host_triplet = @host@
1859 subdir = alsa-info
1860 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
1861 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
1862- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
1863+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
1864+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
1865 $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
1866 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
1867 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
1868@@ -215,8 +216,8 @@ MAINT = @MAINT@
1869 MAKEINFO = @MAKEINFO@
1870 MKDIR_P = @MKDIR_P@
1871 MSGFMT = @MSGFMT@
1872-MSGFMT_015 = @MSGFMT_015@
1873 MSGMERGE = @MSGMERGE@
1874+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
1875 NCURSESW_CFLAGS = @NCURSESW_CFLAGS@
1876 NCURSESW_LIBS = @NCURSESW_LIBS@
1877 NCURSES_CFLAGS = @NCURSES_CFLAGS@
1878@@ -296,6 +297,7 @@ prefix = @prefix@
1879 program_transform_name = @program_transform_name@
1880 psdir = @psdir@
1881 rst2man_available = @rst2man_available@
1882+runstatedir = @runstatedir@
1883 sbindir = @sbindir@
1884 sharedstatedir = @sharedstatedir@
1885 srcdir = @srcdir@
1886diff --git a/alsa-info/alsa-info.sh b/alsa-info/alsa-info.sh
1887index f179bfa..01a910a 100755
1888--- a/alsa-info/alsa-info.sh
1889+++ b/alsa-info/alsa-info.sh
1890@@ -1,7 +1,7 @@
1891 #!/bin/bash
1892
1893-SCRIPT_VERSION=0.4.65
1894-CHANGELOG="http://www.alsa-project.org/alsa-info.sh.changelog"
1895+SCRIPT_VERSION=0.5.0
1896+CHANGELOG="https://www.alsa-project.org/alsa-info.sh.changelog"
1897
1898 #################################################################################
1899 #Copyright (C) 2007 Free Software Foundation.
1900@@ -45,7 +45,7 @@ update() {
1901 test -z "$WGET" -o ! -x "$WGET" && return
1902
1903 SHFILE=$(mktemp -t alsa-info.XXXXXXXXXX) || exit 1
1904- wget -O $SHFILE "http://www.alsa-project.org/alsa-info.sh" >/dev/null 2>&1
1905+ wget -O $SHFILE "https://www.alsa-project.org/alsa-info.sh" >/dev/null 2>&1
1906 REMOTE_VERSION=$(grep SCRIPT_VERSION $SHFILE | head -n1 | sed 's/.*=//')
1907 if [ -s "$SHFILE" -a "$REMOTE_VERSION" != "$SCRIPT_VERSION" ]; then
1908 if [[ -n $DIALOG ]]
1909@@ -233,7 +233,7 @@ withdmesg() {
1910 echo "!!ALSA/HDA dmesg" >> $FILE
1911 echo "!!--------------" >> $FILE
1912 echo "" >> $FILE
1913- dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|hda.codec|hda.intel' >> $FILE
1914+ dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|audio|hda.codec|hda.intel' >> $FILE
1915 echo "" >> $FILE
1916 echo "" >> $FILE
1917 }
1918@@ -425,9 +425,11 @@ get_alsa_library_version
1919 ALSA_UTILS_VERSION=$(amixer -v | awk '{ print $3 }')
1920
1921 ESDINST=$(command -v esd)
1922+PWINST=$(command -v pipewire)
1923 PAINST=$(command -v pulseaudio)
1924 ARTSINST=$(command -v artsd)
1925 JACKINST=$(command -v jackd)
1926+JACK2INST=$(command -v jackdbus)
1927 ROARINST=$(command -v roard)
1928 DMIDECODE=$(command -v dmidecode)
1929
1930@@ -461,7 +463,7 @@ if [ -d /sys/bus/acpi/devices ]; then
1931 done
1932 fi
1933
1934-cat /proc/asound/modules 2>/dev/null | awk '{ print $2 }' > $TEMPDIR/alsamodules.tmp
1935+awk '{ print $2 " (card " $1 ")" }' < /proc/asound/modules > $TEMPDIR/alsamodules.tmp 2> /dev/null
1936 cat /proc/asound/cards > $TEMPDIR/alsacards.tmp
1937 if [[ ! -z "$LSPCI" ]]; then
1938 for class in 0401 0402 0403; do
1939@@ -476,6 +478,18 @@ cat /proc/asound/card*/codec\#* > $TEMPDIR/alsa-hda-intel.tmp 2> /dev/null
1940 cat /proc/asound/card*/codec97\#0/ac97\#0-0 > $TEMPDIR/alsa-ac97.tmp 2> /dev/null
1941 cat /proc/asound/card*/codec97\#0/ac97\#0-0+regs > $TEMPDIR/alsa-ac97-regs.tmp 2> /dev/null
1942
1943+#Check for USB descriptors
1944+if [ -x /usr/bin/lsusb ]; then
1945+ for f in /proc/asound/card[0-9]*/usbbus; do
1946+ test -f "$f" || continue
1947+ id=$(sed 's@/@:@' $f)
1948+ lsusb -v -s $id >> $TEMPDIR/lsusb.tmp 2> /dev/null
1949+ done
1950+fi
1951+
1952+#Check for USB stream setup
1953+cat /proc/asound/card*/stream[0-9]* > $TEMPDIR/alsa-usbstream.tmp 2> /dev/null
1954+
1955 #Check for USB mixer setup
1956 cat /proc/asound/card*/usbmixer > $TEMPDIR/alsa-usbmixer.tmp 2> /dev/null
1957
1958@@ -543,6 +557,13 @@ echo "" >> $FILE
1959 echo "!!Sound Servers on this system" >> $FILE
1960 echo "!!----------------------------" >> $FILE
1961 echo "" >> $FILE
1962+if [[ -n $PWINST ]];then
1963+[[ $(pgrep '^(.*/)?pipewire$') ]] && PWRUNNING="Yes" || PWRUNNING="No"
1964+echo "PipeWire:" >> $FILE
1965+echo " Installed - Yes ($PWINST)" >> $FILE
1966+echo " Running - $PWRUNNING" >> $FILE
1967+echo "" >> $FILE
1968+fi
1969 if [[ -n $PAINST ]];then
1970 [[ $(pgrep '^(.*/)?pulseaudio$') ]] && PARUNNING="Yes" || PARUNNING="No"
1971 echo "Pulseaudio:" >> $FILE
1972@@ -571,6 +592,13 @@ echo " Installed - Yes ($JACKINST)" >> $FILE
1973 echo " Running - $JACKRUNNING" >> $FILE
1974 echo "" >> $FILE
1975 fi
1976+if [[ -n $JACK2INST ]];then
1977+[[ $(pgrep '^(.*/)?jackdbus$') ]] && JACK2RUNNING="Yes" || JACK2RUNNING="No"
1978+echo "Jack2:" >> $FILE
1979+echo " Installed - Yes ($JACK2INST)" >> $FILE
1980+echo " Running - $JACK2RUNNING" >> $FILE
1981+echo "" >> $FILE
1982+fi
1983 if [[ -n $ROARINST ]];then
1984 [[ $(pgrep '^(.*/)?roard$') ]] && ROARRUNNING="Yes" || ROARRUNNING="No"
1985 echo "RoarAudio:" >> $FILE
1986@@ -599,8 +627,7 @@ echo "" >> $FILE
1987 echo "" >> $FILE
1988 fi
1989
1990-if [ "$SNDOPTIONS" ]
1991-then
1992+if [ "$SNDOPTIONS" ]; then
1993 echo "!!Modprobe options (Sound related)" >> $FILE
1994 echo "!!--------------------------------" >> $FILE
1995 echo "" >> $FILE
1996@@ -623,6 +650,18 @@ if [ -d "$SYSFS" ]; then
1997 echo "" >> $FILE
1998 done
1999 echo "" >> $FILE
2000+ echo "!!Sysfs card info" >> $FILE
2001+ echo "!!---------------" >> $FILE
2002+ echo "" >> $FILE
2003+ for cdir in $(echo $SYSFS/class/sound/card*); do
2004+ echo "!!Card: $cdir" >> $FILE
2005+ driver=$(readlink -f "$cdir/device/driver")
2006+ echo "Driver: $driver" >> $FILE
2007+ echo "Tree:" >> $FILE
2008+ tree --noreport $cdir -L 2 | sed -e 's/^/\t/g' >> $FILE
2009+ echo "" >> $FILE
2010+ done
2011+ echo "" >> $FILE
2012 fi
2013
2014 if [ -s "$TEMPDIR/alsa-hda-intel.tmp" ]; then
2015@@ -649,6 +688,27 @@ if [ -s "$TEMPDIR/alsa-ac97.tmp" ]; then
2016 echo "" >> $FILE
2017 fi
2018
2019+if [ -s "$TEMPDIR/lsusb.tmp" ]; then
2020+ echo "!!USB Descriptors" >> $FILE
2021+ echo "!!---------------" >> $FILE
2022+ echo "--startcollapse--" >> $FILE
2023+ cat $TEMPDIR/lsusb.tmp >> $FILE
2024+ echo "--endcollapse--" >> $FILE
2025+ echo "" >> $FILE
2026+ echo "" >> $FILE
2027+fi
2028+
2029+if [ -s "$TEMPDIR/lsusb.tmp" ]; then
2030+ echo "!!USB Stream information" >> $FILE
2031+ echo "!!----------------------" >> $FILE
2032+ echo "--startcollapse--" >> $FILE
2033+ echo "" >> $FILE
2034+ cat $TEMPDIR/alsa-usbstream.tmp >> $FILE
2035+ echo "--endcollapse--" >> $FILE
2036+ echo "" >> $FILE
2037+ echo "" >> $FILE
2038+fi
2039+
2040 if [ -s "$TEMPDIR/alsa-usbmixer.tmp" ]; then
2041 echo "!!USB Mixer information" >> $FILE
2042 echo "!!---------------------" >> $FILE
2043@@ -763,7 +823,7 @@ if [ -n "$1" ]; then
2044 echo " --update (check server for script updates)"
2045 echo " --upload (upload contents to remote server)"
2046 echo " --no-upload (do not upload contents to remote server)"
2047- echo " --pastebin (use http://pastebin.ca) as remote server"
2048+ echo " --pastebin (use https://pastebin.ca) as remote server"
2049 echo " instead www.alsa-project.org"
2050 echo " --stdout (print alsa information to standard output"
2051 echo " instead of a file)"
2052@@ -792,28 +852,28 @@ if ! wget --help 2>/dev/null | grep -q post-file; then
2053 :
2054 elif [ -n "$DIALOG" ]; then
2055 if [ -z "$PASTEBIN" ]; then
2056- dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.alsa-project.org.\nPossible reasons are:\n\n 1. Couldn't find 'wget' in your PATH\n 2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to http://www.alsa-project.org/cardinfo-db/ and submit your post." 25 100
2057+ dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to https://www.alsa-project.org.\nPossible reasons are:\n\n 1. Couldn't find 'wget' in your PATH\n 2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to https://www.alsa-project.org/cardinfo-db/ and submit your post." 25 100
2058 else
2059- dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.pastebin.ca.\nPossible reasons are:\n\n 1. Couldn't find 'wget' in your PATH\n 2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post." 25 100
2060+ dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to https://www.pastebin.ca.\nPossible reasons are:\n\n 1. Couldn't find 'wget' in your PATH\n 2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to https://www.pastebin.ca/upload.php and submit your post." 25 100
2061 fi
2062 else
2063 if [ -z "$PASTEBIN" ]; then
2064 echo ""
2065- echo "Could not automatically upload output to http://www.alsa-project.org"
2066+ echo "Could not automatically upload output to https://www.alsa-project.org"
2067 echo "Possible reasons are:"
2068 echo " 1. Couldn't find 'wget' in your PATH"
2069 echo " 2. Your version of wget is less than 1.8.2"
2070 echo ""
2071- echo "Please manually upload $NFILE to http://www.alsa-project.org/cardinfo-db/ and submit your post."
2072+ echo "Please manually upload $NFILE to https://www.alsa-project.org/cardinfo-db/ and submit your post."
2073 echo ""
2074 else
2075 echo ""
2076- echo "Could not automatically upload output to http://www.pastebin.ca"
2077+ echo "Could not automatically upload output to https://www.pastebin.ca"
2078 echo "Possible reasons are:"
2079 echo " 1. Couldn't find 'wget' in your PATH"
2080 echo " 2. Your version of wget is less than 1.8.2"
2081 echo ""
2082- echo "Please manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post."
2083+ echo "Please manually upload $NFILE to https://www.pastebin.ca/upload.php and submit your post."
2084 echo ""
2085 fi
2086 fi
2087@@ -867,9 +927,9 @@ else
2088 fi
2089
2090 if [[ -z $PASTEBIN ]]; then
2091- wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://www.alsa-project.org/cardinfo-db/" &>$TEMPDIR/wget.tmp
2092+ wget -O - --tries=5 --timeout=60 --post-file=$FILE "https://www.alsa-project.org/cardinfo-db/" &>$TEMPDIR/wget.tmp
2093 else
2094- wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY&encrypt=t&encryptpw=blahblah" &>$TEMPDIR/wget.tmp
2095+ wget -O - --tries=5 --timeout=60 --post-file=$FILE "https://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY&encrypt=t&encryptpw=blahblah" &>$TEMPDIR/wget.tmp
2096 fi
2097
2098 if [ $? -ne 0 ]; then
2099@@ -912,7 +972,7 @@ fi # dialog
2100 if [ -z "$PASTEBIN" ]; then
2101 FINAL_URL=$(grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2)
2102 else
2103- FINAL_URL=$(grep "SUCCESS:" $TEMPDIR/wget.tmp | sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p')
2104+ FINAL_URL=$(grep "SUCCESS:" $TEMPDIR/wget.tmp | sed -n 's/.*\:\([0-9]\+\).*/https:\/\/pastebin.ca\/\1/p')
2105 fi
2106
2107 # See if tput is available, and use it if it is.
2108diff --git a/alsaconf/Makefile.in b/alsaconf/Makefile.in
2109index 0dd3b85..0508bef 100644
2110--- a/alsaconf/Makefile.in
2111+++ b/alsaconf/Makefile.in
2112@@ -1,7 +1,7 @@
2113-# Makefile.in generated by automake 1.16.1 from Makefile.am.
2114+# Makefile.in generated by automake 1.16.2 from Makefile.am.
2115 # @configure_input@
2116
2117-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
2118+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
2119
2120 # This Makefile.in is free software; the Free Software Foundation
2121 # gives unlimited permission to copy and/or distribute it,
2122@@ -91,7 +91,8 @@ host_triplet = @host@
2123 subdir = alsaconf
2124 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
2125 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
2126- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
2127+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
2128+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
2129 $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
2130 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
2131 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
2132@@ -275,8 +276,8 @@ MAINT = @MAINT@
2133 MAKEINFO = @MAKEINFO@
2134 MKDIR_P = @MKDIR_P@
2135 MSGFMT = @MSGFMT@
2136-MSGFMT_015 = @MSGFMT_015@
2137 MSGMERGE = @MSGMERGE@
2138+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
2139 NCURSESW_CFLAGS = @NCURSESW_CFLAGS@
2140 NCURSESW_LIBS = @NCURSESW_LIBS@
2141 NCURSES_CFLAGS = @NCURSES_CFLAGS@
2142@@ -356,6 +357,7 @@ prefix = @prefix@
2143 program_transform_name = @program_transform_name@
2144 psdir = @psdir@
2145 rst2man_available = @rst2man_available@
2146+runstatedir = @runstatedir@
2147 sbindir = @sbindir@
2148 sharedstatedir = @sharedstatedir@
2149 srcdir = @srcdir@
2150diff --git a/alsactl/Makefile.am b/alsactl/Makefile.am
2151index c1031ac..deff2cd 100644
2152--- a/alsactl/Makefile.am
2153+++ b/alsactl/Makefile.am
2154@@ -10,7 +10,7 @@ EXTRA_DIST=alsactl.1 alsactl_init.xml
2155 AM_CFLAGS = -D_GNU_SOURCE
2156
2157 alsactl_SOURCES=alsactl.c state.c lock.c utils.c init_parse.c init_ucm.c \
2158- daemon.c monitor.c
2159+ daemon.c monitor.c clean.c
2160
2161 alsactl_CFLAGS=$(AM_CFLAGS) -D__USE_GNU \
2162 -DSYS_ASOUNDRC=\"$(ASOUND_STATE_DIR)/asound.state\" \
2163diff --git a/alsactl/Makefile.in b/alsactl/Makefile.in
2164index de97ef1..87211d8 100644
2165--- a/alsactl/Makefile.in
2166+++ b/alsactl/Makefile.in
2167@@ -1,7 +1,7 @@
2168-# Makefile.in generated by automake 1.16.1 from Makefile.am.
2169+# Makefile.in generated by automake 1.16.2 from Makefile.am.
2170 # @configure_input@
2171
2172-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
2173+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
2174
2175 # This Makefile.in is free software; the Free Software Foundation
2176 # gives unlimited permission to copy and/or distribute it,
2177@@ -95,7 +95,8 @@ sbin_PROGRAMS = alsactl$(EXEEXT)
2178 subdir = alsactl
2179 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
2180 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
2181- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
2182+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
2183+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
2184 $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
2185 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
2186 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
2187@@ -115,7 +116,8 @@ PROGRAMS = $(sbin_PROGRAMS)
2188 am_alsactl_OBJECTS = alsactl-alsactl.$(OBJEXT) alsactl-state.$(OBJEXT) \
2189 alsactl-lock.$(OBJEXT) alsactl-utils.$(OBJEXT) \
2190 alsactl-init_parse.$(OBJEXT) alsactl-init_ucm.$(OBJEXT) \
2191- alsactl-daemon.$(OBJEXT) alsactl-monitor.$(OBJEXT)
2192+ alsactl-daemon.$(OBJEXT) alsactl-monitor.$(OBJEXT) \
2193+ alsactl-clean.$(OBJEXT)
2194 alsactl_OBJECTS = $(am_alsactl_OBJECTS)
2195 alsactl_LDADD = $(LDADD)
2196 alsactl_LINK = $(CCLD) $(alsactl_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
2197@@ -136,7 +138,7 @@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
2198 depcomp = $(SHELL) $(top_srcdir)/depcomp
2199 am__maybe_remake_depfiles = depfiles
2200 am__depfiles_remade = ./$(DEPDIR)/alsactl-alsactl.Po \
2201- ./$(DEPDIR)/alsactl-daemon.Po \
2202+ ./$(DEPDIR)/alsactl-clean.Po ./$(DEPDIR)/alsactl-daemon.Po \
2203 ./$(DEPDIR)/alsactl-init_parse.Po \
2204 ./$(DEPDIR)/alsactl-init_ucm.Po ./$(DEPDIR)/alsactl-lock.Po \
2205 ./$(DEPDIR)/alsactl-monitor.Po ./$(DEPDIR)/alsactl-state.Po \
2206@@ -319,8 +321,8 @@ MAINT = @MAINT@
2207 MAKEINFO = @MAKEINFO@
2208 MKDIR_P = @MKDIR_P@
2209 MSGFMT = @MSGFMT@
2210-MSGFMT_015 = @MSGFMT_015@
2211 MSGMERGE = @MSGMERGE@
2212+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
2213 NCURSESW_CFLAGS = @NCURSESW_CFLAGS@
2214 NCURSESW_LIBS = @NCURSESW_LIBS@
2215 NCURSES_CFLAGS = @NCURSES_CFLAGS@
2216@@ -400,6 +402,7 @@ prefix = @prefix@
2217 program_transform_name = @program_transform_name@
2218 psdir = @psdir@
2219 rst2man_available = @rst2man_available@
2220+runstatedir = @runstatedir@
2221 sbindir = @sbindir@
2222 sharedstatedir = @sharedstatedir@
2223 srcdir = @srcdir@
2224@@ -417,7 +420,7 @@ EXTRA_DIST = alsactl.1 alsactl_init.xml alsa-state.service.in \
2225 alsa-restore.service.in 90-alsa-restore.rules.in
2226 AM_CFLAGS = -D_GNU_SOURCE
2227 alsactl_SOURCES = alsactl.c state.c lock.c utils.c init_parse.c init_ucm.c \
2228- daemon.c monitor.c
2229+ daemon.c monitor.c clean.c
2230
2231 alsactl_CFLAGS = $(AM_CFLAGS) -D__USE_GNU \
2232 -DSYS_ASOUNDRC=\"$(ASOUND_STATE_DIR)/asound.state\" \
2233@@ -533,6 +536,7 @@ distclean-compile:
2234 -rm -f *.tab.c
2235
2236 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsactl-alsactl.Po@am__quote@ # am--include-marker
2237+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsactl-clean.Po@am__quote@ # am--include-marker
2238 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsactl-daemon.Po@am__quote@ # am--include-marker
2239 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsactl-init_parse.Po@am__quote@ # am--include-marker
2240 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsactl-init_ucm.Po@am__quote@ # am--include-marker
2241@@ -672,6 +676,20 @@ alsactl-monitor.obj: monitor.c
2242 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='monitor.c' object='alsactl-monitor.obj' libtool=no @AMDEPBACKSLASH@
2243 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2244 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(alsactl_CFLAGS) $(CFLAGS) -c -o alsactl-monitor.obj `if test -f 'monitor.c'; then $(CYGPATH_W) 'monitor.c'; else $(CYGPATH_W) '$(srcdir)/monitor.c'; fi`
2245+
2246+alsactl-clean.o: clean.c
2247+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(alsactl_CFLAGS) $(CFLAGS) -MT alsactl-clean.o -MD -MP -MF $(DEPDIR)/alsactl-clean.Tpo -c -o alsactl-clean.o `test -f 'clean.c' || echo '$(srcdir)/'`clean.c
2248+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/alsactl-clean.Tpo $(DEPDIR)/alsactl-clean.Po
2249+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clean.c' object='alsactl-clean.o' libtool=no @AMDEPBACKSLASH@
2250+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2251+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(alsactl_CFLAGS) $(CFLAGS) -c -o alsactl-clean.o `test -f 'clean.c' || echo '$(srcdir)/'`clean.c
2252+
2253+alsactl-clean.obj: clean.c
2254+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(alsactl_CFLAGS) $(CFLAGS) -MT alsactl-clean.obj -MD -MP -MF $(DEPDIR)/alsactl-clean.Tpo -c -o alsactl-clean.obj `if test -f 'clean.c'; then $(CYGPATH_W) 'clean.c'; else $(CYGPATH_W) '$(srcdir)/clean.c'; fi`
2255+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/alsactl-clean.Tpo $(DEPDIR)/alsactl-clean.Po
2256+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clean.c' object='alsactl-clean.obj' libtool=no @AMDEPBACKSLASH@
2257+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
2258+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(alsactl_CFLAGS) $(CFLAGS) -c -o alsactl-clean.obj `if test -f 'clean.c'; then $(CYGPATH_W) 'clean.c'; else $(CYGPATH_W) '$(srcdir)/clean.c'; fi`
2259 install-man1: $(man_MANS)
2260 @$(NORMAL_INSTALL)
2261 @list1=''; \
2262@@ -1004,6 +1022,7 @@ clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
2263
2264 distclean: distclean-recursive
2265 -rm -f ./$(DEPDIR)/alsactl-alsactl.Po
2266+ -rm -f ./$(DEPDIR)/alsactl-clean.Po
2267 -rm -f ./$(DEPDIR)/alsactl-daemon.Po
2268 -rm -f ./$(DEPDIR)/alsactl-init_parse.Po
2269 -rm -f ./$(DEPDIR)/alsactl-init_ucm.Po
2270@@ -1059,6 +1078,7 @@ installcheck-am:
2271
2272 maintainer-clean: maintainer-clean-recursive
2273 -rm -f ./$(DEPDIR)/alsactl-alsactl.Po
2274+ -rm -f ./$(DEPDIR)/alsactl-clean.Po
2275 -rm -f ./$(DEPDIR)/alsactl-daemon.Po
2276 -rm -f ./$(DEPDIR)/alsactl-init_parse.Po
2277 -rm -f ./$(DEPDIR)/alsactl-init_ucm.Po
2278diff --git a/alsactl/alsa-restore.service.in b/alsactl/alsa-restore.service.in
2279index a84c2e8..80fd5fd 100644
2280--- a/alsactl/alsa-restore.service.in
2281+++ b/alsactl/alsa-restore.service.in
2282@@ -7,7 +7,6 @@
2283 Description=Save/Restore Sound Card State
2284 ConditionPathExists=!@daemonswitch@
2285 ConditionPathExistsGlob=/dev/snd/control*
2286-ConditionPathExists=@asoundrcfile@
2287
2288 [Service]
2289 Type=oneshot
2290diff --git a/alsactl/alsactl.1 b/alsactl/alsactl.1
2291index 615491a..8296663 100644
2292--- a/alsactl/alsactl.1
2293+++ b/alsactl/alsactl.1
2294@@ -8,6 +8,8 @@ alsactl \- advanced controls for ALSA soundcard driver
2295
2296 \fBalsactl\fP \fImonitor\fP <card # or id>
2297
2298+\fBalsactl\fP [\fIclean\fP] <card # or id or device> [[control identifiers]]
2299+
2300 .SH DESCRIPTION
2301 \fBalsactl\fP is used to control advanced settings for the ALSA
2302 soundcard drivers. It supports multiple soundcards. If your card has
2303@@ -16,31 +18,67 @@ you have come to the right place.
2304
2305 .SH COMMANDS
2306
2307-\fIstore\fP saves the current driver state for the selected soundcard
2308+.SS Introduction
2309+
2310+The \fI<card>\fP argument is optional. If no soundcards are specified,
2311+setup for all cards will be saved, loaded or monitored.
2312+
2313+.SS store <card>
2314+
2315+This command saves the current driver state for the selected soundcard
2316 to the configuration file.
2317
2318-\fIrestore\fP loads driver state for the selected soundcard from the
2319+.SS restore <card>
2320+
2321+This command loads driver state for the selected soundcard from the
2322 configuration file. If restoring fails (eventually partly), the init
2323 action is called.
2324
2325-\fInrestore\fP is like \fIrestore\fP, but it notifies also the daemon
2326+.SS nrestore <card>
2327+
2328+This command is like \fIrestore\fP, but it notifies also the daemon
2329 to do new rescan for available soundcards.
2330
2331-\fIinit\fP tries to initialize all devices to a default state. If device
2332+.SS init <card>
2333+
2334+This command tries to initialize all devices to a default state. If device
2335 is not known, error code 99 is returned.
2336
2337-\fIdaemon\fP manages to save periodically the sound state.
2338+.SS daemon
2339+
2340+This command manages to save periodically the sound state.
2341+
2342+.SS rdaemon
2343+
2344+This command is like \fIdaemon\fP but restore the sound state at first.
2345
2346-\fIrdaemon\fP like \fIdaemon\fP but restore the sound state at first.
2347+.SS kill <cmd>
2348
2349-\fIkill\fP notifies the daemon to do the specified operation (quit,
2350+This command notifies the daemon to do the specified operation (quit,
2351 rescan, save_and_quit).
2352
2353-\fImonitor\fP is for monitoring the events received from the given
2354+.SS monitor <card>
2355+
2356+This command is for monitoring the events received from the given
2357 control device.
2358
2359-If no soundcards are specified, setup for all cards will be saved,
2360-loaded or monitored.
2361+.SS clean <card> [filter]
2362+
2363+This command cleans the controls created by applications.
2364+
2365+The optional element identifiers are accepted as a filter. One extra
2366+argument is parsed as an element identifiers.
2367+
2368+\fIExample:\fP alsactl clean 0 "name='PCM'" "name='Mic Phantom'"
2369+
2370+.SS dump-state
2371+
2372+This command dumps the current state (all cards) to stdout.
2373+
2374+.SS dump-cfg
2375+
2376+This command dumps the current configuration (all cards) to stdout.
2377+Note that the configuration hooks are evaluated.
2378
2379 .SH OPTIONS
2380
2381@@ -61,6 +99,10 @@ Print alsactl version number.
2382 Select the configuration file to use. The default is /var/lib/alsa/asound.state.
2383
2384 .TP
2385+\fI\-a, \-\-config-dir\fP
2386+Select the boot / hotplug ALSA configuration directory to use. The default is /var/lib/alsa.
2387+
2388+.TP
2389 \fI\-l, \-\-lock\fP
2390 Use the file locking to serialize the concurrent access to the state file (this
2391 option is default for the global state file).
2392@@ -81,7 +123,7 @@ as much as possible. This option is set as default now.
2393
2394 .TP
2395 \fI\-g, \-\-ignore\fP
2396-Used with store and restore commands. Do not show 'No soundcards found'
2397+Used with store, restore and init commands. Do not show 'No soundcards found'
2398 and do not set an error exit code when soundcards are not installed.
2399
2400 .TP
2401diff --git a/alsactl/alsactl.c b/alsactl/alsactl.c
2402index 20ebac1..05738fb 100644
2403--- a/alsactl/alsactl.c
2404+++ b/alsactl/alsactl.c
2405@@ -29,11 +29,13 @@
2406 #include <errno.h>
2407 #include <syslog.h>
2408 #include <sched.h>
2409-#include <alsa/asoundlib.h>
2410 #include "alsactl.h"
2411
2412+#ifndef SYS_ASOUND_DIR
2413+#define SYS_ASOUND_DIR "/var/lib/alsa"
2414+#endif
2415 #ifndef SYS_ASOUNDRC
2416-#define SYS_ASOUNDRC "/var/lib/alsa/asound.state"
2417+#define SYS_ASOUNDRC SYS_ASOUND_DIR "/asound.state"
2418 #endif
2419 #ifndef SYS_PIDFILE
2420 #define SYS_PIDFILE "/var/run/alsactl.pid"
2421@@ -74,6 +76,7 @@ static struct arg args[] = {
2422 { 'v', "version", "print version of this program" },
2423 { HEADER, NULL, "Available state options:" },
2424 { FILEARG | 'f', "file", "configuration file (default " SYS_ASOUNDRC ")" },
2425+{ FILEARG | 'a', "config-dir", "boot / hotplug configuration directory (default " SYS_ASOUND_DIR ")" },
2426 { 'l', "lock", "use file locking to serialize concurrent access" },
2427 { 'L', "no-lock", "do not use file locking to serialize concurrent access" },
2428 { FILEARG | 'O', "lock-state-file", "state lock file path (default " SYS_LOCKFILE ")" },
2429@@ -111,6 +114,9 @@ static struct arg args[] = {
2430 { CARDCMD, "rdaemon", "like daemon but do the state restore at first" },
2431 { KILLCMD, "kill", "notify daemon to quit, rescan or save_and_quit" },
2432 { CARDCMD, "monitor", "monitor control events" },
2433+{ CARDCMD, "clean", "clean application controls" },
2434+{ EMPCMD, "dump-state", "dump the state (for all cards)" },
2435+{ EMPCMD, "dump-cfg", "dump the configuration (expanded, for all cards)" },
2436 { 0, NULL, NULL }
2437 };
2438
2439@@ -139,7 +145,7 @@ static void help(void)
2440 strcat(buf, "<card>");
2441 else if (sarg & KILLCMD)
2442 strcat(buf, "<cmd>");
2443- printf(" %-8s %-6s %s\n", larg ? larg : "",
2444+ printf(" %-10s %-6s %s\n", larg ? larg : "",
2445 buf, a->comment);
2446 continue;
2447 }
2448@@ -154,6 +160,49 @@ static void help(void)
2449 }
2450 }
2451
2452+static int dump_config_tree(snd_config_t *top)
2453+{
2454+ snd_output_t *out;
2455+ int err;
2456+
2457+ err = snd_output_stdio_attach(&out, stdout, 0);
2458+ if (err < 0)
2459+ return err;
2460+ err = snd_config_save(top, out);
2461+ snd_output_close(out);
2462+ return err;
2463+}
2464+
2465+static int dump_state(const char *file)
2466+{
2467+ snd_config_t *top;
2468+ int err;
2469+
2470+ err = load_configuration(file, &top, NULL);
2471+ if (err < 0)
2472+ return err;
2473+ err = dump_config_tree(top);
2474+ snd_config_delete(top);
2475+ return err;
2476+}
2477+
2478+static int dump_configuration(void)
2479+{
2480+ snd_config_t *top, *cfg2;
2481+ int err;
2482+
2483+ err = snd_config_update_ref(&top);
2484+ if (err < 0)
2485+ return err;
2486+ /* expand cards.* tree */
2487+ err = snd_config_search_definition(top, "cards", "_dummy_", &cfg2);
2488+ if (err >= 0)
2489+ snd_config_delete(cfg2);
2490+ err = dump_config_tree(top);
2491+ snd_config_unref(top);
2492+ return err;
2493+}
2494+
2495 #define NO_NICE (-100000)
2496
2497 static void do_nice(int use_nice, int sched_idle)
2498@@ -182,11 +231,13 @@ int main(int argc, char *argv[])
2499 "/dev/snd/hwC",
2500 NULL
2501 };
2502+ char *cfgdir = SYS_ASOUND_DIR;
2503 char *cfgfile = SYS_ASOUNDRC;
2504 char *initfile = DATADIR "/init/00main";
2505 char *pidfile = SYS_PIDFILE;
2506 char *cardname, ncardname[16];
2507 char *cmd;
2508+ char *const *extra_args;
2509 const char *const *tmp;
2510 int removestate = 0;
2511 int init_fallback = 1; /* new default behavior */
2512@@ -240,6 +291,9 @@ int main(int argc, char *argv[])
2513 case 'f':
2514 cfgfile = optarg;
2515 break;
2516+ case 'a':
2517+ cfgdir = optarg;
2518+ break;
2519 case 'l':
2520 do_lock = 1;
2521 break;
2522@@ -346,6 +400,8 @@ int main(int argc, char *argv[])
2523 }
2524 }
2525
2526+ extra_args = argc - optind > 2 ? argv + optind + 2 : NULL;
2527+
2528 /* the global system file should be always locked */
2529 if (strcmp(cfgfile, SYS_ASOUNDRC) == 0 && do_lock >= 0)
2530 do_lock = 1;
2531@@ -353,7 +409,11 @@ int main(int argc, char *argv[])
2532 /* when running in background, use syslog for reports */
2533 if (background) {
2534 use_syslog = 1;
2535- daemon(0, 0);
2536+ if (daemon(0, 0)) {
2537+ syslog(LOG_INFO, "alsactl " SND_UTIL_VERSION_STR " daemon cannot be started: %s", strerror(errno));
2538+ res = EXIT_FAILURE;
2539+ goto out;
2540+ }
2541 }
2542
2543 cmd = argv[optind];
2544@@ -368,7 +428,7 @@ int main(int argc, char *argv[])
2545 snd_lib_error_set_handler(error_handler);
2546
2547 if (!strcmp(cmd, "init")) {
2548- res = init(initfile, initflags, cardname);
2549+ res = init(cfgdir, initfile, initflags | FLAG_UCM_FBOOT | FLAG_UCM_BOOT, cardname);
2550 snd_config_update_free_global();
2551 } else if (!strcmp(cmd, "store")) {
2552 res = save_state(cfgfile, cardname);
2553@@ -377,7 +437,7 @@ int main(int argc, char *argv[])
2554 !strcmp(cmd, "nrestore")) {
2555 if (removestate)
2556 remove(statefile);
2557- res = load_state(cfgfile, initfile, initflags, cardname, init_fallback);
2558+ res = load_state(cfgdir, cfgfile, initfile, initflags, cardname, init_fallback);
2559 if (!strcmp(cmd, "rdaemon")) {
2560 do_nice(use_nice, sched_idle);
2561 res = state_daemon(cfgfile, cardname, period, pidfile);
2562@@ -391,6 +451,12 @@ int main(int argc, char *argv[])
2563 res = state_daemon_kill(pidfile, cardname);
2564 } else if (!strcmp(cmd, "monitor")) {
2565 res = monitor(cardname);
2566+ } else if (!strcmp(cmd, "clean")) {
2567+ res = clean(cardname, extra_args);
2568+ } else if (!strcmp(cmd, "dump-state")) {
2569+ res = dump_state(cfgfile);
2570+ } else if (!strcmp(cmd, "dump-cfg")) {
2571+ res = dump_configuration();
2572 } else {
2573 fprintf(stderr, "alsactl: Unknown command '%s'...\n", cmd);
2574 res = -ENODEV;
2575diff --git a/alsactl/alsactl.h b/alsactl/alsactl.h
2576index c478695..bbdf6c8 100644
2577--- a/alsactl/alsactl.h
2578+++ b/alsactl/alsactl.h
2579@@ -1,3 +1,6 @@
2580+#include <stdbool.h>
2581+#include <alsa/asoundlib.h>
2582+
2583 extern int debugflag;
2584 extern int force_restore;
2585 extern int ignore_nocards;
2586@@ -7,6 +10,13 @@ extern char *command;
2587 extern char *statefile;
2588 extern char *lockfile;
2589
2590+struct snd_card_iterator {
2591+ int card;
2592+ char name[16];
2593+ bool single;
2594+ bool first;
2595+};
2596+
2597 void info_(const char *fcn, long line, const char *fmt, ...);
2598 void error_(const char *fcn, long line, const char *fmt, ...);
2599 void cerror_(const char *fcn, long line, int cond, const char *fmt, ...);
2600@@ -26,20 +36,31 @@ void error_handler(const char *file, int line, const char *function, int err, co
2601 #endif
2602
2603 #define FLAG_UCM_DISABLED (1<<0)
2604-#define FLAG_UCM_DEFAULTS (1<<1)
2605+#define FLAG_UCM_FBOOT (1<<1)
2606+#define FLAG_UCM_BOOT (1<<2)
2607+#define FLAG_UCM_DEFAULTS (1<<3)
2608+
2609+void snd_card_iterator_init(struct snd_card_iterator *iter, int cardno);
2610+int snd_card_iterator_sinit(struct snd_card_iterator *iter, const char *cardname);
2611+const char *snd_card_iterator_next(struct snd_card_iterator *iter);
2612+int snd_card_iterator_error(struct snd_card_iterator *iter);
2613
2614-int init(const char *file, int flags, const char *cardname);
2615+int load_configuration(const char *file, snd_config_t **top, int *open_failed);
2616+int init(const char *cfgdir, const char *file, int flags, const char *cardname);
2617 int init_ucm(int flags, int cardno);
2618 int state_lock(const char *file, int timeout);
2619 int state_unlock(int fd, const char *file);
2620 int save_state(const char *file, const char *cardname);
2621-int load_state(const char *file, const char *initfile, int initflags,
2622+int load_state(const char *cfgdir, const char *file,
2623+ const char *initfile, int initflags,
2624 const char *cardname, int do_init);
2625 int power(const char *argv[], int argc);
2626 int monitor(const char *name);
2627 int state_daemon(const char *file, const char *cardname, int period,
2628 const char *pidfile);
2629 int state_daemon_kill(const char *pidfile, const char *cmd);
2630+int clean(const char *cardname, char *const *extra_args);
2631+int snd_card_clean_cfgdir(const char *cfgdir, int cardno);
2632
2633 /* utils */
2634
2635diff --git a/alsactl/clean.c b/alsactl/clean.c
2636new file mode 100644
2637index 0000000..1eb82c0
2638--- /dev/null
2639+++ b/alsactl/clean.c
2640@@ -0,0 +1,196 @@
2641+/*
2642+ * Advanced Linux Sound Architecture Control Program
2643+ * Copyright (c) by Jaroslav Kysela <perex@perex.cz>
2644+ *
2645+ *
2646+ * This program is free software; you can redistribute it and/or modify
2647+ * it under the terms of the GNU General Public License as published by
2648+ * the Free Software Foundation; either version 2 of the License, or
2649+ * (at your option) any later version.
2650+ *
2651+ * This program is distributed in the hope that it will be useful,
2652+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2653+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2654+ * GNU General Public License for more details.
2655+ *
2656+ * You should have received a copy of the GNU General Public License
2657+ * along with this program; if not, write to the Free Software
2658+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2659+ *
2660+ */
2661+
2662+#include "aconfig.h"
2663+#include "version.h"
2664+#include <getopt.h>
2665+#include <stdarg.h>
2666+#include <stdio.h>
2667+#include <assert.h>
2668+#include <errno.h>
2669+#include "alsactl.h"
2670+
2671+static int clean_one_control(snd_ctl_t *handle, snd_ctl_elem_id_t *elem_id,
2672+ snd_ctl_elem_id_t **filter)
2673+{
2674+ snd_ctl_elem_info_t *info;
2675+ char *s;
2676+ int err;
2677+
2678+ snd_ctl_elem_info_alloca(&info);
2679+ snd_ctl_elem_info_set_id(info, elem_id);
2680+ err = snd_ctl_elem_info(handle, info);
2681+ if (err < 0) {
2682+ s = snd_ctl_ascii_elem_id_get(elem_id);
2683+ error("Cannot read control info '%s': %s", s, snd_strerror(err));
2684+ free(s);
2685+ return err;
2686+ }
2687+
2688+ if (!snd_ctl_elem_info_is_user(info))
2689+ return 0;
2690+
2691+ s = snd_ctl_ascii_elem_id_get(elem_id);
2692+ dbg("Application control \"%s\" found.", s);
2693+ if (filter) {
2694+ for (; *filter; filter++) {
2695+ if (snd_ctl_elem_id_compare_set(elem_id, *filter) == 0)
2696+ break;
2697+ }
2698+ if (*filter == NULL) {
2699+ free(s);
2700+ return 0;
2701+ }
2702+ }
2703+
2704+ err = snd_ctl_elem_remove(handle, elem_id);
2705+ if (err < 0) {
2706+ error("Cannot remove control '%s': %s", s, snd_strerror(err));
2707+ free(s);
2708+ return err;
2709+ }
2710+ dbg("Application control \"%s\" removed.", s);
2711+ free(s);
2712+ return 0;
2713+}
2714+
2715+static void filter_controls_free(snd_ctl_elem_id_t **_filter)
2716+{
2717+ snd_ctl_elem_id_t **filter;
2718+
2719+ for (filter = _filter; filter; filter++)
2720+ free(*filter);
2721+ free(_filter);
2722+}
2723+
2724+static int filter_controls_parse(char *const *controls, snd_ctl_elem_id_t ***_filter)
2725+{
2726+ snd_ctl_elem_id_t **filter = NULL;
2727+ char *const *c;
2728+ char *s;
2729+ unsigned int count, idx;
2730+ int err;
2731+
2732+ if (!controls)
2733+ goto fin;
2734+ for (count = 0, c = controls; *c; c++, count++);
2735+ if (count == 0)
2736+ goto fin;
2737+ filter = calloc(count + 1, sizeof(snd_ctl_elem_id_t *));
2738+ if (filter == NULL) {
2739+nomem:
2740+ error("No enough memory...");
2741+ return -ENOMEM;
2742+ }
2743+ filter[count] = NULL;
2744+ for (idx = 0; idx < count; idx++) {
2745+ err = snd_ctl_elem_id_malloc(&filter[idx]);
2746+ if (err < 0) {
2747+ filter_controls_free(filter);
2748+ goto nomem;
2749+ }
2750+ err = snd_ctl_ascii_elem_id_parse(filter[idx], controls[idx]);
2751+ if (err < 0) {
2752+ error("Cannot parse id '%s': %s", controls[idx], snd_strerror(err));
2753+ filter_controls_free(filter);
2754+ return err;
2755+ }
2756+ s = snd_ctl_ascii_elem_id_get(filter[idx]);
2757+ dbg("Add to filter: \"%s\"", s);
2758+ free(s);
2759+ }
2760+fin:
2761+ *_filter = filter;
2762+ return 0;
2763+}
2764+
2765+static int clean_controls(int cardno, char *const *controls)
2766+{
2767+ snd_ctl_t *handle;
2768+ snd_ctl_elem_list_t *list;
2769+ snd_ctl_elem_id_t *elem_id;
2770+ snd_ctl_elem_id_t **filter;
2771+ char name[32];
2772+ unsigned int idx, count;
2773+ int err;
2774+
2775+ snd_ctl_elem_id_alloca(&elem_id);
2776+ snd_ctl_elem_list_alloca(&list);
2777+
2778+ err = filter_controls_parse(controls, &filter);
2779+ if (err < 0)
2780+ return err;
2781+
2782+ sprintf(name, "hw:%d", cardno);
2783+ err = snd_ctl_open(&handle, name, 0);
2784+ if (err < 0) {
2785+ error("snd_ctl_open error: %s", snd_strerror(err));
2786+ filter_controls_free(filter);
2787+ return err;
2788+ }
2789+ dbg("Control device '%s' opened.", name);
2790+ err = snd_ctl_elem_list(handle, list);
2791+ if (err < 0) {
2792+ error("Cannot determine controls: %s", snd_strerror(err));
2793+ goto fin_err;
2794+ }
2795+ count = snd_ctl_elem_list_get_count(list);
2796+ if (count == 0)
2797+ goto fin_ok;
2798+ snd_ctl_elem_list_set_offset(list, 0);
2799+ if ((err = snd_ctl_elem_list_alloc_space(list, count)) < 0) {
2800+ error("No enough memory...");
2801+ goto fin_err;
2802+ }
2803+ if ((err = snd_ctl_elem_list(handle, list)) < 0) {
2804+ error("Cannot determine controls (2): %s", snd_strerror(err));
2805+ goto fin_err;
2806+ }
2807+ for (idx = 0; idx < count; idx++) {
2808+ snd_ctl_elem_list_get_id(list, idx, elem_id);
2809+ err = clean_one_control(handle, elem_id, filter);
2810+ if (err < 0)
2811+ goto fin_err;
2812+ }
2813+fin_ok:
2814+ filter_controls_free(filter);
2815+ snd_ctl_close(handle);
2816+ return 0;
2817+fin_err:
2818+ filter_controls_free(filter);
2819+ snd_ctl_close(handle);
2820+ return err;
2821+}
2822+
2823+int clean(const char *cardname, char *const *extra_args)
2824+{
2825+ struct snd_card_iterator iter;
2826+ int err;
2827+
2828+ err = snd_card_iterator_sinit(&iter, cardname);
2829+ if (err < 0)
2830+ return err;
2831+ while (snd_card_iterator_next(&iter)) {
2832+ if ((err = clean_controls(iter.card, extra_args)))
2833+ return err;
2834+ }
2835+ return snd_card_iterator_error(&iter);
2836+}
2837diff --git a/alsactl/daemon.c b/alsactl/daemon.c
2838index 65f7ac1..5109015 100644
2839--- a/alsactl/daemon.c
2840+++ b/alsactl/daemon.c
2841@@ -29,7 +29,6 @@
2842 #include <signal.h>
2843 #include <time.h>
2844 #include <poll.h>
2845-#include <alsa/asoundlib.h>
2846 #include "alsactl.h"
2847
2848 struct id_list {
2849@@ -284,7 +283,7 @@ static long read_pid_file(const char *pidfile)
2850 err = err < 0 ? -errno : -EIO;
2851 close(fd);
2852 pid_txt[11] = '\0';
2853- return atol(pid_txt);
2854+ return err < 0 ? err : atol(pid_txt);
2855 } else {
2856 return -errno;
2857 }
2858diff --git a/alsactl/init/Makefile.in b/alsactl/init/Makefile.in
2859index 2a4e3ec..3dac625 100644
2860--- a/alsactl/init/Makefile.in
2861+++ b/alsactl/init/Makefile.in
2862@@ -1,7 +1,7 @@
2863-# Makefile.in generated by automake 1.16.1 from Makefile.am.
2864+# Makefile.in generated by automake 1.16.2 from Makefile.am.
2865 # @configure_input@
2866
2867-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
2868+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
2869
2870 # This Makefile.in is free software; the Free Software Foundation
2871 # gives unlimited permission to copy and/or distribute it,
2872@@ -91,7 +91,8 @@ host_triplet = @host@
2873 subdir = alsactl/init
2874 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
2875 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
2876- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
2877+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
2878+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
2879 $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
2880 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
2881 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
2882@@ -212,8 +213,8 @@ MAINT = @MAINT@
2883 MAKEINFO = @MAKEINFO@
2884 MKDIR_P = @MKDIR_P@
2885 MSGFMT = @MSGFMT@
2886-MSGFMT_015 = @MSGFMT_015@
2887 MSGMERGE = @MSGMERGE@
2888+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
2889 NCURSESW_CFLAGS = @NCURSESW_CFLAGS@
2890 NCURSESW_LIBS = @NCURSESW_LIBS@
2891 NCURSES_CFLAGS = @NCURSES_CFLAGS@
2892@@ -293,6 +294,7 @@ prefix = @prefix@
2893 program_transform_name = @program_transform_name@
2894 psdir = @psdir@
2895 rst2man_available = @rst2man_available@
2896+runstatedir = @runstatedir@
2897 sbindir = @sbindir@
2898 sharedstatedir = @sharedstatedir@
2899 srcdir = @srcdir@
2900diff --git a/alsactl/init_parse.c b/alsactl/init_parse.c
2901index ee9cc6d..e439de7 100644
2902--- a/alsactl/init_parse.c
2903+++ b/alsactl/init_parse.c
2904@@ -37,7 +37,6 @@
2905 #include <sys/types.h>
2906 #include <dirent.h>
2907 #include <math.h>
2908-#include <alsa/asoundlib.h>
2909 #include "aconfig.h"
2910 #include "alsactl.h"
2911 #include "list.h"
2912@@ -465,12 +464,13 @@ static int set_ctl_value(struct space *space, const char *value, int all)
2913 return -EINVAL;
2914 }
2915 for (idx = 0; idx < count; idx += 2) {
2916- val = hextodigit(*(value++)) << 4;
2917- val |= hextodigit(*(value++));
2918- if (val > 255) {
2919+ int nibble1 = hextodigit(*(value++));
2920+ int nibble2 = hextodigit(*(value++));
2921+ if (nibble1 < 0 || nibble2 < 0) {
2922 Perror(space, "bad ctl hexa value");
2923 return -EINVAL;
2924 }
2925+ val = (nibble1 << 4) | nibble2;
2926 snd_ctl_elem_value_set_byte(space->ctl_value, idx, val);
2927 }
2928 break;
2929@@ -1700,6 +1700,7 @@ static int parse(struct space *space, const char *filename)
2930
2931 if (count > linesize - 1) {
2932 free(line);
2933+ line = NULL;
2934 linesize = (count + 127 + 1) & ~127;
2935 if (linesize > 2048) {
2936 error("file %s, line %i too long", filename, linenum);
2937@@ -1742,68 +1743,44 @@ static int parse(struct space *space, const char *filename)
2938 return err ? err : -abs(space->exit_code);
2939 }
2940
2941-int init(const char *filename, int flags, const char *cardname)
2942+int init(const char *cfgdir, const char *filename, int flags, const char *cardname)
2943 {
2944 struct space *space;
2945- int err = 0, lasterr = 0, card, first;
2946+ struct snd_card_iterator iter;
2947+ int err = 0, lasterr = 0;
2948
2949 sysfs_init();
2950- if (!cardname) {
2951- first = 1;
2952- card = -1;
2953- while (1) {
2954- if (snd_card_next(&card) < 0)
2955- break;
2956- if (card < 0) {
2957- if (first) {
2958- error("No soundcards found...");
2959- return -ENODEV;
2960- }
2961- break;
2962- }
2963- first = 0;
2964- if (!(flags & FLAG_UCM_DISABLED)) {
2965- err = init_ucm(flags, card);
2966- if (err == 0)
2967- continue;
2968- }
2969- err = init_space(&space, card);
2970- if (err == 0) {
2971- space->rootdir = new_root_dir(filename);
2972- if (space->rootdir != NULL)
2973- err = parse(space, filename);
2974- if (err <= -99) { /* non-fatal errors */
2975- if (lasterr == 0)
2976- lasterr = err;
2977- err = 0;
2978- }
2979- free_space(space);
2980- }
2981- if (err < 0)
2982- break;
2983- }
2984- err = lasterr;
2985- } else {
2986- card = snd_card_get_index(cardname);
2987- if (card < 0) {
2988- error("Cannot find soundcard '%s'...", cardname);
2989- goto error;
2990- }
2991- if (!(flags & FLAG_UCM_DISABLED)) {
2992- err = init_ucm(flags, card);
2993- if (err == 0)
2994- return 0;
2995+ err = snd_card_iterator_sinit(&iter, cardname);
2996+ if (err < 0)
2997+ goto out;
2998+ while (snd_card_iterator_next(&iter)) {
2999+ err = snd_card_clean_cfgdir(cfgdir, iter.card);
3000+ if (err < 0) {
3001+ if (lasterr == 0)
3002+ lasterr = err;
3003+ continue;
3004 }
3005- memset(&space, 0, sizeof(space));
3006- err = init_space(&space, card);
3007- if (err == 0) {
3008- space->rootdir = new_root_dir(filename);
3009- if (space->rootdir != NULL)
3010- err = parse(space, filename);
3011- free_space(space);
3012+ err = init_ucm(flags, iter.card);
3013+ if (err == 0)
3014+ continue;
3015+ err = init_space(&space, iter.card);
3016+ if (err != 0)
3017+ continue;
3018+ space->rootdir = new_root_dir(filename);
3019+ if (space->rootdir != NULL) {
3020+ err = parse(space, filename);
3021+ if (!cardname && err <= -99) { /* non-fatal errors */
3022+ if (lasterr == 0)
3023+ lasterr = err;
3024+ err = 0;
3025+ }
3026 }
3027+ free_space(space);
3028+ if (err < 0)
3029+ goto out;
3030 }
3031- error:
3032+ err = lasterr ? lasterr : snd_card_iterator_error(&iter);
3033+out:
3034 sysfs_cleanup();
3035 return err;
3036 }
3037diff --git a/alsactl/init_ucm.c b/alsactl/init_ucm.c
3038index 6468c9d..b326601 100644
3039--- a/alsactl/init_ucm.c
3040+++ b/alsactl/init_ucm.c
3041@@ -28,7 +28,8 @@
3042 #include <alsa/use-case.h>
3043
3044 /*
3045- * Keep it as simple as possible. Execute commands from the SectionOnce only.
3046+ * Keep it as simple as possible. Execute commands from the
3047+ * FixedBootSequence and BootSequence only.
3048 */
3049 int init_ucm(int flags, int cardno)
3050 {
3051@@ -36,17 +37,27 @@ int init_ucm(int flags, int cardno)
3052 char id[32];
3053 int err;
3054
3055+ if (flags & FLAG_UCM_DISABLED)
3056+ return -ENXIO;
3057+
3058 snprintf(id, sizeof(id), "hw:%d", cardno);
3059 err = snd_use_case_mgr_open(&uc_mgr, id);
3060 if (err < 0)
3061 return err;
3062- err = snd_use_case_set(uc_mgr, "_boot", NULL);
3063- if (err < 0)
3064- goto _error;
3065- if ((flags & FLAG_UCM_DEFAULTS) != 0) {
3066- err = snd_use_case_set(uc_mgr, "_defaults", NULL);
3067+ if (flags & FLAG_UCM_FBOOT) {
3068+ err = snd_use_case_set(uc_mgr, "_fboot", NULL);
3069+ if (err == -ENOENT && (flags & FLAG_UCM_BOOT) != 0) {
3070+ /* nothing */
3071+ } else if (err < 0) {
3072+ goto _error;
3073+ }
3074+ }
3075+ if (flags & FLAG_UCM_BOOT) {
3076+ err = snd_use_case_set(uc_mgr, "_boot", NULL);
3077 if (err < 0)
3078 goto _error;
3079+ if ((flags & FLAG_UCM_DEFAULTS) != 0)
3080+ err = snd_use_case_set(uc_mgr, "_defaults", NULL);
3081 }
3082 _error:
3083 snd_use_case_mgr_close(uc_mgr);
3084@@ -57,7 +68,7 @@ _error:
3085
3086 int init_ucm(int flags, int cardno)
3087 {
3088- return 0;
3089+ return -ENXIO;
3090 }
3091
3092 #endif
3093diff --git a/alsactl/lock.c b/alsactl/lock.c
3094index 4a48539..5b47462 100644
3095--- a/alsactl/lock.c
3096+++ b/alsactl/lock.c
3097@@ -63,11 +63,15 @@ static int state_lock_(const char *file, int lock, int timeout, int _fd)
3098 if (fd < 0) {
3099 if (errno == EBUSY || errno == EAGAIN) {
3100 sleep(1);
3101- timeout--;
3102- } else {
3103- err = -errno;
3104- goto out;
3105+ continue;
3106 }
3107+ if (errno == EEXIST) {
3108+ fd = open(nfile, O_RDWR);
3109+ if (fd >= 0)
3110+ break;
3111+ }
3112+ err = -errno;
3113+ goto out;
3114 }
3115 }
3116 }
3117diff --git a/alsactl/monitor.c b/alsactl/monitor.c
3118index fa6cd85..4c02557 100644
3119--- a/alsactl/monitor.c
3120+++ b/alsactl/monitor.c
3121@@ -28,11 +28,12 @@
3122 #include <time.h>
3123 #include <signal.h>
3124 #include <sys/signalfd.h>
3125-#include <alsa/asoundlib.h>
3126
3127 #include <stddef.h>
3128 #include "list.h"
3129
3130+#include "alsactl.h"
3131+
3132 struct src_entry {
3133 snd_ctl_t *handle;
3134 char *name;
3135@@ -40,29 +41,6 @@ struct src_entry {
3136 struct list_head list;
3137 };
3138
3139-struct snd_card_iterator {
3140- int card;
3141- char name[16];
3142-};
3143-
3144-void snd_card_iterator_init(struct snd_card_iterator *iter)
3145-{
3146- iter->card = -1;
3147- memset(iter->name, 0, sizeof(iter->name));
3148-}
3149-
3150-static const char *snd_card_iterator_next(struct snd_card_iterator *iter)
3151-{
3152- if (snd_card_next(&iter->card) < 0)
3153- return NULL;
3154- if (iter->card < 0)
3155- return NULL;
3156-
3157- snprintf(iter->name, sizeof(iter->name), "hw:%d", iter->card);
3158-
3159- return (const char *)iter->name;
3160-}
3161-
3162 static void remove_source_entry(struct src_entry *entry)
3163 {
3164 list_del(&entry->list);
3165@@ -159,7 +137,7 @@ static int prepare_source_entry(struct list_head *srcs, const char *name)
3166 struct snd_card_iterator iter;
3167 const char *cardname;
3168
3169- snd_card_iterator_init(&iter);
3170+ snd_card_iterator_init(&iter, -1);
3171 while ((cardname = snd_card_iterator_next(&iter))) {
3172 if (seek_entry_by_name(srcs, cardname))
3173 continue;
3174diff --git a/alsactl/state.c b/alsactl/state.c
3175index ea1d3bc..adbd13f 100644
3176--- a/alsactl/state.c
3177+++ b/alsactl/state.c
3178@@ -27,7 +27,6 @@
3179 #include <stdio.h>
3180 #include <assert.h>
3181 #include <errno.h>
3182-#include <alsa/asoundlib.h>
3183 #include "alsactl.h"
3184
3185
3186@@ -230,7 +229,7 @@ static int get_control(snd_ctl_t *handle, snd_ctl_elem_id_t *id, snd_config_t *t
3187 {
3188 snd_ctl_elem_value_t *ctl;
3189 snd_ctl_elem_info_t *info;
3190- snd_config_t *control, *comment, *item, *value;
3191+ snd_config_t *control, *comment, *item = NULL, *value;
3192 const char *s;
3193 char buf[256];
3194 unsigned int idx;
3195@@ -656,13 +655,16 @@ static long config_iface(snd_config_t *n)
3196 const char *str;
3197 switch (snd_config_get_type(n)) {
3198 case SND_CONFIG_TYPE_INTEGER:
3199- snd_config_get_integer(n, &i);
3200+ if (snd_config_get_integer(n, &i) < 0)
3201+ return -1;
3202 return i;
3203 case SND_CONFIG_TYPE_INTEGER64:
3204- snd_config_get_integer64(n, &li);
3205+ if (snd_config_get_integer64(n, &li) < 0)
3206+ return -1;
3207 return li;
3208 case SND_CONFIG_TYPE_STRING:
3209- snd_config_get_string(n, &str);
3210+ if (snd_config_get_string(n, &str) < 0)
3211+ return -1;
3212 break;
3213 default:
3214 return -1;
3215@@ -682,17 +684,20 @@ static int config_bool(snd_config_t *n, int doit)
3216
3217 switch (snd_config_get_type(n)) {
3218 case SND_CONFIG_TYPE_INTEGER:
3219- snd_config_get_integer(n, &val);
3220+ if (snd_config_get_integer(n, &val) < 0)
3221+ return -1;
3222 if (val < 0 || val > 1)
3223 return -1;
3224 return val;
3225 case SND_CONFIG_TYPE_INTEGER64:
3226- snd_config_get_integer64(n, &lval);
3227+ if (snd_config_get_integer64(n, &lval) < 0)
3228+ return -1;
3229 if (lval < 0 || lval > 1)
3230 return -1;
3231 return (int) lval;
3232 case SND_CONFIG_TYPE_STRING:
3233- snd_config_get_string(n, &str);
3234+ if (snd_config_get_string(n, &str) < 0)
3235+ return -1;
3236 break;
3237 case SND_CONFIG_TYPE_COMPOUND:
3238 if (!force_restore || !doit)
3239@@ -719,13 +724,16 @@ static int config_enumerated(snd_config_t *n, snd_ctl_t *handle,
3240
3241 switch (snd_config_get_type(n)) {
3242 case SND_CONFIG_TYPE_INTEGER:
3243- snd_config_get_integer(n, &val);
3244+ if (snd_config_get_integer(n, &val) < 0)
3245+ return -1;
3246 return val;
3247 case SND_CONFIG_TYPE_INTEGER64:
3248- snd_config_get_integer64(n, &lval);
3249+ if (snd_config_get_integer64(n, &lval) < 0)
3250+ return -1;
3251 return (int) lval;
3252 case SND_CONFIG_TYPE_STRING:
3253- snd_config_get_string(n, &str);
3254+ if (snd_config_get_string(n, &str) < 0)
3255+ return -1;
3256 break;
3257 case SND_CONFIG_TYPE_COMPOUND:
3258 if (!force_restore || !doit)
3259@@ -1248,6 +1256,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control,
3260 }
3261 if (strcmp(fld, "iface") == 0) {
3262 iface = (snd_ctl_elem_iface_t)config_iface(n);
3263+ if (iface < 0)
3264+ return -EINVAL;
3265 continue;
3266 }
3267 if (strcmp(fld, "device") == 0) {
3268@@ -1255,7 +1265,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control,
3269 cerror(doit, "control.%d.%s is invalid", numid, fld);
3270 return -EINVAL;
3271 }
3272- snd_config_get_integer(n, &device);
3273+ if (snd_config_get_integer(n, &device) < 0)
3274+ return -EINVAL;
3275 continue;
3276 }
3277 if (strcmp(fld, "subdevice") == 0) {
3278@@ -1263,7 +1274,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control,
3279 cerror(doit, "control.%d.%s is invalid", numid, fld);
3280 return -EINVAL;
3281 }
3282- snd_config_get_integer(n, &subdevice);
3283+ if (snd_config_get_integer(n, &subdevice) < 0)
3284+ return -EINVAL;
3285 continue;
3286 }
3287 if (strcmp(fld, "name") == 0) {
3288@@ -1271,7 +1283,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control,
3289 cerror(doit, "control.%d.%s is invalid", numid, fld);
3290 return -EINVAL;
3291 }
3292- snd_config_get_string(n, &name);
3293+ if (snd_config_get_string(n, &name) < 0)
3294+ return -EINVAL;
3295 continue;
3296 }
3297 if (strcmp(fld, "index") == 0) {
3298@@ -1279,7 +1292,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control,
3299 cerror(doit, "control.%d.%s is invalid", numid, fld);
3300 return -EINVAL;
3301 }
3302- snd_config_get_integer(n, &index);
3303+ if (snd_config_get_integer(n, &index) < 0)
3304+ return -EINVAL;
3305 continue;
3306 }
3307 if (strcmp(fld, "value") == 0) {
3308@@ -1545,6 +1559,7 @@ int save_state(const char *file, const char *cardname)
3309 int stdio;
3310 char *nfile = NULL;
3311 int lock_fd = -EINVAL;
3312+ struct snd_card_iterator iter;
3313
3314 err = snd_config_top(&config);
3315 if (err < 0) {
3316@@ -1578,45 +1593,18 @@ int save_state(const char *file, const char *cardname)
3317 #endif
3318 }
3319
3320- if (!cardname) {
3321- int card, first = 1;
3322-
3323- card = -1;
3324- /* find each installed soundcards */
3325- while (1) {
3326- if (snd_card_next(&card) < 0)
3327- break;
3328- if (card < 0) {
3329- if (first) {
3330- if (ignore_nocards) {
3331- err = 0;
3332- goto out;
3333- } else {
3334- error("No soundcards found...");
3335- err = -ENODEV;
3336- goto out;
3337- }
3338- }
3339- break;
3340- }
3341- first = 0;
3342- if ((err = get_controls(card, config)))
3343- goto out;
3344- }
3345- } else {
3346- int cardno;
3347-
3348- cardno = snd_card_get_index(cardname);
3349- if (cardno < 0) {
3350- error("Cannot find soundcard '%s'...", cardname);
3351- err = cardno;
3352- goto out;
3353- }
3354- if ((err = get_controls(cardno, config))) {
3355+ err = snd_card_iterator_sinit(&iter, cardname);
3356+ if (err < 0)
3357+ goto out;
3358+ while (snd_card_iterator_next(&iter)) {
3359+ if ((err = get_controls(iter.card, config)))
3360 goto out;
3361- }
3362 }
3363-
3364+ if (iter.first) {
3365+ err = snd_card_iterator_error(&iter);
3366+ goto out;
3367+ }
3368+
3369 if (stdio) {
3370 err = snd_output_stdio_attach(&out, stdout, 0);
3371 } else {
3372@@ -1645,142 +1633,67 @@ out:
3373 return err;
3374 }
3375
3376-int load_state(const char *file, const char *initfile, int initflags,
3377+int load_state(const char *cfgdir, const char *file,
3378+ const char *initfile, int initflags,
3379 const char *cardname, int do_init)
3380 {
3381- int err, finalerr = 0;
3382+ int err, finalerr = 0, open_failed;
3383+ struct snd_card_iterator iter;
3384 snd_config_t *config;
3385- snd_input_t *in;
3386- int stdio, lock_fd = -EINVAL;
3387+ const char *cardname1;
3388
3389- err = snd_config_top(&config);
3390- if (err < 0) {
3391- error("snd_config_top error: %s", snd_strerror(err));
3392+ config = NULL;
3393+ err = load_configuration(file, &config, &open_failed);
3394+ if (err < 0 && !open_failed)
3395 return err;
3396- }
3397- stdio = !strcmp(file, "-");
3398- if (stdio) {
3399- err = snd_input_stdio_attach(&in, stdin, 0);
3400- } else {
3401- lock_fd = state_lock(file, 10);
3402- err = lock_fd >= 0 ? snd_input_stdio_open(&in, file, "r") : lock_fd;
3403- }
3404- if (err >= 0) {
3405- err = snd_config_load(config, in);
3406- snd_input_close(in);
3407- if (lock_fd >= 0)
3408- state_unlock(lock_fd, file);
3409- if (err < 0) {
3410- error("snd_config_load error: %s", snd_strerror(err));
3411- goto out;
3412- }
3413- } else {
3414- int card, first = 1;
3415- char cardname1[16];
3416
3417- if (lock_fd >= 0)
3418- state_unlock(lock_fd, file);
3419+ if (open_failed) {
3420 error("Cannot open %s for reading: %s", file, snd_strerror(err));
3421 finalerr = err;
3422- if (cardname) {
3423- card = snd_card_get_index(cardname);
3424- if (card < 0) {
3425- error("Cannot find soundcard '%s'...", cardname);
3426- err = -ENODEV;
3427- goto out;
3428- }
3429- goto single;
3430- } else {
3431- card = -1;
3432- }
3433- /* find each installed soundcards */
3434- while (!cardname) {
3435- if (snd_card_next(&card) < 0)
3436- break;
3437- if (card < 0)
3438- break;
3439-single:
3440- first = 0;
3441+
3442+ err = snd_card_iterator_sinit(&iter, cardname);
3443+ if (err < 0)
3444+ return err;
3445+ while ((cardname1 = snd_card_iterator_next(&iter)) != NULL) {
3446 if (!do_init)
3447 break;
3448- sprintf(cardname1, "%i", card);
3449- err = init(initfile, initflags, cardname1);
3450+ err = init(cfgdir, initfile, initflags | FLAG_UCM_FBOOT | FLAG_UCM_BOOT, cardname1);
3451 if (err < 0) {
3452 finalerr = err;
3453- initfailed(card, "init", err);
3454+ initfailed(iter.card, "init", err);
3455 }
3456- initfailed(card, "restore", -ENOENT);
3457+ initfailed(iter.card, "restore", -ENOENT);
3458 }
3459- if (first)
3460- finalerr = 0; /* no cards, no error code */
3461 err = finalerr;
3462+ if (iter.first)
3463+ err = 0; /* no cards, no error code */
3464 goto out;
3465 }
3466
3467- if (!cardname) {
3468- int card, first = 1;
3469- char cardname1[16];
3470-
3471- card = -1;
3472- /* find each installed soundcards */
3473- while (1) {
3474- if (snd_card_next(&card) < 0)
3475- break;
3476- if (card < 0) {
3477- if (first) {
3478- if (ignore_nocards) {
3479- err = 0;
3480- goto out;
3481- } else {
3482- error("No soundcards found...");
3483- err = -ENODEV;
3484- goto out;
3485- }
3486- }
3487- break;
3488- }
3489- first = 0;
3490- /* do a check if controls matches state file */
3491- if (do_init && set_controls(card, config, 0)) {
3492- sprintf(cardname1, "%i", card);
3493- err = init(initfile, initflags, cardname1);
3494- if (err < 0) {
3495- initfailed(card, "init", err);
3496- finalerr = err;
3497- }
3498- }
3499- if ((err = set_controls(card, config, 1))) {
3500- if (!force_restore)
3501- finalerr = err;
3502- initfailed(card, "restore", err);
3503- }
3504- }
3505- } else {
3506- int cardno;
3507-
3508- cardno = snd_card_get_index(cardname);
3509- if (cardno < 0) {
3510- error("Cannot find soundcard '%s'...", cardname);
3511- err = -ENODEV;
3512- goto out;
3513- }
3514+ err = snd_card_iterator_sinit(&iter, cardname);
3515+ if (err < 0)
3516+ goto out;
3517+ while ((cardname1 = snd_card_iterator_next(&iter)) != NULL) {
3518+ /* error is ignored */
3519+ init_ucm(initflags | FLAG_UCM_FBOOT, iter.card);
3520 /* do a check if controls matches state file */
3521- if (do_init && set_controls(cardno, config, 0)) {
3522- err = init(initfile, initflags, cardname);
3523+ if (do_init && set_controls(iter.card, config, 0)) {
3524+ err = init(cfgdir, initfile, initflags | FLAG_UCM_BOOT, cardname1);
3525 if (err < 0) {
3526- initfailed(cardno, "init", err);
3527+ initfailed(iter.card, "init", err);
3528 finalerr = err;
3529 }
3530 }
3531- if ((err = set_controls(cardno, config, 1))) {
3532- initfailed(cardno, "restore", err);
3533+ if ((err = set_controls(iter.card, config, 1))) {
3534 if (!force_restore)
3535- goto out;
3536+ finalerr = err;
3537+ initfailed(iter.card, "restore", err);
3538 }
3539 }
3540- err = finalerr;
3541+ err = finalerr ? finalerr : snd_card_iterator_error(&iter);
3542 out:
3543- snd_config_delete(config);
3544+ if (config)
3545+ snd_config_delete(config);
3546 snd_config_update_free_global();
3547 return err;
3548 }
3549diff --git a/alsactl/utils.c b/alsactl/utils.c
3550index a83aa0a..a507972 100644
3551--- a/alsactl/utils.c
3552+++ b/alsactl/utils.c
3553@@ -30,8 +30,7 @@
3554 #include <syslog.h>
3555 #include <sys/stat.h>
3556 #include <sys/mman.h>
3557-
3558-#include <alsa/asoundlib.h>
3559+#include <limits.h>
3560 #include "alsactl.h"
3561
3562 int file_map(const char *filename, char **buf, size_t *bufsize)
3563@@ -92,12 +91,12 @@ void initfailed(int cardnumber, const char *reason, int exitcode)
3564 return;
3565 sprintf(sexitcode, "%i", exitcode);
3566 fp = open(statefile, O_WRONLY|O_CREAT|O_APPEND, 0644);
3567- write(fp, str, strlen(str));
3568- write(fp, ":", 1);
3569- write(fp, reason, strlen(reason));
3570- write(fp, ":", 1);
3571- write(fp, sexitcode, strlen(sexitcode));
3572- write(fp, "\n", 1);
3573+ (void)write(fp, str, strlen(str));
3574+ (void)write(fp, ":", 1);
3575+ (void)write(fp, reason, strlen(reason));
3576+ (void)write(fp, ":", 1);
3577+ (void)write(fp, sexitcode, strlen(sexitcode));
3578+ (void)write(fp, "\n", 1);
3579 close(fp);
3580 free(str);
3581 }
3582@@ -193,3 +192,143 @@ void error_handler(const char *file, int line, const char *function, int err, co
3583 fprintf(stderr, "alsa-lib %s:%i:(%s) %s%s%s\n", file, line, function,
3584 buf, err ? ": " : "", err ? snd_strerror(err) : "");
3585 }
3586+
3587+int load_configuration(const char *file, snd_config_t **top, int *open_failed)
3588+{
3589+ snd_config_t *config;
3590+ snd_input_t *in;
3591+ int err, stdio_flag, lock_fd = -EINVAL;
3592+
3593+ *top = NULL;
3594+ if (open_failed)
3595+ *open_failed = 0;
3596+ err = snd_config_top(&config);
3597+ if (err < 0) {
3598+ error("snd_config_top error: %s", snd_strerror(err));
3599+ return err;
3600+ }
3601+ stdio_flag = !strcmp(file, "-");
3602+ if (stdio_flag) {
3603+ err = snd_input_stdio_attach(&in, stdin, 0);
3604+ } else {
3605+ lock_fd = state_lock(file, 10);
3606+ err = lock_fd >= 0 ? snd_input_stdio_open(&in, file, "r") : lock_fd;
3607+ }
3608+ if (err < 0) {
3609+ if (open_failed)
3610+ *open_failed = 1;
3611+ goto out;
3612+ }
3613+ err = snd_config_load(config, in);
3614+ snd_input_close(in);
3615+ if (err < 0) {
3616+ error("snd_config_load error: %s", snd_strerror(err));
3617+out:
3618+ if (lock_fd >= 0)
3619+ state_unlock(lock_fd, file);
3620+ snd_config_delete(config);
3621+ snd_config_update_free_global();
3622+ return err;
3623+ } else {
3624+ if (lock_fd >= 0)
3625+ state_unlock(lock_fd, file);
3626+ *top = config;
3627+ return 0;
3628+ }
3629+}
3630+
3631+void snd_card_iterator_init(struct snd_card_iterator *iter, int cardno)
3632+{
3633+ iter->card = cardno;
3634+ iter->single = cardno >= 0;
3635+ iter->first = true;
3636+ iter->name[0] = '\0';
3637+}
3638+
3639+int snd_card_iterator_sinit(struct snd_card_iterator *iter, const char *cardname)
3640+{
3641+ int cardno = -1;
3642+
3643+ if (cardname) {
3644+ if (strncmp(cardname, "hw:", 3) == 0)
3645+ cardname += 3;
3646+ cardno = snd_card_get_index(cardname);
3647+ if (cardno < 0) {
3648+ error("Cannot find soundcard '%s'...", cardname);
3649+ return cardno;
3650+ }
3651+ }
3652+ snd_card_iterator_init(iter, cardno);
3653+ return 0;
3654+}
3655+
3656+const char *snd_card_iterator_next(struct snd_card_iterator *iter)
3657+{
3658+ if (iter->single) {
3659+ if (iter->first) {
3660+ iter->first = false;
3661+ goto retval;
3662+ }
3663+ return NULL;
3664+ }
3665+ if (snd_card_next(&iter->card) < 0) {
3666+ if (!ignore_nocards && iter->first)
3667+ error("No soundcards found...");
3668+ return NULL;
3669+ }
3670+ iter->first = false;
3671+ if (iter->card < 0)
3672+ return NULL;
3673+retval:
3674+ snprintf(iter->name, sizeof(iter->name), "hw:%d", iter->card);
3675+
3676+ return (const char *)iter->name;
3677+}
3678+
3679+int snd_card_iterator_error(struct snd_card_iterator *iter)
3680+{
3681+ return iter->first ? (ignore_nocards ? 0 : -ENODEV) : 0;
3682+}
3683+
3684+static int cleanup_filename_filter(const struct dirent *dirent)
3685+{
3686+ size_t flen;
3687+
3688+ if (dirent == NULL)
3689+ return 0;
3690+ if (dirent->d_type == DT_DIR)
3691+ return 0;
3692+
3693+ flen = strlen(dirent->d_name);
3694+ if (flen <= 5)
3695+ return 0;
3696+
3697+ if (strncmp(&dirent->d_name[flen-5], ".conf", 5) == 0)
3698+ return 1;
3699+
3700+ return 0;
3701+}
3702+
3703+int snd_card_clean_cfgdir(const char *cfgdir, int cardno)
3704+{
3705+ char path[PATH_MAX];
3706+ struct dirent **list;
3707+ int lasterr = 0, n, j;
3708+
3709+ snprintf(path, sizeof(path), "%s/card%d.conf.d", cfgdir, cardno);
3710+ n = scandir(path, &list, cleanup_filename_filter, NULL);
3711+ if (n < 0) {
3712+ if (errno == ENOENT)
3713+ return 0;
3714+ return -errno;
3715+ }
3716+ for (j = 0; j < n; j++) {
3717+ snprintf(path, sizeof(path), "%s/card%d.conf.d/%s", cfgdir, cardno, list[j]->d_name);
3718+ if (remove(path)) {
3719+ error("Unable to remove file '%s'", path);
3720+ lasterr = -errno;
3721+ }
3722+ }
3723+
3724+ return lasterr;
3725+}
3726diff --git a/alsaloop/Makefile.in b/alsaloop/Makefile.in
3727index 9e2c6b5..71c3bdc 100644
3728--- a/alsaloop/Makefile.in
3729+++ b/alsaloop/Makefile.in
3730@@ -1,7 +1,7 @@
3731-# Makefile.in generated by automake 1.16.1 from Makefile.am.
3732+# Makefile.in generated by automake 1.16.2 from Makefile.am.
3733 # @configure_input@
3734
3735-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
3736+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
3737
3738 # This Makefile.in is free software; the Free Software Foundation
3739 # gives unlimited permission to copy and/or distribute it,
3740@@ -94,7 +94,8 @@ bin_PROGRAMS = alsaloop$(EXEEXT)
3741 subdir = alsaloop
3742 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
3743 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
3744- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
3745+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
3746+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
3747 $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
3748 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
3749 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
3750@@ -262,8 +263,8 @@ MAINT = @MAINT@
3751 MAKEINFO = @MAKEINFO@
3752 MKDIR_P = @MKDIR_P@
3753 MSGFMT = @MSGFMT@
3754-MSGFMT_015 = @MSGFMT_015@
3755 MSGMERGE = @MSGMERGE@
3756+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
3757 NCURSESW_CFLAGS = @NCURSESW_CFLAGS@
3758 NCURSESW_LIBS = @NCURSESW_LIBS@
3759 NCURSES_CFLAGS = @NCURSES_CFLAGS@
3760@@ -343,6 +344,7 @@ prefix = @prefix@
3761 program_transform_name = @program_transform_name@
3762 psdir = @psdir@
3763 rst2man_available = @rst2man_available@
3764+runstatedir = @runstatedir@
3765 sbindir = @sbindir@
3766 sharedstatedir = @sharedstatedir@
3767 srcdir = @srcdir@
3768diff --git a/alsaloop/alsaloop.1 b/alsaloop/alsaloop.1
3769index 33fa4d1..6bacfd5 100644
3770--- a/alsaloop/alsaloop.1
3771+++ b/alsaloop/alsaloop.1
3772@@ -79,7 +79,7 @@ Default format is S16_LE.
3773 Channel count specification. Default value is 2.
3774
3775 .TP
3776-\fI\-c <rate>\fP | \fI\-\-rate=<rate>\fP
3777+\fI\-r <rate>\fP | \fI\-\-rate=<rate>\fP
3778
3779 Rate specification. Default value is 48000 (Hz).
3780
3781diff --git a/alsaloop/alsaloop.c b/alsaloop/alsaloop.c
3782index 6a9ce58..06ffadf 100644
3783--- a/alsaloop/alsaloop.c
3784+++ b/alsaloop/alsaloop.c
3785@@ -85,12 +85,17 @@ static int create_loopback_handle(struct loopback_handle **_handle,
3786 if (device == NULL)
3787 device = "hw:0,0";
3788 handle->device = strdup(device);
3789- if (handle->device == NULL)
3790+ if (handle->device == NULL) {
3791+ free(handle);
3792 return -ENOMEM;
3793+ }
3794 if (ctldev) {
3795 handle->ctldev = strdup(ctldev);
3796- if (handle->ctldev == NULL)
3797+ if (handle->ctldev == NULL) {
3798+ free(handle->device);
3799+ free(handle);
3800 return -ENOMEM;
3801+ }
3802 } else {
3803 handle->ctldev = NULL;
3804 }
3805diff --git a/alsaloop/pcmjob.c b/alsaloop/pcmjob.c
3806index 6a9aff4..4efdd63 100644
3807--- a/alsaloop/pcmjob.c
3808+++ b/alsaloop/pcmjob.c
3809@@ -556,13 +556,13 @@ static void buf_add_src(struct loopback *loop)
3810 if (capt->format == SND_PCM_FORMAT_S32)
3811 src_int_to_float_array((int *)(capt->buf +
3812 pos1 * capt->frame_size),
3813- (void *)loop->src_data.data_in +
3814+ (float *)loop->src_data.data_in +
3815 pos * capt->channels,
3816 count1 * capt->channels);
3817 else
3818 src_short_to_float_array((short *)(capt->buf +
3819 pos1 * capt->frame_size),
3820- (void *)loop->src_data.data_in +
3821+ (float *)loop->src_data.data_in +
3822 pos * capt->channels,
3823 count1 * capt->channels);
3824 count -= count1;
3825@@ -1698,9 +1698,8 @@ int pcmjob_pollfds_init(struct loopback *loop, struct pollfd *fds)
3826 static snd_pcm_sframes_t get_queued_playback_samples(struct loopback *loop)
3827 {
3828 snd_pcm_sframes_t delay;
3829- int err;
3830
3831- if ((err = snd_pcm_delay(loop->play->handle, &delay)) < 0)
3832+ if (snd_pcm_delay(loop->play->handle, &delay) < 0)
3833 return 0;
3834 loop->play->last_delay = delay;
3835 delay += loop->play->buf_count;
3836diff --git a/alsamixer/Makefile.in b/alsamixer/Makefile.in
3837index ba4c05d..2467f53 100644
3838--- a/alsamixer/Makefile.in
3839+++ b/alsamixer/Makefile.in
3840@@ -1,7 +1,7 @@
3841-# Makefile.in generated by automake 1.16.1 from Makefile.am.
3842+# Makefile.in generated by automake 1.16.2 from Makefile.am.
3843 # @configure_input@
3844
3845-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
3846+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
3847
3848 # This Makefile.in is free software; the Free Software Foundation
3849 # gives unlimited permission to copy and/or distribute it,
3850@@ -92,7 +92,8 @@ bin_PROGRAMS = alsamixer$(EXEEXT)
3851 subdir = alsamixer
3852 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
3853 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
3854- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
3855+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
3856+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
3857 $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
3858 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
3859 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
3860@@ -289,8 +290,8 @@ MAINT = @MAINT@
3861 MAKEINFO = @MAKEINFO@
3862 MKDIR_P = @MKDIR_P@
3863 MSGFMT = @MSGFMT@
3864-MSGFMT_015 = @MSGFMT_015@
3865 MSGMERGE = @MSGMERGE@
3866+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
3867 NCURSESW_CFLAGS = @NCURSESW_CFLAGS@
3868 NCURSESW_LIBS = @NCURSESW_LIBS@
3869 NCURSES_CFLAGS = @NCURSES_CFLAGS@
3870@@ -370,6 +371,7 @@ prefix = @prefix@
3871 program_transform_name = @program_transform_name@
3872 psdir = @psdir@
3873 rst2man_available = @rst2man_available@
3874+runstatedir = @runstatedir@
3875 sbindir = @sbindir@
3876 sharedstatedir = @sharedstatedir@
3877 srcdir = @srcdir@
3878diff --git a/alsamixer/alsamixer.1 b/alsamixer/alsamixer.1
3879index 8d34680..2d711cf 100644
3880--- a/alsamixer/alsamixer.1
3881+++ b/alsamixer/alsamixer.1
3882@@ -34,7 +34,7 @@ Toggle the using of colors.
3883
3884 .SH MIXER VIEWS
3885
3886-The top-left corner of \fBalsamixer\fP is the are to show some basic
3887+The top-left corner of \fBalsamixer\fP shows some basic
3888 information: the card name, the mixer chip name, the current view
3889 mode and the currently selected mixer item.
3890 When the mixer item is switched off, \fI[Off]\fP is displayed in its
3891diff --git a/alsamixer/card_select.c b/alsamixer/card_select.c
3892index a58c037..aac7b45 100644
3893--- a/alsamixer/card_select.c
3894+++ b/alsamixer/card_select.c
3895@@ -108,7 +108,7 @@ static int get_cards(void)
3896 int count, number, err;
3897 snd_ctl_t *ctl;
3898 snd_ctl_card_info_t *info;
3899- char buf[16];
3900+ char buf[32];
3901 struct card *card, *prev_card;
3902
3903 first_card.indexstr = "-";
3904@@ -125,7 +125,11 @@ static int get_cards(void)
3905 fatal_alsa_error(_("cannot enumerate sound cards"), err);
3906 if (number < 0)
3907 break;
3908+#if defined(SND_LIB_VER) && SND_LIB_VER(1, 2, 5) <= SND_LIB_VERSION
3909+ sprintf(buf, "sysdefault:%d", number);
3910+#else
3911 sprintf(buf, "hw:%d", number);
3912+#endif
3913 err = snd_ctl_open(&ctl, buf, 0);
3914 if (err < 0)
3915 continue;
3916diff --git a/alsamixer/cli.c b/alsamixer/cli.c
3917index 23d34ad..f153f28 100644
3918--- a/alsamixer/cli.c
3919+++ b/alsamixer/cli.c
3920@@ -73,7 +73,7 @@ static void parse_options(int argc, char *argv[])
3921 };
3922 int option;
3923 int card_index;
3924- static char name_buf[16];
3925+ static char name_buf[24];
3926
3927 while ((option = getopt_long(argc, argv, short_options,
3928 long_options, NULL)) != -1) {
3929@@ -88,7 +88,11 @@ static void parse_options(int argc, char *argv[])
3930 fprintf(stderr, _("invalid card index: %s\n"), optarg);
3931 goto fail;
3932 }
3933+#if defined(SND_LIB_VER) && SND_LIB_VER(1, 2, 5) <= SND_LIB_VERSION
3934+ sprintf(name_buf, "sysdefault:%d", card_index);
3935+#else
3936 sprintf(name_buf, "hw:%d", card_index);
3937+#endif
3938 selem_regopt.device = name_buf;
3939 break;
3940 case 'D':
3941diff --git a/alsamixer/colors.c b/alsamixer/colors.c
3942index 1a8cb8f..c81ebcf 100644
3943--- a/alsamixer/colors.c
3944+++ b/alsamixer/colors.c
3945@@ -50,11 +50,11 @@ void init_colors(int use_color)
3946 start_color();
3947 use_default_colors();
3948
3949- get_color_pair(COLOR_CYAN, COLOR_BLACK); // COLOR_PAIR(1)
3950- get_color_pair(COLOR_YELLOW, COLOR_BLACK);
3951+ get_color_pair(COLOR_CYAN, -1); // COLOR_PAIR(1)
3952+ get_color_pair(COLOR_YELLOW, -1);
3953 get_color_pair(COLOR_WHITE, COLOR_GREEN);
3954- get_color_pair(COLOR_RED, COLOR_BLACK);
3955- get_color_pair(COLOR_WHITE, COLOR_BLACK);
3956+ get_color_pair(COLOR_RED, -1);
3957+ get_color_pair(COLOR_WHITE, -1);
3958 get_color_pair(COLOR_WHITE, COLOR_BLUE);
3959 get_color_pair(COLOR_RED, COLOR_BLUE);
3960 get_color_pair(COLOR_GREEN, COLOR_GREEN);
3961diff --git a/alsamixer/configparser.c b/alsamixer/configparser.c
3962index 93aa72a..7647987 100644
3963--- a/alsamixer/configparser.c
3964+++ b/alsamixer/configparser.c
3965@@ -155,7 +155,7 @@ const char *mixer_words =
3966 static unsigned int parse_words(const char *name, const char* wordlist, unsigned int itemlen, unsigned int *number) {
3967 unsigned int words = 0;
3968 unsigned int word;
3969- unsigned int i;
3970+ int i;
3971 char buf[16];
3972 char *endptr;
3973
3974@@ -181,7 +181,7 @@ static unsigned int parse_words(const char *name, const char* wordlist, unsigned
3975 word = W_NUMBER;
3976 }
3977 else if ((i = strlist_index(wordlist, itemlen, buf)) >= 0)
3978- word = 2U << i;
3979+ word = i <= 30 ? (2U << i) : 0;
3980 else
3981 return 0;
3982
3983diff --git a/alsamixer/mixer_display.c b/alsamixer/mixer_display.c
3984index 882781d..330fdd5 100644
3985--- a/alsamixer/mixer_display.c
3986+++ b/alsamixer/mixer_display.c
3987@@ -634,7 +634,7 @@ static void display_control(unsigned int control_index)
3988
3989 static void display_scroll_indicators(void)
3990 {
3991- int y0, y1, y;
3992+ int y0, y1;
3993 chtype left, right;
3994
3995 if (screen_too_small)
3996diff --git a/alsamixer/widget.c b/alsamixer/widget.c
3997index 17f3ace..5fedaba 100644
3998--- a/alsamixer/widget.c
3999+++ b/alsamixer/widget.c
4000@@ -29,10 +29,6 @@ int screen_cols;
4001
4002 static int cursor_visibility = -1;
4003
4004-static void widget_handle_key(int key)
4005-{
4006-}
4007-
4008 static void update_cursor_visibility(void)
4009 {
4010 const struct widget *active_widget;
4011@@ -87,9 +83,6 @@ void widget_init(struct widget *widget, int lines_, int cols, int y, int x,
4012 set_panel_userptr(widget->panel, widget);
4013 }
4014
4015- //if (!widget->handle_key)
4016- // widget->handle_key = widget_handle_key;
4017-
4018 if (old_window)
4019 delwin(old_window);
4020
4021diff --git a/alsaucm/Makefile.in b/alsaucm/Makefile.in
4022index 193c32a..27ba8f2 100644
4023--- a/alsaucm/Makefile.in
4024+++ b/alsaucm/Makefile.in
4025@@ -1,7 +1,7 @@
4026-# Makefile.in generated by automake 1.16.1 from Makefile.am.
4027+# Makefile.in generated by automake 1.16.2 from Makefile.am.
4028 # @configure_input@
4029
4030-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
4031+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
4032
4033 # This Makefile.in is free software; the Free Software Foundation
4034 # gives unlimited permission to copy and/or distribute it,
4035@@ -93,7 +93,8 @@ bin_PROGRAMS = alsaucm$(EXEEXT)
4036 subdir = alsaucm
4037 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
4038 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
4039- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
4040+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
4041+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
4042 $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
4043 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
4044 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
4045@@ -257,8 +258,8 @@ MAINT = @MAINT@
4046 MAKEINFO = @MAKEINFO@
4047 MKDIR_P = @MKDIR_P@
4048 MSGFMT = @MSGFMT@
4049-MSGFMT_015 = @MSGFMT_015@
4050 MSGMERGE = @MSGMERGE@
4051+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
4052 NCURSESW_CFLAGS = @NCURSESW_CFLAGS@
4053 NCURSESW_LIBS = @NCURSESW_LIBS@
4054 NCURSES_CFLAGS = @NCURSES_CFLAGS@
4055@@ -338,6 +339,7 @@ prefix = @prefix@
4056 program_transform_name = @program_transform_name@
4057 psdir = @psdir@
4058 rst2man_available = @rst2man_available@
4059+runstatedir = @runstatedir@
4060 sbindir = @sbindir@
4061 sharedstatedir = @sharedstatedir@
4062 srcdir = @srcdir@
4063diff --git a/alsaucm/alsaucm.rst b/alsaucm/alsaucm.rst
4064index 7890ba5..3098672 100644
4065--- a/alsaucm/alsaucm.rst
4066+++ b/alsaucm/alsaucm.rst
4067@@ -122,7 +122,7 @@ Available commands:
4068 the value of the `IDENTIFIER` argument can can be:
4069
4070 - ``_devstatus/{device}``
4071- - ``_modtstaus/{device}``
4072+ - ``_modstatus/{device}``
4073
4074 ``set`` `IDENTIFIER` `VALUE`
4075 set string value
4076diff --git a/alsaucm/usecase.c b/alsaucm/usecase.c
4077index d39a159..1dba1ca 100644
4078--- a/alsaucm/usecase.c
4079+++ b/alsaucm/usecase.c
4080@@ -58,7 +58,9 @@ enum uc_cmd {
4081 /* set/get */
4082 OM_SET,
4083 OM_GET,
4084+ OM_GET_VAL,
4085 OM_GETI,
4086+ OM_GETI_VAL,
4087
4088 /* misc */
4089 OM_HELP,
4090@@ -82,7 +84,9 @@ static struct cmd cmds[] = {
4091 { OM_LIST2, 1, 1, "list" },
4092 { OM_SET, 2, 1, "set" },
4093 { OM_GET, 1, 1, "get" },
4094+ { OM_GET_VAL, 1, 1, "getval" },
4095 { OM_GETI, 1, 1, "geti" },
4096+ { OM_GETI_VAL, 1, 1, "getival" },
4097 { OM_DUMP, 1, 1, "dump" },
4098 { OM_HELP, 0, 0, "help" },
4099 { OM_QUIT, 0, 0, "quit" },
4100@@ -328,6 +332,7 @@ static int do_one(struct context *context, struct cmd *cmd, char **argv)
4101 }
4102 break;
4103 case OM_GET:
4104+ case OM_GET_VAL:
4105 err = snd_use_case_get(context->uc_mgr, argv[0], &str);
4106 if (err < 0) {
4107 fprintf(stderr,
4108@@ -336,10 +341,14 @@ static int do_one(struct context *context, struct cmd *cmd, char **argv)
4109 snd_strerror(err));
4110 return err;
4111 }
4112- printf(" %s=%s\n", argv[0], str);
4113+ if (cmd->code == OM_GET)
4114+ printf(" %s=%s\n", argv[0], str);
4115+ else
4116+ printf("%s\n", str);
4117 free((void *)str);
4118 break;
4119 case OM_GETI:
4120+ case OM_GETI_VAL:
4121 err = snd_use_case_geti(context->uc_mgr, argv[0], &lval);
4122 if (err < 0) {
4123 fprintf(stderr,
4124@@ -348,7 +357,10 @@ static int do_one(struct context *context, struct cmd *cmd, char **argv)
4125 snd_strerror(err));
4126 return lval;
4127 }
4128- printf(" %s=%li\n", argv[0], lval);
4129+ if (cmd->code == OM_GETI)
4130+ printf(" %s=%li\n", argv[0], lval);
4131+ else
4132+ printf("%li\n", lval);
4133 break;
4134 case OM_QUIT:
4135 context->do_exit = 1;
4136diff --git a/amidi/Makefile.in b/amidi/Makefile.in
4137index 4efa228..e50087b 100644
4138--- a/amidi/Makefile.in
4139+++ b/amidi/Makefile.in
4140@@ -1,7 +1,7 @@
4141-# Makefile.in generated by automake 1.16.1 from Makefile.am.
4142+# Makefile.in generated by automake 1.16.2 from Makefile.am.
4143 # @configure_input@
4144
4145-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
4146+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
4147
4148 # This Makefile.in is free software; the Free Software Foundation
4149 # gives unlimited permission to copy and/or distribute it,
4150@@ -92,7 +92,8 @@ bin_PROGRAMS = amidi$(EXEEXT)
4151 subdir = amidi
4152 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
4153 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
4154- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
4155+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
4156+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
4157 $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
4158 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
4159 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
4160@@ -254,8 +255,8 @@ MAINT = @MAINT@
4161 MAKEINFO = @MAKEINFO@
4162 MKDIR_P = @MKDIR_P@
4163 MSGFMT = @MSGFMT@
4164-MSGFMT_015 = @MSGFMT_015@
4165 MSGMERGE = @MSGMERGE@
4166+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
4167 NCURSESW_CFLAGS = @NCURSESW_CFLAGS@
4168 NCURSESW_LIBS = @NCURSESW_LIBS@
4169 NCURSES_CFLAGS = @NCURSES_CFLAGS@
4170@@ -335,6 +336,7 @@ prefix = @prefix@
4171 program_transform_name = @program_transform_name@
4172 psdir = @psdir@
4173 rst2man_available = @rst2man_available@
4174+runstatedir = @runstatedir@
4175 sbindir = @sbindir@
4176 sharedstatedir = @sharedstatedir@
4177 srcdir = @srcdir@
4178diff --git a/amidi/amidi.c b/amidi/amidi.c
4179index cde4697..90e7750 100644
4180--- a/amidi/amidi.c
4181+++ b/amidi/amidi.c
4182@@ -688,8 +688,11 @@ int main(int argc, char *argv[])
4183 continue;
4184 read += length;
4185
4186- if (receive_file != -1)
4187- write(receive_file, buf, length);
4188+ if (receive_file != -1) {
4189+ ssize_t wlength = write(receive_file, buf, length);
4190+ if (wlength != length)
4191+ error("write error: %s", wlength < 0 ? strerror(errno) : "short");
4192+ }
4193 if (dump) {
4194 for (i = 0; i < length; ++i)
4195 print_byte(buf[i]);
4196diff --git a/amixer/Makefile.am b/amixer/Makefile.am
4197index b4526ca..46ec736 100644
4198--- a/amixer/Makefile.am
4199+++ b/amixer/Makefile.am
4200@@ -5,7 +5,7 @@ LDADD = -lm
4201 # CFLAGS += -g -Wall
4202
4203 bin_PROGRAMS = amixer
4204-amixer_SOURCES = amixer.c ../alsamixer/volume_mapping.c
4205-noinst_HEADERS = amixer.h
4206+amixer_SOURCES = amixer.c volume_mapping.c
4207+noinst_HEADERS = amixer.h volume_mapping.h
4208 man_MANS = amixer.1
4209 EXTRA_DIST = amixer.1
4210diff --git a/amixer/Makefile.in b/amixer/Makefile.in
4211index 8d10466..b7de482 100644
4212--- a/amixer/Makefile.in
4213+++ b/amixer/Makefile.in
4214@@ -1,7 +1,7 @@
4215-# Makefile.in generated by automake 1.16.1 from Makefile.am.
4216+# Makefile.in generated by automake 1.16.2 from Makefile.am.
4217 # @configure_input@
4218
4219-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
4220+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
4221
4222 # This Makefile.in is free software; the Free Software Foundation
4223 # gives unlimited permission to copy and/or distribute it,
4224@@ -93,7 +93,8 @@ bin_PROGRAMS = amixer$(EXEEXT)
4225 subdir = amixer
4226 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
4227 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
4228- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
4229+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
4230+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
4231 $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
4232 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
4233 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
4234@@ -130,10 +131,6 @@ am__maybe_remake_depfiles = depfiles
4235 am__depfiles_remade = ./$(DEPDIR)/amixer.Po \
4236 ./$(DEPDIR)/volume_mapping.Po
4237 am__mv = mv -f
4238-AM_V_lt = $(am__v_lt_@AM_V@)
4239-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
4240-am__v_lt_0 = --silent
4241-am__v_lt_1 =
4242 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
4243 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
4244 AM_V_CC = $(am__v_CC_@AM_V@)
4245@@ -263,8 +260,8 @@ MAINT = @MAINT@
4246 MAKEINFO = @MAKEINFO@
4247 MKDIR_P = @MKDIR_P@
4248 MSGFMT = @MSGFMT@
4249-MSGFMT_015 = @MSGFMT_015@
4250 MSGMERGE = @MSGMERGE@
4251+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
4252 NCURSESW_CFLAGS = @NCURSESW_CFLAGS@
4253 NCURSESW_LIBS = @NCURSESW_LIBS@
4254 NCURSES_CFLAGS = @NCURSES_CFLAGS@
4255@@ -344,6 +341,7 @@ prefix = @prefix@
4256 program_transform_name = @program_transform_name@
4257 psdir = @psdir@
4258 rst2man_available = @rst2man_available@
4259+runstatedir = @runstatedir@
4260 sbindir = @sbindir@
4261 sharedstatedir = @sharedstatedir@
4262 srcdir = @srcdir@
4263@@ -358,8 +356,8 @@ xmlto_available = @xmlto_available@
4264 AM_CFLAGS = -D_GNU_SOURCE
4265 AM_CPPFLAGS = -I$(top_srcdir)/include
4266 LDADD = -lm
4267-amixer_SOURCES = amixer.c ../alsamixer/volume_mapping.c
4268-noinst_HEADERS = amixer.h
4269+amixer_SOURCES = amixer.c volume_mapping.c
4270+noinst_HEADERS = amixer.h volume_mapping.h
4271 man_MANS = amixer.1
4272 EXTRA_DIST = amixer.1
4273 all: all-am
4274@@ -470,20 +468,6 @@ am--depfiles: $(am__depfiles_remade)
4275 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
4276 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
4277 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
4278-
4279-volume_mapping.o: ../alsamixer/volume_mapping.c
4280-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT volume_mapping.o -MD -MP -MF $(DEPDIR)/volume_mapping.Tpo -c -o volume_mapping.o `test -f '../alsamixer/volume_mapping.c' || echo '$(srcdir)/'`../alsamixer/volume_mapping.c
4281-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_mapping.Tpo $(DEPDIR)/volume_mapping.Po
4282-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../alsamixer/volume_mapping.c' object='volume_mapping.o' libtool=no @AMDEPBACKSLASH@
4283-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
4284-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o volume_mapping.o `test -f '../alsamixer/volume_mapping.c' || echo '$(srcdir)/'`../alsamixer/volume_mapping.c
4285-
4286-volume_mapping.obj: ../alsamixer/volume_mapping.c
4287-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT volume_mapping.obj -MD -MP -MF $(DEPDIR)/volume_mapping.Tpo -c -o volume_mapping.obj `if test -f '../alsamixer/volume_mapping.c'; then $(CYGPATH_W) '../alsamixer/volume_mapping.c'; else $(CYGPATH_W) '$(srcdir)/../alsamixer/volume_mapping.c'; fi`
4288-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_mapping.Tpo $(DEPDIR)/volume_mapping.Po
4289-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../alsamixer/volume_mapping.c' object='volume_mapping.obj' libtool=no @AMDEPBACKSLASH@
4290-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
4291-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o volume_mapping.obj `if test -f '../alsamixer/volume_mapping.c'; then $(CYGPATH_W) '../alsamixer/volume_mapping.c'; else $(CYGPATH_W) '$(srcdir)/../alsamixer/volume_mapping.c'; fi`
4292 install-man1: $(man_MANS)
4293 @$(NORMAL_INSTALL)
4294 @list1=''; \
4295diff --git a/amixer/amixer.1 b/amixer/amixer.1
4296index 76007d2..0bac82b 100644
4297--- a/amixer/amixer.1
4298+++ b/amixer/amixer.1
4299@@ -44,11 +44,12 @@ value, respectively.
4300 The parameters \fIcap, nocap, mute, unmute, toggle\fP are used to
4301 change capture (recording) and muting for the group specified.
4302
4303-The optional modifiers can be put as extra parameters to specify
4304-the stream direction or channels to apply.
4305+The optional modifiers can be put as extra parameters before the value to
4306+specify the stream direction or channels to apply.
4307 The modifiers \fIplayback\fP and \fIcapture\fP specify the stream,
4308-and the modifiers \fIfront, rear, center, woofer\fP are used to specify
4309-channels to be changed.
4310+and the modifiers \fIfront, frontleft, frontright, frontcenter, center,
4311+rear, rearright, rearleft, woofer\fP are used to specify channels to be
4312+changed.
4313
4314 A simple mixer control must be specified. Only one device can be controlled
4315 at a time.
4316diff --git a/amixer/amixer.c b/amixer/amixer.c
4317index b3b9b48..f9cbb89 100644
4318--- a/amixer/amixer.c
4319+++ b/amixer/amixer.c
4320@@ -1602,7 +1602,8 @@ static int events(int argc ATTRIBUTE_UNUSED, char *argv[] ATTRIBUTE_UNUSED)
4321 if (res >= 0) {
4322 printf("Poll ok: %i\n", res);
4323 res = snd_hctl_handle_events(handle);
4324- assert(res > 0);
4325+ if (res < 0)
4326+ printf("ERR: %s (%d)\n", snd_strerror(res), res);
4327 }
4328 }
4329 snd_hctl_close(handle);
4330@@ -1771,7 +1772,7 @@ static int exec_stdin(void)
4331
4332 int main(int argc, char *argv[])
4333 {
4334- int morehelp, level = 0;
4335+ int badopt, retval, level = 0;
4336 int read_stdin = 0;
4337 static const struct option long_option[] =
4338 {
4339@@ -1790,7 +1791,7 @@ int main(int argc, char *argv[])
4340 {NULL, 0, NULL, 0},
4341 };
4342
4343- morehelp = 0;
4344+ badopt = 0;
4345 while (1) {
4346 int c;
4347
4348@@ -1805,10 +1806,14 @@ int main(int argc, char *argv[])
4349 int i;
4350 i = snd_card_get_index(optarg);
4351 if (i >= 0 && i < 32)
4352+#if defined(SND_LIB_VER) && SND_LIB_VER(1, 2, 5) <= SND_LIB_VERSION
4353+ sprintf(card, "sysdefault:%i", i);
4354+#else
4355 sprintf(card, "hw:%i", i);
4356+#endif
4357 else {
4358- fprintf(stderr, "Invalid card number.\n");
4359- morehelp++;
4360+ fprintf(stderr, "Invalid card number '%s'.\n", optarg);
4361+ badopt++;
4362 }
4363 }
4364 break;
4365@@ -1830,7 +1835,7 @@ int main(int argc, char *argv[])
4366 break;
4367 case 'v':
4368 printf("amixer version " SND_UTIL_VERSION_STR "\n");
4369- return 1;
4370+ return 0;
4371 case 'a':
4372 smixer_level = 1;
4373 memset(&smixer_options, 0, sizeof(smixer_options));
4374@@ -1841,7 +1846,7 @@ int main(int argc, char *argv[])
4375 smixer_options.abstract = SND_MIXER_SABSTRACT_BASIC;
4376 else {
4377 fprintf(stderr, "Select correct abstraction level (none or basic)...\n");
4378- morehelp++;
4379+ badopt++;
4380 }
4381 break;
4382 case 's':
4383@@ -1854,49 +1859,55 @@ int main(int argc, char *argv[])
4384 std_vol_type = VOL_MAP;
4385 break;
4386 default:
4387- fprintf(stderr, "Invalid switch or option needs an argument.\n");
4388- morehelp++;
4389+ fprintf(stderr, "Invalid switch or option -%c needs an argument.\n", c);
4390+ badopt++;
4391 }
4392 }
4393- if (morehelp) {
4394- help();
4395+ if (badopt)
4396 return 1;
4397- }
4398+
4399 smixer_options.device = card;
4400
4401- if (read_stdin)
4402- return exec_stdin();
4403+ if (read_stdin) {
4404+ retval = exec_stdin();
4405+ goto finish;
4406+ }
4407
4408 if (argc - optind <= 0) {
4409- return selems(LEVEL_BASIC | level) ? 1 : 0;
4410+ retval = selems(LEVEL_BASIC | level) ? 1 : 0;
4411+ goto finish;
4412 }
4413 if (!strcmp(argv[optind], "help")) {
4414- return help() ? 1 : 0;
4415+ retval = help() ? 1 : 0;
4416 } else if (!strcmp(argv[optind], "info")) {
4417- return info() ? 1 : 0;
4418+ retval = info() ? 1 : 0;
4419 } else if (!strcmp(argv[optind], "controls")) {
4420- return controls(level) ? 1 : 0;
4421+ retval = controls(level) ? 1 : 0;
4422 } else if (!strcmp(argv[optind], "contents")) {
4423- return controls(LEVEL_BASIC | level) ? 1 : 0;
4424+ retval = controls(LEVEL_BASIC | level) ? 1 : 0;
4425 } else if (!strcmp(argv[optind], "scontrols") || !strcmp(argv[optind], "simple")) {
4426- return selems(level) ? 1 : 0;
4427+ retval = selems(level) ? 1 : 0;
4428 } else if (!strcmp(argv[optind], "scontents")) {
4429- return selems(LEVEL_BASIC | level) ? 1 : 0;
4430+ retval = selems(LEVEL_BASIC | level) ? 1 : 0;
4431 } else if (!strcmp(argv[optind], "sset") || !strcmp(argv[optind], "set")) {
4432- return sset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 0, 0) ? 1 : 0;
4433+ retval = sset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 0, 0) ? 1 : 0;
4434 } else if (!strcmp(argv[optind], "sget") || !strcmp(argv[optind], "get")) {
4435- return sset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 1, 0) ? 1 : 0;
4436+ retval = sset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 1, 0) ? 1 : 0;
4437 } else if (!strcmp(argv[optind], "cset")) {
4438- return cset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 0, 0) ? 1 : 0;
4439+ retval = cset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 0, 0) ? 1 : 0;
4440 } else if (!strcmp(argv[optind], "cget")) {
4441- return cset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 1, 0) ? 1 : 0;
4442+ retval = cset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 1, 0) ? 1 : 0;
4443 } else if (!strcmp(argv[optind], "events")) {
4444- return events(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL);
4445+ retval = events(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL);
4446 } else if (!strcmp(argv[optind], "sevents")) {
4447- return sevents(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL);
4448+ retval = sevents(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL);
4449 } else {
4450 fprintf(stderr, "amixer: Unknown command '%s'...\n", argv[optind]);
4451+ retval = 0;
4452 }
4453
4454- return 0;
4455+finish:
4456+ snd_config_update_free_global();
4457+
4458+ return retval;
4459 }
4460diff --git a/amixer/volume_mapping.c b/amixer/volume_mapping.c
4461new file mode 100644
4462index 0000000..29ab061
4463--- /dev/null
4464+++ b/amixer/volume_mapping.c
4465@@ -0,0 +1,179 @@
4466+/*
4467+ * Copyright (c) 2010 Clemens Ladisch <clemens@ladisch.de>
4468+ *
4469+ * Permission to use, copy, modify, and/or distribute this software for any
4470+ * purpose with or without fee is hereby granted, provided that the above
4471+ * copyright notice and this permission notice appear in all copies.
4472+ *
4473+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
4474+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
4475+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
4476+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
4477+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
4478+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
4479+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
4480+ */
4481+
4482+/*
4483+ * The functions in this file map the value ranges of ALSA mixer controls onto
4484+ * the interval 0..1.
4485+ *
4486+ * The mapping is designed so that the position in the interval is proportional
4487+ * to the volume as a human ear would perceive it (i.e., the position is the
4488+ * cubic root of the linear sample multiplication factor). For controls with
4489+ * a small range (24 dB or less), the mapping is linear in the dB values so
4490+ * that each step has the same size visually. Only for controls without dB
4491+ * information, a linear mapping of the hardware volume register values is used
4492+ * (this is the same algorithm as used in the old alsamixer).
4493+ *
4494+ * When setting the volume, 'dir' is the rounding direction:
4495+ * -1/0/1 = down/nearest/up.
4496+ */
4497+
4498+#define _ISOC99_SOURCE /* lrint() */
4499+#include "aconfig.h"
4500+#include <math.h>
4501+#include <stdbool.h>
4502+#include "volume_mapping.h"
4503+
4504+#define MAX_LINEAR_DB_SCALE 24
4505+
4506+static inline bool use_linear_dB_scale(long dBmin, long dBmax)
4507+{
4508+ return dBmax - dBmin <= MAX_LINEAR_DB_SCALE * 100;
4509+}
4510+
4511+static long lrint_dir(double x, int dir)
4512+{
4513+ if (dir > 0)
4514+ return lrint(ceil(x));
4515+ else if (dir < 0)
4516+ return lrint(floor(x));
4517+ else
4518+ return lrint(x);
4519+}
4520+
4521+enum ctl_dir { PLAYBACK, CAPTURE };
4522+
4523+static int (* const get_dB_range[2])(snd_mixer_elem_t *, long *, long *) = {
4524+ snd_mixer_selem_get_playback_dB_range,
4525+ snd_mixer_selem_get_capture_dB_range,
4526+};
4527+static int (* const get_raw_range[2])(snd_mixer_elem_t *, long *, long *) = {
4528+ snd_mixer_selem_get_playback_volume_range,
4529+ snd_mixer_selem_get_capture_volume_range,
4530+};
4531+static int (* const get_dB[2])(snd_mixer_elem_t *, snd_mixer_selem_channel_id_t, long *) = {
4532+ snd_mixer_selem_get_playback_dB,
4533+ snd_mixer_selem_get_capture_dB,
4534+};
4535+static int (* const get_raw[2])(snd_mixer_elem_t *, snd_mixer_selem_channel_id_t, long *) = {
4536+ snd_mixer_selem_get_playback_volume,
4537+ snd_mixer_selem_get_capture_volume,
4538+};
4539+static int (* const set_dB[2])(snd_mixer_elem_t *, snd_mixer_selem_channel_id_t, long, int) = {
4540+ snd_mixer_selem_set_playback_dB,
4541+ snd_mixer_selem_set_capture_dB,
4542+};
4543+static int (* const set_raw[2])(snd_mixer_elem_t *, snd_mixer_selem_channel_id_t, long) = {
4544+ snd_mixer_selem_set_playback_volume,
4545+ snd_mixer_selem_set_capture_volume,
4546+};
4547+
4548+static double get_normalized_volume(snd_mixer_elem_t *elem,
4549+ snd_mixer_selem_channel_id_t channel,
4550+ enum ctl_dir ctl_dir)
4551+{
4552+ long min, max, value;
4553+ double normalized, min_norm;
4554+ int err;
4555+
4556+ err = get_dB_range[ctl_dir](elem, &min, &max);
4557+ if (err < 0 || min >= max) {
4558+ err = get_raw_range[ctl_dir](elem, &min, &max);
4559+ if (err < 0 || min == max)
4560+ return 0;
4561+
4562+ err = get_raw[ctl_dir](elem, channel, &value);
4563+ if (err < 0)
4564+ return 0;
4565+
4566+ return (value - min) / (double)(max - min);
4567+ }
4568+
4569+ err = get_dB[ctl_dir](elem, channel, &value);
4570+ if (err < 0)
4571+ return 0;
4572+
4573+ if (use_linear_dB_scale(min, max))
4574+ return (value - min) / (double)(max - min);
4575+
4576+ normalized = pow(10, (value - max) / 6000.0);
4577+ if (min != SND_CTL_TLV_DB_GAIN_MUTE) {
4578+ min_norm = pow(10, (min - max) / 6000.0);
4579+ normalized = (normalized - min_norm) / (1 - min_norm);
4580+ }
4581+
4582+ return normalized;
4583+}
4584+
4585+static int set_normalized_volume(snd_mixer_elem_t *elem,
4586+ snd_mixer_selem_channel_id_t channel,
4587+ double volume,
4588+ int dir,
4589+ enum ctl_dir ctl_dir)
4590+{
4591+ long min, max, value;
4592+ double min_norm;
4593+ int err;
4594+
4595+ err = get_dB_range[ctl_dir](elem, &min, &max);
4596+ if (err < 0 || min >= max) {
4597+ err = get_raw_range[ctl_dir](elem, &min, &max);
4598+ if (err < 0)
4599+ return err;
4600+
4601+ value = lrint_dir(volume * (max - min), dir) + min;
4602+ return set_raw[ctl_dir](elem, channel, value);
4603+ }
4604+
4605+ if (use_linear_dB_scale(min, max)) {
4606+ value = lrint_dir(volume * (max - min), dir) + min;
4607+ return set_dB[ctl_dir](elem, channel, value, dir);
4608+ }
4609+
4610+ if (min != SND_CTL_TLV_DB_GAIN_MUTE) {
4611+ min_norm = pow(10, (min - max) / 6000.0);
4612+ volume = volume * (1 - min_norm) + min_norm;
4613+ }
4614+ value = lrint_dir(6000.0 * log10(volume), dir) + max;
4615+ return set_dB[ctl_dir](elem, channel, value, dir);
4616+}
4617+
4618+double get_normalized_playback_volume(snd_mixer_elem_t *elem,
4619+ snd_mixer_selem_channel_id_t channel)
4620+{
4621+ return get_normalized_volume(elem, channel, PLAYBACK);
4622+}
4623+
4624+double get_normalized_capture_volume(snd_mixer_elem_t *elem,
4625+ snd_mixer_selem_channel_id_t channel)
4626+{
4627+ return get_normalized_volume(elem, channel, CAPTURE);
4628+}
4629+
4630+int set_normalized_playback_volume(snd_mixer_elem_t *elem,
4631+ snd_mixer_selem_channel_id_t channel,
4632+ double volume,
4633+ int dir)
4634+{
4635+ return set_normalized_volume(elem, channel, volume, dir, PLAYBACK);
4636+}
4637+
4638+int set_normalized_capture_volume(snd_mixer_elem_t *elem,
4639+ snd_mixer_selem_channel_id_t channel,
4640+ double volume,
4641+ int dir)
4642+{
4643+ return set_normalized_volume(elem, channel, volume, dir, CAPTURE);
4644+}
4645diff --git a/amixer/volume_mapping.h b/amixer/volume_mapping.h
4646new file mode 100644
4647index 0000000..d4251d6
4648--- /dev/null
4649+++ b/amixer/volume_mapping.h
4650@@ -0,0 +1,19 @@
4651+#ifndef VOLUME_MAPPING_H_INCLUDED
4652+#define VOLUME_MAPPING_H_INCLUDED
4653+
4654+#include <alsa/asoundlib.h>
4655+
4656+double get_normalized_playback_volume(snd_mixer_elem_t *elem,
4657+ snd_mixer_selem_channel_id_t channel);
4658+double get_normalized_capture_volume(snd_mixer_elem_t *elem,
4659+ snd_mixer_selem_channel_id_t channel);
4660+int set_normalized_playback_volume(snd_mixer_elem_t *elem,
4661+ snd_mixer_selem_channel_id_t channel,
4662+ double volume,
4663+ int dir);
4664+int set_normalized_capture_volume(snd_mixer_elem_t *elem,
4665+ snd_mixer_selem_channel_id_t channel,
4666+ double volume,
4667+ int dir);
4668+
4669+#endif
4670diff --git a/aplay/Makefile.in b/aplay/Makefile.in
4671index b3306bc..5fe4507 100644
4672--- a/aplay/Makefile.in
4673+++ b/aplay/Makefile.in
4674@@ -1,7 +1,7 @@
4675-# Makefile.in generated by automake 1.16.1 from Makefile.am.
4676+# Makefile.in generated by automake 1.16.2 from Makefile.am.
4677 # @configure_input@
4678
4679-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
4680+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
4681
4682 # This Makefile.in is free software; the Free Software Foundation
4683 # gives unlimited permission to copy and/or distribute it,
4684@@ -93,7 +93,8 @@ bin_PROGRAMS = aplay$(EXEEXT)
4685 subdir = aplay
4686 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
4687 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
4688- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
4689+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
4690+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
4691 $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
4692 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
4693 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
4694@@ -259,8 +260,8 @@ MAINT = @MAINT@
4695 MAKEINFO = @MAKEINFO@
4696 MKDIR_P = @MKDIR_P@
4697 MSGFMT = @MSGFMT@
4698-MSGFMT_015 = @MSGFMT_015@
4699 MSGMERGE = @MSGMERGE@
4700+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
4701 NCURSESW_CFLAGS = @NCURSESW_CFLAGS@
4702 NCURSESW_LIBS = @NCURSESW_LIBS@
4703 NCURSES_CFLAGS = @NCURSES_CFLAGS@
4704@@ -340,6 +341,7 @@ prefix = @prefix@
4705 program_transform_name = @program_transform_name@
4706 psdir = @psdir@
4707 rst2man_available = @rst2man_available@
4708+runstatedir = @runstatedir@
4709 sbindir = @sbindir@
4710 sharedstatedir = @sharedstatedir@
4711 srcdir = @srcdir@
4712diff --git a/aplay/aplay.c b/aplay/aplay.c
4713index 0a65ad6..cc51dcb 100644
4714--- a/aplay/aplay.c
4715+++ b/aplay/aplay.c
4716@@ -525,7 +525,7 @@ int main(int argc, char *argv[])
4717 };
4718 char *pcm_name = "default";
4719 int tmp, err, c;
4720- int do_device_list = 0, do_pcm_list = 0;
4721+ int do_device_list = 0, do_pcm_list = 0, force_sample_format = 0;
4722 snd_pcm_info_t *info;
4723 FILE *direction;
4724
4725@@ -612,6 +612,7 @@ int main(int argc, char *argv[])
4726 }
4727 break;
4728 case 'f':
4729+ force_sample_format = 1;
4730 if (strcasecmp(optarg, "cd") == 0 || strcasecmp(optarg, "cdr") == 0) {
4731 if (strcasecmp(optarg, "cdr") == 0)
4732 rhwparams.format = SND_PCM_FORMAT_S16_BE;
4733@@ -844,6 +845,14 @@ int main(int argc, char *argv[])
4734 }
4735 }
4736
4737+ if (!force_sample_format &&
4738+ isatty(fileno(stdin)) &&
4739+ stream == SND_PCM_STREAM_CAPTURE &&
4740+ snd_pcm_format_width(rhwparams.format) <= 8)
4741+ fprintf(stderr, "Warning: Some sources (like microphones) may produce inaudiable results\n"
4742+ " with 8-bit sampling. Use '-f' argument to increase resolution\n"
4743+ " e.g. '-f S16_LE'.\n");
4744+
4745 chunk_size = 1024;
4746 hwparams = rhwparams;
4747
4748@@ -1528,6 +1537,19 @@ static void done_stdin(void)
4749 tcsetattr(fileno(stdin), TCSANOW, &term);
4750 }
4751
4752+static char wait_for_input(void)
4753+{
4754+ struct pollfd pfd;
4755+ unsigned char b;
4756+
4757+ do {
4758+ pfd.fd = fileno(stdin);
4759+ pfd.events = POLLIN;
4760+ poll(&pfd, 1, -1);
4761+ } while (read(fileno(stdin), &b, 1) != 1);
4762+ return b;
4763+}
4764+
4765 static void do_pause(void)
4766 {
4767 int err;
4768@@ -1546,7 +1568,7 @@ static void do_pause(void)
4769 return;
4770 }
4771 while (1) {
4772- while (read(fileno(stdin), &b, 1) != 1);
4773+ b = wait_for_input();
4774 if (b == ' ' || b == '\r') {
4775 while (read(fileno(stdin), &b, 1) == 1);
4776 if (snd_pcm_state(handle) == SND_PCM_STATE_SUSPENDED)
4777@@ -1571,7 +1593,7 @@ static void check_stdin(void)
4778 while (read(fileno(stdin), &b, 1) == 1);
4779 fprintf(stderr, _("\r=== PAUSE === "));
4780 fflush(stderr);
4781- do_pause();
4782+ do_pause();
4783 fprintf(stderr, " \r");
4784 fflush(stderr);
4785 }
4786@@ -1651,7 +1673,8 @@ static void xrun(void)
4787 prg_exit(EXIT_FAILURE);
4788 }
4789 return; /* ok, data should be accepted again */
4790- } if (snd_pcm_status_get_state(status) == SND_PCM_STATE_DRAINING) {
4791+ }
4792+ if (snd_pcm_status_get_state(status) == SND_PCM_STATE_DRAINING) {
4793 if (verbose) {
4794 fprintf(stderr, _("Status(DRAINING):\n"));
4795 snd_pcm_status_dump(status, log);
4796@@ -1914,22 +1937,46 @@ static void do_test_position(void)
4797 static snd_pcm_sframes_t minavail, mindelay;
4798 static snd_pcm_sframes_t badavail = 0, baddelay = 0;
4799 snd_pcm_sframes_t outofrange;
4800- snd_pcm_sframes_t avail, delay;
4801+ snd_pcm_sframes_t avail, delay, savail, sdelay;
4802+ snd_pcm_status_t *status;
4803 int err;
4804
4805+ snd_pcm_status_alloca(&status);
4806 err = snd_pcm_avail_delay(handle, &avail, &delay);
4807 if (err < 0)
4808 return;
4809+ err = snd_pcm_status(handle, status);
4810+ if (err < 0)
4811+ return;
4812+ savail = snd_pcm_status_get_avail(status);
4813+ sdelay = snd_pcm_status_get_delay(status);
4814 outofrange = (test_coef * (snd_pcm_sframes_t)buffer_frames) / 2;
4815 if (avail > outofrange || avail < -outofrange ||
4816 delay > outofrange || delay < -outofrange) {
4817- badavail = avail; baddelay = delay;
4818- availsum = delaysum = samples = 0;
4819- maxavail = maxdelay = 0;
4820- minavail = mindelay = buffer_frames * 16;
4821- fprintf(stderr, _("Suspicious buffer position (%li total): "
4822- "avail = %li, delay = %li, buffer = %li\n"),
4823- ++counter, (long)avail, (long)delay, (long)buffer_frames);
4824+ badavail = avail; baddelay = delay;
4825+ availsum = delaysum = samples = 0;
4826+ maxavail = maxdelay = 0;
4827+ minavail = mindelay = buffer_frames * 16;
4828+ fprintf(stderr, _("Suspicious buffer position (%li total): "
4829+ "avail = %li, delay = %li, buffer = %li\n"),
4830+ ++counter, (long)avail, (long)delay, (long)buffer_frames);
4831+ } else if (savail > outofrange || savail < -outofrange ||
4832+ sdelay > outofrange || sdelay < -outofrange) {
4833+ badavail = savail; baddelay = sdelay;
4834+ availsum = delaysum = samples = 0;
4835+ maxavail = maxdelay = 0;
4836+ minavail = mindelay = buffer_frames * 16;
4837+ fprintf(stderr, _("Suspicious status buffer position (%li total): "
4838+ "avail = %li, delay = %li, buffer = %li\n"),
4839+ ++counter, (long)savail, (long)sdelay, (long)buffer_frames);
4840+ } else if (stream == SND_PCM_STREAM_CAPTURE && avail > delay) {
4841+ fprintf(stderr, _("Suspicious buffer position avail > delay (%li total): "
4842+ "avail = %li, delay = %li\n"),
4843+ ++counter, (long)avail, (long)delay);
4844+ } else if (stream == SND_PCM_STREAM_CAPTURE && savail > sdelay) {
4845+ fprintf(stderr, _("Suspicious status buffer position avail > delay (%li total): "
4846+ "avail = %li, delay = %li\n"),
4847+ ++counter, (long)savail, (long)sdelay);
4848 } else if (verbose) {
4849 time(&now);
4850 if (tmr == (time_t) -1) {
4851@@ -1940,19 +1987,27 @@ static void do_test_position(void)
4852 }
4853 if (avail > maxavail)
4854 maxavail = avail;
4855+ if (savail > maxavail)
4856+ maxavail = savail;
4857 if (delay > maxdelay)
4858 maxdelay = delay;
4859+ if (sdelay > maxdelay)
4860+ maxdelay = sdelay;
4861 if (avail < minavail)
4862 minavail = avail;
4863+ if (savail < minavail)
4864+ minavail = savail;
4865 if (delay < mindelay)
4866 mindelay = delay;
4867+ if (sdelay < mindelay)
4868+ mindelay = sdelay;
4869 availsum += avail;
4870 delaysum += delay;
4871 samples++;
4872- if (avail != 0 && now != tmr) {
4873+ if ((maxavail != 0 || maxdelay != 0) && now != tmr) {
4874 fprintf(stderr, "BUFPOS: avg%li/%li "
4875 "min%li/%li max%li/%li (%li) (%li:%li/%li)\n",
4876- (long)(availsum / samples),
4877+ (long)(availsum / samples),
4878 (long)(delaysum / samples),
4879 (long)minavail, (long)mindelay,
4880 (long)maxavail, (long)maxdelay,
4881@@ -1961,6 +2016,10 @@ static void do_test_position(void)
4882 tmr = now;
4883 }
4884 }
4885+ if (verbose == 1) {
4886+ fprintf(stderr, _("Status(R/W) (standalone avail=%li delay=%li):\n"), (long)avail, (long)delay);
4887+ snd_pcm_status_dump(status, log);
4888+ }
4889 }
4890
4891 /*
4892@@ -2495,7 +2554,9 @@ static void voc_play(int fd, int ofs, char *name)
4893 }
4894 } /* while(1) */
4895 __end:
4896- voc_pcm_flush();
4897+ if (!in_aborting) {
4898+ voc_pcm_flush();
4899+ }
4900 free(buf);
4901 }
4902 /* that was a big one, perhaps somebody split it :-) */
4903@@ -2810,9 +2871,11 @@ static void playback_go(int fd, size_t loaded, off64_t count, int rtype, char *n
4904 written += r;
4905 l = 0;
4906 }
4907- snd_pcm_nonblock(handle, 0);
4908- snd_pcm_drain(handle);
4909- snd_pcm_nonblock(handle, nonblock);
4910+ if (!in_aborting) {
4911+ snd_pcm_nonblock(handle, 0);
4912+ snd_pcm_drain(handle);
4913+ snd_pcm_nonblock(handle, nonblock);
4914+ }
4915 }
4916
4917 static int read_header(int *loaded, int header_size)
4918@@ -3268,7 +3331,7 @@ static void playbackv_go(int* fds, unsigned int channels, size_t loaded, off64_t
4919 do {
4920 r = safe_read(fds[0], bufs[0], expected);
4921 if (r < 0) {
4922- perror(names[channel]);
4923+ perror(names[0]);
4924 prg_exit(EXIT_FAILURE);
4925 }
4926 for (channel = 1; channel < channels; ++channel) {
4927@@ -3288,9 +3351,11 @@ static void playbackv_go(int* fds, unsigned int channels, size_t loaded, off64_t
4928 r = r * bits_per_frame / 8;
4929 count -= r;
4930 }
4931- snd_pcm_nonblock(handle, 0);
4932- snd_pcm_drain(handle);
4933- snd_pcm_nonblock(handle, nonblock);
4934+ if (!in_aborting) {
4935+ snd_pcm_nonblock(handle, 0);
4936+ snd_pcm_drain(handle);
4937+ snd_pcm_nonblock(handle, nonblock);
4938+ }
4939 }
4940
4941 static void capturev_go(int* fds, unsigned int channels, off64_t count, int rtype, char **names)
4942diff --git a/axfer/Makefile.in b/axfer/Makefile.in
4943index b25a28e..7b9f1ce 100644
4944--- a/axfer/Makefile.in
4945+++ b/axfer/Makefile.in
4946@@ -1,7 +1,7 @@
4947-# Makefile.in generated by automake 1.16.1 from Makefile.am.
4948+# Makefile.in generated by automake 1.16.2 from Makefile.am.
4949 # @configure_input@
4950
4951-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
4952+# Copyright (C) 1994-2020 Free Software Foundation, Inc.
4953
4954 # This Makefile.in is free software; the Free Software Foundation
4955 # gives unlimited permission to copy and/or distribute it,
4956@@ -95,7 +95,8 @@ bin_PROGRAMS = axfer$(EXEEXT)
4957 subdir = axfer
4958 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
4959 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
4960- $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
4961+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
4962+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
4963 $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
4964 $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
4965 $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
4966@@ -337,8 +338,8 @@ MAINT = @MAINT@
4967 MAKEINFO = @MAKEINFO@
4968 MKDIR_P = @MKDIR_P@
4969 MSGFMT = @MSGFMT@
4970-MSGFMT_015 = @MSGFMT_015@
4971 MSGMERGE = @MSGMERGE@
4972+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
4973 NCURSESW_CFLAGS = @NCURSESW_CFLAGS@
4974 NCURSESW_LIBS = @NCURSESW_LIBS@
4975 NCURSES_CFLAGS = @NCURSES_CFLAGS@
4976@@ -418,6 +419,7 @@ prefix = @prefix@
4977 program_transform_name = @program_transform_name@
4978 psdir = @psdir@
4979 rst2man_available = @rst2man_available@
4980+runstatedir = @runstatedir@
4981 sbindir = @sbindir@
4982 sharedstatedir = @sharedstatedir@
4983 srcdir = @srcdir@
4984diff --git a/axfer/container.c b/axfer/container.c
4985index 566acd0..8c88d5c 100644
4986--- a/axfer/container.c
4987+++ b/axfer/container.c
4988@@ -143,8 +143,8 @@ static int set_nonblock_flag(int fd)
4989 return 0;
4990 }
4991
4992-int container_parser_init(struct container_context *cntr,
4993- const char *const path, unsigned int verbose)
4994+int container_parser_init(struct container_context *cntr, int fd,
4995+ unsigned int verbose)
4996 {
4997 const struct container_parser *parsers[] = {
4998 [CONTAINER_FORMAT_RIFF_WAVE] = &container_parser_riff_wave,
4999@@ -157,8 +157,7 @@ int container_parser_init(struct container_context *cntr,
5000 int err;
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches