From 26a1ae7bbb5f95aa9117cac1f693c79289c8e124 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 17 Sep 2007 15:26:18 +0000 Subject: [PATCH] Rename pa_strsignal() to pa_sig2str(), since we return the symbolical signal name, not a human readable string. This follows the Solaris API of sig2str() a bit. Also, add all remaining signals to the list of signal names. git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1843 fefdeb5f-60dc-0310-8127-8f9354f1896f --- configure.ac | 2 +- src/Makefile.am | 8 +++- src/daemon/main.c | 2 +- src/pulsecore/core-util.c | 95 +++++++++++++++++++++++++++++++++++++++-------- src/pulsecore/core-util.h | 2 +- src/pulsecore/rtpoll.c | 2 +- src/tests/sig2str-test.c | 39 +++++++++++++++++++ 7 files changed, 129 insertions(+), 21 deletions(-) create mode 100644 src/tests/sig2str-test.c diff --git a/configure.ac b/configure.ac index 869db01..c166608 100644 --- a/configure.ac +++ b/configure.ac @@ -291,7 +291,7 @@ AC_CHECK_FUNCS([lstat]) # Non-standard -AC_CHECK_FUNCS([setresuid setresgid setreuid setregid seteuid setegid ppoll]) +AC_CHECK_FUNCS([setresuid setresgid setreuid setregid seteuid setegid ppoll strsignal sig2str]) #### POSIX threads #### diff --git a/src/Makefile.am b/src/Makefile.am index 95a0e92..06f061d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -235,7 +235,8 @@ noinst_PROGRAMS = \ asyncq-test \ asyncmsgq-test \ queue-test \ - rtpoll-test + rtpoll-test \ + sig2str-test if HAVE_SIGXCPU noinst_PROGRAMS += \ @@ -375,6 +376,11 @@ interpol_test_LDADD = $(AM_LDADD) libpulse.la interpol_test_CFLAGS = $(AM_CFLAGS) interpol_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) +sig2str_test_SOURCES = tests/sig2str-test.c +sig2str_test_LDADD = $(AM_LDADD) libpulsecore.la +sig2str_test_CFLAGS = $(AM_CFLAGS) +sig2str_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) + ################################### # Client library # ################################### diff --git a/src/daemon/main.c b/src/daemon/main.c index ba2a33d..a660ab1 100644 --- a/src/daemon/main.c +++ b/src/daemon/main.c @@ -130,7 +130,7 @@ static void message_cb(pa_mainloop_api*a, pa_time_event*e, PA_GCC_UNUSED const s #endif static void signal_callback(pa_mainloop_api*m, PA_GCC_UNUSED pa_signal_event *e, int sig, void *userdata) { - pa_log_info("Got signal %s.", pa_strsignal(sig)); + pa_log_info("Got signal %s.", pa_sig2str(sig)); switch (sig) { #ifdef SIGUSR1 diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index a729cbb..37e7f18 100644 --- a/src/pulsecore/core-util.c +++ b/src/pulsecore/core-util.c @@ -90,6 +90,7 @@ #include #include #include +#include #include "core-util.h" @@ -411,9 +412,9 @@ void pa_check_signal_is_blocked(int sig) { if (sa.sa_handler != SIG_DFL) return; - pa_log_warn("%s is not trapped. This might cause malfunction!", pa_strsignal(sig)); + pa_log_warn("%s is not trapped. This might cause malfunction!", pa_sig2str(sig)); #else /* HAVE_SIGACTION */ - pa_log_warn("%s might not be trapped. This might cause malfunction!", pa_strsignal(sig)); + pa_log_warn("%s might not be trapped. This might cause malfunction!", pa_sig2str(sig)); #endif } @@ -616,31 +617,93 @@ char *pa_split_spaces(const char *c, const char **state) { return pa_xstrndup(current, l); } -/* Return the name of an UNIX signal. Similar to GNU's strsignal() */ -const char *pa_strsignal(int sig) { +PA_STATIC_TLS_DECLARE(signame, pa_xfree); + +/* Return the name of an UNIX signal. Similar to Solaris sig2str() */ +const char *pa_sig2str(int sig) { + char *t; + + if (sig <= 0 || sig >= _NSIG) + goto fail; + +#ifdef HAVE_SIG2STR + { + char buf[SIG2STR_MAX]; + + if (str2sig(sig, buf) == 0) { + pa_xfree(PA_STATIC_TLS_GET(signame)); + t = pa_sprintf_malloc("SIG%s", buf); + PA_STATIC_TLS_SET(signame, t); + return t; + } + } +#else + switch(sig) { - case SIGINT: return "SIGINT"; - case SIGTERM: return "SIGTERM"; +#ifdef SIGHUP + case SIGHUP: return "SIGHUP"; +#endif + case SIGINT: return "SIGINT"; + case SIGQUIT: return "SIGQUIT"; + case SIGILL: return "SIGULL"; + case SIGTRAP: return "SIGTRAP"; + case SIGABRT: return "SIGABRT"; + case SIGBUS: return "SIGBUS"; + case SIGFPE: return "SIGFPE"; + case SIGKILL: return "SIGKILL"; #ifdef SIGUSR1 - case SIGUSR1: return "SIGUSR1"; + case SIGUSR1: return "SIGUSR1"; #endif + case SIGSEGV: return "SIGSEGV"; #ifdef SIGUSR2 - case SIGUSR2: return "SIGUSR2"; -#endif -#ifdef SIGXCPU - case SIGXCPU: return "SIGXCPU"; + case SIGUSR2: return "SIGUSR2"; #endif #ifdef SIGPIPE - case SIGPIPE: return "SIGPIPE"; + case SIGPIPE: return "SIGPIPE"; #endif + case SIGALRM: return "SIGALRM"; + case SIGTERM: return "SIGTERM"; + case SIGSTKFLT: return "SIGSTKFLT"; #ifdef SIGCHLD - case SIGCHLD: return "SIGCHLD"; + case SIGCHLD: return "SIGCHLD"; #endif -#ifdef SIGHUP - case SIGHUP: return "SIGHUP"; + case SIGCONT: return "SIGCONT"; + case SIGSTOP: return "SIGSTOP"; + case SIGTSTP: return "SIGTSTP"; + case SIGTTIN: return "SIGTTIN"; + case SIGTTOU: return "SIGTTOU"; + case SIGURG: return "SIGURG"; +#ifdef SIGXCPU + case SIGXCPU: return "SIGXCPU"; +#endif +#ifdef SIGXFSZ + case SIGXFSZ: return "SIGXFSZ"; #endif - default: return "UNKNOWN SIGNAL"; + case SIGVTALRM: return "SIGVTALRM"; + case SIGPROF: return "SIGPROF"; + case SIGWINCH: return "SIGWINCH"; + case SIGIO: return "SIGIO"; + case SIGPWR: return "SIGPWR"; + case SIGSYS: return "SIGSYS"; + } + +#ifdef SIGRTMIN + if (sig >= SIGRTMIN && sig <= SIGRTMAX) { + pa_xfree(PA_STATIC_TLS_GET(signame)); + t = pa_sprintf_malloc("SIGRTMIN+%i", sig - SIGRTMIN); + PA_STATIC_TLS_SET(signame, t); + return t; } +#endif + +#endif + +fail: + + pa_xfree(PA_STATIC_TLS_GET(signame)); + t = pa_sprintf_malloc("SIG%i", sig); + PA_STATIC_TLS_SET(signame, t); + return t; } #ifdef HAVE_GRP_H diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h index af97e4b..4429f41 100644 --- a/src/pulsecore/core-util.h +++ b/src/pulsecore/core-util.h @@ -68,7 +68,7 @@ char *pa_split_spaces(const char *c, const char **state); char *pa_strip_nl(char *s); -const char *pa_strsignal(int sig) PA_GCC_PURE; +const char *pa_sig2str(int sig) PA_GCC_PURE; int pa_own_uid_in_group(const char *name, gid_t *gid); int pa_uid_in_group(uid_t uid, const char *name); diff --git a/src/pulsecore/rtpoll.c b/src/pulsecore/rtpoll.c index 0de8d0c..e7ccd90 100644 --- a/src/pulsecore/rtpoll.c +++ b/src/pulsecore/rtpoll.c @@ -157,7 +157,7 @@ void pa_rtpoll_install(pa_rtpoll *p) { return; } - pa_log_debug("Acquired POSIX realtime signal SIGRTMIN+%i", p->rtsig - SIGRTMIN); + pa_log_debug("Acquired POSIX realtime signal %s", pa_sig2str(p->rtsig)); { sigset_t ss; diff --git a/src/tests/sig2str-test.c b/src/tests/sig2str-test.c new file mode 100644 index 0000000..b3cc99d --- /dev/null +++ b/src/tests/sig2str-test.c @@ -0,0 +1,39 @@ +/* $Id$ */ + +/*** + This file is part of PulseAudio. + + PulseAudio is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2 of the License, + or (at your option) any later version. + + PulseAudio is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with PulseAudio; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include +#include + +int main(int argc, char *argv[]) { + int sig; + + for (sig = -1; sig < _NSIG+1; sig++) + printf("%i = %s\n", sig, pa_sig2str(sig)); + + return 0; +} -- 2.7.4