X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=file_writer.c;h=e90647d230cf7f3f797f648892fa0530198941ab;hp=4a2e04810fcc9355882c8e0fffd7ef2478a2b820;hb=a87d4a87ac7418084eb78f0bcb3accff1388df3a;hpb=9337bed6e84a4068e750fb6597646b45778eeba7 diff --git a/file_writer.c b/file_writer.c index 4a2e0481..e90647d2 100644 --- a/file_writer.c +++ b/file_writer.c @@ -59,15 +59,6 @@ static int file_writer_open(struct writer_node *wn) return -E_FW_OPEN; } -static int file_writer_write(char *data, size_t nbytes, struct writer_node *wn) -{ - struct private_file_writer_data *pfwd = wn->private_data; - int ret = write(pfwd->fd, data, nbytes); - if (ret < 0) - ret = -E_FW_WRITE; - return ret; -} - static int file_writer_pre_select(struct sched *s, struct writer_node *wn) { struct private_file_writer_data *pfwd = wn->private_data; @@ -87,19 +78,21 @@ static int file_writer_post_select(struct sched *s, struct writer_node *wn) { struct private_file_writer_data *pfwd = wn->private_data; struct writer_node_group *wng = wn->wng; - int ret = 0; + int ret; if (!pfwd->check_fd) - return 0; - if (!*wng->loaded) - return 0; + return 1; + if (*wng->loaded <= wn->written) + return 1; if (!FD_ISSET(pfwd->fd, &s->wfds)) - return 0; + return 1; // PARA_INFO_LOG("writing %zd\n", *wng->loaded); - ret = write(pfwd->fd, wng->buf, *wng->loaded); + ret = write(pfwd->fd, wng->buf + wn->written, + *wng->loaded - wn->written); if (ret < 0) - ret = -E_FW_WRITE; - return ret; + return -E_FW_WRITE; + wn->written += ret; + return 1; } static void file_writer_close(struct writer_node *wn) @@ -126,7 +119,6 @@ __malloc void *file_writer_parse_config(char *options) void file_writer_init(struct writer *w) { w->open = file_writer_open; - 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;