]> diplodocus.org Git - nmh/blob - docs/historical/mh-6.8.5/sbr/pidstatus.c
Always check that mktemp()/mktemp2() succeeds before trying to
[nmh] / docs / historical / mh-6.8.5 / sbr / pidstatus.c
1 /* pidstatus.c - report child's status */
2 #ifndef lint
3 static char ident[] = "@(#)$Id: pidstatus.c,v 1.4 1993/02/26 21:57:34 jromine Exp $";
4 #endif /* lint */
5
6 #include "../h/mh.h"
7 #include <signal.h>
8 #include <stdio.h>
9
10
11 #ifndef BSD44
12 #ifndef BSD42
13 static char *sigs[] = {
14 NULL,
15 "Hangup",
16 "Interrupt",
17 "Quit",
18 "Illegal instruction",
19 "Trace/BPT trap",
20 "IOT trap",
21 "EMT trap",
22 "Floating exception",
23 "Killed",
24 "Bus error",
25 "Segmentation fault",
26 "Bad system call",
27 "Broken pipe",
28 "Alarm clock",
29 "Terminated",
30 #ifdef SIGURG
31 "Urgent I/O condition",
32 #else
33 NULL,
34 #endif
35 "Stopped (signal)",
36 "Stopped",
37 "Continued",
38 "Child exited",
39 "Stopped (tty input)",
40 "Stopped (tty output)",
41 "Tty input interrupt",
42 "Cputime limit exceeded",
43 "Filesize limit exceeded",
44 NULL
45 };
46 #else
47 extern char *sys_siglist[];
48 #endif /* BSD42 */
49 #endif /* BSD44 defines sys_siglist in signal.h */
50
51 /* \f */
52
53 int pidstatus (status, fp, cp)
54 register int status;
55 register FILE *fp;
56 register char *cp;
57 {
58 int signum;
59
60 if ((status & 0xff00) == 0xff00)
61 return status;
62
63 switch (signum = status & 0x007f) {
64 case OK:
65 if (signum = ((status & 0xff00) >> 8)) {
66 if (cp)
67 fprintf (fp, "%s: ", cp);
68 fprintf (fp, "Exit %d\n", signum);
69 }
70 break;
71
72 case SIGINT:
73 break;
74
75 default:
76 if (cp)
77 fprintf (fp, "%s: ", cp);
78 #ifndef BSD42
79 if (signum >= sizeof sigs || sigs[signum] == NULL)
80 fprintf (fp, "Signal %d", signum);
81 else
82 fprintf (fp, "%s", sigs[signum]);
83 #else /* BSD42 */
84 if (signum >= NSIG)
85 fprintf (fp, "Signal %d", signum);
86 else
87 fprintf (fp, "%s", sys_siglist[signum]);
88 #endif /* BSD42 */
89 fprintf (fp, "%s\n", status & 0x80 ? " (core dumped)" : "");
90 break;
91 }
92
93 return status;
94 }