X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=file_writer.c;h=9145ef9fb7ae24432e7e975af0601e965691e398;hp=d8fb3e54b5b2c43df4e4af1a670ba6c97ec2546a;hb=633f7c0f0194cd8ec3a478d820f55dd6a752d915;hpb=2290d9be0703d3f83f38c2f100b1b41ec0790bb3 diff --git a/file_writer.c b/file_writer.c index d8fb3e54..9145ef9f 100644 --- a/file_writer.c +++ b/file_writer.c @@ -24,27 +24,35 @@ #include "write.h" #include "string.h" #include "fd.h" +#include "file_write.cmdline.h" #include "error.h" /** data specific to the file writer */ struct private_file_writer_data { -/** the file descriptor of the output file */ -int fd; -int check_fd; + /** the file descriptor of the output file */ + int fd; + /** non-zero if \a fd was added to the write fd set */ + int check_fd; }; static int file_writer_open(struct writer_node *wn) { struct private_file_writer_data *pfwd = para_calloc( sizeof(struct private_file_writer_data)); - char *tmp = para_tmpname(), *home = para_homedir(), - *filename = make_message("%s/.paraslash/%s", home, tmp); - - free(home); - free(tmp); + struct file_write_args_info *conf = wn->conf; + char *filename; + if (conf->filename_given) + filename = conf->filename_arg; + else { + char *tmp = para_tmpname(), *home = para_homedir(); + filename = make_message("%s/.paraslash/%s", home, tmp); + free(home); + free(tmp); + } wn->private_data = pfwd; pfwd->fd = open(filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); - free(filename); + if (!conf->filename_given) + free(filename); if (pfwd->fd >= 0) return 8192; free(pfwd); @@ -105,6 +113,19 @@ static void file_writer_close(struct writer_node *wn) free(pfwd); } +__malloc void *file_writer_parse_config(char *options) +{ + PARA_INFO_LOG("options: %s\n", options); + struct file_write_args_info *conf + = para_calloc(sizeof(struct file_write_args_info)); + int ret = file_cmdline_parser_string(options, conf, "file_write"); + PARA_INFO_LOG("conf->filename_given: %d\n", conf->filename_given); + if (!ret) + return conf; + free(conf); + return NULL; +} + /** the init function of the file writer */ void file_writer_init(struct writer *w) { @@ -112,6 +133,7 @@ void file_writer_init(struct writer *w) w->write = file_writer_write; w->pre_select = file_writer_pre_select; w->post_select = file_writer_post_select; + w->parse_config = file_writer_parse_config; w->close = file_writer_close; w->shutdown = NULL; /* nothing to do */ }