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