-/*
- * Copyright (C) 2006-2014 Andre Noll <maan@systemlinux.org>
- *
- * Licensed under the GPL v2. For licencing details see COPYING.
- */
+/* Copyright (C) 2006 Andre Noll <maan@tuebingen.mpg.de>, see file COPYING. */
/** \file stdin.c Functions that deal with reading from stdin. */
-#include <assert.h>
#include <regex.h>
#include "para.h"
#include "buffer_tree.h"
#include "string.h"
-/**
- * The pre_select function of the stdin task.
- *
- * \param s The scheduler this task was registered to.
- * \param t The task structure of the stdin task.
- *
- * This function is always successful. If there is space left in the
- * buffer of the stdin task, it adds \p STDIN_FILENO to the read fd set
- * of \a s.
+/*
+ * If there is space left in the buffer of the stdin task add STDIN_FILENO to
+ * the read fd set of s.
*/
-static void stdin_pre_select(struct sched *s, struct task *t)
+static void stdin_pre_select(struct sched *s, void *context)
{
- struct stdin_task *sit = task_context(t);
+ struct stdin_task *sit = context;
int ret;
ret = btr_node_status(sit->btrn, 0, BTR_NT_ROOT);
sched_request_timeout_ms(100, s);
}
-/**
- * The post select function of the stdin task.
- *
- * \param s The scheduler this task was registered to.
- * \param t The task structure of the stdin task.
- *
- * This function checks if \p STDIN_FILENO was included by in the read fd set
- * of \a s during the previous pre_select call. If yes, and \p STDIN_FILENO
- * appears to be readable, data is read from stdin and fed into the buffer
- * tree.
+/*
+ * This function checks if STDIN_FILENO was included by in the read fd set of s
+ * during the previous pre_select call. If so, and if STDIN_FILENO is readable,
+ * data is read from stdin and fed into the buffer tree.
*/
-static int stdin_post_select(struct sched *s, struct task *t)
+static int stdin_post_select(struct sched *s, void *context)
{
- struct stdin_task *sit = task_context(t);
+ struct stdin_task *sit = context;
ssize_t ret;
size_t sz, n;
char *buf = NULL;
exit(EXIT_FAILURE);
}
sit->fd_flags = ret;
- sit->must_set_nonblock_flag = (sit->fd_flags & O_NONBLOCK) == 0;
+ sit->must_set_nonblock_flag = (sit->fd_flags & O_NONBLOCK) == 0
+ && !isatty(STDIN_FILENO);
sit->task = task_register(&ti, s);
}