ReactOS
0.4.16-dev-340-g0540c21
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
}
except
#define except(x)
Definition:
btrfs_drv.h:136
RaiseException
VOID WINAPI RaiseException(_In_ DWORD dwExceptionCode, _In_ DWORD dwExceptionFlags, _In_ DWORD nNumberOfArguments, _In_opt_ const ULONG_PTR *lpArguments)
Definition:
except.c:700
printf
#define printf
Definition:
freeldr.h:97
LONG
long LONG
Definition:
pedump.c:60
dojump
void dojump(jmp_buf JumpBuffer, PLONG Counter)
Definition:
seh0025.c:11
test
char test[]
Definition:
seh0025.c:9
main
int main()
Definition:
seh0025.c:33
seh.h
endtry
#define endtry
Definition:
seh.h:24
Counter
static LARGE_INTEGER Counter
Definition:
clock.c:43
PLONG
int32_t * PLONG
Definition:
typedefs.h:58
jmp_buf
_JBTYPE jmp_buf[_JBLEN]
Definition:
setjmp.h:186
EXCEPTION_INT_OVERFLOW
#define EXCEPTION_INT_OVERFLOW
Definition:
winbase.h:350
modules
rostests
apitests
compiler
ms
seh
seh0025.c
Generated on Sat Dec 14 2024 06:06:40 for ReactOS by
1.9.6