server: Include git version in output of com_si().
[paraslash.git] / stdin.c
diff --git a/stdin.c b/stdin.c
index 5fc91c9..e625f37 100644 (file)
--- a/stdin.c
+++ b/stdin.c
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -61,7 +61,7 @@ static void stdin_post_select(struct sched *s, struct task *t)
 {
        struct stdin_task *sit = container_of(t, struct stdin_task, task);
        ssize_t ret;
 {
        struct stdin_task *sit = container_of(t, struct stdin_task, task);
        ssize_t ret;
-       size_t sz;
+       size_t sz, n;
        char *buf = NULL;
 
        t->error = 0;
        char *buf = NULL;
 
        t->error = 0;
@@ -70,8 +70,6 @@ static void stdin_post_select(struct sched *s, struct task *t)
                goto err;
        if (ret == 0)
                return;
                goto err;
        if (ret == 0)
                return;
-       if (!FD_ISSET(STDIN_FILENO, &s->rfds))
-               return;
        sz = btr_pool_get_buffer(sit->btrp, &buf);
        if (sz == 0)
                return;
        sz = btr_pool_get_buffer(sit->btrp, &buf);
        if (sz == 0)
                return;
@@ -81,15 +79,11 @@ static void stdin_post_select(struct sched *s, struct task *t)
         * reference can not be freed, we're stuck.
         */
        sz = PARA_MIN(sz, btr_pool_size(sit->btrp) / 2);
         * reference can not be freed, we're stuck.
         */
        sz = PARA_MIN(sz, btr_pool_size(sit->btrp) / 2);
-       ret = read(STDIN_FILENO, buf, sz);
-       if (ret < 0)
-               ret = -ERRNO_TO_PARA_ERROR(errno);
-       if (ret == 0)
-               ret = -E_STDIN_EOF;
-       if (ret < 0)
-               goto err;
-       btr_add_output_pool(sit->btrp, ret, sit->btrn);
-       return;
+       ret = read_nonblock(STDIN_FILENO, buf, sz, &s->rfds, &n);
+       if (n > 0)
+               btr_add_output_pool(sit->btrp, n, sit->btrn);
+       if (ret >= 0)
+               return;
 err:
        btr_remove_node(sit->btrn);
        //btr_pool_free(sit->btrp);
 err:
        btr_remove_node(sit->btrn);
        //btr_pool_free(sit->btrp);