- 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;
+ struct writer_node *wn = context;
+ struct private_file_write_data *pfwd = wn->private_data;
+ struct btr_node *btrn = wn->btrn;
+ int ret;
+ char *buf;
+ size_t bytes;
+
+ ret = task_get_notification(wn->task);
+ if (ret < 0)
+ goto out;
+ ret = btr_node_status(btrn, wn->min_iqs, BTR_NT_LEAF);
+ if (ret <= 0)
+ goto out;
+ if (!pfwd) {
+ ret = prepare_output_file(wn);
+ goto out;
+ }
+ if (!FD_ISSET(pfwd->fd, &s->wfds))
+ return 0;
+ bytes = btr_next_buffer(btrn, &buf);
+ assert(bytes > 0);
+ //PARA_INFO_LOG("writing %zu\n", bytes);
+ ret = xwrite(pfwd->fd, buf, bytes);
+ if (ret < 0)
+ goto out;
+ btr_consume(btrn, ret);
+out:
+ if (ret < 0)
+ btr_remove_node(&wn->btrn);
+ return ret;