[PATCH 2/3] [Msvcrt]: implemented the raise function

Eric Pouech eric.pouech at wanadoo.fr
Fri Jan 5 11:00:13 CST 2007


Should fix #6320

A+
---

 dlls/msvcrt/except.c    |   35 +++++++++++++++++++++++++++++++++++
 dlls/msvcrt/msvcrt.spec |    2 +-
 2 files changed, 36 insertions(+), 1 deletions(-)

diff --git a/dlls/msvcrt/except.c b/dlls/msvcrt/except.c
index 68d1fc6..88c8a37 100644
--- a/dlls/msvcrt/except.c
+++ b/dlls/msvcrt/except.c
@@ -538,6 +538,41 @@ MSVCRT___sighandler_t CDECL MSVCRT_signa
 }
 
 /*********************************************************************
+ *		raise (MSVCRT.@)
+ */
+int CDECL MSVCRT_raise(int sig)
+{
+    MSVCRT___sighandler_t handler;
+
+    TRACE("(%d)\n", sig);
+
+    switch (sig)
+    {
+    case MSVCRT_SIGABRT:
+    case MSVCRT_SIGFPE:
+    case MSVCRT_SIGILL:
+    case MSVCRT_SIGSEGV:
+    case MSVCRT_SIGINT:
+    case MSVCRT_SIGTERM:
+        if ((handler = sighandlers[sig]) != MSVCRT_SIG_DFL)
+        {
+            sighandlers[sig] = MSVCRT_SIG_DFL;
+            if (handler != MSVCRT_SIG_IGN)
+            {
+                if (sig == MSVCRT_SIGFPE)
+                    ((float_handler)handler)(sig, _FPE_EXPLICITGEN);
+                else
+                    handler(sig);
+            }
+        } else MSVCRT__exit(3);
+        break;
+    default:
+        return -1;
+    }
+    return 0;
+}
+
+/*********************************************************************
  *		_XcptFilter (MSVCRT.@)
  */
 int CDECL _XcptFilter(NTSTATUS ex, PEXCEPTION_POINTERS ptr)
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 165ad42..792be32 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -685,7 +685,7 @@ # extern _pwctype
 @ cdecl putwc(long ptr) MSVCRT_fputwc
 @ cdecl putwchar(long) _fputwchar
 @ cdecl qsort(ptr long long ptr) ntdll.qsort
-@ stub raise #(long)
+@ cdecl raise(long) MSVCRT_raise
 @ cdecl rand() MSVCRT_rand
 @ cdecl realloc(ptr long) MSVCRT_realloc
 @ cdecl remove(str) MSVCRT_remove



More information about the wine-patches mailing list