update for HEAD-2003091401
[reactos.git] / lib / msvcrt / except / unwind.c
index b161263..3cebce4 100644 (file)
@@ -1,5 +1,8 @@
 #include <windows.h>
 
+/*
+ * @implemented
+ */
 void __cdecl
 _global_unwind2(PEXCEPTION_REGISTRATION RegistrationFrame)
 {
@@ -11,3 +14,56 @@ __ret_label:
 #else
 #endif
 }
+
+
+// This is dragged over from WINE:
+
+typedef struct __EXCEPTION_FRAME
+{
+  struct __EXCEPTION_FRAME *Prev;
+  PEXCEPTION_HANDLER       Handler;
+} EXCEPTION_FRAME, *PEXCEPTION_FRAME;
+
+/* VC++ extensions to Win32 SEH */
+typedef struct _SCOPETABLE
+{
+  int previousTryLevel;
+  int (*lpfnFilter)(PEXCEPTION_POINTERS);
+  int (*lpfnHandler)(void);
+} SCOPETABLE, *PSCOPETABLE;
+
+typedef struct _MSVCRT_EXCEPTION_FRAME
+{
+  EXCEPTION_FRAME *prev;
+  void (*handler)(PEXCEPTION_RECORD, PEXCEPTION_FRAME,
+                  PCONTEXT, PEXCEPTION_RECORD);
+  PSCOPETABLE scopetable;
+  int trylevel;
+  int _ebp;
+  PEXCEPTION_POINTERS xpointers;
+} MSVCRT_EXCEPTION_FRAME;
+
+
+typedef struct __JUMP_BUFFER
+{
+    unsigned long Ebp;
+    unsigned long Ebx;
+    unsigned long Edi;
+    unsigned long Esi;
+    unsigned long Esp;
+    unsigned long Eip;
+    unsigned long Registration;
+    unsigned long TryLevel;
+    /* Start of new struct members */
+    unsigned long Cookie;
+    unsigned long UnwindFunc;
+    unsigned long UnwindData[6];
+} _JUMP_BUFFER;
+
+/*
+ * @implemented
+*/
+void __stdcall _seh_longjmp_unwind(_JUMP_BUFFER *jmp)
+{
+    _local_unwind2((MSVCRT_EXCEPTION_FRAME*) jmp->Registration, jmp->TryLevel);
+}