blob: 56374315791e0bd3cda647048f30fa4a38a2cfea [file] [log] [blame]
The Android Open Source Project1dc9e472009-03-03 19:28:35 -08001/*
Irina Tirdeab5f053b2012-09-08 09:17:54 +03002 * Copyright (C) 2012 The Android Open Source Project
The Android Open Source Project1dc9e472009-03-03 19:28:35 -08003 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in
12 * the documentation and/or other materials provided with the
13 * distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080028
Elliott Hughesf8294fd2018-11-27 14:43:38 -080029#include <signal.h>
Irina Tirdeab5f053b2012-09-08 09:17:54 +030030#include <string.h>
Josh Gao5e2285d2017-02-22 12:19:05 -080031
32#include "bionic/pthread_internal.h"
Irina Tirdeab5f053b2012-09-08 09:17:54 +030033
Elliott Hughesf8294fd2018-11-27 14:43:38 -080034const char* const sys_siglist[NSIG] = {
35#define __BIONIC_SIGDEF(signal_number, signal_description) [ signal_number ] = signal_description,
36#include "private/bionic_sigdefs.h"
37};
Irina Tirdeab5f053b2012-09-08 09:17:54 +030038
Elliott Hughesf8294fd2018-11-27 14:43:38 -080039const char* const sys_signame[NSIG] = {
40#define __BIONIC_SIGDEF(signal_number, unused) [ signal_number ] = #signal_number + 3,
41#include "private/bionic_sigdefs.h"
42};
43
44extern "C" __LIBC_HIDDEN__ const char* __strsignal(int signal_number, char* buf, size_t buf_len) {
45 const char* signal_name = nullptr;
46 if (signal_number >= 0 && signal_number < NSIG) {
47 signal_name = sys_siglist[signal_number];
48 }
49 if (signal_name != nullptr) {
50 return signal_name;
Elliott Hughes4198fa42012-09-17 15:23:35 -070051 }
52
Elliott Hughesf8294fd2018-11-27 14:43:38 -080053 const char* prefix = "Unknown";
54 if (signal_number >= SIGRTMIN && signal_number <= SIGRTMAX) {
55 prefix = "Real-time";
56 signal_number -= SIGRTMIN;
57 }
58 size_t length = snprintf(buf, buf_len, "%s signal %d", prefix, signal_number);
59 if (length >= buf_len) {
60 return nullptr;
61 }
62 return buf;
63}
64
65char* strsignal(int signal_number) {
Josh Gao5e2285d2017-02-22 12:19:05 -080066 bionic_tls& tls = __get_bionic_tls();
67 return const_cast<char*>(__strsignal(signal_number, tls.strsignal_buf, sizeof(tls.strsignal_buf)));
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080068}