9 void stdin_pre_select(struct sched
*s
, struct task
*t
)
11 struct stdin_task
*sit
= t
->private_data
;
12 if (sit
->loaded
< sit
->bufsize
)
13 para_fd_set(STDIN_FILENO
, &s
->rfds
, &s
->max_fileno
);
14 t
->ret
= 1; /* success */
17 void stdin_post_select(struct sched
*s
, struct task
*t
)
19 struct stdin_task
*sit
= t
->private_data
;
23 if (sit
->loaded
>= sit
->bufsize
)
25 if (!FD_ISSET(STDIN_FILENO
, &s
->rfds
))
27 ret
= read(STDIN_FILENO
, sit
->buf
+ sit
->loaded
, sit
->bufsize
- sit
->loaded
);
29 t
->ret
= -E_STDIN_READ
;
35 "%p stdin reader: loaded = %d, ret = %d",
36 sit
, sit
->loaded
, t
->ret
);
40 void stdin_init(struct stdin_task
*sit
)
42 sit
->task
.private_data
= sit
;
43 sit
->task
.pre_select
= stdin_pre_select
;
44 sit
->task
.post_select
= stdin_post_select
;
45 sit
->task
.flags
= POST_EOF_IS_ERROR
;
46 sprintf(sit
->task
.status
, "%p stdin reader: initialized", &sit
->task
);