diff options
author | Yaakov Selkowitz <yselkowi@redhat.com> | 2011-05-05 02:12:15 +0400 |
---|---|---|
committer | Yaakov Selkowitz <yselkowi@redhat.com> | 2011-05-05 02:12:15 +0400 |
commit | 2f7a5c89cc1d36b43ef1a1c12e7d3043560c49c3 (patch) | |
tree | 49e5a6578c117ad96f64b60f8b6ff2b7a34e5a44 /winsup/cygwin/strsig.cc | |
parent | fab6d5dd0387dd959d9c5c8a00970b801d58503e (diff) |
* cygwin.din (psiginfo): Export.
(psignal): Export.
(sys_siglist): Export.
* posix.sgml (std-notimpl): Move psiginfo and psignal from here...
(std-susv4): ... to here.
(std-deprec): Add sys_siglist.
* strsig.cc (sys_siglist): New array.
(psiginfo): New function.
* include/cygwin/signal.h (sys_siglist): Declare.
(psiginfo): Declare.
* include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
Diffstat (limited to 'winsup/cygwin/strsig.cc')
-rw-r--r-- | winsup/cygwin/strsig.cc | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/winsup/cygwin/strsig.cc b/winsup/cygwin/strsig.cc index 2dc1e4447..8afa8db7a 100644 --- a/winsup/cygwin/strsig.cc +++ b/winsup/cygwin/strsig.cc @@ -1,6 +1,6 @@ /* strsig.cc - Copyright 2004, 2007, 2008, 2010 Red Hat, Inc. + Copyright 2004, 2007, 2008, 2010, 2011 Red Hat, Inc. This file is part of Cygwin. @@ -10,6 +10,8 @@ details. */ #include "winsup.h" #include <cygtls.h> +#include <stdio.h> +#include <string.h> struct sigdesc { @@ -66,6 +68,16 @@ const char *sys_sigabbrev[] NO_COPY_INIT = #undef _s #undef _s2 +#define _s(n, s) s +#define _s2(n, s, n1, s1) s +const char *sys_siglist[] NO_COPY_INIT = +{ + NULL, + __signals +}; + +#undef _s +#undef _s2 #define _s(n, s) {n, #n, s} #define _s2(n, s, n1, s1) {n, #n, s}, {n, #n1, #s1} static const sigdesc siglist[] = @@ -96,3 +108,38 @@ strtosigno (const char *name) return siglist[i].n; return 0; } + +extern "C" void +psiginfo (const siginfo_t *info, const char *s) +{ + if (s != NULL && *s != '\0') + fprintf (stderr, "%s: ", s); + + fprintf (stderr, "%s", strsignal (info->si_signo)); + + if (info->si_signo > 0 && info->si_signo < NSIG) + { + switch (info->si_signo) + { + case SIGILL: + case SIGBUS: + case SIGFPE: + case SIGSEGV: + fprintf (stderr, " (%d [%p])", info->si_code, info->si_addr); + break; + case SIGCHLD: + fprintf (stderr, " (%d %d %d %ld)", info->si_code, info->si_pid, + info->si_status, info->si_uid); + break; +/* FIXME: implement si_band + case SIGPOLL: + fprintf (stderr, " (%d %ld)", info->si_code, info->si_band); + break; +*/ + default: + fprintf (stderr, " (%d %d %ld)", info->si_code, info->si_pid, info->si_uid); + } + } + + fprintf (stderr, "\n"); +} |