* 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.
This commit is contained in:
Yaakov Selkowitz
2011-05-04 22:12:15 +00:00
parent fab6d5dd03
commit 2f7a5c89cc
6 changed files with 74 additions and 5 deletions

View File

@ -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
{
@ -64,6 +66,16 @@ const char *sys_sigabbrev[] NO_COPY_INIT =
__signals
};
#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}
@ -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");
}