Mercurial > code
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 */ |