nocrash: Add support for native Windows.
authorBruno Haible <bruno@clisp.org>
Sat, 10 Sep 2011 18:54:24 +0000 (20:54 +0200)
committerBruno Haible <bruno@clisp.org>
Sat, 10 Sep 2011 18:54:24 +0000 (20:54 +0200)
* m4/nocrash.m4 (GL_NOCRASH): Avoid a crash also on native Windows.

ChangeLog
m4/nocrash.m4

index 42da008..2f853ce 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-09-10  Bruno Haible  <bruno@clisp.org>
+
+       nocrash: Add support for native Windows.
+       * m4/nocrash.m4 (GL_NOCRASH): Avoid a crash also on native Windows.
+
 2011-09-10  Michael Goffioul  <michael.goffioul@gmail.com>  (tiny change)
            Bruno Haible  <bruno@clisp.org>
 
index 0cc0d53..60aad95 100644 (file)
@@ -1,4 +1,4 @@
-# nocrash.m4 serial 2
+# nocrash.m4 serial 3
 dnl Copyright (C) 2005, 2009-2011 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -79,6 +79,34 @@ nocrash_init (void)
     }
   }
 }
+#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Avoid a crash on native Windows.  */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winerror.h>
+static LONG WINAPI
+exception_filter (EXCEPTION_POINTERS *ExceptionInfo)
+{
+  switch (ExceptionInfo->ExceptionRecord->ExceptionCode)
+    {
+    case EXCEPTION_ACCESS_VIOLATION:
+    case EXCEPTION_IN_PAGE_ERROR:
+    case EXCEPTION_STACK_OVERFLOW:
+    case EXCEPTION_GUARD_PAGE:
+    case EXCEPTION_PRIV_INSTRUCTION:
+    case EXCEPTION_ILLEGAL_INSTRUCTION:
+    case EXCEPTION_DATATYPE_MISALIGNMENT:
+    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+      exit (1);
+    }
+  return EXCEPTION_CONTINUE_SEARCH;
+}
+static void
+nocrash_init (void)
+{
+  SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter);
+}
 #else
 /* Avoid a crash on POSIX systems.  */
 #include <signal.h>