/* * A List of Signal Names * * (c) 2012 Martin Mares */ #include #include #include #include #include struct sig_name { const char name[11]; byte number; }; #define S(sig) { #sig, sig } static const struct sig_name sig_names[] = { #ifdef SIGABRT S(SIGABRT), #endif #ifdef SIGALRM S(SIGALRM), #endif #ifdef SIGBUS S(SIGBUS), #endif #ifdef SIGCHLD S(SIGCHLD), #endif #ifdef SIGCONT S(SIGCONT), #endif #ifdef SIGFPE S(SIGFPE), #endif #ifdef SIGHUP S(SIGHUP), #endif #ifdef SIGILL S(SIGILL), #endif #ifdef SIGINT S(SIGINT), #endif #ifdef SIGIO S(SIGIO), #endif #ifdef SIGIOT S(SIGIOT), #endif #ifdef SIGKILL S(SIGKILL), #endif #ifdef SIGPIPE S(SIGPIPE), #endif #ifdef SIGPOLL S(SIGPOLL), #endif #ifdef SIGPROF S(SIGPROF), #endif #ifdef SIGPWR S(SIGPWR), #endif #ifdef SIGQUIT S(SIGQUIT), #endif #ifdef SIGSEGV S(SIGSEGV), #endif #ifdef SIGSTKFLT S(SIGSTKFLT), #endif #ifdef SIGSTOP S(SIGSTOP), #endif #ifdef SIGSYS S(SIGSYS), #endif #ifdef SIGTERM S(SIGTERM), #endif #ifdef SIGTRAP S(SIGTRAP), #endif #ifdef SIGTSTP S(SIGTSTP), #endif #ifdef SIGTTIN S(SIGTTIN), #endif #ifdef SIGTTOU S(SIGTTOU), #endif #ifdef SIGURG S(SIGURG), #endif #ifdef SIGUSR1 S(SIGUSR1), #endif #ifdef SIGUSR2 S(SIGUSR2), #endif #ifdef SIGVTALRM S(SIGVTALRM), #endif #ifdef SIGWINCH S(SIGWINCH), #endif #ifdef SIGXCPU S(SIGXCPU), #endif #ifdef SIGXFSZ S(SIGXFSZ), #endif }; int sig_name_to_number(const char *name) { for (uint i=0; i < ARRAY_SIZE(sig_names); i++) if (!strcmp(sig_names[i].name, name)) return sig_names[i].number; return -1; } const char * sig_number_to_name(int number) { for (uint i=0; i < ARRAY_SIZE(sig_names); i++) if (sig_names[i].number == number) return sig_names[i].name; return NULL; } #ifdef TEST #include int main(void) { char c[256]; while (fgets(c, sizeof(c), stdin)) { char *e = strchr(c, '\n'); if (e) *e = 0; if (c[0] == '#') { const char *name = sig_number_to_name(atoi(c+1)); puts(name ? : "?"); } else { int num = sig_name_to_number(c); if (num < 0) puts("?"); else printf("%d\n", num); } } return 0; } #endif