v2 / vlib / v / tests / c_function / array.c
136 lines · 111 sloc · 2.38 KB · 657770e6c176ef9dc24ea25b771ba8c8795c08cf
Raw
1#include <stdint.h>
2#include <stdlib.h>
3#include <string.h>
4#include <stdio.h>
5
6typedef struct {
7 char **array_ptr;
8 int array_len;
9 int string_len;
10} array_t;
11
12typedef enum flag_bits {
13 AAA = 0,
14 BBB = 1,
15 CCC = 2
16} flag_bits;
17
18typedef enum flag_bits_main {
19 AAAA = 0,
20 BBBB = 1,
21 CCCC = 2
22} flag_bits_main;
23
24typedef struct {
25 array_t arr[4];
26 flag_bits enu[2];
27} struct_array;
28typedef uint32_t flags;
29
30typedef union union_t {
31 float float32[4];
32 int32_t int32[4];
33 uint32_t uint32[4];
34} union_t;
35
36array_t*
37array_string_new(int array_len, int string_len)
38{
39 int i;
40 char **array_ptr = (char**) malloc(array_len * sizeof(char**));
41
42 for(i = 0; i < array_len; i++) {
43 array_ptr[i] = (char*) malloc(string_len * sizeof(char));
44 }
45
46 array_t *array = (array_t*) malloc(sizeof(array_t));
47 array->array_ptr = array_ptr;
48 array->array_len = array_len;
49 array->string_len = string_len;
50
51 return array;
52}
53
54int
55array_string_set(array_t *array, int index, char *string)
56{
57 strncpy(array->array_ptr[index], string, array->string_len);
58 return 0;
59}
60
61char*
62array_string_get(array_t *array, int index)
63{
64 return array->array_ptr[index];
65}
66
67int
68array_string_len(array_t *array)
69{
70 return array->array_len;
71}
72
73int
74array_string_free(array_t *array)
75{
76 int i;
77 for(i = 0; i < array->array_len; i++) {
78 free(array->array_ptr[i]);
79 }
80 free(array->array_ptr);
81 return 0;
82}
83
84char** get_string_array() {
85 array_t *array = array_string_new(4, 4);
86
87 array_string_set(array, 0, "foo");
88 array_string_set(array, 1, "bar");
89 array_string_set(array, 2, "bat");
90 array_string_set(array, 3, ".... overflowed string");
91
92 return array->array_ptr;
93}
94
95struct_array get_struct_array() {
96 int i;
97 array_t* array = array_string_new(4, 4);
98
99 array_string_set(array, 0, "foo");
100 array_string_set(array, 1, "bar");
101 array_string_set(array, 2, "bat");
102 array_string_set(array, 3, ".... overflowed string");
103
104 struct_array ret;
105 for(i = 0; i < array_string_len(array); i++) {
106 ret.arr[i] = *array;
107 };
108 free(array);
109
110 return ret;
111}
112
113flags get_enum() {
114 flag_bits ret = AAA;
115 return ret;
116}
117
118union_t get_union() {
119 uint32_t r = 123;
120 union_t ret;
121 ret.uint32[0] = r;
122 ret.uint32[1] = r;
123 ret.uint32[2] = r;
124 ret.uint32[3] = r;
125 return ret;
126}
127
128void get_stub(flag_bits param[2]) {}
129
130void get_stub_main(flag_bits_main param[2]) {}
131
132void
133set_struct_array(struct_array* param)
134{
135 puts("\nset struct_array\n");
136}