1/*
2 * Copyright 2002-2011, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT license.
4 *
5 * Author:
6 *		Daniel Reinhold (danielre@users.sf.net)
7 *		Ingo Weinhold, ingo_weinhold@gmx.de
8 */
9
10
11#include <string.h>
12
13#include <errno.h>
14#include <signal.h>
15#include <stdio.h>
16
17#include <errno_private.h>
18#include <signal_defs.h>
19
20
21static const char* const kInvalidSignalNumberText = "Bogus signal number";
22
23
24const char * const
25sys_siglist[NSIG] = {
26	/*  0 */				"Signal 0",
27	/*  1 - SIGHUP */		"Hangup",
28	/*  2 - SIGINT  */		"Interrupt",
29	/*  3 - SIGQUIT */		"Quit",
30	/*  4 - SIGILL */		"Illegal instruction",
31	/*  5 - SIGCHLD */		"Child exited",
32	/*  6 - SIGABRT */		"Abort",
33	/*  7 - SIGPIPE */		"Broken pipe",
34	/*  8 - SIGFPE */		"Floating point exception",
35	/*  9 - SIGKILL */		"Killed (by death)",
36	/* 10 - SIGSTOP */		"Stopped",
37	/* 11 - SIGSEGV */		"Segmentation violation",
38	/* 12 - SIGCONT */		"Continued",
39	/* 13 - SIGTSTP */		"Stopped (tty output)",
40	/* 14 - SIGALRM */		"Alarm",
41	/* 15 - SIGTERM */		"Termination requested",
42	/* 16 - SIGTTIN */		"Stopped (tty input)",
43	/* 17 - SIGTTOU */		"Stopped (tty output)",
44	/* 18 - SIGUSR1 */		"User defined signal 1",
45	/* 19 - SIGUSR2 */		"User defined signal 2",
46	/* 20 - SIGWINCH */		"Window size changed",
47	/* 21 - SIGKILLTHR */	"Kill Thread",
48	/* 22 - SIGTRAP */		"Trace/breakpoint trap",
49	/* 23 - SIGPOLL */		"Pollable event",
50	/* 24 - SIGPROF */		"Profiling timer expired",
51	/* 25 - SIGSYS */		"Bad system call",
52	/* 26 - SIGURG */		"High bandwidth data is available at socket",
53	/* 27 - SIGVTALRM */	"Virtual timer expired",
54	/* 28 - SIGXCPU */		"CPU time limit exceeded",
55	/* 29 - SIGXFSZ */		"File size limit exceeded",
56	/* 30 - SIGBUS */		"Bus error",
57	/* 31 - SIGRESERVED1 */	"Reserved signal 1",
58	/* 32 - SIGRESERVED2 */	"Reserved signal 2",
59	/* 33 - realtime 1 */	"Realtime signal 1",
60	/* 34 - realtime 2 */	"Realtime signal 2",
61	/* 35 - realtime 3 */	"Realtime signal 3",
62	/* 36 - realtime 4 */	"Realtime signal 4",
63	/* 37 - realtime 5 */	"Realtime signal 5",
64	/* 38 - realtime 6 */	"Realtime signal 6",
65	/* 39 - realtime 7 */	"Realtime signal 7",
66	/* 40 - realtime 8 */	"Realtime signal 8",
67	/* 41 - invalid */		kInvalidSignalNumberText,
68	/* 42 - invalid */		kInvalidSignalNumberText,
69	/* 43 - invalid */		kInvalidSignalNumberText,
70	/* 44 - invalid */		kInvalidSignalNumberText,
71	/* 45 - invalid */		kInvalidSignalNumberText,
72	/* 46 - invalid */		kInvalidSignalNumberText,
73	/* 47 - invalid */		kInvalidSignalNumberText,
74	/* 48 - invalid */		kInvalidSignalNumberText,
75	/* 49 - invalid */		kInvalidSignalNumberText,
76	/* 50 - invalid */		kInvalidSignalNumberText,
77	/* 51 - invalid */		kInvalidSignalNumberText,
78	/* 52 - invalid */		kInvalidSignalNumberText,
79	/* 53 - invalid */		kInvalidSignalNumberText,
80	/* 54 - invalid */		kInvalidSignalNumberText,
81	/* 55 - invalid */		kInvalidSignalNumberText,
82	/* 56 - invalid */		kInvalidSignalNumberText,
83	/* 57 - invalid */		kInvalidSignalNumberText,
84	/* 58 - invalid */		kInvalidSignalNumberText,
85	/* 59 - invalid */		kInvalidSignalNumberText,
86	/* 60 - invalid */		kInvalidSignalNumberText,
87	/* 61 - invalid */		kInvalidSignalNumberText,
88	/* 62 - invalid */		kInvalidSignalNumberText,
89	/* 63 - invalid */		kInvalidSignalNumberText,
90	/* 64 - invalid */		kInvalidSignalNumberText
91};
92
93
94const char*
95strsignal(int sig)
96{
97	if (sig < 0 || sig > __MAX_SIGNO)
98		return kInvalidSignalNumberText;
99
100	return sys_siglist[sig];
101}
102
103