Mercurial > hg > Members > kaito > longjump
annotate pointer_longjump.c @ 5:4e7858590985
remove malloc , free and include<stdlib.h>
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 23 Nov 2013 23:31:02 +0900 |
parents | d75a89b10176 |
children | 509523ee1e27 |
rev | line source |
---|---|
0 | 1 #include <stdio.h> |
2 #include <setjmp.h> | |
3 | |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
4 __code code1(int n,__code(*__return)(int,void *,int *),void *__environment,int *__ret_p){ |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
5 printf("code1 : code entry1\n"); |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
6 goto __return(n,__environment,__ret_p); |
0 | 7 } |
8 | |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
9 __code return1 (int n,void* env,int* __ret_p){ |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
10 printf("return1 : __return entry\n"); |
1
6d11ed2a5bed
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
11 *__ret_p = n; |
0 | 12 longjmp(*(jmp_buf*)env,1); |
13 } | |
14 | |
15 int main1 (){ | |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
16 __code (*__return)(); |
5
4e7858590985
remove malloc , free and include<stdlib.h>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
17 void *__environment ; |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
18 int retval; |
3
e6aa3b678e4a
remove ret from global_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
19 int *__ret_p; |
5
4e7858590985
remove malloc , free and include<stdlib.h>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
20 jmp_buf j_buf; |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
21 __ret_p = &retval; |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
22 printf("main1 : main1 entry\n"); |
5
4e7858590985
remove malloc , free and include<stdlib.h>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
23 __environment = &j_buf; |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
24 if (setjmp(__environment)){ |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
25 printf("main1 : main1 return\n"); |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
26 return retval; |
0 | 27 } |
4
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
28 __return = return1; |
d75a89b10176
write pointer_longjump.c
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
29 goto code1(30,__return,__environment,__ret_p); |
0 | 30 return 0; |
31 } | |
32 | |
33 int main (){ | |
34 int n; | |
35 n = main1(); | |
36 printf("returned\n"); | |
37 printf("return = %d\n",n); | |
38 return 1; | |
39 } |