Always check the return value of mark_fd_nonblocking().
[paraslash.git] / stdout.c
index fe188c9a0f45499af57585a2d04f147916e89072..2215f998abb6e1fb6e8a508df3b1ee8433fb795a 100644 (file)
--- a/stdout.c
+++ b/stdout.c
@@ -33,8 +33,8 @@ static void stdout_pre_select(struct sched *s, struct task *t)
        t->ret = 1;
        sot->check_fd = 0;
        if (!*sot->loaded) {
-               if (*sot->input_eof) {
-                       t->ret = -E_STDOUT_EOF;
+               if (*sot->input_error) {
+                       t->ret = *sot->input_error;
                        s->timeout.tv_sec = 0;
                        s->timeout.tv_usec = 1;
                }
@@ -62,8 +62,8 @@ static void stdout_post_select(struct sched *s, struct task *t)
 
        t->ret = 1;
        if (!sot->check_fd) {
-               if (*sot->input_eof)
-                       t->ret = -E_STDOUT_EOF;
+               if (*sot->input_error)
+                       t->ret = *sot->input_error;
                return;
        }
        if (!FD_ISSET(STDOUT_FILENO, &s->wfds))
@@ -80,7 +80,7 @@ static void stdout_post_select(struct sched *s, struct task *t)
 
 static void stdout_default_event_handler(struct task *t)
 {
-       PARA_NOTICE_LOG("%p: %s\n", t, PARA_STRERROR(-t->ret));
+       PARA_NOTICE_LOG("%p: %s\n", t, para_strerror(-t->ret));
        unregister_task(t);
 }
 
@@ -95,11 +95,17 @@ static void stdout_default_event_handler(struct task *t)
  */
 void stdout_set_defaults(struct stdout_task *sot)
 {
+       int ret;
+
        sot->task.private_data = sot;
        sot->task.pre_select = stdout_pre_select;
        sot->task.post_select = stdout_post_select;
        sot->task.event_handler = stdout_default_event_handler;
-       sot->eof = 0;
-       mark_fd_nonblocking(STDOUT_FILENO);
+       sot->error = 0;
        sprintf(sot->task.status, "stdout writer");
+       ret = mark_fd_nonblocking(STDOUT_FILENO);
+       if (ret >= 0)
+               return;
+       PARA_EMERG_LOG("%s\n", para_strerror(-ret));
+       exit(EXIT_FAILURE);
 }