- ret = 1;
-out:
- if (ret > 0)
- return g;
- free(g);
- return NULL;
-}
-
-__noreturn static void print_help_and_die(void)
-{
- int d = conf.detailed_help_given;
- const char **p = d? write_args_info_detailed_help
- : write_args_info_help;
-
- printf_or_die("%s\n\n", WRITE_CMDLINE_PARSER_PACKAGE "-"
- WRITE_CMDLINE_PARSER_VERSION);
- printf_or_die("%s\n\n", write_args_info_usage);
- for (; *p; p++)
- printf_or_die("%s\n", *p);
- print_writer_helps(d);
- exit(0);
-}
-
-/*
- TODO: check wav, initial delay, multiple writers, non-default writers
- */
-static int main_btr(struct sched *s)
-{
- int i, ret;
- struct check_wav_task_btr _cwt, *cwt = &_cwt;
- struct writer_node **wns;
-
- sit.btrn = btr_new_node("stdin", NULL /* stdin has no parent */, NULL, NULL);
- stdin_set_defaults(&sit);
- register_task(&sit.task);
-
- cwt->state = CWS_NEED_HEADER;
- cwt->btrn = btr_new_node("check wav", sit.btrn, check_wav_exec, cwt);
- sprintf(cwt->task.status, "check wav");
- cwt->task.pre_select = check_wav_pre_select_btr;
- cwt->task.post_select = check_wav_post_select_btr;
- cwt->task.error = 0;
- register_task(&cwt->task);
-
- wns = para_malloc(conf.writer_given * sizeof(*wns));
-
- for (i = 0; i < conf.writer_given; i++) {
- struct writer_node *wn = para_calloc(sizeof(*wn));
- struct writer *w;
- const char *name;
-
- ret = -E_WRITE_SYNTAX;
- wn->conf = check_writer_arg(conf.writer_arg[i],
- &wn->writer_num);
- if (!wn->conf)
- goto out;
- w = writers + wn->writer_num;
- name = writer_names[wn->writer_num];
- wn->btrn = btr_new_node(name, cwt->btrn, w->execute, wn);
- sprintf(wn->task.status, "%s", name);
- w->open(wn);
- wn->task.post_select = w->post_select_btr;
- wn->task.pre_select = w->pre_select_btr;
- register_task(&wn->task);
- wns[i] = wn;
+ s.default_timeout.tv_sec = 10;
+ s.default_timeout.tv_usec = 50000;
+ ret = schedule(&s);
+ if (ret >= 0) {
+ int j, ts;
+ for (j = 0; j < n; j++) {
+ struct writer_node *wn = wns + j;
+ ts = task_status(wn->task);
+ assert(ts < 0);
+ if (ts != -E_WRITE_COMMON_EOF && ts != -E_BTR_EOF) {
+ const char *name = writer_name(wn->wid);
+ PARA_ERROR_LOG("%s: %s\n", name,
+ para_strerror(-ts));
+ if (ret >= 0)
+ ret = ts;
+ }
+ }