[alsa-devel] [RFC][PATCH 23/23] aplay: add a feature to generate PID file

Takashi Sakamoto o-takashi at sakamocchi.jp
Thu Aug 17 14:00:04 CEST 2017


In current implementation of aplay, during transferring data frames, the
program generates a file with PID in given path for an option
'--process-id-file'.

This commit adds a parser for this option. Actual code to generate the
ile is not implemented yet.
---
 aplay/options.c | 20 ++++++++++++++++++--
 aplay/options.h |  1 +
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/aplay/options.c b/aplay/options.c
index 005a7bf..c9d0a13 100644
--- a/aplay/options.c
+++ b/aplay/options.c
@@ -27,6 +27,7 @@ enum no_short_opts {
 	OPT_TEST_NOWAIT,
 	OPT_DUMP_HWPARAMS,
 	OPT_FATAL_ERRORS,
+	OPT_PROCESS_ID_FILE,
 };
 
 static long parse_l(const char *str, int *err)
@@ -200,7 +201,8 @@ static int apply_policies(struct context_options *opts,
 			  const char *node_literal,
 			  const char *sample_format_literal,
 			  const char *vu_mode_literal,
-			  const char *chmap_literal)
+			  const char *chmap_literal,
+			  const char *pidfile_name_literal)
 {
 	int err;
 
@@ -247,6 +249,15 @@ static int apply_policies(struct context_options *opts,
 			return -ENOMEM;
 	}
 
+	if (pidfile_name_literal) {
+		opts->pidfile_name = strdup(pidfile_name_literal);
+		if (opts->pidfile_name == NULL) {
+			printf(_("Fail to allocate for pidfile name: %s\n"),
+			       pidfile_name_literal);
+			return -ENOMEM;
+		}
+	}
+
 	if (opts->samples_per_frame > 0) {
 		if (opts->samples_per_frame < 1 ||
 		    opts->samples_per_frame > 256) {
@@ -384,6 +395,7 @@ int context_options_init(struct context_options *opts, int argc,
 		{"vumeter",		1, 0, 'V'},
 		{"chmap",		1, 0, 'm'},
 		{"interactive",		0, 0, 'i'},
+		{"process-id-file",	1, 0, OPT_PROCESS_ID_FILE},
 		{NULL,			0, 0, 0},
 	};
 	const char *cntr_format_literal = NULL;
@@ -391,6 +403,7 @@ int context_options_init(struct context_options *opts, int argc,
 	const char *sample_format_literal = NULL;
 	const char *vu_mode_literal = NULL;
 	const char *chmap_literal = NULL;
+	const char *pidfile_name_literal = NULL;
 	int c;
 	int err = 0;
 
@@ -464,6 +477,8 @@ int context_options_init(struct context_options *opts, int argc,
 			chmap_literal = optarg;
 		else if (c == 'i')
 			opts->interactive = true;
+		else if (c == OPT_PROCESS_ID_FILE)
+			pidfile_name_literal = optarg;
 		else
 			continue;
 
@@ -477,7 +492,8 @@ int context_options_init(struct context_options *opts, int argc,
 
 	return apply_policies(opts, direction, cntr_format_literal,
 			      node_literal, sample_format_literal,
-			      vu_mode_literal, chmap_literal);
+			      vu_mode_literal, chmap_literal,
+			      pidfile_name_literal);
 }
 
 /*
diff --git a/aplay/options.h b/aplay/options.h
index 48ba859..0189432 100644
--- a/aplay/options.h
+++ b/aplay/options.h
@@ -58,6 +58,7 @@ struct context_options {
 
 	char **paths;
 	unsigned int path_count;
+	char *pidfile_name;
 };
 
 int context_options_init(struct context_options *opts, int argc,
-- 
2.11.0



More information about the Alsa-devel mailing list