diff options
author | tege <tege@gmplib.org> | 2000-09-27 18:42:06 +0200 |
---|---|---|
committer | tege <tege@gmplib.org> | 2000-09-27 18:42:06 +0200 |
commit | a9be8d856762c15333dd4116edbb8cc00e75d180 (patch) | |
tree | a275bb59738527878d4816c628541c316c1f14eb /demos/pexpr.c | |
parent | f5c7c2d6ffd504e2f18176a0ed067b1c9a4d680f (diff) | |
download | gmp-a9be8d856762c15333dd4116edbb8cc00e75d180.tar.gz |
Clean up code for systems not supporting
sigaltstack. Handle old Linux without sigaltstack. Properly
disable all stuff related to sigaltstack under Unicos.
Diffstat (limited to 'demos/pexpr.c')
-rw-r--r-- | demos/pexpr.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/demos/pexpr.c b/demos/pexpr.c index c7d6ab4c7..78acfafbd 100644 --- a/demos/pexpr.c +++ b/demos/pexpr.c @@ -118,13 +118,21 @@ char *newline = ""; #define sigaltstack sigstack #endif +#define HAVE_sigaltstack + +#if (defined (__linux__) && !defined (SA_ONSTACK)) || (_UNICOS) +/* Older Linux have limited signal handling */ +#undef HAVE_sigaltstack +#endif + #if !defined(_WIN32) && !defined(__DJGPP__) void setup_error_handler () { struct sigaction act; - struct sigaltstack sigstk; +#if HAVE_sigaltstack + struct sigaltstack sigstk; /* Set up a stack for signal handling. A typical cause of error is stack overflow, and in such situation a signal can not be delivered on the overflown stack. */ @@ -134,7 +142,6 @@ setup_error_handler () sigstk.ss_flags = 0; #endif /* ! _AIX */ -#ifndef _UNICOS if (sigaltstack (&sigstk, 0) < 0) perror("sigaltstack"); #endif @@ -142,7 +149,11 @@ setup_error_handler () /* Initialize structure for sigaction (called below). */ act.sa_handler = cleanup_and_exit; sigemptyset (&(act.sa_mask)); +#if HAVE_sigaltstack act.sa_flags = SA_ONSTACK; +#else + act.sa_flags = 0; +#endif #ifdef LIMIT_RESOURCE_USAGE { |