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
));