1 #include "libtest.h"
2
3 EXTERN void *
pointer_null(void)4 pointer_null(void)
5 {
6 return NULL;
7 }
8
9 EXTERN int
pointer_is_null(void * ptr)10 pointer_is_null(void *ptr)
11 {
12 return ptr == NULL;
13 }
14
15 EXTERN int
pointer_pointer_is_null(void ** ptr)16 pointer_pointer_is_null(void **ptr)
17 {
18 return *ptr == NULL;
19 }
20
21 static void *my_pointer;
22
23 EXTERN void
pointer_set_my_pointer(void * ptr)24 pointer_set_my_pointer(void *ptr)
25 {
26 my_pointer = ptr;
27 }
28
29 EXTERN void *
pointer_get_my_pointer(void)30 pointer_get_my_pointer(void)
31 {
32 return my_pointer;
33 }
34
35 EXTERN void
pointer_get_my_pointer_arg(void ** ret)36 pointer_get_my_pointer_arg(void **ret)
37 {
38 *ret = my_pointer;
39 }
40
41 EXTERN int
pointer_arg_array_in(char * array[3])42 pointer_arg_array_in(char *array[3])
43 {
44 return !strcmp(array[0], "one") && !strcmp(array[1], "two") && !strcmp(array[2], "three");
45 }
46
47 EXTERN int
pointer_arg_array_null_in(char * array[3])48 pointer_arg_array_null_in(char *array[3])
49 {
50 return array[0] == NULL && array[1] == NULL && array[2] == NULL;
51 }
52
53 EXTERN void
pointer_arg_array_out(char * array[3])54 pointer_arg_array_out(char *array[3])
55 {
56 array[0] = "four";
57 array[1] = "five";
58 array[2] = "six";
59 }
60
61 EXTERN void
pointer_arg_array_null_out(char * array[3])62 pointer_arg_array_null_out(char *array[3])
63 {
64 array[0] = NULL;
65 array[1] = NULL;
66 array[2] = NULL;
67 }
68
69 EXTERN char **
pointer_ret_array_out(void)70 pointer_ret_array_out(void)
71 {
72 static char *array[3] = { "seven", "eight", "nine" };
73 return array;
74 }
75
76 EXTERN char **
pointer_ret_array_out_null_terminated(void)77 pointer_ret_array_out_null_terminated(void)
78 {
79 static char *array[4] = { "seven", "eight", "nine", NULL };
80 return array;
81 }
82
83 EXTERN char **
pointer_ret_array_null_out(void)84 pointer_ret_array_null_out(void)
85 {
86 static char *array[3] = { NULL, NULL, NULL };
87 return array;
88 }
89
90 EXTERN void *
pointer_pointer_pointer_to_pointer(void ** pointer_pointer)91 pointer_pointer_pointer_to_pointer(void **pointer_pointer)
92 {
93 return *pointer_pointer;
94 }
95
96 EXTERN void**
pointer_pointer_to_pointer_pointer(void * pointer)97 pointer_pointer_to_pointer_pointer(void *pointer)
98 {
99 static void *pointer_pointer[1];
100 pointer_pointer[0] = pointer;
101 return pointer_pointer;
102 }
103
104 typedef void *(*closure_t)(void*);
105 static closure_t my_closure;
106
107 EXTERN void
pointer_set_closure(closure_t closure)108 pointer_set_closure(closure_t closure)
109 {
110 my_closure = closure;
111 }
112
113 EXTERN void*
pointer_call_closure(void * value)114 pointer_call_closure(void *value)
115 {
116 return my_closure(value);
117 }
118