projects
/
paraslash.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Remove default.jpg.
[paraslash.git]
/
stdout.c
diff --git
a/stdout.c
b/stdout.c
index c616079139b2a41ace85e73aed7616257f0f550f..d64586bccd9cdd12ffe743247680d8686ee1c002 100644
(file)
--- a/
stdout.c
+++ b/
stdout.c
@@
-1,16
+1,15
@@
/*
/*
- * Copyright (C) 2006 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006
-2009
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.
*/
-/** \file stdout.c
functions that deal with writing to stdout
*/
+/** \file stdout.c
Functions that deal with writing to stdout.
*/
#include <dirent.h> /* readdir() */
#include <assert.h>
#include "para.h"
#include <dirent.h> /* readdir() */
#include <assert.h>
#include "para.h"
-#include "string.h"
#include "list.h"
#include "sched.h"
#include "fd.h"
#include "list.h"
#include "sched.h"
#include "fd.h"
@@
-18,23
+17,23
@@
#include "stdout.h"
/**
#include "stdout.h"
/**
- *
the pre_select function of the stdout task
+ *
The pre_select function of the stdout task.
*
*
- * \param s
the scheduler this task was registered to
- * \param t
the task structure of the stdout task
+ * \param s
The scheduler this task was registered to.
+ * \param t
The task structure of the stdout task.
*
* This function is always successful. If there is data available in the input
* buffer, it adds \p STDOUT_FILENO to the write fd set of \a s.
*/
*
* This function is always successful. If there is data available in the input
* buffer, it adds \p STDOUT_FILENO to the write fd set of \a s.
*/
-void stdout_pre_select(struct sched *s, struct task *t)
+
static
void stdout_pre_select(struct sched *s, struct task *t)
{
{
- struct stdout_task *sot =
t->private_data
;
+ struct stdout_task *sot =
container_of(t, struct stdout_task, task)
;
- t->
ret = 1
;
+ t->
error = 0
;
sot->check_fd = 0;
if (!*sot->loaded) {
sot->check_fd = 0;
if (!*sot->loaded) {
- if (*sot->input_e
of
) {
- t->
ret = -E_STDOUT_EOF
;
+ if (*sot->input_e
rror < 0
) {
+ t->
error = *sot->input_error
;
s->timeout.tv_sec = 0;
s->timeout.tv_usec = 1;
}
s->timeout.tv_sec = 0;
s->timeout.tv_usec = 1;
}
@@
-45,61
+44,57
@@
void stdout_pre_select(struct sched *s, struct task *t)
}
/**
}
/**
- *
the post select function of the stdout task
+ *
The post select function of the stdout task.
*
*
- * \param s
the scheduler this task was registered to
- * \param t
the task structure of the stdout task
+ * \param s
The scheduler this task was registered to.
+ * \param t
The task structure of the stdout task.
*
* This function checks if \p STDOUT_FILENO was included by in the write fd set
* of \a s during the previous pre_select call. If yes, and \p STDOUT_FILENO
* appeears to be writable, the data loaded in the input buffer is written to
* stdout.
*/
*
* This function checks if \p STDOUT_FILENO was included by in the write fd set
* of \a s during the previous pre_select call. If yes, and \p STDOUT_FILENO
* appeears to be writable, the data loaded in the input buffer is written to
* stdout.
*/
-void stdout_post_select(struct sched *s, struct task *t)
+
static
void stdout_post_select(struct sched *s, struct task *t)
{
{
- struct stdout_task *sot =
t->private_data
;
+ struct stdout_task *sot =
container_of(t, struct stdout_task, task)
;
ssize_t ret;
ssize_t ret;
- t->
ret = 1
;
+ t->
error = 0
;
if (!sot->check_fd) {
if (!sot->check_fd) {
- if (
*sot->input_eof
)
- t->
ret = -E_STDOUT_EOF
;
+ if (
!*sot->loaded && *sot->input_error < 0
)
+ t->
error = *sot->input_error
;
return;
}
if (!FD_ISSET(STDOUT_FILENO, &s->wfds))
return;
return;
}
if (!FD_ISSET(STDOUT_FILENO, &s->wfds))
return;
-
t->ret = -E_STDOUT_WRITE
;
- ret = write(STDOUT_FILENO, sot->buf, *sot->loaded);
- if (ret <= 0)
+
ret = write(STDOUT_FILENO, *sot->bufp, *sot->loaded)
;
+ if (ret < 0) {
+ t->error = -ERRNO_TO_PARA_ERROR(errno);
return;
return;
+ }
*sot->loaded -= ret;
if (*sot->loaded)
*sot->loaded -= ret;
if (*sot->loaded)
- memmove(sot->buf, sot->buf + ret, *sot->loaded);
- t->ret = 1;
-}
-
-static void stdout_default_event_handler(struct task *t)
-{
- PARA_NOTICE_LOG("%p: %s\n", t, PARA_STRERROR(-t->ret));
- unregister_task(t);
+ memmove(*sot->bufp, *sot->bufp + ret, *sot->loaded);
}
/**
}
/**
- *
initialize a stdout task structure with default values
+ *
Initialize a stdout task structure with default values.
*
*
- * \param sot
the stdout task structure
+ * \param sot
The stdout task structure.
*
* This fills in the pre/post select function poinzters of the task structure
*
* This fills in the pre/post select function poinzters of the task structure
- * given by \a sot. It also sets up a default error handler which unregisters
- * the task on errors and clears the eof flag of \a sot.
+ * given by \a sot.
*/
void stdout_set_defaults(struct stdout_task *sot)
{
*/
void stdout_set_defaults(struct stdout_task *sot)
{
- sot->task.private_data = sot;
+ int ret;
+
sot->task.pre_select = stdout_pre_select;
sot->task.post_select = stdout_post_select;
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_nonblock(STDOUT_FILENO);
sprintf(sot->task.status, "stdout writer");
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);
}
}