comparison array.c @ 12:cbfe95c9f7b7

Fix compiler warning (thanks gcc 4.2.2) and security
author David Demelier <markand@malikania.fr>
date Wed, 07 Sep 2011 21:54:15 +0200
parents da47652b60c5
children 2d112b8a3756
comparison
equal deleted inserted replaced
11:7360d752183e 12:cbfe95c9f7b7
44 free(arr); 44 free(arr);
45 return NULL; 45 return NULL;
46 } 46 }
47 47
48 if (data) 48 if (data)
49 memcpy(&arr->data[0], data, arr->unit); 49 memcpy(arr->data, data, arr->unit);
50 50
51 return arr; 51 return arr;
52 } 52 }
53 53
54 /* 54 /*
62 array_push(struct array *arr, const void *data) 62 array_push(struct array *arr, const void *data)
63 { 63 {
64 if (array_grow(arr) < 0) 64 if (array_grow(arr) < 0)
65 return -1; 65 return -1;
66 66
67 memmove(&arr->data[arr->unit], &arr->data[0], SIZE(arr->length++)); 67 memmove(arr->data + arr->unit, arr->data, SIZE(arr->length++));
68 memcpy(&arr->data[0], data, arr->unit); 68 memcpy(arr->data, data, arr->unit);
69 69
70 return 0; 70 return 0;
71 } 71 }
72 72
73 /* 73 /*
80 array_insert(struct array *arr, const void *data, int index) 80 array_insert(struct array *arr, const void *data, int index)
81 { 81 {
82 if (index > arr->length - 1 || index < 0 || array_grow(arr) < 0) 82 if (index > arr->length - 1 || index < 0 || array_grow(arr) < 0)
83 return -1; 83 return -1;
84 84
85 memmove(&arr->data[SIZE(index + 1)], &arr->data[SIZE(index)], 85 memmove(arr->data + SIZE(index + 1), arr->data + SIZE(index),
86 SIZE(arr->length++ - index)); 86 SIZE(arr->length++ - index));
87 memcpy(&arr->data[SIZE(index)], data, arr->unit); 87 memcpy(arr->data + SIZE(index), data, arr->unit);
88 88
89 return 0; 89 return 0;
90 } 90 }
91 91
92 /* 92 /*
97 array_append(struct array *arr, const void *data) 97 array_append(struct array *arr, const void *data)
98 { 98 {
99 if (array_grow(arr) < 0) 99 if (array_grow(arr) < 0)
100 return -1; 100 return -1;
101 101
102 memcpy(&arr->data[SIZE(arr->length++)], data, arr->unit); 102 memcpy(arr->data + SIZE(arr->length++), data, arr->unit);
103 103
104 return 0; 104 return 0;
105 } 105 }
106 106
107 /* 107 /*
115 void *data; 115 void *data;
116 116
117 if (arr->length == 0) 117 if (arr->length == 0)
118 return NULL; 118 return NULL;
119 119
120 data = &arr->data[0]; 120 data = arr->data;
121 memmove(&arr->data[0], &arr->data[SIZE(1)], SIZE(arr->length)); 121 memmove(arr->data, arr->data + SIZE(1), SIZE(arr->length));
122 memset(&arr->data[SIZE(--arr->length)], 0, arr->unit); 122 memset(arr->data + SIZE(--arr->length), 0, arr->unit);
123 123
124 return data; 124 return data;
125 } 125 }
126 126
127 /* 127 /*
135 void *data; 135 void *data;
136 136
137 if (arr->length == 0) 137 if (arr->length == 0)
138 return NULL; 138 return NULL;
139 139
140 data = &arr->data[SIZE(--arr->length)]; 140 data = arr->data + SIZE(--arr->length);
141 memset(&arr->data[SIZE(arr->length)], 0, arr->unit); 141 memset(arr->data + SIZE(arr->length), 0, arr->unit);
142 142
143 return data; 143 return data;
144 } 144 }
145 145
146 /* 146 /*
154 void *data; 154 void *data;
155 155
156 if (arr->length == 0 || index < 0 || index > arr->length - 1) 156 if (arr->length == 0 || index < 0 || index > arr->length - 1)
157 return NULL; 157 return NULL;
158 158
159 data = &arr->data[index]; 159 data = arr->data + SIZE(index);
160 memmove(&arr->data[index], &arr->data[index + 1], 160 memmove(arr->data + SIZE(index), arr->data + SIZE(index + 1),
161 SIZE(arr->length - index)); 161 SIZE(arr->length - index));
162 memset(&arr->data[SIZE(--arr->length)], 0, arr->unit); 162 memset(arr->data + SIZE(--arr->length), 0, arr->unit);
163 163
164 return data; 164 return data;
165 } 165 }
166 166
167 /* 167 /*
173 array_map(struct array *arr, void (*fn)(void *, void *), void *udata) 173 array_map(struct array *arr, void (*fn)(void *, void *), void *udata)
174 { 174 {
175 int i; 175 int i;
176 176
177 for (i = 0; i < arr->length; ++i) 177 for (i = 0; i < arr->length; ++i)
178 fn(&arr->data[i], udata); 178 fn(arr->data + i, udata);
179 } 179 }
180 180
181 /* 181 /*
182 * Compare each object with the user supplied function. If the `fn' function 182 * Compare each object with the user supplied function. If the `fn' function
183 * returns 1 then the data is returned. Optional idx argument can be set to 183 * returns 1 then the data is returned. Optional idx argument can be set to
190 { 190 {
191 int st, i; 191 int st, i;
192 void *data; 192 void *data;
193 193
194 for (i = st = 0; i < arr->length && !st; ++i) 194 for (i = st = 0; i < arr->length && !st; ++i)
195 st = fn(&arr->data[i], udata); 195 st = fn(arr->data + i, udata);
196 196
197 if (st) { 197 if (st) {
198 data = &arr->data[--i]; 198 data = arr->data + --i;
199 if (idx) 199 if (idx)
200 *idx = i; 200 *idx = i;
201 } else 201 } else
202 data = NULL; 202 data = NULL;
203 203