X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=write.c;h=9762c40cd8e2b85dab8e0281eed1adc4c5acae86;hb=f2dfd6d47a71433c530773cfbf4039de8b065369;hp=6b574414b6b13c227c98b008addd28f4b2302b33;hpb=af20b849aa8b081bd20c47bda4874d6ea6ee9365;p=paraslash.git diff --git a/write.c b/write.c index 6b574414..9762c40c 100644 --- a/write.c +++ b/write.c @@ -165,6 +165,41 @@ __noreturn static void print_help_and_die(void) exit(0); } +/* + * Parse config and register a task for a writer node. + * + * \param arg Command line arguments. + * \param parent The new node will be a child of \a parent. + * \param wn The writer node. + * + * If arg is \p NULL, the OS-dependent default writer is used with no + * arguments. The default writers are alsa for Linux, osx for OS X, oss for + * *BSD, and the file writer if the default writer is not supported. + * + * Once the writer configuration has been retrieved from the ->parse_config + * callback a writer node is created, its buffer tree node is added to the + * buffer tree as a child of the given parent. + * + * Finally, the new writer node's task structure is initialized and registered + * to the paraslash scheduler. + * + * \return Standard. + */ +static int setup_writer_node(const char *arg, struct btr_node *parent, + struct writer_node *wn) +{ + if (arg) + wn->conf = check_writer_arg(arg, &wn->writer_num); + else { + wn->writer_num = DEFAULT_WRITER; + wn->conf = writers[DEFAULT_WRITER].parse_config_or_die(""); + } + if (!wn->conf) + return -E_WRITE_COMMON_SYNTAX; + register_writer_node(wn, parent); + return 1; +} + static int main_btr(struct sched *s) { int i, ret;