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