summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
85663a1)
As noted by Gerrit Renker, audiod refused to start if the --config_file
option was not given and the default config file does not exist.
Fix this bug and rename some of the init functions to make the naming
more consistent.
static void parse_config_or_die(void)
{
static void parse_config_or_die(void)
{
char *config_file;
struct audiod_cmdline_parser_params params = {
.override = 0,
char *config_file;
struct audiod_cmdline_parser_params params = {
.override = 0,
config_file = make_message("%s/.paraslash/audiod.conf", home);
free(home);
}
config_file = make_message("%s/.paraslash/audiod.conf", home);
free(home);
}
- if (conf.config_file_given && !file_exists(config_file)) {
+ ret = file_exists(config_file);
+ if (conf.config_file_given && !ret) {
PARA_EMERG_LOG("can not read config file %s\n", config_file);
goto err;
}
PARA_EMERG_LOG("can not read config file %s\n", config_file);
goto err;
}
- if (audiod_cmdline_parser_config_file(config_file, &conf, ¶ms)) {
- PARA_EMERG_LOG("parse error in config file\n");
- goto err;
- }
+ if (ret)
+ audiod_cmdline_parser_config_file(config_file, &conf, ¶ms);
free(config_file);
daemon_set_loglevel(conf.loglevel_arg);
return;
free(config_file);
daemon_set_loglevel(conf.loglevel_arg);
return;
-static int init_writers(void)
+static int parse_writer_args(void)
{
int i, ret, nw;
char *cmd;
struct audio_format_info *a;
{
int i, ret, nw;
char *cmd;
struct audio_format_info *a;
- init_supported_writers();
nw = PARA_MAX(1U, conf.writer_given);
PARA_INFO_LOG("maximal number of writers: %d\n", nw);
FOR_EACH_AUDIO_FORMAT(i) {
nw = PARA_MAX(1U, conf.writer_given);
PARA_INFO_LOG("maximal number of writers: %d\n", nw);
FOR_EACH_AUDIO_FORMAT(i) {
-static int init_receivers(void)
+static int parse_receiver_args(void)
{
int i, ret, receiver_num;
char *cmd = NULL;
struct audio_format_info *a;
{
int i, ret, receiver_num;
char *cmd = NULL;
struct audio_format_info *a;
- for (i = 0; receivers[i].name; i++) {
- PARA_INFO_LOG("initializing %s receiver\n", receivers[i].name);
- receivers[i].init(&receivers[i]);
- }
for (i = conf.receiver_given - 1; i >= 0; i--) {
char *arg = conf.receiver_arg[i];
char *recv_arg = strchr(arg, ':');
for (i = conf.receiver_given - 1; i >= 0; i--) {
char *arg = conf.receiver_arg[i];
char *recv_arg = strchr(arg, ':');
-static int init_filters(void)
+static int parse_filter_args(void)
nf = PARA_MAX(1U, conf.filter_given);
PARA_INFO_LOG("maximal number of filters: %d\n", nf);
FOR_EACH_AUDIO_FORMAT(i) {
nf = PARA_MAX(1U, conf.filter_given);
PARA_INFO_LOG("maximal number of filters: %d\n", nf);
FOR_EACH_AUDIO_FORMAT(i) {
-static int init_stream_io(void)
+static int parse_stream_args(void)
+ ret = parse_receiver_args();
- ret = init_receivers();
+ ret = parse_filter_args();
+ ret = parse_writer_args();
if (ret < 0)
return ret;
return 1;
if (ret < 0)
return ret;
return 1;
- audiod_cmdline_parser_ext(argc, argv, &conf, ¶ms);
+ if (audiod_cmdline_parser_ext(argc, argv, &conf, ¶ms))
+ exit(EXIT_FAILURE);
HANDLE_VERSION_FLAG("audiod", conf);
HANDLE_VERSION_FLAG("audiod", conf);
+ /* init receivers/filters/writers early to make help work */
+ recv_init();
+ filter_init();
+ writer_init();
if (conf.help_given || conf.detailed_help_given)
print_help_and_die();
drop_privileges_or_die(conf.user_arg, conf.group_arg);
parse_config_or_die();
if (conf.help_given || conf.detailed_help_given)
print_help_and_die();
drop_privileges_or_die(conf.user_arg, conf.group_arg);
parse_config_or_die();
daemon_set_flag(DF_LOG_TIME);
daemon_set_flag(DF_LOG_HOSTNAME);
daemon_set_flag(DF_LOG_LL);
daemon_set_flag(DF_LOG_TIME);
daemon_set_flag(DF_LOG_HOSTNAME);
daemon_set_flag(DF_LOG_LL);
daemon_set_logfile(conf.logfile_arg);
daemon_open_log_or_die();
}
daemon_set_logfile(conf.logfile_arg);
daemon_open_log_or_die();
}
- init_colors_or_die();
- i = init_stream_io();
- if (i < 0) {
- PARA_EMERG_LOG("init stream io error: %s\n", para_strerror(-i));
+ ret = parse_stream_args();
+ if (ret < 0) {
+ PARA_EMERG_LOG("%s\n", para_strerror(-ret));
exit(EXIT_FAILURE);
}
log_welcome("para_audiod");
exit(EXIT_FAILURE);
}
log_welcome("para_audiod");
stdin_set_defaults(sit);
sit->buf = para_malloc(sit->bufsize),
stdin_set_defaults(sit);
sit->buf = para_malloc(sit->bufsize),
ret = parse_config(argc, argv);
if (ret < 0)
goto out;
ret = parse_config(argc, argv);
if (ret < 0)
goto out;
};
void close_filters(struct filter_chain *fc);
};
void close_filters(struct filter_chain *fc);
-void filter_init(struct filter *all_filters);
int check_filter_arg(char *filter_arg, void **conf);
void filter_pre_select(__a_unused struct sched *s, struct task *t);
void print_filter_helps(int detailed);
int check_filter_arg(char *filter_arg, void **conf);
void filter_pre_select(__a_unused struct sched *s, struct task *t);
void print_filter_helps(int detailed);
-void filter_init(struct filter *all_filters)
{
int i;
FOR_EACH_SUPPORTED_FILTER(i)
{
int i;
FOR_EACH_SUPPORTED_FILTER(i)
- all_filters[i].init(all_filters + i);
+ filters[i].init(filters + i);
memset(&sot, 0, sizeof(struct stdout_task));
memset(&rn, 0, sizeof(struct receiver_node));
memset(&sot, 0, sizeof(struct stdout_task));
memset(&rn, 0, sizeof(struct receiver_node));
- FOR_EACH_RECEIVER(ret)
- receivers[ret].init(&receivers[ret]);
ret = -E_RECV_SYNTAX;
rn.conf = parse_config(argc, argv, &receiver_num);
if (!rn.conf) {
ret = -E_RECV_SYNTAX;
rn.conf = parse_config(argc, argv, &receiver_num);
if (!rn.conf) {
/** Iterate over all available receivers. */
#define FOR_EACH_RECEIVER(i) for (i = 0; receivers[i].name; i++)
/** Iterate over all available receivers. */
#define FOR_EACH_RECEIVER(i) for (i = 0; receivers[i].name; i++)
void *check_receiver_arg(char *ra, int *receiver_num);
void print_receiver_helps(int detailed);
void *check_receiver_arg(char *ra, int *receiver_num);
void print_receiver_helps(int detailed);
#include "string.h"
DEFINE_RECEIVER_ARRAY;
#include "string.h"
DEFINE_RECEIVER_ARRAY;
+
+/**
+ * Call the init function of each paraslash receiver.
+ */
+void recv_init(void)
+{
+ int i;
+
+ FOR_EACH_RECEIVER(i)
+ receivers[i].init(&receivers[i]);
+}
+
static void *parse_receiver_args(int receiver_num, char *options)
{
struct receiver *r = &receivers[receiver_num];
static void *parse_receiver_args(int receiver_num, char *options)
{
struct receiver *r = &receivers[receiver_num];
printf_or_die("\n\n");
FOR_EACH_RECEIVER(i) {
struct receiver *r = receivers + i;
printf_or_die("\n\n");
FOR_EACH_RECEIVER(i) {
struct receiver *r = receivers + i;
if (!r->help.short_help)
continue;
printf_or_die("Options for %s:\n", r->name);
if (!r->help.short_help)
continue;
printf_or_die("Options for %s:\n", r->name);
struct check_wav_task *cwt = &the_check_wav_task;
struct initial_delay_task *idt = &the_initial_delay_task;
struct check_wav_task *cwt = &the_check_wav_task;
struct initial_delay_task *idt = &the_initial_delay_task;
- init_supported_writers();
write_cmdline_parser(argc, argv, &conf);
HANDLE_VERSION_FLAG("write", conf);
if (conf.help_given || conf.detailed_help_given)
write_cmdline_parser(argc, argv, &conf);
HANDLE_VERSION_FLAG("write", conf);
if (conf.help_given || conf.detailed_help_given)
- * call the init function of each supported paraslash writer
+ * Call the init function of each supported paraslash writer.
-void init_supported_writers(void)
int wng_open(struct writer_node_group *g);
void wng_close(struct writer_node_group *g);
struct writer_node_group *wng_new(unsigned num_writers);
int wng_open(struct writer_node_group *g);
void wng_close(struct writer_node_group *g);
struct writer_node_group *wng_new(unsigned num_writers);
-void init_supported_writers(void);
void *check_writer_arg(const char *wa, int *writer_num);
struct writer_node_group *setup_default_wng(void);
void print_writer_helps(int detailed);
void *check_writer_arg(const char *wa, int *writer_num);
struct writer_node_group *setup_default_wng(void);
void print_writer_helps(int detailed);