summaryrefslogtreecommitdiff
path: root/demos/pexpr.c
diff options
context:
space:
mode:
authortege <tege@gmplib.org>2000-09-27 18:42:06 +0200
committertege <tege@gmplib.org>2000-09-27 18:42:06 +0200
commita9be8d856762c15333dd4116edbb8cc00e75d180 (patch)
treea275bb59738527878d4816c628541c316c1f14eb /demos/pexpr.c
parentf5c7c2d6ffd504e2f18176a0ed067b1c9a4d680f (diff)
downloadgmp-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.c15
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
{