summaryrefslogtreecommitdiff
path: root/lib/msvc-inval.c
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2011-09-25 23:08:45 +0200
committerBruno Haible <bruno@clisp.org>2011-09-25 23:08:45 +0200
commit65ef690d41c05b33dd95820846cf1106dc2292e5 (patch)
treed15c5e3f8f4565bc13752da1d2c06c4ceec4b872 /lib/msvc-inval.c
parent37398f7c95b0435a583adc6ee2d35ccdf06411e4 (diff)
downloadgnulib-65ef690d41c05b33dd95820846cf1106dc2292e5.tar.gz
msvc-inval: Allow three invalid parameter handling modes.
* lib/msvc-inval.h: Don't include <stdlib.h> here. (DEFAULT_HANDLING, HAIRY_LIBRARY_HANDLING, SANE_LIBRARY_HANDLING): New macros. (gl_msvc_inval_ensure_handler, TRY_MSVC_INVAL, CATCH_MSVC_INVAL, DONE_MSVC_INVAL): Implement DEFAULT_HANDLING. Treat SANE_LIBRARY_HANDLING as a no-op. * lib/msvc-inval.c: Treat SANE_LIBRARY_HANDLING as a no-op. Include <stdlib.h>. (gl_msvc_invalid_parameter_handler): Implement DEFAULT_HANDLING.
Diffstat (limited to 'lib/msvc-inval.c')
-rw-r--r--lib/msvc-inval.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/lib/msvc-inval.c b/lib/msvc-inval.c
index ba3c799fd9..31dbeea449 100644
--- a/lib/msvc-inval.c
+++ b/lib/msvc-inval.c
@@ -20,13 +20,31 @@
/* Specification. */
#include "msvc-inval.h"
-#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \
+ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING)
+
+/* Get _invalid_parameter_handler type and _set_invalid_parameter_handler
+ declaration. */
+# include <stdlib.h>
+
+# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING
+
+static void cdecl
+gl_msvc_invalid_parameter_handler (const wchar_t *expression,
+ const wchar_t *function,
+ const wchar_t *file,
+ unsigned int line,
+ uintptr_t dummy)
+{
+}
+
+# else
/* Get declarations of the Win32 API functions. */
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
-# if defined _MSC_VER
+# if defined _MSC_VER
static void cdecl
gl_msvc_invalid_parameter_handler (const wchar_t *expression,
@@ -38,7 +56,7 @@ gl_msvc_invalid_parameter_handler (const wchar_t *expression,
RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL);
}
-# else
+# else
/* An index to thread-local storage. */
static DWORD tls_index;
@@ -93,6 +111,8 @@ gl_msvc_invalid_parameter_handler (const wchar_t *expression,
RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL);
}
+# endif
+
# endif
static int gl_msvc_inval_initialized /* = 0 */;