Retro68/gcc/newlib/libc/signal/raise.c
2012-03-27 01:51:53 +02:00

81 lines
1.7 KiB
C

/* Embedded systems may want the simulated signals if no other form exists,
but UNIX versions will want to use the host facilities.
Define SIMULATED_SIGNALS when you want to use the simulated versions.
*/
/*
FUNCTION
<<raise>>---send a signal
INDEX
raise
INDEX
_raise_r
ANSI_SYNOPSIS
#include <signal.h>
int raise(int <[sig]>);
int _raise_r(void *<[reent]>, int <[sig]>);
TRAD_SYNOPSIS
#include <signal.h>
int raise(<[sig]>)
int <[sig]>;
int _raise_r(<[reent]>, <[sig]>)
char *<[reent]>;
int <[sig]>;
DESCRIPTION
Send the signal <[sig]> (one of the macros from `<<sys/signal.h>>').
This interrupts your program's normal flow of execution, and allows a signal
handler (if you've defined one, using <<signal>>) to take control.
The alternate function <<_raise_r>> is a reentrant version. The extra
argument <[reent]> is a pointer to a reentrancy structure.
RETURNS
The result is <<0>> if <[sig]> was successfully raised, <<1>>
otherwise. However, the return value (since it depends on the normal
flow of execution) may not be visible, unless the signal handler for
<[sig]> terminates with a <<return>> or unless <<SIG_IGN>> is in
effect for this signal.
PORTABILITY
ANSI C requires <<raise>>, but allows the full set of signal numbers
to vary from one implementation to another.
Required OS subroutines: <<getpid>>, <<kill>>.
*/
#ifndef SIGNAL_PROVIDED
int _dummy_raise;
#else
#include <reent.h>
#include <signal.h>
#ifndef _REENT_ONLY
int
_DEFUN (raise, (sig),
int sig)
{
return _raise_r (_REENT, sig);
}
#endif
int
_DEFUN (_raise_r, (reent, sig),
struct _reent *reent _AND
int sig)
{
return _kill_r (reent, _getpid_r (reent), sig);
}
#endif /* SIGNAL_PROVIDED */