changeset 120:68784ea3fabb

Fix (p)array_find
author David Demelier <markand@malikania.fr>
date Tue, 28 Feb 2012 21:49:20 +0100
parents d6a78dea70c9
children 0635f98a2227
files array.c parray.c
diffstat 2 files changed, 7 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/array.c	Tue Feb 28 21:15:48 2012 +0100
+++ b/array.c	Tue Feb 28 21:49:20 2012 +0100
@@ -283,15 +283,13 @@
 {
 	int st, i;
 
-	for (i = st = 0; i < arr->length && !st; ++i)
+	for (i = st = 0; i < arr->length && st != 1; ++i)
 		st = fn((char *)arr->data + OFFSET(i), u);
 
-	if (st)
-		*(char **)dst = (char *)arr->data + OFFSET(--i);
-	else
-		st = 0;
+	if (st && dst)
+		*(char **)dst = (char *)arr->data + OFFSET(i - 1);
 
-	return st;
+	return (st) ? i - 1 : -1;
 }
 
 /*
--- a/parray.c	Tue Feb 28 21:15:48 2012 +0100
+++ b/parray.c	Tue Feb 28 21:49:20 2012 +0100
@@ -266,12 +266,10 @@
 	for (i = st = 0; i < arr->length && st != 1; ++i)
 		st = fn(arr->data[i], u);
 
-	if (st)
-		*(void **)ptr = arr->data[--i];
-	else
-		i = -1;
+	if (st && ptr)
+		*(void **)ptr = arr->data[i - 1];
 
-	return i;
+	return (st) ? i - 1 : -1;
 }
 
 /*