comparison array.c @ 120:68784ea3fabb

Fix (p)array_find
author David Demelier <markand@malikania.fr>
date Tue, 28 Feb 2012 21:49:20 +0100
parents d6a78dea70c9
children 59745a235d16
comparison
equal deleted inserted replaced
119:d6a78dea70c9 120:68784ea3fabb
281 int 281 int
282 array_find(const struct array *arr, array_cmp_fn fn, void *dst, void *u) 282 array_find(const struct array *arr, array_cmp_fn fn, void *dst, void *u)
283 { 283 {
284 int st, i; 284 int st, i;
285 285
286 for (i = st = 0; i < arr->length && !st; ++i) 286 for (i = st = 0; i < arr->length && st != 1; ++i)
287 st = fn((char *)arr->data + OFFSET(i), u); 287 st = fn((char *)arr->data + OFFSET(i), u);
288 288
289 if (st) 289 if (st && dst)
290 *(char **)dst = (char *)arr->data + OFFSET(--i); 290 *(char **)dst = (char *)arr->data + OFFSET(i - 1);
291 else 291
292 st = 0; 292 return (st) ? i - 1 : -1;
293
294 return st;
295 } 293 }
296 294
297 /* 295 /*
298 * Erase every bytes and set the length to 0. 296 * Erase every bytes and set the length to 0.
299 */ 297 */