projects
/
paraslash.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
stdout: Switch to the alternative post select method.
[paraslash.git]
/
stdout.c
diff --git
a/stdout.c
b/stdout.c
index eaf0f99f070ae0de81c4f34c9f8cd0a373654c3d..92707ba97b86624b543c7fbaedea74b5ace7a6c3 100644
(file)
--- a/
stdout.c
+++ b/
stdout.c
@@
-1,14
+1,12
@@
/*
/*
- * Copyright (C) 2006-201
0
Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-201
3
Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
/** \file stdout.c Functions that deal with writing to stdout. */
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
/** \file stdout.c Functions that deal with writing to stdout. */
-#include <dirent.h> /* readdir() */
#include <assert.h>
#include <assert.h>
-#include <stdbool.h>
#include "para.h"
#include "list.h"
#include "para.h"
#include "list.h"
@@
-32,7
+30,6
@@
static void stdout_pre_select(struct sched *s, struct task *t)
struct stdout_task *sot = container_of(t, struct stdout_task, task);
int ret;
struct stdout_task *sot = container_of(t, struct stdout_task, task);
int ret;
- t->error = 0;
ret = btr_node_status(sot->btrn, 0, BTR_NT_LEAF);
if (ret > 0)
para_fd_set(STDOUT_FILENO, &s->wfds, &s->max_fileno);
ret = btr_node_status(sot->btrn, 0, BTR_NT_LEAF);
if (ret > 0)
para_fd_set(STDOUT_FILENO, &s->wfds, &s->max_fileno);
@@
-49,7
+46,7
@@
static void stdout_pre_select(struct sched *s, struct task *t)
* This function writes input data from the buffer tree to stdout if \p
* STDOUT_FILENO is writable.
*/
* This function writes input data from the buffer tree to stdout if \p
* STDOUT_FILENO is writable.
*/
-static
void
stdout_post_select(struct sched *s, struct task *t)
+static
int
stdout_post_select(struct sched *s, struct task *t)
{
struct stdout_task *sot = container_of(t, struct stdout_task, task);
struct btr_node *btrn = sot->btrn;
{
struct stdout_task *sot = container_of(t, struct stdout_task, task);
struct btr_node *btrn = sot->btrn;
@@
-57,28
+54,27
@@
static void stdout_post_select(struct sched *s, struct task *t)
char *buf;
size_t sz;
char *buf;
size_t sz;
- t->error = 0;
ret = btr_node_status(btrn, 0, BTR_NT_LEAF);
if (ret < 0)
goto out;
if (ret == 0)
ret = btr_node_status(btrn, 0, BTR_NT_LEAF);
if (ret < 0)
goto out;
if (ret == 0)
- return;
+ return
0
;
if (!FD_ISSET(STDOUT_FILENO, &s->wfds))
if (!FD_ISSET(STDOUT_FILENO, &s->wfds))
- return;
+ return
0
;
for (;;) {
sz = btr_next_buffer(btrn, &buf);
if (sz == 0)
break;
for (;;) {
sz = btr_next_buffer(btrn, &buf);
if (sz == 0)
break;
- ret =
write_nonblock(STDOUT_FILENO, buf, sz, 0
);
+ ret =
xwrite(STDOUT_FILENO, buf, sz
);
if (ret <= 0)
break;
btr_consume(btrn, ret);
}
out:
if (ret < 0)
if (ret <= 0)
break;
btr_consume(btrn, ret);
}
out:
if (ret < 0)
- btr_remove_node(btrn);
-
t->error =
ret;
+ btr_remove_node(
&sot->
btrn);
+
return
ret;
}
/**
* Initialize a stdout task structure with default values.
}
/**
* Initialize a stdout task structure with default values.
@@
-93,7
+89,8
@@
void stdout_set_defaults(struct stdout_task *sot)
int ret;
sot->task.pre_select = stdout_pre_select;
int ret;
sot->task.pre_select = stdout_pre_select;
- sot->task.post_select = stdout_post_select;
+ sot->task.new_post_select = stdout_post_select;
+ sot->task.post_select = NULL;
sprintf(sot->task.status, "stdout");
ret = mark_fd_nonblocking(STDOUT_FILENO);
if (ret >= 0)
sprintf(sot->task.status, "stdout");
ret = mark_fd_nonblocking(STDOUT_FILENO);
if (ret >= 0)