2 * realtime & multiplexer
3 * reading and parsing commands from some fd
10 static void *cmdi_exception(oop_source *evts, int fd,
11 oop_event evt, void *cmdi_v) {
12 CommandInput *cmdi= cmdi_v;
13 cmdi->out.error(&cmdi->out, "error by command source",
14 "exceptional condition");
18 static void *cmdi_iferr(oop_source *evts, oop_read *cl_read,
19 oop_rd_event evt, const char *errmsg, int errnoval,
20 const char *data, size_t recsz, void *cmdi_v) {
21 CommandInput *cmdi= cmdi_v;
23 cmdi->out.error(&cmdi->out, "read",
24 oop_rd_errmsg(cl_read, evt,
25 errnoval, OOP_RD_STYLE_GETLINE));
29 static void *cmdi_ifok(oop_source *evts, oop_read *cl_read,
30 oop_rd_event evt, const char *errmsg, int errnoval,
31 const char *data, size_t recsz, void *cmdi_v) {
32 CommandInput *cmdi= cmdi_v;
35 if (evt == OOP_RD_EOF) {
36 cmdi->out.error(&cmdi->out,0,0);
41 return cmdi_iferr(evts,cl_read,evt,errmsg,errnoval,data,recsz,cmdi_v);
44 cmdi->doline(&ps, cmdi);
48 void cmdin_new(CommandInput *cmdi, int readfd) {
53 events->on_fd(events, readfd, OOP_EXCEPTION, cmdi_exception, cmdi);
55 cmdi->rd= oop_rd_new_fd(events, readfd, 0,0);
56 if (!cmdi->rd) diee("oop_rd_new_fd");
57 r= oop_rd_read(cmdi->rd, OOP_RD_STYLE_GETLINE, 1024,
60 if (r) diee("oop_rd_read");