ReactOS  0.4.15-dev-5499-g1341c38
seh0025.c
Go to the documentation of this file.
1 // Copyright (c) Microsoft. All rights reserved.
2 // Licensed under the MIT license. See LICENSE file in the project root for
3 // full license information.
4 
5 #include <windows.h>
6 #include <setjmp.h>
7 #include "seh.h"
8 
9 char test[] = "SEH0025.c";
10 
11 void dojump(jmp_buf JumpBuffer, PLONG Counter) {
12  try {
13  try {
14  /* set counter = 2 */
15  (*Counter) += 1;
16  RaiseException(EXCEPTION_INT_OVERFLOW, 0, /*no flags*/ 0, 0);
17  }
18  finally {
19  /* set counter = 3 */
20  (*Counter) += 1;
21  }
22  endtry
23  }
24  finally {
25  /* set counter = 4 */
26  (*Counter) += 1;
27  /* end unwinding with longjump */
28  longjmp(JumpBuffer, 1);
29  }
30  endtry
31 }
32 
33 int main() {
34  jmp_buf JumpBuffer;
35  LONG Counter;
36 
37  Counter = 0;
38 
39  if (_setjmp(JumpBuffer) == 0) {
40  try {
41  try {
42  try {
43  /* set counter = 1 */
44  //(volatile LONG) Counter += 1;
45  *(volatile LONG*)&Counter += 1;
46  dojump(JumpBuffer, &Counter);
47  }
48  finally {
49  /* set counter = 5 */
50  //(volatile LONG) Counter += 1;
51  *(volatile LONG*)&Counter += 1;
52  }
53  endtry
54  }
55  finally {
56  /* set counter = 6 */
57  //(volatile LONG) Counter += 1;
58  *(volatile LONG*)&Counter += 1;
59  }
60  endtry
61  }
62  except(1)
63  /*
64  * handle exception raised in function
65  * after unwinding
66  */
67  {
68  //(volatile LONG) Counter += 1;
69  *(volatile LONG*)&Counter += 1;
70  }
71  endtry
72  } else {
73  /* set counter = 7 */
74  //(volatile LONG) Counter += 1;
75  *(volatile LONG*)&Counter += 1;
76  }
77 
78  if (Counter != 7) {
79  printf("TEST 25 FAILED. Counter = %d\n\r", Counter);
80  return -1;
81  }
82 
83  return 0;
84 }
#define endtry
Definition: seh.h:24
#define EXCEPTION_INT_OVERFLOW
Definition: winbase.h:324
long LONG
Definition: pedump.c:60
int main()
Definition: seh0025.c:33
#define printf
Definition: freeldr.h:94
void dojump(jmp_buf JumpBuffer, PLONG Counter)
Definition: seh0025.c:11
#define except(x)
Definition: btrfs_drv.h:136
_JBTYPE jmp_buf[_JBLEN]
Definition: setjmp.h:186
VOID WINAPI RaiseException(IN DWORD dwExceptionCode, IN DWORD dwExceptionFlags, IN DWORD nNumberOfArguments, IN CONST ULONG_PTR *lpArguments OPTIONAL)
Definition: except.c:700
static LARGE_INTEGER Counter
Definition: clock.c:43
signed int * PLONG
Definition: retypes.h:5
char test[]
Definition: seh0025.c:9