| /* signame.c -- get the name of a signal |
| |
| Copyright 2012 The Go Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style |
| license that can be found in the LICENSE file. */ |
| |
| #include <string.h> |
| |
| #include "runtime.h" |
| #include "arch.h" |
| #include "malloc.h" |
| |
| String Signame (intgo sig) __asm__ (GOSYM_PREFIX "syscall.Signame"); |
| |
| String |
| Signame (intgo sig) |
| { |
| const char* s = NULL; |
| char buf[100]; |
| size_t len; |
| byte *data; |
| String ret; |
| |
| #if defined(HAVE_STRSIGNAL) |
| s = strsignal (sig); |
| #endif |
| |
| if (s == NULL) |
| { |
| snprintf(buf, sizeof buf, "signal %ld", (long) sig); |
| s = buf; |
| } |
| len = __builtin_strlen (s); |
| data = runtime_mallocgc (len, nil, false); |
| __builtin_memcpy (data, s, len); |
| // lowercase first letter: Bad -> bad, but STREAM -> STREAM. |
| if ('A' <= data[0] && data[0] <= 'Z' && 'a' <= data[1] && data[1] <= 'z') |
| data[0] += 'a' - 'A'; |
| ret.str = data; |
| ret.len = len; |
| return ret; |
| } |