summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@perex.cz>2008-09-18 09:40:02 +0200
committerJaroslav Kysela <perex@perex.cz>2008-09-18 09:40:02 +0200
commitf63ff476f3538f519ac8ff0acd4acdab29889ad5 (patch)
treef7f2b9980f110c7910cc6dc18dcda2892c27f702
parent0a8e8d581e5df6f1b13ea009fcdd77c6afcbdc43 (diff)
downloadalsa-utils-f63ff476f3538f519ac8ff0acd4acdab29889ad5.tar.gz
alsactl: Add -g,--ignore option to ignore 'No soundcards found' error
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r--alsactl/alsactl.15
-rw-r--r--alsactl/alsactl.c10
-rw-r--r--alsactl/alsactl.h1
-rw-r--r--alsactl/state.c16
4 files changed, 26 insertions, 6 deletions
diff --git a/alsactl/alsactl.1 b/alsactl/alsactl.1
index d7f30f6..b038a82 100644
--- a/alsactl/alsactl.1
+++ b/alsactl/alsactl.1
@@ -51,6 +51,11 @@ Used with restore command. Try to restore the matching control elements
as much as possible. This option is set as default now.
.TP
+\fI\-g, \-\-ignore\fP
+Used with store and restore commands. Do not show 'No soundcards found'
+and do not set an error exit code when soundcards are not installed.
+
+.TP
\fI\-P, \-\-pedantic\fP
Used with restore command. Don't restore mismatching control elements.
This option was the old default behavior.
diff --git a/alsactl/alsactl.c b/alsactl/alsactl.c
index 57957bf..f846316 100644
--- a/alsactl/alsactl.c
+++ b/alsactl/alsactl.c
@@ -34,6 +34,7 @@
int debugflag = 0;
int force_restore = 1;
+int ignore_nocards = 0;
char *command;
char *statefile = NULL;
@@ -48,7 +49,8 @@ static void help(void)
printf(" -f,--file # configuration file (default " SYS_ASOUNDRC ")\n");
printf(" -F,--force try to restore the matching controls as much as possible\n");
printf(" (default mode)\n");
- printf(" -P,--pedantic don't restore mismatching controls (old default)\n");
+ printf(" -g,--ignore ignore 'No soundcards found' error\n");
+ printf(" -P,--pedantic do not restore mismatching controls (old default)\n");
printf(" -r,--runstate # save restore and init state to this file (only errors)\n");
printf(" default settings is 'no file set'\n");
printf(" -R,--remove remove runstate file at first, otherwise append errors\n");
@@ -75,6 +77,7 @@ int main(int argc, char *argv[])
{"env", 1, NULL, 'E'},
{"initfile", 1, NULL, 'i'},
{"force", 0, NULL, 'F'},
+ {"ignore", 0, NULL, 'g'},
{"pedantic", 0, NULL, 'P'},
{"runstate", 0, NULL, 'r'},
{"remove", 0, NULL, 'R'},
@@ -99,7 +102,7 @@ int main(int argc, char *argv[])
while (1) {
int c;
- if ((c = getopt_long(argc, argv, "hdvf:FE:i:Pr:R", long_option, NULL)) < 0)
+ if ((c = getopt_long(argc, argv, "hdvf:FgE:i:Pr:R", long_option, NULL)) < 0)
break;
switch (c) {
case 'h':
@@ -111,6 +114,9 @@ int main(int argc, char *argv[])
case 'F':
force_restore = 1;
break;
+ case 'g':
+ ignore_nocards = 1;
+ break;
case 'E':
if (putenv(optarg)) {
fprintf(stderr, "environment string '%s' is wrong\n", optarg);
diff --git a/alsactl/alsactl.h b/alsactl/alsactl.h
index 408b145..44d27f1 100644
--- a/alsactl/alsactl.h
+++ b/alsactl/alsactl.h
@@ -1,5 +1,6 @@
extern int debugflag;
extern int force_restore;
+extern int ignore_nocards;
extern char *command;
extern char *statefile;
diff --git a/alsactl/state.c b/alsactl/state.c
index 554020b..576721a 100644
--- a/alsactl/state.c
+++ b/alsactl/state.c
@@ -1507,8 +1507,12 @@ int save_state(const char *file, const char *cardname)
break;
if (card < 0) {
if (first) {
- error("No soundcards found...");
- return -ENODEV;
+ if (ignore_nocards) {
+ return 0;
+ } else {
+ error("No soundcards found...");
+ return -ENODEV;
+ }
}
break;
}
@@ -1606,8 +1610,12 @@ int load_state(const char *file, const char *initfile, const char *cardname)
break;
if (card < 0) {
if (first) {
- error("No soundcards found...");
- return -ENODEV;
+ if (ignore_nocards) {
+ return 0;
+ } else {
+ error("No soundcards found...");
+ return -ENODEV;
+ }
}
break;
}