Commit | Line | Data |
---|---|---|
ad787160 C |
1 | /* pidstatus.c - report child's status */ |
2 | #ifndef lint | |
ed554bc5 | 3 | static char ident[] = "@(#)$Id: pidstatus.c,v 1.4 1993/02/26 21:57:34 jromine Exp $"; |
ad787160 C |
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 | } |