audiod: Deprecate the --no_default_filters option.
[paraslash.git] / stdin.c
diff --git a/stdin.c b/stdin.c
index 79a9a3231d8a675c94f49ee6e0c0a98069ae6d0c..ac1581d12f22a473919633d2e8a5f213c55e2202 100644 (file)
--- a/stdin.c
+++ b/stdin.c
@@ -1,14 +1,12 @@
 /*
- * Copyright (C) 2006-2009 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2012 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
 
 /** \file stdin.c Functions that deal with reading from stdin. */
 
-#include <dirent.h> /* readdir() */
 #include <assert.h>
-#include <stdbool.h>
 #include <regex.h>
 
 #include "para.h"
@@ -61,7 +59,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;
-       size_t sz;
+       size_t sz, n;
        char *buf = NULL;
 
        t->error = 0;
@@ -70,8 +68,6 @@ static void stdin_post_select(struct sched *s, struct task *t)
                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;
@@ -81,15 +77,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);
-       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);
@@ -111,7 +103,7 @@ void stdin_set_defaults(struct stdin_task *sit)
 
        sit->task.pre_select = stdin_pre_select;
        sit->task.post_select = stdin_post_select;
-       sit->btrp = btr_pool_new("stdin", 64 * 1024);
+       sit->btrp = btr_pool_new("stdin", 128 * 1024);
        sprintf(sit->task.status, "stdin reader");
        ret = mark_fd_nonblocking(STDIN_FILENO);
        if (ret >= 0)