projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add, forgotten in last commit.
[gnulib.git]
/
lib
/
c-stack.c
diff --git
a/lib/c-stack.c
b/lib/c-stack.c
index
e42d5f5
..
32088f9
100644
(file)
--- a/
lib/c-stack.c
+++ b/
lib/c-stack.c
@@
-14,7
+14,7
@@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
- Inc., 5
9 Temple Place - Suite 330, Boston, MA 02111-1307
, USA. */
+ Inc., 5
1 Franklin Street, Fifth Floor, Boston, MA 02110-1301
, USA. */
/* Written by Paul Eggert. */
/* Written by Paul Eggert. */
@@
-34,7
+34,7
@@
No attempt has been made to deal with multithreaded applications. */
No attempt has been made to deal with multithreaded applications. */
-#if HAVE_CONFIG_H
+#if
def
HAVE_CONFIG_H
# include <config.h>
#endif
# include <config.h>
#endif
@@
-91,6
+91,13
@@
typedef struct sigaltstack stack_t;
#include "c-stack.h"
#include "exitfail.h"
#include "c-stack.h"
#include "exitfail.h"
+#if (HAVE_STRUCT_SIGACTION_SA_SIGACTION && defined SA_NODEFER \
+ && defined SA_ONSTACK && defined SA_RESETHAND && defined SA_SIGINFO)
+# define SIGACTION_WORKS 1
+#else
+# define SIGACTION_WORKS 0
+#endif
+
extern char *program_name;
/* The user-specified action to take when a SEGV-related program error
extern char *program_name;
/* The user-specified action to take when a SEGV-related program error
@@
-153,7
+160,7
@@
static union
void *p;
} alternate_signal_stack;
void *p;
} alternate_signal_stack;
-# if
defined SA_ONSTACK && defined SA_SIGINFO && defined _SC_PAGESIZE
+# if
SIGACTION_WORKS
/* Handle a segmentation violation and exit. This function is
async-signal-safe. */
/* Handle a segmentation violation and exit. This function is
async-signal-safe. */
@@
-238,9
+245,7
@@
c_stack_action (void (*action) (int))
stack_overflow_message = _("stack overflow");
{
stack_overflow_message = _("stack overflow");
{
-# if ! (defined SA_ONSTACK && defined SA_SIGINFO && defined _SC_PAGESIZE)
- return signal (SIGSEGV, die) == SIG_ERR ? -1 : 0;
-# else
+# if SIGACTION_WORKS
struct sigaction act;
sigemptyset (&act.sa_mask);
struct sigaction act;
sigemptyset (&act.sa_mask);
@@
-252,6
+257,8
@@
c_stack_action (void (*action) (int))
act.sa_sigaction = segv_handler;
return sigaction (SIGSEGV, &act, 0);
act.sa_sigaction = segv_handler;
return sigaction (SIGSEGV, &act, 0);
+# else
+ return signal (SIGSEGV, die) == SIG_ERR ? -1 : 0;
# endif
}
}
# endif
}
}