Add UNIT_START errno
[paraslash.git] / file_writer.c
index 4a2e04810fcc9355882c8e0fffd7ef2478a2b820..e90647d230cf7f3f797f648892fa0530198941ab 100644 (file)
@@ -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;