13 void die(e,s) int e; char *s; { substdio_putsflush(subfderr,s); _exit(e); }
14 void die_usage() { die(100,"preline: fatal: incorrect usage\n"); }
15 void die_temp() { die(111,"preline: fatal: temporary problem\n"); }
16 void die_read() { die(111,"preline: fatal: unable to read message\n"); }
17 void die_badcmd() { die(100,"preline: fatal: command not found\n"); }
19 int flagufline = 1; char *ufline;
20 int flagrpline = 1; char *rpline;
21 int flagdtline = 1; char *dtline;
24 char outbuf[SUBSTDIO_OUTSIZE];
26 char inbuf[SUBSTDIO_INSIZE];
39 if (!(ufline = env_get("UFLINE"))) die_usage();
40 if (!(rpline = env_get("RPLINE"))) die_usage();
41 if (!(dtline = env_get("DTLINE"))) die_usage();
43 while ((opt = getopt(argc,argv,"frdFRD")) != opteof)
46 case 'f': flagufline = 0; break;
47 case 'r': flagrpline = 0; break;
48 case 'd': flagdtline = 0; break;
49 case 'F': flagufline = 1; break;
50 case 'R': flagrpline = 1; break;
51 case 'D': flagdtline = 1; break;
57 if (!*argv) die_usage();
59 if (pipe(pi) == -1) die_temp();
67 if (fd_move(0,pi[0])) die_temp();
70 if (error_temp(errno)) die_temp();
75 substdio_fdbuf(&ssout,write,pi[1],outbuf,sizeof(outbuf));
76 substdio_fdbuf(&ssin,read,0,inbuf,sizeof(inbuf));
77 if (flagufline) substdio_bputs(&ssout,ufline);
78 if (flagrpline) substdio_bputs(&ssout,rpline);
79 if (flagdtline) substdio_bputs(&ssout,dtline);
80 if (substdio_copy(&ssout,&ssin) == -2) die_read();
81 substdio_flush(&ssout);
84 if (wait_pid(&wstat,pid) == -1) die_temp();
85 if (wait_crashed(wstat)) die_temp();
86 _exit(wait_exitcode(wstat));